Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cX509Crt.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cX509Crt_H
6 #define _INC_cX509Crt_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 
11 #include "cX509CrtExt.h"
12 #include "cX509Crl.h"
13 #include "cX509Reader.h"
14 #include "../File/cASNSequence.h"
15 #include "../File/cASNSets.h"
16 
17 namespace GrayLib
18 {
20  {
26 
27  typedef cX509Common SUPER_t;
28 
29  public:
30  static const char* k_pszPEM;
31 
33 
35 
38 
41 
43 
46 
48 
50 
51  private:
52  virtual HRESULT ReadFromDer1(const BYTE* pBuffer, size_t buflen) override;
53 
54  void SetEmptyX1();
55 
56  static bool VertifyCN_Wildcard(const char* cn, const cASNBuf& name);
57  bool VerifyCN(const char* cn) const;
58 
59  bool IsMyParent(const cX509Crt* pCrtParent) const;
60  bool VerifyCrtIsMyParent(const cX509Crt* parent, bool top, bool bottom) const;
61 
62  HRESULT VerifyCrtTop(const cX509Crt* pCrtCA, const cX509Crl* pCrl, int path_cnt, OUT X509_Verify_t& rFlags, IX509VerifyCert* pVerifyCert) const;
63  HRESULT VerifyCrtChild(const cX509Crt* parent, const cX509Crt* pCrtCA, const cX509Crl* pCrl, int path_cnt, OUT X509_Verify_t& rFlags, IX509VerifyCert* pVerifyCert) const;
64 
65  public:
66  cX509Crt() noexcept
67  : m_pNextCrt(nullptr)
68  {
69  }
70 
72  {
73  SetEmptyX();
74  }
75 
76  void put_SerialNumber(const cBigUnsigned& serial)
77  {
80  this->m_SerialNumber.SetAlloc(ASN_INTEGER, serial.get_BinarySize(), serial.get_BlockPtrC());
81  }
82 
83  virtual HRESULT GetDescription(StrBuilder& s, const char* prefix) const override;
84 
85  X509_Verify_t VerifyKeyUsage(X509_KeyUsage_TYPE usage, bool bEndpointIsServer) const;
86 
87  virtual HRESULT ReadFromDER(const BYTE* pBuffer, size_t buflen) override;
88  virtual HRESULT ReadFromUnk(const BYTE* pBuffer, size_t buflen) override;
89 
97  //
98  HRESULT ReadCrtsFromDir(const FILECHAR_t* pszCertDir);
99 
105  //
106  static HRESULT GetVerifyStatusText(StrBuilder& s, const char* prefix, X509_Verify_t flags);
107 
108  X509_Verify_t VerifyCrl(const cX509Crt* pCrtCA, const cX509Crl* pCrl) const;
109 
110  HRESULT VerifyCrt(const cX509Crt* pCrtCA, const cX509Crl* pCrl, const char* cn, OUT X509_Verify_t& rFlags, IX509VerifyCert* pVerifyCert) const;
111 
112  virtual void SetEmptyX() override;
113 
114  HRESULT WriteToDER(BYTE* pBuffer, size_t size, const cASNSets& extensions2, const cKeyWrap& rIssuerKey, IRandomNoise* pRandom);
115 
116  HRESULT WriteToPEM(char* pOut, StrLen_t size, const cASNSets& extensions2, const cKeyWrap& rIssuerKey, IRandomNoise* pRandom);
117 
119  };
120 }
121 
122 #endif // _INC_cX509Crt_H
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cASN.h:184
bool SetAlloc(ASN_TYPE eASNTag, size_t nSize, const void *pData=nullptr)
Definition: cASN.h:219
Definition: cASN.h:78
Definition: cASNSets.h:58
Definition: cBigUnsigned.h:22
const BLOCK_t * get_BlockPtrC() const noexcept
Definition: cBitArray.h:242
size_t get_BinarySize() const
Definition: cBitArray.h:688
Definition: cKeyWrap.h:25
Definition: cX509Common.h:24
Definition: cX509Crl.h:59
Definition: cX509CrtExt.h:28
Definition: cX509Crt.h:20
cX509CrtExt m_Ext
optional extensions. AKA ExtensionList.
Definition: cX509Crt.h:47
cX509Crt() noexcept
Definition: cX509Crt.h:66
static const char * k_pszPEM
"CERTIFICATE"
Definition: cX509Crt.h:30
cASNBuf m_issuer_id
Optional X.509 v2/v3 issuer unique identifier. UNUSED. X509_EXT_AUTHORITY_KEY_IDENTIFIER/OID_AUTHORIT...
Definition: cX509Crt.h:44
cASNSets m_issuer
The parsed issuer (named information object). e.g. "CN=SDF ???".
Definition: cX509Crt.h:34
cASNSets m_subject
The parsed m_subject_raw (named information object).
Definition: cX509Crt.h:40
cTimeUnits m_tValidFrom
Start time of certificate validity.
Definition: cX509Crt.h:36
cKeyWrap m_SubjectPublicKey
Container for the public key context. "SubjectPublicKeyInfo".
Definition: cX509Crt.h:42
cRefPtr< cX509Crt > m_pNextCrt
Next certificate in the CA-chain.
Definition: cX509Crt.h:49
cASNBufAlloc m_SerialNumber
Unique binary id for certificate issued by a specific CA. CertificateSerialNumber (RFC5280 size max =...
Definition: cX509Crt.h:32
cTimeUnits m_tValidTo
End time of certificate validity.
Definition: cX509Crt.h:37
~cX509Crt()
Definition: cX509Crt.h:71
UNITTEST_FRIEND(cX509Crt)
void put_SerialNumber(const cBigUnsigned &serial)
Definition: cX509Crt.h:76
cASNBuf m_subject_id
Optional X.509 v2/v3 subject unique identifier. UNUSED. X509_EXT_SUBJECT_KEY_IDENTIFIER/OID_SUBJECT_K...
Definition: cX509Crt.h:45
cASNBuf m_subject_raw
for use in SSL_CERTIFICATE_REQUEST
Definition: cX509Crt.h:39
Definition: StrBuilder.h:18
Definition: cRefPtr.h:225
Definition: cTimeUnits.h:146
Definition: cX509.h:119
Definition: cMesh.h:22
@ ASN_INTEGER
Definition: cASN.h:37
X509_Verify_t
Definition: cX509.h:41
X509_KeyUsage_TYPE
Definition: cX509.h:27
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
Definition: cRandom.h:19