diff options
Diffstat (limited to 'src/ext/pkix/authkeyid.rs')
-rw-r--r-- | src/ext/pkix/authkeyid.rs | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/ext/pkix/authkeyid.rs b/src/ext/pkix/authkeyid.rs index e7644f5..60b61e5 100644 --- a/src/ext/pkix/authkeyid.rs +++ b/src/ext/pkix/authkeyid.rs @@ -1,8 +1,9 @@ use super::name::GeneralNames; +use crate::serial_number::SerialNumber; use const_oid::db::rfc5280::ID_CE_AUTHORITY_KEY_IDENTIFIER; use const_oid::{AssociatedOid, ObjectIdentifier}; -use der::asn1::{OctetStringRef, UIntRef}; +use der::asn1::OctetString; use der::Sequence; /// AuthorityKeyIdentifier as defined in [RFC 5280 Section 4.2.1.1]. @@ -18,19 +19,28 @@ use der::Sequence; /// ``` /// /// [RFC 5280 Section 4.2.1.1]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.1 -#[derive(Clone, Debug, Eq, PartialEq, Sequence)] +#[derive(Clone, Debug, Eq, PartialEq, Sequence, Default)] #[allow(missing_docs)] -pub struct AuthorityKeyIdentifier<'a> { +pub struct AuthorityKeyIdentifier { #[asn1(context_specific = "0", tag_mode = "IMPLICIT", optional = "true")] - pub key_identifier: Option<OctetStringRef<'a>>, + pub key_identifier: Option<OctetString>, #[asn1(context_specific = "1", tag_mode = "IMPLICIT", optional = "true")] - pub authority_cert_issuer: Option<GeneralNames<'a>>, + pub authority_cert_issuer: Option<GeneralNames>, #[asn1(context_specific = "2", tag_mode = "IMPLICIT", optional = "true")] - pub authority_cert_serial_number: Option<UIntRef<'a>>, + pub authority_cert_serial_number: Option<SerialNumber>, } -impl<'a> AssociatedOid for AuthorityKeyIdentifier<'a> { +impl AssociatedOid for AuthorityKeyIdentifier { const OID: ObjectIdentifier = ID_CE_AUTHORITY_KEY_IDENTIFIER; } + +impl_extension!(AuthorityKeyIdentifier, critical = false); +impl_key_identifier!( + AuthorityKeyIdentifier, + (|result: &[u8]| Ok(Self { + key_identifier: Some(OctetString::new(result)?), + ..Default::default() + })) +); |