Botan 3.13.0
Crypto and TLS for C&
Botan::Cert_Extension::Subject_Key_ID Class Referencefinal

#include <x509_ext.h>

Inheritance diagram for Botan::Cert_Extension::Subject_Key_ID:
Botan::Certificate_Extension

Public Member Functions

std::unique_ptr< Certificate_Extensioncopy () const override
const std::vector< uint8_t > & get_key_id () const
OID oid_of () const override
 Subject_Key_ID ()=default
 Subject_Key_ID (const Public_Key &pub_key)
 Subject_Key_ID (const std::vector< uint8_t > &k)
 Subject_Key_ID (const std::vector< uint8_t > &public_key, std::string_view hash_fn)
virtual void validate (const X509_Certificate &subject, const std::optional< X509_Certificate > &issuer, const std::vector< X509_Certificate > &cert_path, std::vector< std::set< Certificate_Status_Code > > &cert_status, size_t pos) const

Static Public Member Functions

static OID static_oid ()

Detailed Description

Subject Key Identifier Extension

Definition at line 108 of file x509_ext.h.

Constructor & Destructor Documentation

◆ Subject_Key_ID() [1/4]

Botan::Cert_Extension::Subject_Key_ID::Subject_Key_ID ( )
default

◆ Subject_Key_ID() [2/4]

Botan::Cert_Extension::Subject_Key_ID::Subject_Key_ID ( const std::vector< uint8_t > & k)
inlineexplicit

Definition at line 112 of file x509_ext.h.

112: m_key_id(k) {}

◆ Subject_Key_ID() [3/4]

Botan::Cert_Extension::Subject_Key_ID::Subject_Key_ID ( const Public_Key & pub_key)
explicit

Derive the key identifier from the public key, using the first method given in RFC 5280 4.2.1.2:

(1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the value of the BIT STRING subjectPublicKey (excluding the tag, length, and number of unused bits).

Definition at line 570 of file x509_ext.cpp.

570 {
571 /*
572 * RFC 5280 4.2.1.2:
573 * (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
574 * value of the BIT STRING subjectPublicKey (excluding the tag, length,
575 * and number of unused bits).
576 */
577 auto hash = HashFunction::create_or_throw("SHA-1");
578
579 m_key_id.resize(hash->output_length());
580
581 hash->update(pub_key.public_key_bits());
582 hash->final(m_key_id.data());
583}
static std::unique_ptr< HashFunction > create_or_throw(std::string_view algo_spec, std::string_view provider="")
Definition hash.cpp:308

References Botan::HashFunction::create_or_throw(), and Botan::Public_Key::public_key_bits().

◆ Subject_Key_ID() [4/4]

Botan::Cert_Extension::Subject_Key_ID::Subject_Key_ID ( const std::vector< uint8_t > & public_key,
std::string_view hash_fn )

Definition at line 588 of file x509_ext.cpp.

588 {
589 auto hash = HashFunction::create_or_throw(hash_name);
590
591 m_key_id.resize(hash->output_length());
592
593 hash->update(pub_key);
594 hash->final(m_key_id.data());
595
596 // Truncate longer hashes, 192 bits here seems plenty
597 const size_t max_skid_len = (192 / 8);
598 if(m_key_id.size() > max_skid_len) {
599 m_key_id.resize(max_skid_len);
600 }
601}

References Botan::HashFunction::create_or_throw().

Member Function Documentation

◆ copy()

std::unique_ptr< Certificate_Extension > Botan::Cert_Extension::Subject_Key_ID::copy ( ) const
inlineoverridevirtual

Make a copy of this extension

Returns
copy of this

Implements Botan::Certificate_Extension.

Definition at line 127 of file x509_ext.h.

127 {
128 return std::make_unique<Subject_Key_ID>(m_key_id);
129 }

References copy().

Referenced by copy().

◆ get_key_id()

const std::vector< uint8_t > & Botan::Cert_Extension::Subject_Key_ID::get_key_id ( ) const
inline

Definition at line 131 of file x509_ext.h.

131{ return m_key_id; }

◆ oid_of()

OID Botan::Cert_Extension::Subject_Key_ID::oid_of ( ) const
inlineoverridevirtual

Return object identifier for this extension

Returns
OID representing this extension

Implements Botan::Certificate_Extension.

Definition at line 135 of file x509_ext.h.

135{ return static_oid(); }

References static_oid().

◆ static_oid()

OID Botan::Cert_Extension::Subject_Key_ID::static_oid ( )
inlinestatic

Definition at line 133 of file x509_ext.h.

133{ return OID({2, 5, 29, 14}); }

Referenced by oid_of().

◆ validate()

void Botan::Certificate_Extension::validate ( const X509_Certificate & subject,
const std::optional< X509_Certificate > & issuer,
const std::vector< X509_Certificate > & cert_path,
std::vector< std::set< Certificate_Status_Code > > & cert_status,
size_t pos ) const
virtualinherited

Callback visited during path validation.

An extension can implement this callback to inspect the path during path validation.

If an error occurs during validation of this extension, an appropriate status code shall be added to cert_status.

Parameters
subjectSubject certificate that contains this extension
issuerIssuer certificate. nullopt for certificates with no available issuer (e.g. non self-signed trust anchors).
cert_pathCertificate path which is currently validated
cert_statusCertificate validation status codes for subject certificate
posPosition of subject certificate in cert_path

Reimplemented in Botan::Cert_Extension::ASBlocks, Botan::Cert_Extension::Certificate_Policies, Botan::Cert_Extension::IPAddressBlocks, Botan::Cert_Extension::Name_Constraints, Botan::Cert_Extension::NoRevocationAvailable, Botan::Cert_Extension::OCSP_NoCheck, and Botan::Cert_Extension::Unknown_Extension.

Definition at line 181 of file x509_ext.cpp.

185 {}

Referenced by is_appropriate_context().


The documentation for this class was generated from the following files: