# derp `derp` is **DER P**arser. `derp` doesn't panic. `derp` is minimal. ## Example ``` extern crate derp; extern crate untrusted; use derp::{Tag, Der}; use untrusted::Input; const MY_DATA: &'static [u8] = &[ 0x30, 0x18, // sequence 0x05, 0x00, // null 0x30, 0x0e, // sequence 0x02, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // x 0x02, 0x04, 0x0a, 0x0b, 0x0c, 0x0d, // y 0x03, 0x04, 0x00, 0xff, 0xff, 0xff, // bits ]; fn main() { let input = Input::from(MY_DATA); let (x, y, bits) = input.read_all(derp::Error::Read, |input| { derp::nested(input, Tag::Sequence, |input| { derp::read_null(input)?; let (x, y) = derp::nested(input, Tag::Sequence, |input| { let x = derp::positive_integer(input)?; let y = derp::positive_integer(input)?; Ok((x.as_slice_less_safe(), y.as_slice_less_safe())) })?; let bits = derp::bit_string_with_no_unused_bits(input)?; Ok((x, y, bits.as_slice_less_safe())) }) }).unwrap(); assert_eq!(x, &[0x01, 0x02, 0x03, 0x04, 0x05, 0x06]); assert_eq!(y, &[0x0a, 0x0b, 0x0c, 0x0d]); assert_eq!(bits, &[0xff, 0xff, 0xff]); let mut buf = Vec::new(); { let mut der = Der::new(&mut buf); der.sequence(|der| { der.null()?; der.sequence(|der| { der.integer(x)?; der.integer(y) })?; der.bit_string(0, bits) }).unwrap(); } assert_eq!(buf.as_slice(), MY_DATA); } ``` ## Credit A significant portion of `derp` was pulled from the crypto library `ring` by **@briansmith**. If you like this lib, thank him. ## License This work is licensed under the ISC license. See [LICENSE](./LICENSE).