Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
GrayLib::cX509CrtExt Class Reference

#include <cX509CrtExt.h>

Public Member Functions

 cX509CrtExt () noexcept
 
bool HasExtType (X509_EXT_t e) const noexcept
 
void SetEmpty ()
 
bool IsKeyUsageValid (X509_KeyUsage_TYPE usage) const
 
bool IsExtKeyUsage (const char *usage_oid, size_t usage_len) const
 
HRESULT GetDescription (StrBuilder &s, const char *prefix) const
 
HRESULT ReadExtensionList (cX509Reader &r)
 
void WriteExtensionList (OUT cASNSets &sets) const
 

Static Public Member Functions

static HRESULT GRAYCALL Write_SubjectKeyIdentifier (OUT cASNSets &sets, const cKeyWrap &rSubjectKey)
 
static HRESULT GRAYCALL Write_AuthorityKeyIdentifier (OUT cASNSets &sets, const cKeyWrap &rIssuerKey)
 

Public Attributes

UINT32 m_uExtTypes
 Bit mask containing detected and parsed extensions X509_EXT_t. More...
 
bool m_bCAIsTrue
 X509_EXT_BasicConstraints. if this certificate belongs to a CA. More...
 
int m_nMaxPathLen
 X509_EXT_BasicConstraints. The maximum path length to the root certificate. Path length is 1 higher than RFC 5280 'meaning', so 1+. More...
 
BYTE m_nKeyUsage
 X509_EXT_KeyUsage. key usage extension value: X509_KeyUsage_TYPE. More...
 
BYTE m_nNSCertType
 X509_EXT_NSCertType. Netscape certificate type extension value: X509_NSCERT_TYPE. More...
 
cASNSequence m_SubjectAltNames
 X509_EXT_SubjectAltNames. list of Subject Alternative Names (SAN) (Only dNSName supported). More...
 
cASNSequence m_ExtKeyUsage
 X509_EXT_ExtKeyUsage. list of extended key usage OIDs. X509_KeyUsage_TYPE. More...
 

Protected Member Functions

HRESULT Read_BasicConstraints (cASNReader &r)
 
HRESULT Read_KeyUsage (cASNReader &r)
 
HRESULT Read_NSCertType (cASNReader &r)
 
HRESULT Read_ExtKeyUsage (cASNReader &r)
 
HRESULT Read_SubjectAltNames (cASNReader &r)
 
HRESULT ReadExtensionList1 (cASNReader &r)
 
HRESULT Write_BasicConstraints (OUT cASNSets &sets) const
 
HRESULT Write_KeyUsage (OUT cASNSets &sets) const
 
HRESULT Write_NSCertType (OUT cASNSets &sets) const
 
HRESULT Write_ExtKeyUsage (OUT cASNSets &r) const
 
HRESULT Write_SubjectAltNames (OUT cASNSets &r) const
 

Static Protected Member Functions

static HRESULT GetStr_NSCertType (StrBuilder &s, BYTE nNSCertType)
 
static HRESULT GetStr_KeyUsage (StrBuilder &s, BYTE nKeyUsage)
 
static HRESULT GetStr_ExtKeyUsage (StrBuilder &s, const cASNSequence &rExtKeyUsage)
 

Detailed Description

optional extensions for a CRT file. enum as X509_EXT_t

Constructor & Destructor Documentation

◆ cX509CrtExt()

GrayLib::cX509CrtExt::cX509CrtExt ( )
inlinenoexcept

Member Function Documentation

◆ GetDescription()

HRESULT GrayLib::cX509CrtExt::GetDescription ( StrBuilder s,
const char *  prefix 
) const

◆ GetStr_ExtKeyUsage()

HRESULT GrayLib::cX509CrtExt::GetStr_ExtKeyUsage ( StrBuilder s,
const cASNSequence rExtKeyUsage 
)
staticprotected

X509_EXT_ExtKeyUsage

◆ GetStr_KeyUsage()

HRESULT GrayLib::cX509CrtExt::GetStr_KeyUsage ( StrBuilder s,
BYTE  nKeyUsage 
)
staticprotected

X509_EXT_KeyUsage

◆ GetStr_NSCertType()

HRESULT GrayLib::cX509CrtExt::GetStr_NSCertType ( StrBuilder s,
BYTE  nNSCertType 
)
staticprotected

X509_EXT_NSCertType

◆ HasExtType()

bool GrayLib::cX509CrtExt::HasExtType ( X509_EXT_t  e) const
inlinenoexcept

◆ IsExtKeyUsage()

bool GrayLib::cX509CrtExt::IsExtKeyUsage ( const char *  usage_oid,
size_t  usage_len 
) const

Extension is not mandatory, absent means no restriction Check usage of certificate against extentedKeyUsage.

  • usage_oid = Intended usage (eg OID_SERVER_AUTH or OID_CLIENT_AUTH).
  • usage_len = Length of usage_oid (eg given by STRMAX()).
    Returns
    true = this use of the certificate is allowed
    Note
    Usually only makes sense on leaf certificates.

◆ IsKeyUsageValid()

bool GrayLib::cX509CrtExt::IsKeyUsageValid ( X509_KeyUsage_TYPE  usage) const
inline

Check usage of certificate against keyUsage extension.

  • usage = Intended usage(s) (eg X509_KeyUsage_KEY_ENCIPHERMENT before using the certificate to perform an RSA key exchange).
    Returns
    true is these uses of the certificate are allowed, else if the keyUsage extension is present but does not contain all the bits set in the usage argument.
    Note
    You should only call this function on leaf certificates, on (intermediate) CAs the keyUsage extension is automatically

◆ Read_BasicConstraints()

HRESULT GrayLib::cX509CrtExt::Read_BasicConstraints ( cASNReader r)
protected

X509_EXT_BasicConstraints BasicConstraints ::= SEQUENCE { cA BOOLEAN DEFAULT FALSE, pathLenConstraint INTEGER (0..MAX) OPTIONAL }

◆ Read_ExtKeyUsage()

HRESULT GrayLib::cX509CrtExt::Read_ExtKeyUsage ( cASNReader r)
protected

X509_EXT_ExtKeyUsage ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId KeyPurposeId ::= OBJECT IDENTIFIER

◆ Read_KeyUsage()

HRESULT GrayLib::cX509CrtExt::Read_KeyUsage ( cASNReader r)
protected

X509_EXT_KeyUsage

◆ Read_NSCertType()

HRESULT GrayLib::cX509CrtExt::Read_NSCertType ( cASNReader r)
protected

X509_EXT_NSCertType

◆ Read_SubjectAltNames()

HRESULT GrayLib::cX509CrtExt::Read_SubjectAltNames ( cASNReader r)
protected

X509_EXT_SubjectAltNames SubjectAltName ::= GeneralNames

GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName

GeneralName ::= CHOICE { otherName [0] OtherName, rfc822Name [1] IA5String, dNSName [2] IA5String, x400Address [3] ORAddress, directoryName [4] Name, ediPartyName [5] EDIPartyName, uniformResourceIdentifier [6] IA5String, iPAddress [7] OCTET STRING, registeredID [8] OBJECT IDENTIFIER }

OtherName ::= SEQUENCE { type-id OBJECT IDENTIFIER, value [0] EXPLICIT ANY DEFINED BY type-id }

EDIPartyName ::= SEQUENCE { nameAssigner [0] DirectoryString OPTIONAL, partyName [1] DirectoryString }

Note
we only parse and use dNSName at this point.

◆ ReadExtensionList()

HRESULT GrayLib::cX509CrtExt::ReadExtensionList ( cX509Reader r)

X.509 v3 extensions TODO: Perform all of the basic constraints tests required by the RFC TODO: Set values for undetected extensions to a sane default?

< Optional X.509 v3 extensions. UNUSED.

◆ ReadExtensionList1()

HRESULT GrayLib::cX509CrtExt::ReadExtensionList1 ( cASNReader r)
protected

◆ SetEmpty()

void GrayLib::cX509CrtExt::SetEmpty ( )
inline

◆ Write_AuthorityKeyIdentifier()

HRESULT GRAYCALL GrayLib::cX509CrtExt::Write_AuthorityKeyIdentifier ( OUT cASNSets sets,
const cKeyWrap rIssuerKey 
)
static

OID_AUTHORITY_KEY_IDENTIFIER

◆ Write_BasicConstraints()

HRESULT GrayLib::cX509CrtExt::Write_BasicConstraints ( OUT cASNSets sets) const
protected

OID_BASIC_CONSTRAINTS = X509_EXT_BasicConstraints

◆ Write_ExtKeyUsage()

HRESULT GrayLib::cX509CrtExt::Write_ExtKeyUsage ( OUT cASNSets r) const
protected

◆ Write_KeyUsage()

HRESULT GrayLib::cX509CrtExt::Write_KeyUsage ( OUT cASNSets sets) const
protected

OID_KEY_USAGE = X509_EXT_KeyUsage

◆ Write_NSCertType()

HRESULT GrayLib::cX509CrtExt::Write_NSCertType ( OUT cASNSets sets) const
protected

OID_NS_CERT_TYPE = X509_EXT_NSCertType

◆ Write_SubjectAltNames()

HRESULT GrayLib::cX509CrtExt::Write_SubjectAltNames ( OUT cASNSets r) const
protected

◆ Write_SubjectKeyIdentifier()

HRESULT GRAYCALL GrayLib::cX509CrtExt::Write_SubjectKeyIdentifier ( OUT cASNSets sets,
const cKeyWrap rSubjectKey 
)
static

OID_SUBJECT_KEY_IDENTIFIER

◆ WriteExtensionList()

void GrayLib::cX509CrtExt::WriteExtensionList ( OUT cASNSets sets) const

Write all the Extension data here to cASNSets Does not include OID_SUBJECT_KEY_IDENTIFIER or OID_AUTHORITY_KEY_IDENTIFIER

Member Data Documentation

◆ m_bCAIsTrue

bool GrayLib::cX509CrtExt::m_bCAIsTrue

X509_EXT_BasicConstraints. if this certificate belongs to a CA.

◆ m_ExtKeyUsage

cASNSequence GrayLib::cX509CrtExt::m_ExtKeyUsage

X509_EXT_ExtKeyUsage. list of extended key usage OIDs. X509_KeyUsage_TYPE.

◆ m_nKeyUsage

BYTE GrayLib::cX509CrtExt::m_nKeyUsage

X509_EXT_KeyUsage. key usage extension value: X509_KeyUsage_TYPE.

◆ m_nMaxPathLen

int GrayLib::cX509CrtExt::m_nMaxPathLen

X509_EXT_BasicConstraints. The maximum path length to the root certificate. Path length is 1 higher than RFC 5280 'meaning', so 1+.

◆ m_nNSCertType

BYTE GrayLib::cX509CrtExt::m_nNSCertType

X509_EXT_NSCertType. Netscape certificate type extension value: X509_NSCERT_TYPE.

◆ m_SubjectAltNames

cASNSequence GrayLib::cX509CrtExt::m_SubjectAltNames

X509_EXT_SubjectAltNames. list of Subject Alternative Names (SAN) (Only dNSName supported).

◆ m_uExtTypes

UINT32 GrayLib::cX509CrtExt::m_uExtTypes

Bit mask containing detected and parsed extensions X509_EXT_t.


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