Skip to content

x509-cert: add a CRL builder#1759

Merged
baloo merged 2 commits into
RustCrypto:masterfrom
baloo:baloo/crl-builder
May 6, 2025
Merged

x509-cert: add a CRL builder#1759
baloo merged 2 commits into
RustCrypto:masterfrom
baloo:baloo/crl-builder

Conversation

@baloo

@baloo baloo commented Apr 13, 2025

Copy link
Copy Markdown
Member

This adds a builder interface for CRLs.

This would accept an iterator for the certificates to be revoked.

    let builder = CrlBuilder::new(&ca_certificate, crl_number)?
        .with_certificates(
            vec![
                RevokedCert {
                    serial_number: serial_number1,
                    revocation_date: Time::now()?,
                    crl_entry_extensions: None,
                },
                RevokedCert {
                    serial_number: serial_number2,
                    revocation_date: Time::now()?,
                    crl_entry_extensions: None,
                },
            ]
            .into_iter(),
        );

    let crl = builder.build(&signer)?;

@baloo baloo force-pushed the baloo/crl-builder branch 15 times, most recently from de5d087 to 6577068 Compare April 20, 2025 18:36
@baloo baloo force-pushed the baloo/crl-builder branch from 6577068 to fc825d3 Compare May 5, 2025 05:16
@baloo baloo marked this pull request as ready for review May 5, 2025 05:17
@baloo baloo force-pushed the baloo/crl-builder branch from fc825d3 to 5e294ca Compare May 5, 2025 05:23
@baloo baloo marked this pull request as draft May 5, 2025 15:04
@baloo baloo force-pushed the baloo/crl-builder branch from 5e294ca to 2353f2e Compare May 6, 2025 03:04
@baloo baloo marked this pull request as ready for review May 6, 2025 03:04
@baloo baloo merged commit e7e4b54 into RustCrypto:master May 6, 2025
@baloo baloo deleted the baloo/crl-builder branch May 6, 2025 21:22
baloo added a commit to baloo/formats that referenced this pull request Jul 6, 2026
Added

- Serial number generator ([RustCrypto#1270])
- `DecodeValue` for `x509_cert::time::Time` ([RustCrypto#1986])
- `FromStr` for `x509_cert::time::Time` ([RustCrypto#1961])
- impl `Hash` for `Name` ([RustCrypto#1764])
- impl `Ord` for `CrlReason` ([RustCrypto#1869])
- `DirectoryString::BmpString` ([RustCrypto#1794])
- `Crl` builder ([RustCrypto#1759])
- `Time::now` method ([RustCrypto#1761])
- `Validity::infinity` helper ([RustCrypto#1528])
- `Validity::new` method ([RustCrypto#1529])
- Re-export `spki` types without `*Owned` suffixes ([RustCrypto#1534])
- `x509_cert::builder::AsyncBuilder` using `AsyncSigner` ([RustCrypto#1280])

Changed

- Decompose `AsExtension` into `Criticality + AsExtension` ([RustCrypto#2109])
- Improve extension API flexibility and ergonomics ([RustCrypto#2120])
- Expose `Profile` in the `CrlBuilder` ([RustCrypto#1870])
- Ensure a serial number can be stored in a database ([RustCrypto#1868])
- Move the CSR builder `x509_cert::request` ([RustCrypto#1581])
- Rename `x509_cert::builder::Profile` to `BuilderProfile` ([RustCrypto#1514] && [RustCrypto#1517])
- `Name` is now a new type over `RdnSequence` ([RustCrypto#1499])
- make `RelativeDistinguishedName` fields private ([RustCrypto#1510])
- make `RdnSequence` fields private ([RustCrypto#1508])
- make (Tbs)`CertificateInner` fields private ([RustCrypto#1505])
- rename helpers to `get_extension`/`filter_extensions` ([RustCrypto#1497])
- `check_name_encoding` now allow extraneous components ([RustCrypto#1447])
- Accept RFC-invalid certificates as TrustAnchors ([RustCrypto#1403])

- Edition changed to 2024 and MSRV bumped to 1.85 ([RustCrypto#1689])
- Bump `rand` to `v0.10` ([RustCrypto#2212])
- Bump `der` to `v0.8` ([RustCrypto#2234])
- Bump `digest` to `v0.11` ([RustCrypto#2237])
- Bump `sha2` to `v0.11` ([RustCrypto#2273])
- Bump `spki` to `v0.8` ([RustCrypto#2277])
- Bump `signature` to `v3` ([RustCrypto#2326])

Fixed

- Converting from `SystemTime` should use `UtcTime` if date <= 2049 ([RustCrypto#1969])
- Underflow on empty input in `Certificate::load_pem_chain` ([RustCrypto#1965])
- Domain validated should accept CNs ([RustCrypto#1815])
- Serialization of email addresses ([RustCrypto#1425])

Removed

- Std requirement for `x509_cert::builder` ([RustCrypto#1709])
- `RelativeDistinguishedName::encode_from_string` ([RustCrypto#1509])

[RustCrypto#1270]: RustCrypto#1270
[RustCrypto#1280]: RustCrypto#1280
[RustCrypto#1403]: RustCrypto#1403
[RustCrypto#1425]: RustCrypto#1425
[RustCrypto#1447]: RustCrypto#1447
[RustCrypto#1497]: RustCrypto#1497
[RustCrypto#1499]: RustCrypto#1499
[RustCrypto#1505]: RustCrypto#1505
[RustCrypto#1508]: RustCrypto#1508
[RustCrypto#1509]: RustCrypto#1509
[RustCrypto#1510]: RustCrypto#1510
[RustCrypto#1514]: RustCrypto#1514
[RustCrypto#1517]: RustCrypto#1517
[RustCrypto#1528]: RustCrypto#1528
[RustCrypto#1529]: RustCrypto#1529
[RustCrypto#1534]: RustCrypto#1534
[RustCrypto#1581]: RustCrypto#1581
[RustCrypto#1689]: RustCrypto#1689
[RustCrypto#1709]: RustCrypto#1709
[RustCrypto#1759]: RustCrypto#1759
[RustCrypto#1761]: RustCrypto#1761
[RustCrypto#1764]: RustCrypto#1764
[RustCrypto#1794]: RustCrypto#1794
[RustCrypto#1815]: RustCrypto#1815
[RustCrypto#1868]: RustCrypto#1868
[RustCrypto#1869]: RustCrypto#1869
[RustCrypto#1870]: RustCrypto#1870
[RustCrypto#1961]: RustCrypto#1961
[RustCrypto#1965]: RustCrypto#1965
[RustCrypto#1969]: RustCrypto#1969
[RustCrypto#1986]: RustCrypto#1986
[RustCrypto#2109]: RustCrypto#2109
[RustCrypto#2120]: RustCrypto#2120
[RustCrypto#2212]: RustCrypto#2212
[RustCrypto#2234]: RustCrypto#2234
[RustCrypto#2237]: RustCrypto#2237
[RustCrypto#2273]: RustCrypto#2273
[RustCrypto#2277]: RustCrypto#2277
[RustCrypto#2326]: RustCrypto#2326
@baloo baloo mentioned this pull request Jul 6, 2026
baloo added a commit to baloo/formats that referenced this pull request Jul 6, 2026
Added

- Serial number generator ([RustCrypto#1270])
- `DecodeValue` for `x509_cert::time::Time` ([RustCrypto#1986])
- `FromStr` for `x509_cert::time::Time` ([RustCrypto#1961])
- impl `Hash` for `Name` ([RustCrypto#1764])
- impl `Ord` for `CrlReason` ([RustCrypto#1869])
- `DirectoryString::BmpString` ([RustCrypto#1794])
- `Crl` builder ([RustCrypto#1759])
- `Time::now` method ([RustCrypto#1761])
- `Validity::infinity` helper ([RustCrypto#1528])
- `Validity::new` method ([RustCrypto#1529])
- Re-export `spki` types without `*Owned` suffixes ([RustCrypto#1534])
- `x509_cert::builder::AsyncBuilder` using `AsyncSigner` ([RustCrypto#1280])

Changed

- Decompose `AsExtension` into `Criticality + AsExtension` ([RustCrypto#2109])
- Improve extension API flexibility and ergonomics ([RustCrypto#2120])
- Expose `Profile` in the `CrlBuilder` ([RustCrypto#1870])
- Ensure a serial number can be stored in a database ([RustCrypto#1868])
- Move the CSR builder `x509_cert::request` ([RustCrypto#1581])
- Rename `x509_cert::builder::Profile` to `BuilderProfile` ([RustCrypto#1514] && [RustCrypto#1517])
- `Name` is now a new type over `RdnSequence` ([RustCrypto#1499])
- make `RelativeDistinguishedName` fields private ([RustCrypto#1510])
- make `RdnSequence` fields private ([RustCrypto#1508])
- make (Tbs)`CertificateInner` fields private ([RustCrypto#1505])
- rename helpers to `get_extension`/`filter_extensions` ([RustCrypto#1497])
- `check_name_encoding` now allow extraneous components ([RustCrypto#1447])
- Accept RFC-invalid certificates as TrustAnchors ([RustCrypto#1403])

- Edition changed to 2024 and MSRV bumped to 1.85 ([RustCrypto#1689])
- Bump `rand` to `v0.10` ([RustCrypto#2212])
- Bump `der` to `v0.8` ([RustCrypto#2234])
- Bump `digest` to `v0.11` ([RustCrypto#2237])
- Bump `sha2` to `v0.11` ([RustCrypto#2273])
- Bump `spki` to `v0.8` ([RustCrypto#2277])
- Bump `signature` to `v3` ([RustCrypto#2326])

Fixed

- Converting from `SystemTime` should use `UtcTime` if date <= 2049 ([RustCrypto#1969])
- Underflow on empty input in `Certificate::load_pem_chain` ([RustCrypto#1965])
- Domain validated should accept CNs ([RustCrypto#1815])
- Serialization of email addresses ([RustCrypto#1425])

Removed

- Std requirement for `x509_cert::builder` ([RustCrypto#1709])
- `RelativeDistinguishedName::encode_from_string` ([RustCrypto#1509])

[RustCrypto#1270]: RustCrypto#1270
[RustCrypto#1280]: RustCrypto#1280
[RustCrypto#1403]: RustCrypto#1403
[RustCrypto#1425]: RustCrypto#1425
[RustCrypto#1447]: RustCrypto#1447
[RustCrypto#1497]: RustCrypto#1497
[RustCrypto#1499]: RustCrypto#1499
[RustCrypto#1505]: RustCrypto#1505
[RustCrypto#1508]: RustCrypto#1508
[RustCrypto#1509]: RustCrypto#1509
[RustCrypto#1510]: RustCrypto#1510
[RustCrypto#1514]: RustCrypto#1514
[RustCrypto#1517]: RustCrypto#1517
[RustCrypto#1528]: RustCrypto#1528
[RustCrypto#1529]: RustCrypto#1529
[RustCrypto#1534]: RustCrypto#1534
[RustCrypto#1581]: RustCrypto#1581
[RustCrypto#1689]: RustCrypto#1689
[RustCrypto#1709]: RustCrypto#1709
[RustCrypto#1759]: RustCrypto#1759
[RustCrypto#1761]: RustCrypto#1761
[RustCrypto#1764]: RustCrypto#1764
[RustCrypto#1794]: RustCrypto#1794
[RustCrypto#1815]: RustCrypto#1815
[RustCrypto#1868]: RustCrypto#1868
[RustCrypto#1869]: RustCrypto#1869
[RustCrypto#1870]: RustCrypto#1870
[RustCrypto#1961]: RustCrypto#1961
[RustCrypto#1965]: RustCrypto#1965
[RustCrypto#1969]: RustCrypto#1969
[RustCrypto#1986]: RustCrypto#1986
[RustCrypto#2109]: RustCrypto#2109
[RustCrypto#2120]: RustCrypto#2120
[RustCrypto#2212]: RustCrypto#2212
[RustCrypto#2234]: RustCrypto#2234
[RustCrypto#2237]: RustCrypto#2237
[RustCrypto#2273]: RustCrypto#2273
[RustCrypto#2277]: RustCrypto#2277
[RustCrypto#2326]: RustCrypto#2326
tarcieri added a commit that referenced this pull request Jul 9, 2026
## Added
- Serial number generator (#1270)
- `DecodeValue` for `x509_cert::time::Time` (#1986)
- `FromStr` for `x509_cert::time::Time` (#1961)
- impl `Hash` for `Name` (#1764)
- impl `Ord` for `CrlReason` (#1869)
- `DirectoryString::BmpString` (#1794)
- `Crl` builder (#1759)
- `Time::now` method (#1761)
- `Validity::infinity` helper (#1528)
- `Validity::new` method (#1529)
- Re-export `spki` types without `*Owned` suffixes (#1534)
- `x509_cert::builder::AsyncBuilder` using `AsyncSigner` (#1280)

## Changed
- Decompose `AsExtension` into `Criticality + AsExtension` (#2109)
- Improve extension API flexibility and ergonomics (#2120)
- Expose `Profile` in the `CrlBuilder` (#1870)
- Ensure a serial number can be stored in a database (#1868)
- Move the CSR builder `x509_cert::request` (#1581)
- Rename `x509_cert::builder::Profile` to `BuilderProfile` (#1514, #1517)
- `Name` is now a new type over `RdnSequence` (#1499)
- make `RelativeDistinguishedName` fields private (#1510)
- make `RdnSequence` fields private (#1508)
- make (Tbs)`CertificateInner` fields private (#1505)
- rename helpers to `get_extension`/`filter_extensions` (#1497)
- `check_name_encoding` now allow extraneous components (#1447)
- Accept RFC-invalid certificates as TrustAnchors (#1403)
- Edition changed to 2024 and MSRV bumped to 1.85 (#1689)
- Bump `rand` to `v0.10` (#2212)
- Bump `der` to `v0.8` (#2234)
- Bump `digest` to `v0.11` (#2237)
- Bump `sha2` to `v0.11` (#2273)
- Bump `spki` to `v0.8` (#2277)
- Bump `signature` to `v3` (#2326)

## Fixed
- Converting from `SystemTime` should use `UtcTime` if date <= 2049 (#1969)
- Underflow on empty input in `Certificate::load_pem_chain` (#1965)
- Domain validated should accept CNs (#1815)
- Serialization of email addresses (#1425)

## Removed
- `std` requirement for `x509_cert::builder` (#1709)
- `RelativeDistinguishedName::encode_from_string` (#1509)

Co-authored-by: Tony Arcieri <bascule@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant