1 use super::name::GeneralName;
2 
3 use alloc::vec::Vec;
4 
5 use const_oid::{
6     db::rfc5280::{ID_PE_AUTHORITY_INFO_ACCESS, ID_PE_SUBJECT_INFO_ACCESS},
7     AssociatedOid,
8 };
9 use der::{asn1::ObjectIdentifier, Sequence, ValueOrd};
10 
11 /// AuthorityInfoAccessSyntax as defined in [RFC 5280 Section 4.2.2.1].
12 ///
13 /// ```text
14 /// AuthorityInfoAccessSyntax ::= SEQUENCE SIZE (1..MAX) OF AccessDescription
15 /// ```
16 ///
17 /// [RFC 5280 Section 4.2.2.1]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.2.1
18 #[derive(Clone, Debug, Default, PartialEq, Eq)]
19 pub struct AuthorityInfoAccessSyntax(pub Vec<AccessDescription>);
20 
21 impl AssociatedOid for AuthorityInfoAccessSyntax {
22     const OID: ObjectIdentifier = ID_PE_AUTHORITY_INFO_ACCESS;
23 }
24 
25 impl_newtype!(AuthorityInfoAccessSyntax, Vec<AccessDescription>);
26 impl_extension!(AuthorityInfoAccessSyntax, critical = false);
27 
28 /// SubjectInfoAccessSyntax as defined in [RFC 5280 Section 4.2.2.2].
29 ///
30 /// ```text
31 /// SubjectInfoAccessSyntax ::= SEQUENCE SIZE (1..MAX) OF AccessDescription
32 /// ```
33 ///
34 /// [RFC 5280 Section 4.2.2.2]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.2.2
35 #[derive(Clone, Debug, Default, PartialEq, Eq)]
36 pub struct SubjectInfoAccessSyntax(pub Vec<AccessDescription>);
37 
38 impl AssociatedOid for SubjectInfoAccessSyntax {
39     const OID: ObjectIdentifier = ID_PE_SUBJECT_INFO_ACCESS;
40 }
41 
42 impl_newtype!(SubjectInfoAccessSyntax, Vec<AccessDescription>);
43 impl_extension!(SubjectInfoAccessSyntax, critical = false);
44 
45 /// AccessDescription as defined in [RFC 5280 Section 4.2.2.1].
46 ///
47 /// ```text
48 /// AccessDescription  ::=  SEQUENCE {
49 ///     accessMethod          OBJECT IDENTIFIER,
50 ///     accessLocation        GeneralName
51 /// }
52 /// ```
53 ///
54 /// [RFC 5280 Section 4.2.2.1]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.2.1
55 #[derive(Clone, Debug, Eq, PartialEq, Sequence, ValueOrd)]
56 #[allow(missing_docs)]
57 pub struct AccessDescription {
58     pub access_method: ObjectIdentifier,
59     pub access_location: GeneralName,
60 }
61