Botan  2.9.0
Crypto and TLS for C++11
Public Member Functions | Static Public Member Functions | List of all members
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

Name_Constraintscopy () const override
 
const NameConstraintsget_name_constraints () const
 
 Name_Constraints ()=default
 
 Name_Constraints (const NameConstraints &nc)
 
OID oid_of () const override
 
void validate (const X509_Certificate &subject, const X509_Certificate &issuer, const std::vector< std::shared_ptr< const 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 494 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::Cert_Extension::Name_Constraints::Name_Constraints ( const NameConstraints nc)
inline

Definition at line 501 of file x509_ext.h.

501 : m_name_constraints(nc) {}

Member Function Documentation

◆ copy()

Name_Constraints* 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 497 of file x509_ext.h.

498  { return new Name_Constraints(m_name_constraints); }

◆ get_name_constraints()

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

Definition at line 508 of file x509_ext.h.

508 { 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 511 of file x509_ext.h.

511 { return static_oid(); }

◆ static_oid()

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

Definition at line 510 of file x509_ext.h.

510 { return OID("2.5.29.30"); }

◆ validate()

void Botan::Cert_Extension::Name_Constraints::validate ( const X509_Certificate subject,
const X509_Certificate issuer,
const std::vector< std::shared_ptr< const 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 628 of file x509_ext.cpp.

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

632  {
633  if(!m_name_constraints.permitted().empty() || !m_name_constraints.excluded().empty())
634  {
635  if(!subject.is_CA_cert() || !subject.is_critical("X509v3.NameConstraints"))
636  cert_status.at(pos).insert(Certificate_Status_Code::NAME_CONSTRAINT_ERROR);
637 
638  const bool issuer_name_constraint_critical =
639  issuer.is_critical("X509v3.NameConstraints");
640 
641  const bool at_self_signed_root = (pos == cert_path.size() - 1);
642 
643  // Check that all subordinate certs pass the name constraint
644  for(size_t j = 0; j <= pos; ++j)
645  {
646  if(pos == j && at_self_signed_root)
647  continue;
648 
649  bool permitted = m_name_constraints.permitted().empty();
650  bool failed = false;
651 
652  for(auto c: m_name_constraints.permitted())
653  {
654  switch(c.base().matches(*cert_path.at(j)))
655  {
656  case GeneralName::MatchResult::NotFound:
657  case GeneralName::MatchResult::All:
658  permitted = true;
659  break;
660  case GeneralName::MatchResult::UnknownType:
661  failed = issuer_name_constraint_critical;
662  permitted = true;
663  break;
664  default:
665  break;
666  }
667  }
668 
669  for(auto c: m_name_constraints.excluded())
670  {
671  switch(c.base().matches(*cert_path.at(j)))
672  {
673  case GeneralName::MatchResult::All:
674  case GeneralName::MatchResult::Some:
675  failed = true;
676  break;
677  case GeneralName::MatchResult::UnknownType:
678  failed = issuer_name_constraint_critical;
679  break;
680  default:
681  break;
682  }
683  }
684 
685  if(failed || !permitted)
686  {
687  cert_status.at(j).insert(Certificate_Status_Code::NAME_CONSTRAINT_ERROR);
688  }
689  }
690  }
691  }
const std::vector< GeneralSubtree > & excluded() const
const std::vector< GeneralSubtree > & permitted() const

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