Change Log

[Unreleased][unreleased]

Added/Changed/Fixed

Thanks

0.12.0

Added/Changed/Fixed

  • Upgrade to nom 7

0.11.0

Added

  • Add SubjectPublicKeyInfo::raw field

Changed/Fixed

  • Fix der-parser dependency (#102)
  • Update oid-registry dependency (#77)
  • Set MSRV to 1.46 (indirect dependency on lexical-core and bitvec)
  • Extend the lifetimes exposed on TbsCertificate (#104)
  • Add missing test assets (#103)

Thanks

  • @jgalenson, @g2p, @kpp

0.10.0

Added

  • Add the Validate trait to run post-parsing validations of X.509 structure
  • Add the FromDer trait to unify parsing methods and visibility (#85)
  • Add method to format X509Name using a given registry
  • Add X509Certificate::public_key() method
  • Add ED25519 as a signature algorithm (#95)
  • Add support for extensions (#86):
    • CRL Distribution Points
  • Add X509CertificateParser builder to allow specifying parsing options

Changed/Fixed

  • Extensions are now stored in order of appearance in the certificate/CRL (#80)
    • .extensions field is not public anymore, but methods .extensions() and .extensions_map() have been added
  • Store CRI attributes in order
  • Fix parsing of CertificatePolicies, and use named types (closes #82)
  • Allow specifying registry in oid2sn and similar functions (closes #88)
  • Mark X509Extension::new as const fn + inline
  • Allow leading zeroes in serial number
  • Derive Clone for all types (when possible) (#89)
  • Fix certificate validity period check to be inclusive (#90)
  • Do not fail GeneralName parsing for x400Address and ediPartyName, read it as unparsed objects (#87)
  • Change visibility of fields in X509Name (replaced by accessors)

Thanks

  • @lilyball for numerous issues, ideas and comments
  • @SergioBenitez for lifetimes fixes (#93) and validity period check fixes (#90)
  • @rappet for Ed25519 signature verification support (#95)
  • @xonatius for the work on CRLDistributionPoints (#96, #98)

0.9.3

Added/Changed/Fixed

  • Add functions oid2description() and oid_registry() (closes #79)
  • Fix typo ‘ocsp_signing’ (closes #84)
  • Extension: use specific variant if unsupported or failed to parse (closes #83)
  • Relax constrains on parsing to accept certificates that do not strictly respect DER encoding, but are widely accepted by other X.509 libraries:
    • SubjectAltName: accept non-ia5string characters
    • Extensions: accept boolean values not enoded as 00 or ff
    • Serial: build BigUint from raw bytes (do not check sign)

0.9.2

Added/Changed/Fixed

  • Remove der-oid-macro from dependencies, not used directly
  • Use der_parser::num_bigint, remove it from direct dependencies
  • Add methods to iterate all blocks from a PEM file (#75)
  • Update MSRV to 1.45.0

0.9.1

Added/Changed/Fixed

  • Fix: X509Name::iter_state_or_province OID value
  • Re-export oid-registry, and add doc to show how to access OID

Thanks

  • @0xazure for fixing X509Name::iter_state_or_province

0.9.0

Added/Changed/Fixed

  • Upgrade to nom 6.0

  • Upgrade to der-parser 5.0

  • Upgrade MSRV to 1.44.0

  • Re-export crates so crate users do not have to import them

  • Add function parse_x509_pem and deprecate pem_to_der (#53)

  • Add helper methods to X509Name and simplify accessing values

  • Add support for ReasonCode extension

  • Add support for InvalidityDate extension

  • Add support for CRL Number extension

  • Add support for Certificate Signing Request (#58)

  • Change type of X509Version (now directly using the u32 value)

  • X509Name: relax check, allow some non-rfc compliant strings (#50)

  • Relax some constraints for invalid dates

  • CRL: extract raw serial, and add methods to access it

  • CRL: add method to iterate revoked certificates

  • RevokedCertificate: convert extensions list to hashmap

  • Refactor crate modules and visibility

  • Rename top-level functions to parse_x509_certificate and parse_x509_crl`

  • Refactor error handling, return meaningful errors when possible

  • Make many more functions public (parse_tbs_certificate, etc.)

Thanks

  • Dirkjan Ochtman (@djc): support for Certificate Signing Request (CSR), code refactoring, etc.

0.8.0

Added/Changed

  • Upgrade to der-parser 4.0
  • Move from time to chrono
    • `time 0.1 is very old, and time 0.2 broke compatibility and cannot parse timezones
    • Add public type ASN1Time object to abstract implementation
    • this breaks API for direct access to not_before, not_after etc.
  • Fix clippy warnings
    • nid2obj argument is now passed by copy, not reference
  • Add method to get a formatted string of the certificate serial number
  • Add method to get decoded version
  • Add convenience methods to access the most common fields (subject, issuer, etc.)
  • Expose the raw DER of an X509Name
  • Make parse_x509_name public, for parsing distinguished names
  • Make OID objects public
  • Implement parsing for some extensions
    • Support for extensions is not complete, support for more types will be added later
  • Add example to decode and print certificates
  • Add verify feature to verify cryptographic signature by a public key

Fixed

  • Fix parsing of types not representable by string in X509Name (#36)
  • Fix parsing of certificates with empty subject (#37)

Thanks

  • @jannschu, @g2p for the extensions parsing
  • @wayofthepie for the tests and contributions
  • @nicholasbishop for contributions

0.7.0

  • Expose raw bytes of the certificate serial number
  • Set edition to 2018

0.6.4

  • Fix infinite loop when certificate has no END mark

0.6.3

  • Fix infinite loop when reading non-pem data (#28)

0.6.2

  • Remove debug code left in Pem::read

0.6.1

  • Add CRL parser
  • Expose CRL tbs bytes
  • PEM: ignore lines before BEGIN label (#21)
  • Fix parsing default values for TbsCertificate version field (#24)
  • Use BerResult from der-parser for simpler function signatures
  • Expose tbsCertificate bytes
  • Upgrade dependencies (base64)

0.6.0

  • Update to der-parser 3.0 and nom 5
  • Breaks API, cleaner error types

0.5.1

  • Add time_to_expiration to Validity object
  • Add method to read a Pem object from BufRead + Seek
  • Add method to Pem to decode and extract certificate

0.5.0

  • Update to der-parser 2.0

0.4.3

  • Make parse_subject_public_key_info public
  • Add function sn2oid (get an OID by short name)

0.4.2

  • Support GeneralizedTime conversion

0.4.1

  • Fix case where certificate has no extensions

0.4.0

  • Upgrade to der-parser 1.1, and Use num-bigint over num
  • Rename x509_parser to parse_x509_der
  • Do not export subparsers
  • Improve documentation

0.3.0

  • Upgrade to nom 4

0.2.0

  • Rewrite X.509 structures and parsing code to work in one pass Warning: this is a breaking change
  • Add support for PEM-encoded certificates
  • Add some documentation