kerberos_asn1/pa_data/
etype_info2.rs

1use red_asn1::SequenceOf;
2use crate::EtypeInfo2Entry;
3
4/// (*ETYPE-INFO2*) Array of [EtypeInfo2Entry](./struct.EtypeInfo2Entry.html)
5/// that indicates the available encryption algorithms.
6///
7/// ```asn1
8/// ETYPE-INFO2              ::= SEQUENCE SIZE (1..MAX) OF ETYPE-INFO2-ENTRY
9/// ```
10pub type EtypeInfo2 = SequenceOf<EtypeInfo2Entry>;
11
12#[cfg(test)]
13mod test {
14    use super::*;
15    use kerberos_constants::etypes::*;
16    use crate::KerberosString;
17    use red_asn1::Asn1Object;
18
19    #[test]
20    fn test_parse_etypeinfo2() {
21        let entry1 = EtypeInfo2Entry::new(
22            AES256_CTS_HMAC_SHA1_96,
23            Some(KerberosString::from("KINGDOM.HEARTSmickey")),
24            None
25        );
26
27        let entry2 = EtypeInfo2Entry::new(RC4_HMAC, None, None);
28
29        let entry3 = EtypeInfo2Entry::new(
30            DES_CBC_MD5,
31            Some(KerberosString::from("KINGDOM.HEARTSmickey")),
32            None
33        );
34
35        let mut info2 = EtypeInfo2::default();
36        info2.push(entry1);
37        info2.push(entry2);
38        info2.push(entry3);
39
40        assert_eq!(
41            info2,
42            EtypeInfo2::parse(&[
43                0x30, 0x45, 0x30, 0x1d, 0xa0, 0x03, 0x02, 0x01, 0x12, 0xa1, 0x16, 0x1b, 0x14, 0x4b,
44                0x49, 0x4e, 0x47, 0x44, 0x4f, 0x4d, 0x2e, 0x48, 0x45, 0x41, 0x52, 0x54, 0x53, 0x6d,
45                0x69, 0x63, 0x6b, 0x65, 0x79, 0x30, 0x05, 0xa0, 0x03, 0x02, 0x01, 0x17, 0x30, 0x1d,
46                0xa0, 0x03, 0x02, 0x01, 0x03, 0xa1, 0x16, 0x1b, 0x14, 0x4b, 0x49, 0x4e, 0x47, 0x44,
47                0x4f, 0x4d, 0x2e, 0x48, 0x45, 0x41, 0x52, 0x54, 0x53, 0x6d, 0x69, 0x63, 0x6b, 0x65,
48                0x79,
49            ]).unwrap().1
50        );
51    }
52
53
54    #[test]
55    fn test_build_etypeinfo2() {
56        let entry1 = EtypeInfo2Entry::new(
57            AES256_CTS_HMAC_SHA1_96,
58            Some(KerberosString::from("KINGDOM.HEARTSmickey")),
59            None
60        );
61
62        let entry2 = EtypeInfo2Entry::new(RC4_HMAC, None, None);
63
64        let entry3 = EtypeInfo2Entry::new(
65            DES_CBC_MD5,
66            Some(KerberosString::from("KINGDOM.HEARTSmickey")),
67            None
68        );
69
70        let mut info2 = EtypeInfo2::default();
71        info2.push(entry1);
72        info2.push(entry2);
73        info2.push(entry3);
74
75        assert_eq!(
76            vec![
77                0x30, 0x45, 0x30, 0x1d, 0xa0, 0x03, 0x02, 0x01, 0x12, 0xa1, 0x16, 0x1b, 0x14, 0x4b,
78                0x49, 0x4e, 0x47, 0x44, 0x4f, 0x4d, 0x2e, 0x48, 0x45, 0x41, 0x52, 0x54, 0x53, 0x6d,
79                0x69, 0x63, 0x6b, 0x65, 0x79, 0x30, 0x05, 0xa0, 0x03, 0x02, 0x01, 0x17, 0x30, 0x1d,
80                0xa0, 0x03, 0x02, 0x01, 0x03, 0xa1, 0x16, 0x1b, 0x14, 0x4b, 0x49, 0x4e, 0x47, 0x44,
81                0x4f, 0x4d, 0x2e, 0x48, 0x45, 0x41, 0x52, 0x54, 0x53, 0x6d, 0x69, 0x63, 0x6b, 0x65,
82                0x79,
83            ],
84            info2.build()
85        );
86    }
87}