x509_cert/ext/pkix/
access.rs

1use super::name::GeneralName;
2
3use alloc::vec::Vec;
4
5use const_oid::{
6    db::rfc5280::{ID_PE_AUTHORITY_INFO_ACCESS, ID_PE_SUBJECT_INFO_ACCESS},
7    AssociatedOid,
8};
9use 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)]
19pub struct AuthorityInfoAccessSyntax(pub Vec<AccessDescription>);
20
21impl AssociatedOid for AuthorityInfoAccessSyntax {
22    const OID: ObjectIdentifier = ID_PE_AUTHORITY_INFO_ACCESS;
23}
24
25impl_newtype!(AuthorityInfoAccessSyntax, Vec<AccessDescription>);
26impl_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)]
36pub struct SubjectInfoAccessSyntax(pub Vec<AccessDescription>);
37
38impl AssociatedOid for SubjectInfoAccessSyntax {
39    const OID: ObjectIdentifier = ID_PE_SUBJECT_INFO_ACCESS;
40}
41
42impl_newtype!(SubjectInfoAccessSyntax, Vec<AccessDescription>);
43impl_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)]
57pub struct AccessDescription {
58    pub access_method: ObjectIdentifier,
59    pub access_location: GeneralName,
60}