aboutsummaryrefslogtreecommitdiff
path: root/tests/der_parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/der_parser.rs')
-rw-r--r--tests/der_parser.rs106
1 files changed, 47 insertions, 59 deletions
diff --git a/tests/der_parser.rs b/tests/der_parser.rs
index 9a31e5c..33665f3 100644
--- a/tests/der_parser.rs
+++ b/tests/der_parser.rs
@@ -6,8 +6,11 @@ use der_parser::error::*;
use der_parser::oid::*;
use der_parser::*;
use hex_literal::hex;
+use nom::branch::alt;
+use nom::combinator::map;
use nom::error::ErrorKind;
-use nom::{alt, call, Err};
+use nom::sequence::tuple;
+use nom::Err;
use pretty_assertions::assert_eq;
use test_case::test_case;
@@ -175,7 +178,13 @@ fn test_der_seq_defined() {
DerObject::from_int_slice(b"\x01\x00\x00"),
]);
fn parser(i: &[u8]) -> DerResult {
- parse_der_sequence_defined!(i, parse_der_integer >> parse_der_integer)
+ parse_der_sequence_defined(
+ // the nom `tuple` combinator returns a tuple, so we have to map it
+ // to a list
+ map(tuple((parse_der_integer, parse_der_integer)), |(a, b)| {
+ vec![a, b]
+ }),
+ )(i)
}
assert_eq!(parser(&bytes), Ok((empty, expected)));
}
@@ -191,7 +200,13 @@ fn test_der_set_defined() {
DerObject::from_int_slice(b"\x01\x00\x00"),
]);
fn parser(i: &[u8]) -> DerResult {
- parse_der_set_defined!(i, parse_der_integer >> parse_der_integer)
+ parse_der_set_defined(
+ // the nom `tuple` combinator returns a tuple, so we have to map it
+ // to a list
+ map(tuple((parse_der_integer, parse_der_integer)), |(a, b)| {
+ vec![a, b]
+ }),
+ )(i)
}
assert_eq!(parser(&bytes), Ok((empty, expected)));
}
@@ -207,7 +222,7 @@ fn test_der_seq_of() {
DerObject::from_int_slice(b"\x01\x00\x00"),
]);
fn parser(i: &[u8]) -> DerResult {
- parse_der_sequence_of!(i, parse_der_integer)
+ parse_der_sequence_of(parse_der_integer)(i)
}
assert_eq!(parser(&bytes), Ok((empty, expected.clone())));
//
@@ -222,7 +237,7 @@ fn test_der_seq_of() {
fn test_der_seq_of_incomplete() {
let bytes = [0x30, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x00];
fn parser(i: &[u8]) -> DerResult {
- parse_der_sequence_of!(i, parse_der_integer)
+ parse_der_sequence_of(parse_der_integer)(i)
}
assert_eq!(parser(&bytes), Err(Err::Failure(BerError::InvalidTag)));
//
@@ -250,7 +265,7 @@ fn test_der_set_of() {
DerObject::from_int_slice(b"\x01\x00\x00"),
]);
fn parser(i: &[u8]) -> DerResult {
- parse_der_set_of!(i, parse_der_integer)
+ parse_der_set_of(parse_der_integer)(i)
}
assert_eq!(parser(&bytes), Ok((empty, expected)));
}
@@ -293,13 +308,13 @@ fn test_der_contextspecific() {
let expected = DerObject {
header: BerObjectHeader::new(BerClass::ContextSpecific, 1, BerTag(0), 3)
.with_raw_tag(Some(&[0xa0])),
- content: BerObjectContent::Unknown(BerTag(0), &bytes[2..]),
+ content: BerObjectContent::Unknown(BerClass::ContextSpecific, BerTag(0), &bytes[2..]),
};
assert_eq!(parse_der(&bytes), Ok((empty, expected)));
}
#[test]
-fn test_der_explicit() {
+fn test_der_explicit_optional() {
let empty = &b""[..];
let bytes = [0xa0, 0x03, 0x02, 0x01, 0x02];
let header = BerObjectHeader::new(BerClass::ContextSpecific, 1, BerTag(0), 3)
@@ -316,12 +331,12 @@ fn test_der_explicit() {
)))),
};
assert_eq!(
- parse_der_explicit(&bytes, BerTag(0), parse_der_integer),
+ parse_der_explicit_optional(&bytes, BerTag(0), parse_der_integer),
Ok((empty, expected))
);
let expected2 = DerObject::from_obj(BerObjectContent::Optional(None));
assert_eq!(
- parse_der_explicit(&bytes, BerTag(1), parse_der_integer),
+ parse_der_explicit_optional(&bytes, BerTag(1), parse_der_integer),
Ok((&bytes[..], expected2))
);
}
@@ -396,10 +411,16 @@ fn test_der_optional() {
DerObject::from_int_slice(b"\x01\x00\x01"),
]);
fn parse_optional_enum(i: &[u8]) -> DerResult {
- parse_der_optional!(i, parse_der_enum)
+ parse_ber_optional(parse_der_enum)(i)
}
fn parser(i: &[u8]) -> DerResult {
- parse_der_sequence_defined!(i, parse_optional_enum >> parse_der_integer)
+ parse_der_sequence_defined(
+ // the nom `tuple` combinator returns a tuple, so we have to map it
+ // to a list
+ map(tuple((parse_optional_enum, parse_der_integer)), |(a, b)| {
+ vec![a, b]
+ }),
+ )(i)
}
assert_eq!(parser(&bytes1), Ok((empty, expected1)));
assert_eq!(parser(&bytes2), Ok((empty, expected2)));
@@ -458,66 +479,33 @@ fn test_der_seq_dn_defined() {
]);
#[inline]
fn parse_directory_string(i: &[u8]) -> DerResult {
- alt!(
- i,
- parse_der_utf8string | parse_der_printablestring | parse_der_ia5string
- )
+ alt((
+ parse_der_utf8string,
+ parse_der_printablestring,
+ parse_der_ia5string,
+ ))(i)
}
#[inline]
fn parse_attr_type_and_value(i: &[u8]) -> DerResult {
- parse_der_sequence_defined!(i, parse_der_oid >> parse_directory_string)
+ parse_der_sequence_defined(
+ // the nom `tuple` combinator returns a tuple, so we have to map it
+ // to a list
+ map(tuple((parse_der_oid, parse_directory_string)), |(a, b)| {
+ vec![a, b]
+ }),
+ )(i)
}
#[inline]
fn parse_rdn(i: &[u8]) -> DerResult {
- parse_der_set_defined!(i, parse_attr_type_and_value)
+ parse_der_set_of(parse_attr_type_and_value)(i)
}
#[inline]
fn parse_name(i: &[u8]) -> DerResult {
- parse_der_sequence_defined!(i, parse_rdn >> parse_rdn >> parse_rdn)
+ parse_der_sequence_of(parse_rdn)(i)
}
assert_eq!(parse_name(&bytes), Ok((empty, expected)));
}
-#[test]
-fn test_der_defined_seq_macros() {
- fn localparse_seq(i: &[u8]) -> DerResult {
- parse_der_sequence_defined_m! {
- i,
- parse_der_integer >>
- call!(parse_der_integer)
- }
- }
- let empty = &b""[..];
- let bytes = [
- 0x30, 0x0a, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x00,
- ];
- let expected = DerObject::from_seq(vec![
- DerObject::from_int_slice(b"\x01\x00\x01"),
- DerObject::from_int_slice(b"\x01\x00\x00"),
- ]);
- assert_eq!(localparse_seq(&bytes), Ok((empty, expected)));
-}
-
-#[test]
-fn test_der_defined_set_macros() {
- fn localparse_set(i: &[u8]) -> DerResult {
- parse_der_set_defined_m! {
- i,
- parse_der_integer >>
- call!(parse_der_integer)
- }
- }
- let empty = &b""[..];
- let bytes = [
- 0x31, 0x0a, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x00,
- ];
- let expected = DerObject::from_set(vec![
- DerObject::from_int_slice(b"\x01\x00\x01"),
- DerObject::from_int_slice(b"\x01\x00\x00"),
- ]);
- assert_eq!(localparse_set(&bytes), Ok((empty, expected)));
-}
-
#[test_case(&hex!("02 01 01"), Ok(1) ; "u32-1")]
#[test_case(&hex!("02 01 ff"), Err(BerError::IntegerNegative) ; "negative integer")]
#[test_case(&hex!("02 02 00 ff"), Ok(255) ; "u32-255")]