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

#include <x509_ext.h>

Inheritance diagram for Botan::Cert_Extension::Name_Constraints:
Botan::Certificate_Extension

Public Member Functions

std::unique_ptr< Certificate_Extensioncopy () const override
const NameConstraintsget_name_constraints () const
 Name_Constraints ()=default
BOTAN_FUTURE_EXPLICIT Name_Constraints (const NameConstraints &nc)
OID oid_of () const override
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 override

Static Public Member Functions

static OID static_oid ()

Detailed Description

Name Constraints

Definition at line 293 of file x509_ext.h.

Constructor & Destructor Documentation

◆ Name_Constraints() [1/2]

Botan::Cert_Extension::Name_Constraints::Name_Constraints ( )
default

◆ Name_Constraints() [2/2]

BOTAN_FUTURE_EXPLICIT Botan::Cert_Extension::Name_Constraints::Name_Constraints ( const NameConstraints & nc)
inline

Definition at line 301 of file x509_ext.h.

301: m_name_constraints(nc) {}

References BOTAN_FUTURE_EXPLICIT.

Member Function Documentation

◆ copy()

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

Make a copy of this extension

Returns
copy of this

Implements Botan::Certificate_Extension.

Definition at line 295 of file x509_ext.h.

295 {
296 return std::make_unique<Name_Constraints>(m_name_constraints);
297 }

◆ get_name_constraints()

const NameConstraints & Botan::Cert_Extension::Name_Constraints::get_name_constraints ( ) const
inline

Definition at line 309 of file x509_ext.h.

309{ return m_name_constraints; }

◆ oid_of()

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

Return object identifier for this extension

Returns
OID representing this extension

Implements Botan::Certificate_Extension.

Definition at line 313 of file x509_ext.h.

313{ return static_oid(); }

References static_oid().

◆ static_oid()

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

Definition at line 311 of file x509_ext.h.

311{ return OID({2, 5, 29, 30}); }

Referenced by oid_of().

◆ validate()

void Botan::Cert_Extension::Name_Constraints::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
overridevirtual

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 from Botan::Certificate_Extension.

Definition at line 827 of file x509_ext.cpp.

831 {
832 if(!m_name_constraints.permitted().empty() || !m_name_constraints.excluded().empty()) {
833 if(!subject.is_CA_cert()) {
834 cert_status.at(pos).insert(Certificate_Status_Code::NAME_CONSTRAINT_ERROR);
835 }
836
837 const bool issuer_name_constraint_critical = subject.is_critical("X509v3.NameConstraints");
838
839 // Check that all subordinate certs pass the name constraint
840 for(size_t j = 0; j < pos; ++j) {
841 const auto& cert = cert_path.at(j);
842
843 // RFC 5280 6.1.4(b): "Name constraints are not applied to self-issued
844 // certificates (unless the certificate is the final certificate in the path)"
845 // Position 0 is the end entity (final certificate); skip self-issued intermediates.
846 if(j > 0 && cert.issuer_dn() == cert.subject_dn()) {
847 continue;
848 }
849
850 if(!m_name_constraints.is_permitted(cert, issuer_name_constraint_critical)) {
851 cert_status.at(j).insert(Certificate_Status_Code::NAME_CONSTRAINT_ERROR);
852 continue;
853 }
854
855 if(m_name_constraints.is_excluded(cert, issuer_name_constraint_critical)) {
856 cert_status.at(j).insert(Certificate_Status_Code::NAME_CONSTRAINT_ERROR);
857 continue;
858 }
859 }
860 }
861}

References Botan::X509_Certificate::is_CA_cert(), Botan::X509_Certificate::is_critical(), and Botan::NAME_CONSTRAINT_ERROR.


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