Skip to main content

picky_krb/
pkinit.rs

1use picky_asn1::tag::{TagClass, TagPeeker};
2use picky_asn1::wrapper::{
3    Asn1SequenceOf, BitStringAsn1, ExplicitContextTag0, ExplicitContextTag1, ExplicitContextTag2, ExplicitContextTag3,
4    ImplicitContextTag0, ImplicitContextTag1, ImplicitContextTag2, IntegerAsn1, ObjectIdentifierAsn1, OctetStringAsn1,
5    Optional,
6};
7use picky_asn1_x509::AlgorithmIdentifier;
8use serde::{Deserialize, Serialize, de, ser};
9
10use crate::data_types::{Checksum, KerberosTime, PrincipalName, Realm};
11
12#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
13pub struct Pku2uNegoReqMetadata {
14    pub inner: ImplicitContextTag0<OctetStringAsn1>,
15}
16
17#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
18pub struct Pku2uNegoBody {
19    pub realm: ExplicitContextTag0<Realm>,
20    pub sname: ExplicitContextTag1<PrincipalName>,
21}
22
23#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
24pub struct Pku2uNegoReq {
25    pub metadata: ExplicitContextTag0<Asn1SequenceOf<Pku2uNegoReqMetadata>>,
26    pub body: ExplicitContextTag1<Pku2uNegoBody>,
27}
28
29#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
30pub struct Pku2uNegoRep {
31    pub metadata: ExplicitContextTag0<Asn1SequenceOf<Pku2uNegoReqMetadata>>,
32}
33
34/// [Generation of Client Request](https://www.rfc-editor.org/rfc/rfc4556.html#section-3.2.1)
35/// ```not_rust
36/// ExternalPrincipalIdentifier ::= SEQUENCE {
37///    subjectName             [0] IMPLICIT OCTET STRING OPTIONAL,
38///    issuerAndSerialNumber   [1] IMPLICIT OCTET STRING OPTIONAL,
39///    subjectKeyIdentifier    [2] IMPLICIT OCTET STRING OPTIONAL,
40/// }
41/// ```
42#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
43pub struct ExternalPrincipalIdentifier {
44    #[serde(default)]
45    pub subject_name: Optional<Option<ImplicitContextTag0<OctetStringAsn1>>>,
46    #[serde(default)]
47    pub issuer_and_serial_number: Optional<Option<ImplicitContextTag1<OctetStringAsn1>>>,
48    #[serde(default)]
49    pub subject_key_identifier: Optional<Option<ImplicitContextTag2<OctetStringAsn1>>>,
50}
51
52/// [Generation of Client Request](https://www.rfc-editor.org/rfc/rfc4556.html#section-3.2.1)
53/// ```not_rust
54/// PA-PK-AS-REQ ::= SEQUENCE {
55///    signedAuthPack          [0] IMPLICIT OCTET STRING,
56///    trustedCertifiers       [1] SEQUENCE OF ExternalPrincipalIdentifier OPTIONAL,
57///    kdcPkId                 [2] IMPLICIT OCTET STRING OPTIONAL,
58/// }
59/// ```
60#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
61pub struct PaPkAsReq {
62    pub signed_auth_pack: ImplicitContextTag0<OctetStringAsn1>,
63    #[serde(default)]
64    pub trusted_certifiers: Optional<Option<ExplicitContextTag1<Asn1SequenceOf<ExternalPrincipalIdentifier>>>>,
65    #[serde(default)]
66    pub kdc_pk_id: Optional<Option<ImplicitContextTag2<OctetStringAsn1>>>,
67}
68
69/// [Generation of Client Request](https://www.rfc-editor.org/rfc/rfc4556.html#section-3.2.1)
70/// ```not_rust
71/// PKAuthenticator ::= SEQUENCE {
72///    cusec                   [0] INTEGER (0..999999),
73///    ctime                   [1] KerberosTime,
74///    nonce                   [2] INTEGER (0..4294967295),
75///    paChecksum              [3] OCTET STRING OPTIONAL,
76/// }
77/// ```
78#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
79pub struct PkAuthenticator {
80    pub cusec: ExplicitContextTag0<IntegerAsn1>,
81    pub ctime: ExplicitContextTag1<KerberosTime>,
82    pub nonce: ExplicitContextTag2<IntegerAsn1>,
83    #[serde(default)]
84    pub pa_checksum: Optional<Option<ExplicitContextTag3<OctetStringAsn1>>>,
85}
86
87/// [Generation of Client Request](https://www.rfc-editor.org/rfc/rfc4556.html#section-3.2.1)
88/// ```not_rust
89/// DHNonce ::= OCTET STRING
90/// ```
91pub type DhNonce = OctetStringAsn1;
92
93/// [Diffie-Hellman Key Exchange Keys](https://www.rfc-editor.org/rfc/rfc3279#section-2.3.3)
94/// ```not_rust
95/// ValidationParms ::= SEQUENCE {
96///       seed             BIT STRING,
97///       pgenCounter      INTEGER }
98/// ```
99#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
100pub struct ValidationParams {
101    seed: BitStringAsn1,
102    pg_gen_counter: IntegerAsn1,
103}
104
105/// [Diffie-Hellman Key Exchange Keys](https://www.rfc-editor.org/rfc/rfc3279#section-2.3.3)
106/// ```not_rust
107/// DomainParameters ::= SEQUENCE {
108///       p       INTEGER, -- odd prime, p = jq +1
109///       g       INTEGER, -- generator, g
110///       q       INTEGER, -- factor of p - 1
111///       j       INTEGER OPTIONAL, -- subgroup factor
112///       validationParms  ValidationParms OPTIONAL }
113/// ```
114#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
115pub struct DhDomainParameters {
116    pub p: IntegerAsn1,
117    pub g: IntegerAsn1,
118    pub q: IntegerAsn1,
119    #[serde(default)]
120    pub j: Optional<Option<IntegerAsn1>>,
121    #[serde(default)]
122    pub validation_params: Optional<Option<ValidationParams>>,
123}
124
125#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
126pub struct DhReqKeyInfo {
127    pub identifier: ObjectIdentifierAsn1,
128    pub key_info: DhDomainParameters,
129}
130
131#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
132pub struct DhReqInfo {
133    pub key_info: DhReqKeyInfo,
134    pub key_value: BitStringAsn1,
135}
136
137/// [Generation of Client Request](https://www.rfc-editor.org/rfc/rfc4556.html#section-3.2.1)
138/// ```not_rust
139/// AuthPack ::= SEQUENCE {
140///    pkAuthenticator         [0] PKAuthenticator,
141///    clientPublicValue       [1] SubjectPublicKeyInfo OPTIONAL,
142///    supportedCMSTypes       [2] SEQUENCE OF AlgorithmIdentifier OPTIONAL,
143///    clientDHNonce           [3] DHNonce OPTIONAL,
144/// }
145/// ```
146#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
147pub struct AuthPack {
148    pub pk_authenticator: ExplicitContextTag0<PkAuthenticator>,
149    #[serde(default)]
150    pub client_public_value: Optional<Option<ExplicitContextTag1<DhReqInfo>>>,
151    #[serde(default)]
152    pub supported_cms_types: Optional<Option<ExplicitContextTag2<Asn1SequenceOf<AlgorithmIdentifier>>>>,
153    #[serde(default)]
154    pub client_dh_nonce: Optional<Option<ExplicitContextTag3<DhNonce>>>,
155}
156
157/// [Generation of KDC Reply](https://www.rfc-editor.org/rfc/rfc4556.html#section-3.2.3)
158/// ```not_rust
159/// DHRepInfo ::= SEQUENCE {
160///    dhSignedData            [0] IMPLICIT OCTET STRING,
161///    serverDHNonce           [1] DHNonce OPTIONAL,
162/// }
163/// ```
164#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
165pub struct DhRepInfo {
166    pub dh_signed_data: ImplicitContextTag0<OctetStringAsn1>,
167    #[serde(default)]
168    pub server_dh_nonce: Optional<Option<ExplicitContextTag1<DhNonce>>>,
169}
170
171/// [Generation of KDC Reply](https://www.rfc-editor.org/rfc/rfc4556.html#section-3.2.3)
172/// ```not_rust
173/// PA-PK-AS-REP ::= CHOICE {
174///    dhInfo                  [0] DHRepInfo,
175///    encKeyPack              [1] IMPLICIT OCTET STRING,
176/// }
177/// ```
178#[derive(Debug, PartialEq, Eq, Clone)]
179pub enum PaPkAsRep {
180    DhInfo(ExplicitContextTag0<DhRepInfo>),
181    EncKeyPack(ImplicitContextTag1<OctetStringAsn1>),
182}
183
184impl<'de> Deserialize<'de> for PaPkAsRep {
185    fn deserialize<D>(deserializer: D) -> Result<Self, <D as de::Deserializer<'de>>::Error>
186    where
187        D: de::Deserializer<'de>,
188    {
189        use std::fmt;
190
191        struct Visitor;
192
193        impl<'de> de::Visitor<'de> for Visitor {
194            type Value = PaPkAsRep;
195
196            fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
197                formatter.write_str("a valid DER-encoded SpcLink")
198            }
199
200            fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
201            where
202                A: de::SeqAccess<'de>,
203            {
204                let tag_peeker: TagPeeker = seq.next_element()?.ok_or_else(|| {
205                    de::Error::invalid_value(
206                        de::Unexpected::Other("[PaPkAsRep] choice tag is missing"),
207                        &"valid choice tag",
208                    )
209                })?;
210
211                let pa_pk_as_rep = match tag_peeker.next_tag.class_and_number() {
212                    (TagClass::ContextSpecific, 0) => PaPkAsRep::DhInfo(seq.next_element()?.ok_or_else(|| {
213                        de::Error::invalid_value(
214                            de::Unexpected::Other("[PaPkAsRep] dhInfo is missing"),
215                            &"valid dhInfo",
216                        )
217                    })?),
218                    (TagClass::ContextSpecific, 1) => PaPkAsRep::EncKeyPack(seq.next_element()?.ok_or_else(|| {
219                        de::Error::invalid_value(
220                            de::Unexpected::Other("[PaPkAsRep] encKeyPack is missing"),
221                            &"valid encKeyPack",
222                        )
223                    })?),
224                    _ => {
225                        return Err(de::Error::invalid_value(
226                            de::Unexpected::Other("[PaPkAsRep] unknown choice value"),
227                            &"a supported PA-PK-AS-REP choice",
228                        ));
229                    }
230                };
231
232                Ok(pa_pk_as_rep)
233            }
234        }
235
236        deserializer.deserialize_enum("PA-PK-AS-REP", &["dhInfo", "encKeyPack"], Visitor)
237    }
238}
239
240impl ser::Serialize for PaPkAsRep {
241    fn serialize<S>(&self, serializer: S) -> Result<<S as ser::Serializer>::Ok, S::Error>
242    where
243        S: ser::Serializer,
244    {
245        match self {
246            PaPkAsRep::DhInfo(dh_info) => dh_info.serialize(serializer),
247            PaPkAsRep::EncKeyPack(enc_key_pack) => enc_key_pack.serialize(serializer),
248        }
249    }
250}
251
252/// [Generation of KDC Reply](https://www.rfc-editor.org/rfc/rfc4556.html#section-3.2.3)
253/// ```not_rust
254/// KDCDHKeyInfo ::= SEQUENCE {
255///    subjectPublicKey        [0] BIT STRING,
256///    nonce                   [1] INTEGER (0..4294967295),
257///    dhKeyExpiration         [2] KerberosTime OPTIONAL,
258/// }
259/// ```
260#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
261pub struct KdcDhKeyInfo {
262    pub subject_public_key: ExplicitContextTag0<BitStringAsn1>,
263    pub nonce: ExplicitContextTag1<IntegerAsn1>,
264    #[serde(default)]
265    pub dh_key_expiration: Optional<Option<ExplicitContextTag2<KerberosTime>>>,
266}
267
268/// [The GSS-API Binding for PKU2U](https://datatracker.ietf.org/doc/html/draft-zhu-pku2u-04#section-6)
269/// ```not_rust
270/// KRB-FINISHED ::= SEQUENCE {
271///      gss-mic [1] Checksum,
272/// }
273/// ```
274#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
275pub struct KrbFinished {
276    pub gss_mic: ExplicitContextTag1<Checksum>,
277}
278
279#[cfg(test)]
280mod tests {
281    use picky_asn1::restricted_string::Ia5String;
282    use picky_asn1::wrapper::{
283        Asn1SequenceOf, ExplicitContextTag0, ExplicitContextTag1, ImplicitContextTag0, ImplicitContextTag1,
284        IntegerAsn1, OctetStringAsn1, Optional,
285    };
286
287    use crate::data_types::{KerberosStringAsn1, PrincipalName};
288    use crate::pkinit::DhRepInfo;
289
290    use super::{PaPkAsRep, PaPkAsReq, Pku2uNegoBody, Pku2uNegoRep, Pku2uNegoReq, Pku2uNegoReqMetadata};
291
292    #[test]
293    fn pku2u_nego_req_encode() {
294        let message = Pku2uNegoReq {
295            metadata: ExplicitContextTag0::from(Asn1SequenceOf::from(vec![
296                Pku2uNegoReqMetadata {
297                    inner: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
298                        48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0,
299                        97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80,
300                        0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49,
301                        0, 93,
302                    ])),
303                },
304                Pku2uNegoReqMetadata {
305                    inner: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
306                        48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0,
307                        97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80,
308                        0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49,
309                        0, 93,
310                    ])),
311                },
312            ])),
313            body: ExplicitContextTag1::from(Pku2uNegoBody {
314                realm: ExplicitContextTag0::from(KerberosStringAsn1::from(
315                    Ia5String::from_string("WELLKNOWN:PKU2U".into()).unwrap(),
316                )),
317                sname: ExplicitContextTag1::from(PrincipalName {
318                    name_type: ExplicitContextTag0::from(IntegerAsn1::from(vec![2])),
319                    name_string: ExplicitContextTag1::from(Asn1SequenceOf::from(vec![
320                        KerberosStringAsn1::from(Ia5String::from_string("TERMSRV".into()).unwrap()),
321                        KerberosStringAsn1::from(Ia5String::from_string("AZRDOWN-W10".into()).unwrap()),
322                    ])),
323                }),
324            }),
325        };
326
327        let encoded = picky_asn1_der::to_vec(&message).unwrap();
328
329        assert_eq!(
330            &[
331                48, 129, 230, 160, 129, 169, 48, 129, 166, 48, 81, 128, 79, 48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30,
332                66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116, 0, 105,
333                0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32,
334                0, 91, 0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 48, 81, 128, 79, 48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30,
335                66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116, 0, 105,
336                0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32,
337                0, 91, 0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 161, 56, 48, 54, 160, 17, 27, 15, 87, 69, 76, 76, 75, 78, 79,
338                87, 78, 58, 80, 75, 85, 50, 85, 161, 33, 48, 31, 160, 3, 2, 1, 2, 161, 24, 48, 22, 27, 7, 84, 69, 82,
339                77, 83, 82, 86, 27, 11, 65, 90, 82, 68, 79, 87, 78, 45, 87, 49, 48
340            ],
341            encoded.as_slice()
342        );
343    }
344
345    #[test]
346    fn pku2u_nego_rep_encode() {
347        let nego_rep = Pku2uNegoRep {
348            metadata: ExplicitContextTag0::from(Asn1SequenceOf::from(vec![
349                Pku2uNegoReqMetadata {
350                    inner: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
351                        48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0,
352                        97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80,
353                        0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49,
354                        0, 93,
355                    ])),
356                },
357                Pku2uNegoReqMetadata {
358                    inner: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
359                        48, 35, 49, 33, 48, 31, 6, 3, 85, 4, 3, 19, 24, 84, 111, 107, 101, 110, 32, 83, 105, 103, 110,
360                        105, 110, 103, 32, 80, 117, 98, 108, 105, 99, 32, 75, 101, 121,
361                    ])),
362                },
363            ])),
364        };
365
366        let encoded = picky_asn1_der::to_vec(&nego_rep).unwrap();
367
368        assert_eq!(
369            &[
370                48, 129, 128, 160, 126, 48, 124, 48, 81, 128, 79, 48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30, 66, 0,
371                77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116, 0, 105, 0, 111,
372                0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32, 0, 91,
373                0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 48, 39, 128, 37, 48, 35, 49, 33, 48, 31, 6, 3, 85, 4, 3, 19, 24, 84,
374                111, 107, 101, 110, 32, 83, 105, 103, 110, 105, 110, 103, 32, 80, 117, 98, 108, 105, 99, 32, 75, 101,
375                121
376            ],
377            encoded.as_slice()
378        );
379    }
380
381    #[test]
382    fn pku2u_nego_rep_decode() {
383        let raw_data = [
384            48, 129, 171, 160, 129, 168, 48, 129, 165, 48, 81, 128, 79, 48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30, 66,
385            0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116, 0, 105, 0, 111,
386            0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32, 0, 91, 0,
387            50, 0, 48, 0, 50, 0, 49, 0, 93, 48, 39, 128, 37, 48, 35, 49, 33, 48, 31, 6, 3, 85, 4, 3, 19, 24, 84, 111,
388            107, 101, 110, 32, 83, 105, 103, 110, 105, 110, 103, 32, 80, 117, 98, 108, 105, 99, 32, 75, 101, 121, 48,
389            39, 128, 37, 48, 35, 49, 33, 48, 31, 6, 3, 85, 4, 3, 19, 24, 84, 111, 107, 101, 110, 32, 83, 105, 103, 110,
390            105, 110, 103, 32, 80, 117, 98, 108, 105, 99, 32, 75, 101, 121,
391        ];
392
393        let pku2u_nego_rep: Pku2uNegoRep = picky_asn1_der::from_bytes(&raw_data).unwrap();
394
395        assert_eq!(
396            Pku2uNegoRep {
397                metadata: ExplicitContextTag0::from(Asn1SequenceOf::from(vec![
398                    Pku2uNegoReqMetadata {
399                        inner: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
400                            48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103,
401                            0, 97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50,
402                            0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32, 0, 91, 0, 50, 0, 48, 0,
403                            50, 0, 49, 0, 93
404                        ]))
405                    },
406                    Pku2uNegoReqMetadata {
407                        inner: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
408                            48, 35, 49, 33, 48, 31, 6, 3, 85, 4, 3, 19, 24, 84, 111, 107, 101, 110, 32, 83, 105, 103,
409                            110, 105, 110, 103, 32, 80, 117, 98, 108, 105, 99, 32, 75, 101, 121
410                        ]))
411                    },
412                    Pku2uNegoReqMetadata {
413                        inner: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
414                            48, 35, 49, 33, 48, 31, 6, 3, 85, 4, 3, 19, 24, 84, 111, 107, 101, 110, 32, 83, 105, 103,
415                            110, 105, 110, 103, 32, 80, 117, 98, 108, 105, 99, 32, 75, 101, 121
416                        ]))
417                    },
418                ]))
419            },
420            pku2u_nego_rep
421        );
422    }
423
424    #[test]
425    fn pa_pk_as_req_decode() {
426        let raw_data = [
427            48, 130, 7, 246, 128, 130, 7, 242, 48, 130, 7, 238, 2, 1, 3, 49, 11, 48, 9, 6, 5, 43, 14, 3, 2, 26, 5, 0,
428            48, 130, 2, 31, 6, 7, 43, 6, 1, 5, 2, 3, 1, 160, 130, 2, 18, 4, 130, 2, 14, 48, 130, 2, 10, 160, 57, 48,
429            55, 160, 5, 2, 3, 6, 219, 251, 161, 17, 24, 15, 50, 48, 50, 50, 48, 53, 49, 55, 50, 48, 50, 53, 53, 57, 90,
430            162, 3, 2, 1, 0, 163, 22, 4, 20, 197, 143, 17, 64, 61, 203, 186, 45, 19, 30, 175, 125, 106, 6, 209, 5, 36,
431            69, 144, 97, 161, 130, 1, 167, 48, 130, 1, 163, 48, 130, 1, 23, 6, 7, 42, 134, 72, 206, 62, 2, 1, 48, 130,
432            1, 10, 2, 129, 129, 0, 255, 255, 255, 255, 255, 255, 255, 255, 201, 15, 218, 162, 33, 104, 194, 52, 196,
433            198, 98, 139, 128, 220, 28, 209, 41, 2, 78, 8, 138, 103, 204, 116, 2, 11, 190, 166, 59, 19, 155, 34, 81,
434            74, 8, 121, 142, 52, 4, 221, 239, 149, 25, 179, 205, 58, 67, 27, 48, 43, 10, 109, 242, 95, 20, 55, 79, 225,
435            53, 109, 109, 81, 194, 69, 228, 133, 181, 118, 98, 94, 126, 198, 244, 76, 66, 233, 166, 55, 237, 107, 11,
436            255, 92, 182, 244, 6, 183, 237, 238, 56, 107, 251, 90, 137, 159, 165, 174, 159, 36, 17, 124, 75, 31, 230,
437            73, 40, 102, 81, 236, 230, 83, 129, 255, 255, 255, 255, 255, 255, 255, 255, 2, 1, 2, 2, 129, 128, 127, 255,
438            255, 255, 255, 255, 255, 255, 228, 135, 237, 81, 16, 180, 97, 26, 98, 99, 49, 69, 192, 110, 14, 104, 148,
439            129, 39, 4, 69, 51, 230, 58, 1, 5, 223, 83, 29, 137, 205, 145, 40, 165, 4, 60, 199, 26, 2, 110, 247, 202,
440            140, 217, 230, 157, 33, 141, 152, 21, 133, 54, 249, 47, 138, 27, 167, 240, 154, 182, 182, 168, 225, 34,
441            242, 66, 218, 187, 49, 47, 63, 99, 122, 38, 33, 116, 211, 27, 246, 181, 133, 255, 174, 91, 122, 3, 91, 246,
442            247, 28, 53, 253, 173, 68, 207, 210, 215, 79, 146, 8, 190, 37, 143, 243, 36, 148, 51, 40, 246, 115, 41,
443            192, 255, 255, 255, 255, 255, 255, 255, 255, 3, 129, 133, 0, 2, 129, 129, 0, 219, 78, 185, 183, 129, 7, 4,
444            73, 79, 203, 237, 216, 60, 162, 113, 232, 36, 233, 162, 75, 8, 200, 168, 109, 49, 32, 207, 86, 26, 198,
445            121, 143, 205, 90, 248, 169, 6, 178, 153, 1, 237, 156, 2, 145, 162, 150, 218, 232, 144, 183, 193, 58, 7,
446            27, 217, 215, 160, 30, 69, 15, 211, 28, 18, 216, 145, 196, 14, 47, 119, 76, 163, 178, 243, 136, 213, 190,
447            122, 108, 59, 140, 94, 32, 75, 114, 17, 239, 99, 81, 208, 221, 232, 214, 193, 129, 129, 135, 191, 117, 72,
448            254, 44, 211, 92, 124, 203, 235, 196, 113, 1, 123, 74, 139, 101, 121, 212, 210, 119, 162, 26, 230, 153,
449            254, 123, 68, 151, 135, 52, 29, 163, 34, 4, 32, 72, 91, 60, 222, 24, 28, 4, 155, 141, 138, 44, 10, 136, 54,
450            202, 60, 146, 234, 183, 130, 109, 34, 94, 10, 87, 237, 162, 55, 173, 100, 115, 43, 160, 130, 3, 236, 48,
451            130, 3, 232, 48, 130, 2, 208, 160, 3, 2, 1, 2, 2, 16, 101, 97, 27, 230, 41, 155, 188, 234, 76, 173, 92,
452            163, 84, 82, 236, 140, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 11, 5, 0, 48, 77, 49, 75, 48, 73, 6,
453            3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122, 0, 97, 0,
454            116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0,
455            115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 48, 30, 23, 13, 50, 50, 48, 53, 49, 55, 50, 48, 50,
456            48, 53, 57, 90, 23, 13, 50, 50, 48, 53, 49, 55, 50, 49, 50, 53, 53, 57, 90, 48, 129, 151, 49, 52, 48, 50,
457            6, 10, 9, 146, 38, 137, 147, 242, 44, 100, 1, 25, 22, 36, 52, 99, 53, 97, 53, 101, 99, 49, 45, 57, 97, 99,
458            53, 45, 52, 54, 49, 50, 45, 57, 98, 52, 99, 45, 54, 98, 101, 100, 49, 55, 56, 98, 98, 54, 53, 97, 49, 60,
459            48, 58, 6, 3, 85, 4, 3, 12, 51, 83, 45, 49, 45, 49, 50, 45, 49, 45, 49, 53, 53, 50, 51, 56, 50, 57, 56, 45,
460            49, 51, 48, 51, 48, 53, 52, 50, 55, 52, 45, 50, 53, 48, 51, 53, 49, 55, 51, 49, 51, 45, 51, 54, 52, 54, 56,
461            55, 56, 55, 54, 53, 49, 33, 48, 31, 6, 3, 85, 4, 3, 12, 24, 109, 97, 109, 111, 114, 101, 97, 117, 64, 100,
462            111, 119, 110, 104, 105, 108, 108, 112, 114, 111, 46, 120, 121, 122, 48, 130, 1, 34, 48, 13, 6, 9, 42, 134,
463            72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 130, 1, 15, 0, 48, 130, 1, 10, 2, 130, 1, 1, 0, 194, 219, 35, 14, 127,
464            114, 121, 75, 42, 40, 170, 236, 117, 106, 194, 196, 210, 255, 45, 9, 73, 94, 25, 168, 112, 152, 56, 139,
465            223, 248, 20, 133, 255, 44, 102, 133, 240, 101, 221, 72, 127, 80, 230, 220, 137, 41, 199, 165, 66, 146,
466            235, 21, 59, 219, 83, 181, 107, 163, 33, 225, 17, 18, 38, 232, 38, 163, 178, 191, 144, 202, 9, 145, 190,
467            252, 5, 194, 130, 72, 63, 31, 19, 101, 67, 206, 134, 119, 194, 82, 119, 201, 110, 222, 198, 249, 254, 178,
468            166, 33, 81, 18, 136, 206, 131, 26, 131, 52, 205, 68, 179, 202, 45, 189, 197, 67, 56, 113, 191, 223, 174,
469            106, 56, 49, 29, 108, 182, 203, 94, 192, 127, 120, 204, 3, 152, 248, 24, 76, 86, 1, 193, 242, 174, 173,
470            203, 238, 184, 231, 84, 211, 111, 212, 56, 84, 68, 175, 119, 167, 107, 161, 185, 252, 229, 44, 127, 93,
471            207, 140, 170, 87, 23, 92, 30, 119, 233, 113, 255, 165, 146, 56, 219, 193, 150, 120, 182, 209, 182, 204,
472            42, 195, 58, 205, 119, 221, 208, 164, 245, 44, 47, 113, 155, 70, 92, 255, 251, 208, 239, 176, 67, 111, 84,
473            220, 146, 164, 21, 38, 233, 249, 73, 64, 255, 158, 67, 170, 17, 172, 128, 244, 58, 234, 107, 198, 197, 228,
474            47, 109, 182, 34, 202, 162, 173, 13, 14, 227, 50, 22, 164, 156, 246, 11, 199, 233, 235, 159, 67, 24, 157,
475            191, 2, 3, 1, 0, 1, 163, 121, 48, 119, 48, 14, 6, 3, 85, 29, 15, 1, 1, 255, 4, 4, 3, 2, 5, 160, 48, 51, 6,
476            3, 85, 29, 17, 4, 44, 48, 42, 160, 40, 6, 10, 43, 6, 1, 4, 1, 130, 55, 20, 2, 3, 160, 26, 12, 24, 109, 97,
477            109, 111, 114, 101, 97, 117, 64, 100, 111, 119, 110, 104, 105, 108, 108, 112, 114, 111, 46, 120, 121, 122,
478            48, 19, 6, 3, 85, 29, 37, 4, 12, 48, 10, 6, 8, 43, 6, 1, 5, 5, 7, 3, 2, 48, 27, 6, 9, 43, 6, 1, 4, 1, 130,
479            55, 21, 10, 4, 14, 48, 12, 48, 10, 6, 8, 43, 6, 1, 5, 5, 7, 3, 2, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13,
480            1, 1, 11, 5, 0, 3, 130, 1, 1, 0, 52, 19, 83, 79, 242, 219, 247, 152, 173, 207, 131, 233, 36, 186, 213, 25,
481            104, 89, 172, 106, 112, 21, 31, 25, 139, 186, 54, 131, 147, 126, 67, 185, 59, 165, 22, 61, 147, 69, 118,
482            54, 212, 229, 232, 3, 126, 50, 47, 77, 180, 165, 8, 54, 246, 20, 89, 126, 35, 253, 179, 73, 109, 45, 146,
483            74, 93, 64, 173, 178, 113, 103, 240, 177, 6, 97, 76, 171, 140, 27, 192, 114, 120, 77, 24, 203, 203, 122,
484            219, 171, 132, 229, 111, 70, 63, 121, 17, 89, 172, 191, 204, 169, 52, 16, 123, 41, 236, 116, 145, 236, 224,
485            25, 216, 62, 58, 195, 117, 105, 150, 46, 183, 197, 180, 51, 165, 97, 11, 247, 243, 139, 18, 176, 65, 137,
486            203, 78, 51, 164, 138, 202, 142, 134, 80, 75, 95, 139, 135, 86, 147, 108, 27, 126, 168, 174, 55, 197, 69,
487            92, 151, 206, 207, 73, 125, 101, 119, 99, 130, 136, 18, 105, 77, 7, 28, 178, 113, 171, 58, 202, 173, 12,
488            124, 32, 63, 234, 131, 127, 88, 17, 210, 29, 218, 175, 125, 34, 237, 219, 106, 207, 136, 126, 112, 70, 59,
489            229, 13, 23, 13, 243, 1, 5, 255, 222, 59, 190, 227, 219, 157, 219, 211, 96, 170, 168, 82, 127, 41, 47, 239,
490            51, 249, 69, 151, 69, 229, 9, 67, 243, 105, 206, 127, 3, 188, 159, 80, 19, 35, 156, 162, 196, 106, 47, 15,
491            109, 17, 253, 117, 14, 126, 160, 49, 130, 1, 199, 48, 130, 1, 195, 2, 1, 1, 48, 97, 48, 77, 49, 75, 48, 73,
492            6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122, 0, 97,
493            0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0,
494            115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 2, 16, 101, 97, 27, 230, 41, 155, 188, 234, 76, 173,
495            92, 163, 84, 82, 236, 140, 48, 9, 6, 5, 43, 14, 3, 2, 26, 5, 0, 160, 61, 48, 22, 6, 9, 42, 134, 72, 134,
496            247, 13, 1, 9, 3, 49, 9, 6, 7, 43, 6, 1, 5, 2, 3, 1, 48, 35, 6, 9, 42, 134, 72, 134, 247, 13, 1, 9, 4, 49,
497            22, 4, 20, 102, 68, 227, 41, 95, 65, 130, 138, 235, 245, 189, 250, 152, 141, 108, 239, 191, 39, 172, 175,
498            48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 1, 0, 6, 97, 27, 199, 212, 1, 132, 104, 88,
499            138, 94, 98, 29, 14, 122, 189, 62, 172, 78, 2, 208, 64, 141, 218, 173, 137, 36, 101, 172, 75, 136, 159,
500            133, 134, 37, 136, 127, 128, 177, 114, 108, 138, 53, 41, 125, 213, 123, 231, 149, 112, 215, 248, 240, 15,
501            20, 141, 9, 63, 18, 80, 2, 93, 126, 125, 229, 208, 142, 219, 196, 111, 110, 121, 50, 171, 57, 164, 95, 41,
502            181, 78, 215, 151, 226, 247, 93, 60, 224, 85, 152, 93, 251, 78, 73, 67, 85, 143, 42, 44, 166, 162, 187,
503            135, 124, 27, 55, 145, 134, 45, 75, 252, 22, 191, 193, 63, 30, 158, 83, 198, 188, 187, 220, 121, 40, 9,
504            223, 210, 9, 69, 121, 182, 193, 153, 144, 169, 235, 7, 244, 38, 135, 155, 241, 140, 192, 226, 175, 163,
505            157, 233, 65, 108, 215, 223, 232, 195, 159, 136, 194, 43, 247, 102, 143, 37, 56, 209, 56, 95, 55, 127, 6,
506            253, 154, 29, 163, 53, 56, 152, 106, 138, 128, 47, 129, 19, 103, 170, 72, 208, 221, 95, 111, 26, 123, 174,
507            85, 164, 85, 237, 168, 190, 145, 129, 213, 212, 110, 143, 199, 57, 35, 78, 12, 134, 159, 94, 82, 191, 241,
508            132, 31, 112, 46, 40, 225, 103, 146, 254, 108, 56, 160, 208, 176, 166, 214, 161, 1, 143, 105, 169, 183,
509            149, 222, 225, 246, 119, 193, 223, 54, 175, 234, 92, 143, 197, 93, 158, 242, 226, 254, 27,
510        ];
511
512        let pa_pk_as_req: PaPkAsReq = picky_asn1_der::from_bytes(&raw_data).unwrap();
513
514        assert_eq!(
515            PaPkAsReq {
516                signed_auth_pack: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
517                    48, 130, 7, 238, 2, 1, 3, 49, 11, 48, 9, 6, 5, 43, 14, 3, 2, 26, 5, 0, 48, 130, 2, 31, 6, 7, 43, 6,
518                    1, 5, 2, 3, 1, 160, 130, 2, 18, 4, 130, 2, 14, 48, 130, 2, 10, 160, 57, 48, 55, 160, 5, 2, 3, 6,
519                    219, 251, 161, 17, 24, 15, 50, 48, 50, 50, 48, 53, 49, 55, 50, 48, 50, 53, 53, 57, 90, 162, 3, 2,
520                    1, 0, 163, 22, 4, 20, 197, 143, 17, 64, 61, 203, 186, 45, 19, 30, 175, 125, 106, 6, 209, 5, 36, 69,
521                    144, 97, 161, 130, 1, 167, 48, 130, 1, 163, 48, 130, 1, 23, 6, 7, 42, 134, 72, 206, 62, 2, 1, 48,
522                    130, 1, 10, 2, 129, 129, 0, 255, 255, 255, 255, 255, 255, 255, 255, 201, 15, 218, 162, 33, 104,
523                    194, 52, 196, 198, 98, 139, 128, 220, 28, 209, 41, 2, 78, 8, 138, 103, 204, 116, 2, 11, 190, 166,
524                    59, 19, 155, 34, 81, 74, 8, 121, 142, 52, 4, 221, 239, 149, 25, 179, 205, 58, 67, 27, 48, 43, 10,
525                    109, 242, 95, 20, 55, 79, 225, 53, 109, 109, 81, 194, 69, 228, 133, 181, 118, 98, 94, 126, 198,
526                    244, 76, 66, 233, 166, 55, 237, 107, 11, 255, 92, 182, 244, 6, 183, 237, 238, 56, 107, 251, 90,
527                    137, 159, 165, 174, 159, 36, 17, 124, 75, 31, 230, 73, 40, 102, 81, 236, 230, 83, 129, 255, 255,
528                    255, 255, 255, 255, 255, 255, 2, 1, 2, 2, 129, 128, 127, 255, 255, 255, 255, 255, 255, 255, 228,
529                    135, 237, 81, 16, 180, 97, 26, 98, 99, 49, 69, 192, 110, 14, 104, 148, 129, 39, 4, 69, 51, 230, 58,
530                    1, 5, 223, 83, 29, 137, 205, 145, 40, 165, 4, 60, 199, 26, 2, 110, 247, 202, 140, 217, 230, 157,
531                    33, 141, 152, 21, 133, 54, 249, 47, 138, 27, 167, 240, 154, 182, 182, 168, 225, 34, 242, 66, 218,
532                    187, 49, 47, 63, 99, 122, 38, 33, 116, 211, 27, 246, 181, 133, 255, 174, 91, 122, 3, 91, 246, 247,
533                    28, 53, 253, 173, 68, 207, 210, 215, 79, 146, 8, 190, 37, 143, 243, 36, 148, 51, 40, 246, 115, 41,
534                    192, 255, 255, 255, 255, 255, 255, 255, 255, 3, 129, 133, 0, 2, 129, 129, 0, 219, 78, 185, 183,
535                    129, 7, 4, 73, 79, 203, 237, 216, 60, 162, 113, 232, 36, 233, 162, 75, 8, 200, 168, 109, 49, 32,
536                    207, 86, 26, 198, 121, 143, 205, 90, 248, 169, 6, 178, 153, 1, 237, 156, 2, 145, 162, 150, 218,
537                    232, 144, 183, 193, 58, 7, 27, 217, 215, 160, 30, 69, 15, 211, 28, 18, 216, 145, 196, 14, 47, 119,
538                    76, 163, 178, 243, 136, 213, 190, 122, 108, 59, 140, 94, 32, 75, 114, 17, 239, 99, 81, 208, 221,
539                    232, 214, 193, 129, 129, 135, 191, 117, 72, 254, 44, 211, 92, 124, 203, 235, 196, 113, 1, 123, 74,
540                    139, 101, 121, 212, 210, 119, 162, 26, 230, 153, 254, 123, 68, 151, 135, 52, 29, 163, 34, 4, 32,
541                    72, 91, 60, 222, 24, 28, 4, 155, 141, 138, 44, 10, 136, 54, 202, 60, 146, 234, 183, 130, 109, 34,
542                    94, 10, 87, 237, 162, 55, 173, 100, 115, 43, 160, 130, 3, 236, 48, 130, 3, 232, 48, 130, 2, 208,
543                    160, 3, 2, 1, 2, 2, 16, 101, 97, 27, 230, 41, 155, 188, 234, 76, 173, 92, 163, 84, 82, 236, 140,
544                    48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 11, 5, 0, 48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3,
545                    30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116,
546                    0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0,
547                    115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 48, 30, 23, 13, 50, 50, 48, 53, 49, 55, 50,
548                    48, 50, 48, 53, 57, 90, 23, 13, 50, 50, 48, 53, 49, 55, 50, 49, 50, 53, 53, 57, 90, 48, 129, 151,
549                    49, 52, 48, 50, 6, 10, 9, 146, 38, 137, 147, 242, 44, 100, 1, 25, 22, 36, 52, 99, 53, 97, 53, 101,
550                    99, 49, 45, 57, 97, 99, 53, 45, 52, 54, 49, 50, 45, 57, 98, 52, 99, 45, 54, 98, 101, 100, 49, 55,
551                    56, 98, 98, 54, 53, 97, 49, 60, 48, 58, 6, 3, 85, 4, 3, 12, 51, 83, 45, 49, 45, 49, 50, 45, 49, 45,
552                    49, 53, 53, 50, 51, 56, 50, 57, 56, 45, 49, 51, 48, 51, 48, 53, 52, 50, 55, 52, 45, 50, 53, 48, 51,
553                    53, 49, 55, 51, 49, 51, 45, 51, 54, 52, 54, 56, 55, 56, 55, 54, 53, 49, 33, 48, 31, 6, 3, 85, 4, 3,
554                    12, 24, 109, 97, 109, 111, 114, 101, 97, 117, 64, 100, 111, 119, 110, 104, 105, 108, 108, 112, 114,
555                    111, 46, 120, 121, 122, 48, 130, 1, 34, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3,
556                    130, 1, 15, 0, 48, 130, 1, 10, 2, 130, 1, 1, 0, 194, 219, 35, 14, 127, 114, 121, 75, 42, 40, 170,
557                    236, 117, 106, 194, 196, 210, 255, 45, 9, 73, 94, 25, 168, 112, 152, 56, 139, 223, 248, 20, 133,
558                    255, 44, 102, 133, 240, 101, 221, 72, 127, 80, 230, 220, 137, 41, 199, 165, 66, 146, 235, 21, 59,
559                    219, 83, 181, 107, 163, 33, 225, 17, 18, 38, 232, 38, 163, 178, 191, 144, 202, 9, 145, 190, 252, 5,
560                    194, 130, 72, 63, 31, 19, 101, 67, 206, 134, 119, 194, 82, 119, 201, 110, 222, 198, 249, 254, 178,
561                    166, 33, 81, 18, 136, 206, 131, 26, 131, 52, 205, 68, 179, 202, 45, 189, 197, 67, 56, 113, 191,
562                    223, 174, 106, 56, 49, 29, 108, 182, 203, 94, 192, 127, 120, 204, 3, 152, 248, 24, 76, 86, 1, 193,
563                    242, 174, 173, 203, 238, 184, 231, 84, 211, 111, 212, 56, 84, 68, 175, 119, 167, 107, 161, 185,
564                    252, 229, 44, 127, 93, 207, 140, 170, 87, 23, 92, 30, 119, 233, 113, 255, 165, 146, 56, 219, 193,
565                    150, 120, 182, 209, 182, 204, 42, 195, 58, 205, 119, 221, 208, 164, 245, 44, 47, 113, 155, 70, 92,
566                    255, 251, 208, 239, 176, 67, 111, 84, 220, 146, 164, 21, 38, 233, 249, 73, 64, 255, 158, 67, 170,
567                    17, 172, 128, 244, 58, 234, 107, 198, 197, 228, 47, 109, 182, 34, 202, 162, 173, 13, 14, 227, 50,
568                    22, 164, 156, 246, 11, 199, 233, 235, 159, 67, 24, 157, 191, 2, 3, 1, 0, 1, 163, 121, 48, 119, 48,
569                    14, 6, 3, 85, 29, 15, 1, 1, 255, 4, 4, 3, 2, 5, 160, 48, 51, 6, 3, 85, 29, 17, 4, 44, 48, 42, 160,
570                    40, 6, 10, 43, 6, 1, 4, 1, 130, 55, 20, 2, 3, 160, 26, 12, 24, 109, 97, 109, 111, 114, 101, 97,
571                    117, 64, 100, 111, 119, 110, 104, 105, 108, 108, 112, 114, 111, 46, 120, 121, 122, 48, 19, 6, 3,
572                    85, 29, 37, 4, 12, 48, 10, 6, 8, 43, 6, 1, 5, 5, 7, 3, 2, 48, 27, 6, 9, 43, 6, 1, 4, 1, 130, 55,
573                    21, 10, 4, 14, 48, 12, 48, 10, 6, 8, 43, 6, 1, 5, 5, 7, 3, 2, 48, 13, 6, 9, 42, 134, 72, 134, 247,
574                    13, 1, 1, 11, 5, 0, 3, 130, 1, 1, 0, 52, 19, 83, 79, 242, 219, 247, 152, 173, 207, 131, 233, 36,
575                    186, 213, 25, 104, 89, 172, 106, 112, 21, 31, 25, 139, 186, 54, 131, 147, 126, 67, 185, 59, 165,
576                    22, 61, 147, 69, 118, 54, 212, 229, 232, 3, 126, 50, 47, 77, 180, 165, 8, 54, 246, 20, 89, 126, 35,
577                    253, 179, 73, 109, 45, 146, 74, 93, 64, 173, 178, 113, 103, 240, 177, 6, 97, 76, 171, 140, 27, 192,
578                    114, 120, 77, 24, 203, 203, 122, 219, 171, 132, 229, 111, 70, 63, 121, 17, 89, 172, 191, 204, 169,
579                    52, 16, 123, 41, 236, 116, 145, 236, 224, 25, 216, 62, 58, 195, 117, 105, 150, 46, 183, 197, 180,
580                    51, 165, 97, 11, 247, 243, 139, 18, 176, 65, 137, 203, 78, 51, 164, 138, 202, 142, 134, 80, 75, 95,
581                    139, 135, 86, 147, 108, 27, 126, 168, 174, 55, 197, 69, 92, 151, 206, 207, 73, 125, 101, 119, 99,
582                    130, 136, 18, 105, 77, 7, 28, 178, 113, 171, 58, 202, 173, 12, 124, 32, 63, 234, 131, 127, 88, 17,
583                    210, 29, 218, 175, 125, 34, 237, 219, 106, 207, 136, 126, 112, 70, 59, 229, 13, 23, 13, 243, 1, 5,
584                    255, 222, 59, 190, 227, 219, 157, 219, 211, 96, 170, 168, 82, 127, 41, 47, 239, 51, 249, 69, 151,
585                    69, 229, 9, 67, 243, 105, 206, 127, 3, 188, 159, 80, 19, 35, 156, 162, 196, 106, 47, 15, 109, 17,
586                    253, 117, 14, 126, 160, 49, 130, 1, 199, 48, 130, 1, 195, 2, 1, 1, 48, 97, 48, 77, 49, 75, 48, 73,
587                    6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122,
588                    0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0,
589                    101, 0, 115, 0, 115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 2, 16, 101, 97, 27, 230, 41,
590                    155, 188, 234, 76, 173, 92, 163, 84, 82, 236, 140, 48, 9, 6, 5, 43, 14, 3, 2, 26, 5, 0, 160, 61,
591                    48, 22, 6, 9, 42, 134, 72, 134, 247, 13, 1, 9, 3, 49, 9, 6, 7, 43, 6, 1, 5, 2, 3, 1, 48, 35, 6, 9,
592                    42, 134, 72, 134, 247, 13, 1, 9, 4, 49, 22, 4, 20, 102, 68, 227, 41, 95, 65, 130, 138, 235, 245,
593                    189, 250, 152, 141, 108, 239, 191, 39, 172, 175, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1,
594                    5, 0, 4, 130, 1, 0, 6, 97, 27, 199, 212, 1, 132, 104, 88, 138, 94, 98, 29, 14, 122, 189, 62, 172,
595                    78, 2, 208, 64, 141, 218, 173, 137, 36, 101, 172, 75, 136, 159, 133, 134, 37, 136, 127, 128, 177,
596                    114, 108, 138, 53, 41, 125, 213, 123, 231, 149, 112, 215, 248, 240, 15, 20, 141, 9, 63, 18, 80, 2,
597                    93, 126, 125, 229, 208, 142, 219, 196, 111, 110, 121, 50, 171, 57, 164, 95, 41, 181, 78, 215, 151,
598                    226, 247, 93, 60, 224, 85, 152, 93, 251, 78, 73, 67, 85, 143, 42, 44, 166, 162, 187, 135, 124, 27,
599                    55, 145, 134, 45, 75, 252, 22, 191, 193, 63, 30, 158, 83, 198, 188, 187, 220, 121, 40, 9, 223, 210,
600                    9, 69, 121, 182, 193, 153, 144, 169, 235, 7, 244, 38, 135, 155, 241, 140, 192, 226, 175, 163, 157,
601                    233, 65, 108, 215, 223, 232, 195, 159, 136, 194, 43, 247, 102, 143, 37, 56, 209, 56, 95, 55, 127,
602                    6, 253, 154, 29, 163, 53, 56, 152, 106, 138, 128, 47, 129, 19, 103, 170, 72, 208, 221, 95, 111, 26,
603                    123, 174, 85, 164, 85, 237, 168, 190, 145, 129, 213, 212, 110, 143, 199, 57, 35, 78, 12, 134, 159,
604                    94, 82, 191, 241, 132, 31, 112, 46, 40, 225, 103, 146, 254, 108, 56, 160, 208, 176, 166, 214, 161,
605                    1, 143, 105, 169, 183, 149, 222, 225, 246, 119, 193, 223, 54, 175, 234, 92, 143, 197, 93, 158, 242,
606                    226, 254, 27
607                ])),
608                trusted_certifiers: Optional::from(None),
609                kdc_pk_id: Optional::from(None),
610            },
611            pa_pk_as_req
612        );
613    }
614
615    #[test]
616    fn pa_pk_as_rep_encode_enc_key_pack() {
617        let pa_pk_as_rep = PaPkAsRep::EncKeyPack(ImplicitContextTag1::from(OctetStringAsn1::from(vec![
618            94, 82, 191, 241, 132, 31, 112, 46, 40, 225, 103, 146, 254, 108, 56, 160, 208, 176, 166, 214, 161,
619        ])));
620
621        let encoded = picky_asn1_der::to_vec(&pa_pk_as_rep).unwrap();
622
623        assert_eq!(
624            &[
625                129, 21, 94, 82, 191, 241, 132, 31, 112, 46, 40, 225, 103, 146, 254, 108, 56, 160, 208, 176, 166, 214,
626                161
627            ],
628            encoded.as_slice()
629        );
630    }
631
632    #[test]
633    fn pa_pk_as_rep_encode_dh_info() {
634        let pa_pk_as_rep = PaPkAsRep::DhInfo(ExplicitContextTag0::from(DhRepInfo {
635            dh_signed_data: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
636                221, 28, 174, 247, 196, 69, 212, 187, 37, 162, 198, 33, 238, 127, 68, 191, 239, 233, 46, 240, 67, 151,
637                40, 76, 232, 41, 137, 233, 117, 199, 11, 95, 201, 123, 246, 188, 44, 122, 105, 175, 179, 204, 127, 221,
638                57, 190, 66,
639            ])),
640            server_dh_nonce: Optional::from(Some(ExplicitContextTag1::from(OctetStringAsn1::from(vec![
641                197, 87, 1, 68, 61, 12, 232, 203, 120, 225, 215, 208, 224, 194, 49,
642            ])))),
643        }));
644
645        let encoded = picky_asn1_der::to_vec(&pa_pk_as_rep).unwrap();
646
647        assert_eq!(
648            &[
649                160, 70, 48, 68, 128, 47, 221, 28, 174, 247, 196, 69, 212, 187, 37, 162, 198, 33, 238, 127, 68, 191,
650                239, 233, 46, 240, 67, 151, 40, 76, 232, 41, 137, 233, 117, 199, 11, 95, 201, 123, 246, 188, 44, 122,
651                105, 175, 179, 204, 127, 221, 57, 190, 66, 161, 17, 4, 15, 197, 87, 1, 68, 61, 12, 232, 203, 120, 225,
652                215, 208, 224, 194, 49
653            ],
654            encoded.as_slice()
655        );
656    }
657
658    #[test]
659    fn pa_pk_as_rep_decode_enc_key_pack() {
660        let raw_data = [
661            129, 21, 94, 82, 191, 241, 132, 31, 112, 46, 40, 225, 103, 146, 254, 108, 56, 160, 208, 176, 166, 214, 161,
662        ];
663
664        let pa_pk_as_rep: PaPkAsRep = picky_asn1_der::from_bytes(&raw_data).unwrap();
665
666        assert_eq!(
667            PaPkAsRep::EncKeyPack(ImplicitContextTag1::from(OctetStringAsn1::from(vec![
668                94, 82, 191, 241, 132, 31, 112, 46, 40, 225, 103, 146, 254, 108, 56, 160, 208, 176, 166, 214, 161,
669            ]))),
670            pa_pk_as_rep
671        );
672    }
673
674    #[test]
675    fn pa_pk_as_rep_decode_dh_info() {
676        let raw_data = [
677            160, 130, 6, 103, 48, 130, 6, 99, 128, 130, 6, 59, 48, 130, 6, 55, 2, 1, 3, 49, 11, 48, 9, 6, 5, 43, 14, 3,
678            2, 26, 5, 0, 48, 129, 162, 6, 7, 43, 6, 1, 5, 2, 3, 2, 160, 129, 150, 4, 129, 147, 48, 129, 144, 160, 129,
679            136, 3, 129, 133, 0, 2, 129, 129, 0, 218, 76, 235, 63, 222, 122, 67, 6, 210, 4, 219, 144, 10, 253, 105,
680            197, 87, 1, 68, 61, 12, 232, 203, 120, 225, 215, 208, 224, 194, 49, 162, 89, 251, 216, 82, 14, 92, 119,
681            236, 147, 132, 225, 80, 117, 104, 218, 221, 117, 104, 149, 33, 9, 225, 159, 16, 243, 57, 44, 147, 221, 164,
682            8, 131, 5, 43, 219, 70, 8, 7, 60, 118, 39, 124, 30, 48, 205, 41, 150, 112, 133, 151, 136, 121, 91, 56, 12,
683            251, 210, 239, 155, 85, 63, 244, 177, 112, 133, 181, 245, 110, 164, 31, 197, 241, 14, 137, 195, 223, 226,
684            23, 158, 68, 27, 66, 118, 200, 170, 122, 33, 156, 104, 103, 155, 136, 28, 247, 8, 54, 20, 161, 3, 2, 1, 0,
685            160, 130, 3, 179, 48, 130, 3, 175, 48, 130, 2, 151, 160, 3, 2, 1, 2, 2, 16, 85, 47, 30, 63, 139, 118, 224,
686            166, 140, 108, 227, 232, 117, 255, 59, 249, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 11, 5, 0, 48,
687            77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0,
688            105, 0, 122, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99,
689            0, 101, 0, 115, 0, 115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 48, 30, 23, 13, 50, 50, 48, 53,
690            49, 55, 49, 57, 50, 52, 48, 54, 90, 23, 13, 50, 50, 48, 53, 49, 56, 49, 57, 50, 57, 48, 54, 90, 48, 101,
691            49, 52, 48, 50, 6, 10, 9, 146, 38, 137, 147, 242, 44, 100, 1, 25, 22, 36, 52, 99, 53, 97, 53, 101, 99, 49,
692            45, 57, 97, 99, 53, 45, 52, 54, 49, 50, 45, 57, 98, 52, 99, 45, 54, 98, 101, 100, 49, 55, 56, 98, 98, 54,
693            53, 97, 49, 45, 48, 43, 6, 3, 85, 4, 3, 12, 36, 99, 99, 51, 100, 57, 54, 98, 52, 45, 48, 97, 48, 100, 45,
694            52, 97, 53, 100, 45, 56, 98, 102, 98, 45, 56, 100, 54, 101, 97, 56, 100, 57, 53, 53, 100, 50, 48, 130, 1,
695            34, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 130, 1, 15, 0, 48, 130, 1, 10, 2, 130, 1, 1,
696            0, 199, 77, 166, 39, 80, 222, 84, 115, 41, 66, 75, 180, 150, 219, 181, 13, 3, 102, 176, 46, 8, 194, 243,
697            198, 233, 126, 112, 105, 214, 207, 85, 254, 186, 228, 217, 23, 28, 232, 31, 209, 227, 99, 220, 60, 28, 78,
698            168, 51, 162, 48, 63, 120, 240, 186, 203, 224, 154, 164, 227, 78, 224, 4, 120, 160, 170, 134, 185, 124,
699            156, 51, 235, 206, 20, 62, 191, 51, 182, 195, 7, 184, 139, 80, 198, 103, 40, 37, 155, 219, 95, 56, 162,
700            242, 152, 249, 204, 236, 191, 67, 64, 180, 223, 13, 207, 32, 242, 203, 172, 126, 77, 90, 197, 6, 32, 162,
701            179, 253, 86, 158, 233, 147, 176, 44, 132, 150, 128, 103, 128, 157, 185, 157, 131, 50, 142, 248, 67, 68,
702            217, 122, 154, 103, 143, 101, 207, 136, 219, 79, 226, 0, 159, 117, 200, 43, 80, 95, 163, 247, 218, 117, 69,
703            248, 88, 64, 5, 181, 63, 109, 247, 80, 141, 174, 38, 220, 64, 250, 3, 82, 187, 52, 243, 151, 141, 237, 115,
704            115, 17, 199, 29, 213, 4, 197, 242, 40, 177, 141, 170, 241, 173, 179, 212, 100, 73, 102, 21, 255, 74, 213,
705            158, 11, 241, 110, 82, 139, 142, 209, 118, 197, 15, 240, 243, 50, 39, 23, 243, 172, 152, 170, 75, 97, 102,
706            169, 23, 245, 147, 180, 29, 22, 58, 3, 100, 35, 6, 98, 92, 164, 55, 39, 81, 87, 58, 25, 22, 31, 234, 173,
707            200, 213, 2, 3, 1, 0, 1, 163, 115, 48, 113, 48, 14, 6, 3, 85, 29, 15, 1, 1, 255, 4, 4, 3, 2, 5, 160, 48,
708            45, 6, 3, 85, 29, 17, 4, 38, 48, 36, 130, 11, 65, 90, 82, 68, 79, 87, 78, 45, 87, 49, 48, 130, 11, 65, 90,
709            82, 68, 79, 87, 78, 45, 87, 49, 48, 130, 8, 49, 48, 46, 49, 46, 48, 46, 52, 48, 19, 6, 3, 85, 29, 37, 4,
710            12, 48, 10, 6, 8, 43, 6, 1, 5, 5, 7, 3, 1, 48, 27, 6, 9, 43, 6, 1, 4, 1, 130, 55, 21, 10, 4, 14, 48, 12,
711            48, 10, 6, 8, 43, 6, 1, 5, 5, 7, 3, 1, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 11, 5, 0, 3, 130, 1,
712            1, 0, 124, 211, 121, 241, 39, 108, 96, 140, 158, 149, 109, 212, 59, 78, 203, 168, 204, 137, 19, 171, 77,
713            67, 61, 166, 94, 122, 197, 145, 118, 157, 192, 156, 113, 249, 60, 110, 33, 188, 169, 75, 137, 57, 64, 130,
714            5, 128, 58, 248, 87, 211, 139, 50, 157, 138, 176, 226, 159, 239, 15, 103, 84, 126, 26, 147, 246, 82, 12,
715            80, 56, 61, 192, 231, 75, 104, 125, 95, 59, 52, 28, 236, 7, 195, 239, 242, 49, 105, 113, 168, 210, 102,
716            192, 207, 212, 185, 185, 100, 137, 250, 219, 180, 75, 84, 139, 15, 115, 187, 165, 170, 227, 48, 245, 58,
717            91, 137, 220, 197, 161, 180, 99, 195, 82, 92, 119, 170, 199, 3, 161, 221, 211, 177, 124, 92, 195, 92, 210,
718            165, 117, 41, 98, 234, 175, 123, 44, 252, 230, 121, 151, 208, 210, 165, 67, 150, 152, 200, 243, 21, 85,
719            209, 223, 217, 73, 243, 38, 166, 60, 3, 6, 140, 26, 170, 243, 114, 205, 210, 117, 111, 235, 38, 42, 43,
720            217, 170, 118, 150, 180, 38, 218, 39, 198, 156, 157, 182, 223, 198, 200, 13, 255, 101, 56, 124, 126, 126,
721            10, 255, 166, 203, 26, 251, 140, 248, 229, 41, 19, 94, 135, 210, 18, 185, 30, 55, 23, 195, 54, 88, 140,
722            174, 87, 65, 250, 143, 243, 163, 172, 142, 207, 190, 111, 113, 157, 204, 246, 0, 119, 11, 253, 208, 155,
723            101, 40, 217, 188, 10, 14, 89, 120, 146, 49, 130, 1, 199, 48, 130, 1, 195, 2, 1, 1, 48, 97, 48, 77, 49, 75,
724            48, 73, 6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122,
725            0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0,
726            115, 0, 115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 2, 16, 85, 47, 30, 63, 139, 118, 224, 166,
727            140, 108, 227, 232, 117, 255, 59, 249, 48, 9, 6, 5, 43, 14, 3, 2, 26, 5, 0, 160, 61, 48, 22, 6, 9, 42, 134,
728            72, 134, 247, 13, 1, 9, 3, 49, 9, 6, 7, 43, 6, 1, 5, 2, 3, 2, 48, 35, 6, 9, 42, 134, 72, 134, 247, 13, 1,
729            9, 4, 49, 22, 4, 20, 207, 84, 215, 76, 61, 237, 27, 245, 186, 203, 116, 211, 41, 149, 95, 129, 147, 149,
730            136, 166, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 1, 0, 111, 17, 1, 8, 116, 231,
731            197, 34, 227, 186, 92, 57, 120, 101, 232, 20, 207, 52, 39, 202, 112, 40, 194, 203, 86, 55, 75, 186, 92, 52,
732            55, 244, 26, 119, 58, 46, 200, 251, 185, 76, 244, 242, 18, 149, 207, 17, 126, 4, 41, 216, 89, 14, 137, 100,
733            190, 70, 0, 183, 138, 152, 26, 56, 162, 219, 146, 159, 128, 68, 195, 190, 195, 32, 2, 64, 118, 220, 182,
734            183, 218, 219, 145, 62, 246, 216, 214, 182, 244, 251, 97, 78, 232, 123, 167, 187, 154, 212, 10, 222, 244,
735            232, 249, 194, 202, 26, 149, 174, 109, 15, 218, 247, 45, 209, 232, 92, 5, 87, 249, 192, 249, 91, 240, 160,
736            7, 202, 196, 8, 161, 2, 41, 10, 242, 107, 43, 100, 45, 5, 75, 49, 222, 172, 249, 252, 196, 68, 71, 250,
737            195, 11, 185, 161, 184, 39, 65, 22, 44, 78, 245, 132, 193, 63, 231, 94, 113, 116, 125, 210, 243, 106, 48,
738            201, 50, 14, 177, 43, 168, 94, 39, 44, 221, 97, 60, 94, 230, 117, 248, 57, 143, 88, 117, 139, 75, 113, 97,
739            48, 39, 13, 168, 2, 247, 89, 110, 216, 96, 161, 47, 183, 168, 204, 145, 221, 28, 174, 247, 196, 69, 212,
740            187, 37, 162, 198, 33, 238, 127, 68, 191, 239, 233, 46, 240, 67, 151, 40, 76, 232, 41, 137, 233, 117, 199,
741            11, 95, 201, 123, 246, 188, 44, 122, 105, 175, 179, 204, 127, 221, 57, 190, 66, 161, 34, 4, 32, 160, 135,
742            139, 83, 106, 40, 32, 75, 125, 12, 23, 191, 191, 163, 215, 162, 217, 132, 196, 80, 212, 102, 88, 251, 252,
743            135, 151, 137, 121, 58, 199, 71,
744        ];
745
746        let pa_pk_as_rep: PaPkAsRep = picky_asn1_der::from_bytes(&raw_data).unwrap();
747
748        assert_eq!(
749            PaPkAsRep::DhInfo(ExplicitContextTag0::from(DhRepInfo {
750                dh_signed_data: ImplicitContextTag0::from(OctetStringAsn1::from(vec![
751                    48, 130, 6, 55, 2, 1, 3, 49, 11, 48, 9, 6, 5, 43, 14, 3, 2, 26, 5, 0, 48, 129, 162, 6, 7, 43, 6, 1,
752                    5, 2, 3, 2, 160, 129, 150, 4, 129, 147, 48, 129, 144, 160, 129, 136, 3, 129, 133, 0, 2, 129, 129,
753                    0, 218, 76, 235, 63, 222, 122, 67, 6, 210, 4, 219, 144, 10, 253, 105, 197, 87, 1, 68, 61, 12, 232,
754                    203, 120, 225, 215, 208, 224, 194, 49, 162, 89, 251, 216, 82, 14, 92, 119, 236, 147, 132, 225, 80,
755                    117, 104, 218, 221, 117, 104, 149, 33, 9, 225, 159, 16, 243, 57, 44, 147, 221, 164, 8, 131, 5, 43,
756                    219, 70, 8, 7, 60, 118, 39, 124, 30, 48, 205, 41, 150, 112, 133, 151, 136, 121, 91, 56, 12, 251,
757                    210, 239, 155, 85, 63, 244, 177, 112, 133, 181, 245, 110, 164, 31, 197, 241, 14, 137, 195, 223,
758                    226, 23, 158, 68, 27, 66, 118, 200, 170, 122, 33, 156, 104, 103, 155, 136, 28, 247, 8, 54, 20, 161,
759                    3, 2, 1, 0, 160, 130, 3, 179, 48, 130, 3, 175, 48, 130, 2, 151, 160, 3, 2, 1, 2, 2, 16, 85, 47, 30,
760                    63, 139, 118, 224, 166, 140, 108, 227, 232, 117, 255, 59, 249, 48, 13, 6, 9, 42, 134, 72, 134, 247,
761                    13, 1, 1, 11, 5, 0, 48, 77, 49, 75, 48, 73, 6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0,
762                    114, 0, 103, 0, 97, 0, 110, 0, 105, 0, 122, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0,
763                    50, 0, 80, 0, 45, 0, 65, 0, 99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50,
764                    0, 49, 0, 93, 48, 30, 23, 13, 50, 50, 48, 53, 49, 55, 49, 57, 50, 52, 48, 54, 90, 23, 13, 50, 50,
765                    48, 53, 49, 56, 49, 57, 50, 57, 48, 54, 90, 48, 101, 49, 52, 48, 50, 6, 10, 9, 146, 38, 137, 147,
766                    242, 44, 100, 1, 25, 22, 36, 52, 99, 53, 97, 53, 101, 99, 49, 45, 57, 97, 99, 53, 45, 52, 54, 49,
767                    50, 45, 57, 98, 52, 99, 45, 54, 98, 101, 100, 49, 55, 56, 98, 98, 54, 53, 97, 49, 45, 48, 43, 6, 3,
768                    85, 4, 3, 12, 36, 99, 99, 51, 100, 57, 54, 98, 52, 45, 48, 97, 48, 100, 45, 52, 97, 53, 100, 45,
769                    56, 98, 102, 98, 45, 56, 100, 54, 101, 97, 56, 100, 57, 53, 53, 100, 50, 48, 130, 1, 34, 48, 13, 6,
770                    9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 130, 1, 15, 0, 48, 130, 1, 10, 2, 130, 1, 1, 0,
771                    199, 77, 166, 39, 80, 222, 84, 115, 41, 66, 75, 180, 150, 219, 181, 13, 3, 102, 176, 46, 8, 194,
772                    243, 198, 233, 126, 112, 105, 214, 207, 85, 254, 186, 228, 217, 23, 28, 232, 31, 209, 227, 99, 220,
773                    60, 28, 78, 168, 51, 162, 48, 63, 120, 240, 186, 203, 224, 154, 164, 227, 78, 224, 4, 120, 160,
774                    170, 134, 185, 124, 156, 51, 235, 206, 20, 62, 191, 51, 182, 195, 7, 184, 139, 80, 198, 103, 40,
775                    37, 155, 219, 95, 56, 162, 242, 152, 249, 204, 236, 191, 67, 64, 180, 223, 13, 207, 32, 242, 203,
776                    172, 126, 77, 90, 197, 6, 32, 162, 179, 253, 86, 158, 233, 147, 176, 44, 132, 150, 128, 103, 128,
777                    157, 185, 157, 131, 50, 142, 248, 67, 68, 217, 122, 154, 103, 143, 101, 207, 136, 219, 79, 226, 0,
778                    159, 117, 200, 43, 80, 95, 163, 247, 218, 117, 69, 248, 88, 64, 5, 181, 63, 109, 247, 80, 141, 174,
779                    38, 220, 64, 250, 3, 82, 187, 52, 243, 151, 141, 237, 115, 115, 17, 199, 29, 213, 4, 197, 242, 40,
780                    177, 141, 170, 241, 173, 179, 212, 100, 73, 102, 21, 255, 74, 213, 158, 11, 241, 110, 82, 139, 142,
781                    209, 118, 197, 15, 240, 243, 50, 39, 23, 243, 172, 152, 170, 75, 97, 102, 169, 23, 245, 147, 180,
782                    29, 22, 58, 3, 100, 35, 6, 98, 92, 164, 55, 39, 81, 87, 58, 25, 22, 31, 234, 173, 200, 213, 2, 3,
783                    1, 0, 1, 163, 115, 48, 113, 48, 14, 6, 3, 85, 29, 15, 1, 1, 255, 4, 4, 3, 2, 5, 160, 48, 45, 6, 3,
784                    85, 29, 17, 4, 38, 48, 36, 130, 11, 65, 90, 82, 68, 79, 87, 78, 45, 87, 49, 48, 130, 11, 65, 90,
785                    82, 68, 79, 87, 78, 45, 87, 49, 48, 130, 8, 49, 48, 46, 49, 46, 48, 46, 52, 48, 19, 6, 3, 85, 29,
786                    37, 4, 12, 48, 10, 6, 8, 43, 6, 1, 5, 5, 7, 3, 1, 48, 27, 6, 9, 43, 6, 1, 4, 1, 130, 55, 21, 10, 4,
787                    14, 48, 12, 48, 10, 6, 8, 43, 6, 1, 5, 5, 7, 3, 1, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1,
788                    11, 5, 0, 3, 130, 1, 1, 0, 124, 211, 121, 241, 39, 108, 96, 140, 158, 149, 109, 212, 59, 78, 203,
789                    168, 204, 137, 19, 171, 77, 67, 61, 166, 94, 122, 197, 145, 118, 157, 192, 156, 113, 249, 60, 110,
790                    33, 188, 169, 75, 137, 57, 64, 130, 5, 128, 58, 248, 87, 211, 139, 50, 157, 138, 176, 226, 159,
791                    239, 15, 103, 84, 126, 26, 147, 246, 82, 12, 80, 56, 61, 192, 231, 75, 104, 125, 95, 59, 52, 28,
792                    236, 7, 195, 239, 242, 49, 105, 113, 168, 210, 102, 192, 207, 212, 185, 185, 100, 137, 250, 219,
793                    180, 75, 84, 139, 15, 115, 187, 165, 170, 227, 48, 245, 58, 91, 137, 220, 197, 161, 180, 99, 195,
794                    82, 92, 119, 170, 199, 3, 161, 221, 211, 177, 124, 92, 195, 92, 210, 165, 117, 41, 98, 234, 175,
795                    123, 44, 252, 230, 121, 151, 208, 210, 165, 67, 150, 152, 200, 243, 21, 85, 209, 223, 217, 73, 243,
796                    38, 166, 60, 3, 6, 140, 26, 170, 243, 114, 205, 210, 117, 111, 235, 38, 42, 43, 217, 170, 118, 150,
797                    180, 38, 218, 39, 198, 156, 157, 182, 223, 198, 200, 13, 255, 101, 56, 124, 126, 126, 10, 255, 166,
798                    203, 26, 251, 140, 248, 229, 41, 19, 94, 135, 210, 18, 185, 30, 55, 23, 195, 54, 88, 140, 174, 87,
799                    65, 250, 143, 243, 163, 172, 142, 207, 190, 111, 113, 157, 204, 246, 0, 119, 11, 253, 208, 155,
800                    101, 40, 217, 188, 10, 14, 89, 120, 146, 49, 130, 1, 199, 48, 130, 1, 195, 2, 1, 1, 48, 97, 48, 77,
801                    49, 75, 48, 73, 6, 3, 85, 4, 3, 30, 66, 0, 77, 0, 83, 0, 45, 0, 79, 0, 114, 0, 103, 0, 97, 0, 110,
802                    0, 105, 0, 122, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 80, 0, 50, 0, 80, 0, 45, 0, 65, 0,
803                    99, 0, 99, 0, 101, 0, 115, 0, 115, 0, 32, 0, 91, 0, 50, 0, 48, 0, 50, 0, 49, 0, 93, 2, 16, 85, 47,
804                    30, 63, 139, 118, 224, 166, 140, 108, 227, 232, 117, 255, 59, 249, 48, 9, 6, 5, 43, 14, 3, 2, 26,
805                    5, 0, 160, 61, 48, 22, 6, 9, 42, 134, 72, 134, 247, 13, 1, 9, 3, 49, 9, 6, 7, 43, 6, 1, 5, 2, 3, 2,
806                    48, 35, 6, 9, 42, 134, 72, 134, 247, 13, 1, 9, 4, 49, 22, 4, 20, 207, 84, 215, 76, 61, 237, 27,
807                    245, 186, 203, 116, 211, 41, 149, 95, 129, 147, 149, 136, 166, 48, 13, 6, 9, 42, 134, 72, 134, 247,
808                    13, 1, 1, 1, 5, 0, 4, 130, 1, 0, 111, 17, 1, 8, 116, 231, 197, 34, 227, 186, 92, 57, 120, 101, 232,
809                    20, 207, 52, 39, 202, 112, 40, 194, 203, 86, 55, 75, 186, 92, 52, 55, 244, 26, 119, 58, 46, 200,
810                    251, 185, 76, 244, 242, 18, 149, 207, 17, 126, 4, 41, 216, 89, 14, 137, 100, 190, 70, 0, 183, 138,
811                    152, 26, 56, 162, 219, 146, 159, 128, 68, 195, 190, 195, 32, 2, 64, 118, 220, 182, 183, 218, 219,
812                    145, 62, 246, 216, 214, 182, 244, 251, 97, 78, 232, 123, 167, 187, 154, 212, 10, 222, 244, 232,
813                    249, 194, 202, 26, 149, 174, 109, 15, 218, 247, 45, 209, 232, 92, 5, 87, 249, 192, 249, 91, 240,
814                    160, 7, 202, 196, 8, 161, 2, 41, 10, 242, 107, 43, 100, 45, 5, 75, 49, 222, 172, 249, 252, 196, 68,
815                    71, 250, 195, 11, 185, 161, 184, 39, 65, 22, 44, 78, 245, 132, 193, 63, 231, 94, 113, 116, 125,
816                    210, 243, 106, 48, 201, 50, 14, 177, 43, 168, 94, 39, 44, 221, 97, 60, 94, 230, 117, 248, 57, 143,
817                    88, 117, 139, 75, 113, 97, 48, 39, 13, 168, 2, 247, 89, 110, 216, 96, 161, 47, 183, 168, 204, 145,
818                    221, 28, 174, 247, 196, 69, 212, 187, 37, 162, 198, 33, 238, 127, 68, 191, 239, 233, 46, 240, 67,
819                    151, 40, 76, 232, 41, 137, 233, 117, 199, 11, 95, 201, 123, 246, 188, 44, 122, 105, 175, 179, 204,
820                    127, 221, 57, 190, 66
821                ])),
822                server_dh_nonce: Optional::from(Some(ExplicitContextTag1::from(OctetStringAsn1::from(vec![
823                    160, 135, 139, 83, 106, 40, 32, 75, 125, 12, 23, 191, 191, 163, 215, 162, 217, 132, 196, 80, 212,
824                    102, 88, 251, 252, 135, 151, 137, 121, 58, 199, 71
825                ]))))
826            })),
827            pa_pk_as_rep
828        );
829    }
830}