diff --git a/x509/src/crl.rs b/x509/src/crl.rs new file mode 100644 index 000000000..bc2538ac1 --- /dev/null +++ b/x509/src/crl.rs @@ -0,0 +1,86 @@ +//! Certificate Revocation List types + +use crate::ext::Extensions; +use crate::name::Name; +use crate::time::Time; +use crate::Version; + +use alloc::vec::Vec; + +use der::asn1::{BitString, UIntBytes}; +use der::Sequence; +use spki::AlgorithmIdentifier; + +/// `CertificateList` as defined in [RFC 5280 Section 5.1]. +/// +///```text +/// CertificateList ::= SEQUENCE { +/// tbsCertList TBSCertList, +/// signatureAlgorithm AlgorithmIdentifier, +/// signatureValue BIT STRING +/// } +/// ``` +/// +/// [RFC 5280 Section 5.1]: https://datatracker.ietf.org/doc/html/rfc5280#section-5.1 +#[derive(Clone, Debug, Eq, PartialEq, Sequence)] +#[allow(missing_docs)] +pub struct CertificateList<'a> { + pub tbs_cert_list: TbsCertList<'a>, + pub signature_algorithm: AlgorithmIdentifier<'a>, + pub signature: BitString<'a>, +} + +/// Implicit intermediate structure from the ASN.1 definition of `TBSCertList`. +/// +/// This type is used for the `revoked_certificates` field of `TbsCertList`. +/// See [RFC 5280 Section 5.1]. +/// +///```text +/// RevokedCert ::= SEQUENCE { +/// userCertificate CertificateSerialNumber, +/// revocationDate Time, +/// crlEntryExtensions Extensions OPTIONAL +/// } +/// ``` +/// +/// [RFC 5280 Section 5.1]: https://datatracker.ietf.org/doc/html/rfc5280#section-5.1 +#[derive(Clone, Debug, Eq, PartialEq, Sequence)] +#[allow(missing_docs)] +pub struct RevokedCert<'a> { + pub serial_number: UIntBytes<'a>, + pub revocation_date: Time, + pub crl_entry_extensions: Option>, +} + +/// `TbsCertList` as defined in [RFC 5280 Section 5.1]. +/// +/// ```text +/// TBSCertList ::= SEQUENCE { +/// version Version OPTIONAL, -- if present, MUST be v2 +/// signature AlgorithmIdentifier, +/// issuer Name, +/// thisUpdate Time, +/// nextUpdate Time OPTIONAL, +/// revokedCertificates SEQUENCE OF SEQUENCE { +/// userCertificate CertificateSerialNumber, +/// revocationDate Time, +/// crlEntryExtensions Extensions OPTIONAL -- if present, version MUST be v2 +/// } OPTIONAL, +/// crlExtensions [0] EXPLICIT Extensions OPTIONAL -- if present, version MUST be v2 +/// } +/// ``` +/// +/// [RFC 5280 Section 5.1]: https://datatracker.ietf.org/doc/html/rfc5280#section-5.1 +#[derive(Clone, Debug, Eq, PartialEq, Sequence)] +#[allow(missing_docs)] +pub struct TbsCertList<'a> { + pub version: Version, + pub signature: AlgorithmIdentifier<'a>, + pub issuer: Name<'a>, + pub this_update: Time, + pub next_update: Option