summaryrefslogtreecommitdiffstats
path: root/vendor/der/tests/set_of.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
commit10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87 (patch)
treebdffd5d80c26cf4a7a518281a204be1ace85b4c1 /vendor/der/tests/set_of.rs
parentReleasing progress-linux version 1.70.0+dfsg1-9~progress7.99u1. (diff)
downloadrustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.tar.xz
rustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.zip
Merging upstream version 1.70.0+dfsg2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/der/tests/set_of.rs')
-rw-r--r--vendor/der/tests/set_of.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/vendor/der/tests/set_of.rs b/vendor/der/tests/set_of.rs
new file mode 100644
index 000000000..ba43d80a2
--- /dev/null
+++ b/vendor/der/tests/set_of.rs
@@ -0,0 +1,59 @@
+//! `SetOf` tests.
+
+#![cfg(feature = "alloc")]
+
+use der::{asn1::SetOfVec, DerOrd};
+use proptest::{prelude::*, string::*};
+
+proptest! {
+ #[test]
+ fn sort_equiv(bytes in bytes_regex(".{0,64}").unwrap()) {
+ let mut expected = bytes.clone();
+ expected.sort_by(|a, b| a.der_cmp(b).unwrap());
+
+ let set = SetOfVec::try_from(bytes).unwrap();
+ prop_assert_eq!(expected.as_slice(), set.as_slice());
+ }
+}
+
+/// Set ordering tests.
+#[cfg(all(feature = "derive", feature = "oid"))]
+mod ordering {
+ use der::{
+ asn1::{AnyRef, ObjectIdentifier, SetOf, SetOfVec},
+ Decode, Sequence, ValueOrd,
+ };
+ use hex_literal::hex;
+
+ /// X.501 `AttributeTypeAndValue`
+ #[derive(Copy, Clone, Debug, Eq, PartialEq, Sequence, ValueOrd)]
+ pub struct AttributeTypeAndValue<'a> {
+ pub oid: ObjectIdentifier,
+ pub value: AnyRef<'a>,
+ }
+
+ const OUT_OF_ORDER_RDN_EXAMPLE: &[u8] =
+ &hex!("311F301106035504030C0A4A4F484E20534D495448300A060355040A0C03313233");
+
+ /// For compatibility reasons, we allow non-canonical DER with out-of-order
+ /// sets in order to match the behavior of other implementations.
+ #[test]
+ fn allow_out_of_order_setof() {
+ assert!(SetOf::<AttributeTypeAndValue<'_>, 2>::from_der(OUT_OF_ORDER_RDN_EXAMPLE).is_ok());
+ }
+
+ /// Same as above, with `SetOfVec` instead of `SetOf`.
+ #[test]
+ fn allow_out_of_order_setofvec() {
+ assert!(SetOfVec::<AttributeTypeAndValue<'_>>::from_der(OUT_OF_ORDER_RDN_EXAMPLE).is_ok());
+ }
+
+ /// Test to ensure ordering is handled correctly.
+ #[test]
+ fn ordering_regression() {
+ let der_bytes = hex!("3139301906035504030C12546573742055736572393031353734333830301C060A0992268993F22C640101130E3437303031303030303134373333");
+ let set = SetOf::<AttributeTypeAndValue<'_>, 3>::from_der(&der_bytes).unwrap();
+ let attr1 = set.get(0).unwrap();
+ assert_eq!(ObjectIdentifier::new("2.5.4.3").unwrap(), attr1.oid);
+ }
+}