Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cX509CrtExt.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cX509CrtExt_H
6 #define _INC_cX509CrtExt_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 
11 #include "cX509Common.h"
12 #include "cX509Reader.h"
13 #include "../File/cASNSequence.h"
14 #include "../File/cASNSets.h"
15 
16 namespace GrayLib
17 {
19  {
25  };
26 
28  {
31  public:
32  UINT32 m_uExtTypes;
33 
34  bool m_bCAIsTrue;
35  // maximum length of certificate chains below this certificate (only for CA certificates, -1 is unlimited)
37 
38  BYTE m_nKeyUsage;
39 
40  // (e.g. X509_NSCERT_SSL_CLIENT | X509_NSCERT_EMAIL)
42 
44 
46 
47  protected:
48  static HRESULT GetStr_NSCertType(StrBuilder& s, BYTE nNSCertType);
49  static HRESULT GetStr_KeyUsage(StrBuilder& s, BYTE nKeyUsage);
50  static HRESULT GetStr_ExtKeyUsage(StrBuilder& s, const cASNSequence& rExtKeyUsage);
51 
52  HRESULT Read_BasicConstraints(cASNReader& r);
53  HRESULT Read_KeyUsage(cASNReader& r);
54  HRESULT Read_NSCertType(cASNReader& r);
55  HRESULT Read_ExtKeyUsage(cASNReader& r);
56  HRESULT Read_SubjectAltNames(cASNReader& r);
57 
58  HRESULT ReadExtensionList1(cASNReader& r);
59 
60  HRESULT Write_BasicConstraints(OUT cASNSets& sets) const;
61  HRESULT Write_KeyUsage(OUT cASNSets& sets) const;
62  HRESULT Write_NSCertType(OUT cASNSets& sets) const;
63  HRESULT Write_ExtKeyUsage(OUT cASNSets& r) const;
64  HRESULT Write_SubjectAltNames(OUT cASNSets& r) const;
65 
66  public:
67  cX509CrtExt() noexcept
68  : m_uExtTypes(X509_EXT_Null)
69  , m_bCAIsTrue(false)
70  , m_nMaxPathLen(0)
71  , m_nKeyUsage(X509_KeyUsage_NONE)
72  , m_nNSCertType(X509_NSCERT_0)
73  {
74  }
75 
76  bool HasExtType(X509_EXT_t e) const noexcept
77  {
78  return m_uExtTypes & e;
79  }
80 
81  void SetEmpty()
82  {
83  m_uExtTypes = X509_EXT_Null;
84  m_ExtKeyUsage.SetEmptySeq();
85  m_SubjectAltNames.SetEmptySeq();
86  }
87 
89  {
96  //
97  if (this->HasExtType(X509_EXT_KeyUsage) &&
98  (this->m_nKeyUsage & usage) != usage)
99  return false;
100  return true;
101  }
102 
103  bool IsExtKeyUsage(const char* usage_oid, size_t usage_len) const;
104 
105  HRESULT GetDescription(StrBuilder& s, const char* prefix) const;
106 
107  HRESULT ReadExtensionList(cX509Reader& r);
108 
109  void WriteExtensionList(OUT cASNSets& sets) const;
110 
111  static HRESULT GRAYCALL Write_SubjectKeyIdentifier(OUT cASNSets& sets, const cKeyWrap& rSubjectKey);
112  static HRESULT GRAYCALL Write_AuthorityKeyIdentifier(OUT cASNSets& sets, const cKeyWrap& rIssuerKey);
113  };
114 }
115 
116 #endif // _INC_cX509CrtExt_H
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cASNReader.h:22
Definition: cASNSequence.h:20
void SetEmptySeq()
Definition: cASNSequence.h:54
Definition: cASNSets.h:58
Definition: cKeyWrap.h:25
Definition: cX509CrtExt.h:28
bool HasExtType(X509_EXT_t e) const noexcept
Definition: cX509CrtExt.h:76
UINT32 m_uExtTypes
Bit mask containing detected and parsed extensions X509_EXT_t.
Definition: cX509CrtExt.h:32
int m_nMaxPathLen
X509_EXT_BasicConstraints. The maximum path length to the root certificate. Path length is 1 higher t...
Definition: cX509CrtExt.h:36
bool IsKeyUsageValid(X509_KeyUsage_TYPE usage) const
Definition: cX509CrtExt.h:88
BYTE m_nNSCertType
X509_EXT_NSCertType. Netscape certificate type extension value: X509_NSCERT_TYPE.
Definition: cX509CrtExt.h:41
cX509CrtExt() noexcept
Definition: cX509CrtExt.h:67
void SetEmpty()
Definition: cX509CrtExt.h:81
BYTE m_nKeyUsage
X509_EXT_KeyUsage. key usage extension value: X509_KeyUsage_TYPE.
Definition: cX509CrtExt.h:38
cASNSequence m_SubjectAltNames
X509_EXT_SubjectAltNames. list of Subject Alternative Names (SAN) (Only dNSName supported).
Definition: cX509CrtExt.h:43
cASNSequence m_ExtKeyUsage
X509_EXT_ExtKeyUsage. list of extended key usage OIDs. X509_KeyUsage_TYPE.
Definition: cX509CrtExt.h:45
bool m_bCAIsTrue
X509_EXT_BasicConstraints. if this certificate belongs to a CA.
Definition: cX509CrtExt.h:34
Definition: cX509Reader.h:19
Definition: StrBuilder.h:18
Definition: cMesh.h:22
X509_KeyUsage_TYPE
Definition: cX509.h:27
@ X509_KeyUsage_NONE
Definition: cX509.h:30
X509_CRT_VERSION_TYPE
Definition: cX509CrtExt.h:19
@ X509_CRT_VERSION_1
Definition: cX509CrtExt.h:22
@ X509_CRT_VERSION_2
Definition: cX509CrtExt.h:23
@ X509_CRT_VERSION_3
Definition: cX509CrtExt.h:24
X509_EXT_t
Definition: cX509.h:71
@ X509_EXT_Null
Definition: cX509.h:85
@ X509_EXT_KeyUsage
OID_KEY_USAGE.
Definition: cX509.h:86
@ X509_NSCERT_0
Definition: cX509.h:100