Botan 3.12.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) override

Static Public Member Functions

static OID static_oid ()

Detailed Description

Name Constraints

Definition at line 250 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 258 of file x509_ext.h.

258: 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 252 of file x509_ext.h.

252 {
253 return std::make_unique<Name_Constraints>(m_name_constraints);
254 }

◆ get_name_constraints()

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

Definition at line 266 of file x509_ext.h.

266{ return m_name_constraints; }

◆ oid_of()

OID Botan::Cert_Extension::Name_Constraints::oid_of ( ) const
inlineoverridevirtual
Returns
OID representing this extension

Implements Botan::Certificate_Extension.

Definition at line 270 of file x509_ext.h.

270{ return static_oid(); }

References static_oid().

◆ static_oid()

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

Definition at line 268 of file x509_ext.h.

268{ 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 )
overridevirtual

Reimplemented from Botan::Certificate_Extension.

Definition at line 634 of file x509_ext.cpp.

638 {
639 if(!m_name_constraints.permitted().empty() || !m_name_constraints.excluded().empty()) {
640 if(!subject.is_CA_cert()) {
641 cert_status.at(pos).insert(Certificate_Status_Code::NAME_CONSTRAINT_ERROR);
642 }
643
644 const bool issuer_name_constraint_critical = subject.is_critical("X509v3.NameConstraints");
645
646 // Check that all subordinate certs pass the name constraint
647 for(size_t j = 0; j < pos; ++j) {
648 const auto& cert = cert_path.at(j);
649
650 // RFC 5280 6.1.4(b): "Name constraints are not applied to self-issued
651 // certificates (unless the certificate is the final certificate in the path)"
652 // Position 0 is the end entity (final certificate); skip self-issued intermediates.
653 if(j > 0 && cert.issuer_dn() == cert.subject_dn()) {
654 continue;
655 }
656
657 if(!m_name_constraints.is_permitted(cert, issuer_name_constraint_critical)) {
658 cert_status.at(j).insert(Certificate_Status_Code::NAME_CONSTRAINT_ERROR);
659 continue;
660 }
661
662 if(m_name_constraints.is_excluded(cert, issuer_name_constraint_critical)) {
663 cert_status.at(j).insert(Certificate_Status_Code::NAME_CONSTRAINT_ERROR);
664 continue;
665 }
666 }
667 }
668}

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: