Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
p6cert.h
Go to the documentation of this file.
1 
11 #ifndef P6CERT_H__
12 #define P6CERT_H__ 1
13 
14 #include "p6crypto.h"
15 #include "p6digest.h"
16 
17 namespace P6R {
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 
32 const P6CERTFLAGS P6CERT_NOFLAGS = 0x00000000;
33 
34 
40 interface p6ICertInit : public p6ICom
41 {
52  P6COMMETHOD initialize( P6CERTFLAGS flags ) = 0;
53 
68  P6COMMETHOD loadCert( const P6WCHAR* pCertFile ) = 0;
69 
85  P6COMMETHOD loadCertFromBuffer( P6VOID* pBuffer, P6UINT32 cBuffer ) = 0;
86 
102  P6COMMETHOD loadCertDERFromBuffer( P6VOID* pBuffer, P6UINT32 cBuffer ) = 0;
103 };
104 
105 // {D467D71E-DE03-4810-929B-C65B4A9C4E85}
106 #define IF_p6ICertInit {0xd467d71e,0xde03,0x4810,{0x92,0x9b,0xc6,0x5b,0x4a,0x9c,0x4e,0x85}}
107 
108 
119 interface p6IEnumCertIDs : public p6ICom
120 {
121  P6COMMETHOD next(P6R::P6UINT32 cElements,const P6R::P6CHAR **parElements,P6R::P6UINT32* pcReturned) = 0;
122  P6COMMETHOD reset(void) = 0;
123 };
124 
125 // {4B5EFEE5-1CA5-4477-BB0A-3540E615D2B8}
126 #define IF_p6IEnumCertIDs {0x4B5EFEE5,0x1CA5,0x4477,{0xBB,0x0A,0x35,0x40,0xE6,0x15,0xD2,0xB8}}
127 
129 const P6CERTMATCHFLAGS P6CMF_NOFLAGS = 0x00000000;
130 const P6CERTMATCHFLAGS P6CMF_DISABLE_WILDCARDS = 0x00000001;
131 const P6CERTMATCHFLAGS P6CMF_ALWAYS_CHECK_SUBJECT = 0x00000002;
132 
133 
149 const P6CERTKEYUSAGE P6CKU_USAGEMASK = 0x000001ff;
150 const P6CERTKEYUSAGE P6CKU_DIGITAL_SIGNATURE = 0x00000001;
151 const P6CERTKEYUSAGE P6CKU_NON_REPUDIATION = 0x00000002;
152 const P6CERTKEYUSAGE P6CKU_KEY_ENCIPHERMENT = 0x00000004;
153 const P6CERTKEYUSAGE P6CKU_DATA_ENCIPHERMENT = 0x00000008;
154 const P6CERTKEYUSAGE P6CKU_KEY_AGREEMENT = 0x00000010;
155 const P6CERTKEYUSAGE P6CKU_KEY_CERT_SIGN = 0x00000020;
156 const P6CERTKEYUSAGE P6CKU_CRL_SIGN = 0x00000040;
157 const P6CERTKEYUSAGE P6CKU_ENCIPHER_ONLY = 0x00000080;
158 const P6CERTKEYUSAGE P6CKU_DECIPHER_ONLY = 0x00000100;
159 
160 const P6CERTKEYUSAGE P6CEKU_EXUSAGEMASK = 0x0003fd00;
161 const P6CERTKEYUSAGE P6CEKU_EXSERVERAUTH = 0x00000200; // OID 1.3.6.1.5.5.7.3.1 TAG id-kp-serverAuth
162 const P6CERTKEYUSAGE P6CEKU_EXCLIENTAUTH = 0x00000400; // OID 1.3.6.1.5.5.7.3.2 TAG id-kp-clientAuth
163 const P6CERTKEYUSAGE P6CEKU_EXCODESIGNING = 0x00000800; // OID 1.3.6.1.5.5.7.3.3 TAG id-kp-codeSigning
164 const P6CERTKEYUSAGE P6CEKU_EXEMAILPROTECTION = 0x00001000; // OID 1.3.6.1.5.5.7.3.4 TAG id-kp-emailProtection
165 const P6CERTKEYUSAGE P6CEKU_EXTIMESTAMPING = 0x00002000; // OID 1.3.6.1.5.5.7.3.8 TAG id-kp-timeStamping
166 const P6CERTKEYUSAGE P6CEKU_EXOCSPSIGNING = 0x00004000; // OID 1.3.6.1.5.5.7.3.9 TAG id-kp-OCSPSigning
167 const P6CERTKEYUSAGE P6CEKU_EXMSCODEIND = 0x00008000; // OID 1.3.6.1.4.1.311.2.1.21 TAG msCodeInd - "Microsoft Individual Code Signing"
168 const P6CERTKEYUSAGE P6CEKU_EXMSCODECOM = 0x00010000; // OID 1.3.6.1.4.1.311.2.1.22 TAG msCodeCom - "Microsoft Commercial Code Signing"
169 const P6CERTKEYUSAGE P6CEKU_EXMSCTLSIGN = 0x00020000; // OID 1.3.6.1.4.1.311.10.3.1 TAG msCTLSign - "Microsoft Trust List Signing"
170 const P6CERTKEYUSAGE P6CEKU_EXMSSGC = 0x00040000; // OID 1.3.6.1.4.1.311.10.3.3 TAG msSGC - "Microsoft Server Gated Crypto"
171 const P6CERTKEYUSAGE P6CEKU_EXMSEFS = 0x00080000; // OID 1.3.6.1.4.1.311.10.3.4 TAG msEFS - "Microsoft Encrypted File System"
172 const P6CERTKEYUSAGE P6CEKU_EXNSSGC = 0x00100000; // OID 2.16.840.1.113730.4.1 TAG nsSGC - "Netscape Server Gated Crypto"
173 
180 interface p6ICert : public p6ICom
181 {
201  P6COMMETHOD getDistinguishedName( P6WCHAR* pBuffer, P6SIZE cBuffer, P6SIZE* pcWritten ) = 0;
202 
215  P6COMMETHOD serializeToFile( const P6WCHAR* pFile ) = 0;
216 
236  P6COMMETHOD serializeToBuffer( P6VOID* pBuffer, P6UINT32 cBuffer, P6UINT32* pcBytesWritten ) = 0;
237 
257  P6COMMETHOD serializeDERToBuffer( P6VOID* pBuffer, P6UINT32 cBuffer, P6UINT32* pcBytesWritten ) = 0;
258 
274  P6COMMETHOD printCertificate( const P6WCHAR* pCertFile ) = 0;
275 
288  P6COMMETHOD isEquals( p6ICert* pOtherCert, P6BOOL* pbEqual ) = 0;
289 
305  P6COMMETHOD getFingerprint( P6R::P6DIGESTS nDigest, P6R::P6BYTE* pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten ) = 0;
306 
322  P6COMMETHOD getFingerprintHexStr( P6R::P6DIGESTS nDigest, P6R::P6CHAR* pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten ) = 0;
323 
339  P6COMMETHOD getFingerprintHexStrW( P6R::P6DIGESTS nDigest, P6R::P6WCHAR* pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten ) = 0;
340 
351 
368  P6COMMETHOD matchDnsName(const P6R::P6CHAR *pszDnsName,P6CERTMATCHFLAGS fFlags) = 0;
369 
387  P6COMMETHOD matchDnsNameW(const P6R::P6WCHAR *pszDnsName,P6CERTMATCHFLAGS fFlags) = 0;
388 
403 
420 
421  P6COMMETHOD getIssuerName(P6R::P6WCHAR *pBuffer,P6R::P6SIZE cBuffer,P6R::P6SIZE *pcWritten) = 0;
422 
439 
440  P6COMMETHOD getSerialNumber(P6R::P6WCHAR *pBuffer,P6R::P6SIZE cBuffer,P6R::P6SIZE *pcWritten) = 0;
441 
443 
461  P6COMMETHOD getPublicKey( P6UCHAR* pBuffer, P6SIZE cBuffer, P6SIZE* pcWritten ) = 0;
462 
463  //P6COMMETHOD getNotBefore(P6R::P6UINT32 *pHash) = 0;
464  //P6COMMETHOD getNotAfter(P6R::P6UINT32 *pHash) = 0;
465 };
466 
467 // {204FAA90-579C-4bc9-80A3-ECB9D4EE3105}
468 #define IF_p6ICert {0x204faa90,0x579c,0x4bc9,{0x80,0xa3,0xec,0xb9,0xd4,0xee,0x31,0x5}}
469 
470 // {AAF9C5A8-5EE2-4490-85E1-A897F53DAC16}
471 #define COMP_p6Cert {0xaaf9c5a8,0x5ee2,0x4490,{0x85,0xe1,0xa8,0x97,0xf5,0x3d,0xac,0x16}}
472 
473 
474 #ifdef __cplusplus
475 }
476 #endif
477 
478 } // namespace
479 
480 
481 #endif
P6UINT32 P6CERTFLAGS
P6CERTFLAGS.
Definition: p6cert.h:31
size_t P6SIZE
Definition: p6types.h:62
unsigned char P6UCHAR
Definition: p6types.h:74
virtual P6R::P6ERR getFingerprintHexStrW(P6R::P6DIGESTS nDigest, P6R::P6WCHAR *pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten)=0
This method is used to get a fingerprint (using the requested digest method) for the certificate...
Cryptography component definitions.
virtual P6R::P6ERR serializeToBuffer(P6VOID *pBuffer, P6UINT32 cBuffer, P6UINT32 *pcBytesWritten)=0
Write the certificate in this component to the provided buffer in PEM format.
unsigned int P6UINT32
Definition: p6types.h:40
virtual P6R::P6ERR enumCertIDs(P6R::p6IEnumCertIDs **ppEnum)=0
Returns an enumerator that provides access to the certicates RFC 6125 DNS-IDs and CN-IDs...
const P6CERTKEYUSAGE P6CEKU_EXCODESIGNING
Definition: p6cert.h:163
const P6CERTKEYUSAGE P6CEKU_EXMSCODEIND
Definition: p6cert.h:167
virtual P6R::P6ERR loadCertDERFromBuffer(P6VOID *pBuffer, P6UINT32 cBuffer)=0
This function loads the certificate (in DER ASN.1 format) contained in the specified buffer...
const P6CERTFLAGS P6CERT_NOFLAGS
Definition: p6cert.h:32
virtual P6R::P6ERR serializeToFile(const P6WCHAR *pFile)=0
Write the certificate in this component to the file defined in the parameter in PEM format...
bool P6BOOL
Boolean type.
Definition: p6types.h:101
virtual P6R::P6ERR getKeyUsage(P6R::P6CERTKEYUSAGE *pUsage)=0
Retrieves the key usage extension (OID 2.5.29.15) bits for the certificate.
const P6CERTMATCHFLAGS P6CMF_NOFLAGS
Definition: p6cert.h:129
P6UINT32 P6CERTKEYUSAGE
P6R::P6CERTUSAGE defines values returned by the p6ICert::getKeyUsage() method.
Definition: p6cert.h:148
const P6CERTKEYUSAGE P6CEKU_EXMSEFS
Definition: p6cert.h:171
virtual P6R::P6ERR printCertificate(const P6WCHAR *pCertFile)=0
Print the contents of the certificate in parsed form to a file.
const P6CERTKEYUSAGE P6CEKU_EXEMAILPROTECTION
Definition: p6cert.h:164
const P6CERTKEYUSAGE P6CKU_DIGITAL_SIGNATURE
Definition: p6cert.h:150
virtual P6R::P6ERR getIssuerName(P6R::P6WCHAR *pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten)=0
const P6CERTKEYUSAGE P6CEKU_EXSERVERAUTH
Definition: p6cert.h:161
virtual P6R::P6ERR initialize(P6CERTFLAGS flags)=0
Place the component in its initial state.
virtual P6R::P6ERR isEquals(p6ICert *pOtherCert, P6BOOL *pbEqual)=0
Is the certificate in the 'pOtherCert' parameter the same as the certificate stored in this component...
const P6CERTKEYUSAGE P6CEKU_EXMSCODECOM
Definition: p6cert.h:168
virtual P6R::P6ERR loadCertFromBuffer(P6VOID *pBuffer, P6UINT32 cBuffer)=0
This function loads the certificate (in PEM format) contained in the specified buffer.
virtual P6R::P6ERR getFingerprint(P6R::P6DIGESTS nDigest, P6R::P6BYTE *pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten)=0
This method is used to get a fingerprint (using the requested digest method) for the certificate...
const P6CERTKEYUSAGE P6CEKU_EXOCSPSIGNING
Definition: p6cert.h:166
const P6CERTKEYUSAGE P6CEKU_EXMSSGC
Definition: p6cert.h:170
wchar_t P6WCHAR
Wide character type see p6i18n.h.
Definition: p6types.h:76
virtual P6R::P6ERR matchDnsNameW(const P6R::P6WCHAR *pszDnsName, P6CERTMATCHFLAGS fFlags)=0
Matches the hostname against the certificate hostname.
const P6CERTMATCHFLAGS P6CMF_ALWAYS_CHECK_SUBJECT
Definition: p6cert.h:131
const P6CERTKEYUSAGE P6CKU_KEY_ENCIPHERMENT
Definition: p6cert.h:152
The base interface all [p6]COM components must derive from and implement.
Definition: p6comdef.h:96
const P6CERTKEYUSAGE P6CEKU_EXTIMESTAMPING
Definition: p6cert.h:165
virtual P6R::P6ERR serializeDERToBuffer(P6VOID *pBuffer, P6UINT32 cBuffer, P6UINT32 *pcBytesWritten)=0
Write the certificate in this component to the provided buffer in DER ASN.1 format.
const P6CERTKEYUSAGE P6CKU_KEY_CERT_SIGN
Definition: p6cert.h:155
virtual P6R::P6ERR getDistinguishedName(P6WCHAR *pBuffer, P6SIZE cBuffer, P6SIZE *pcWritten)=0
Extract an RFC 2253 compatible representation of the Subject name of the certificate.
const P6CERTKEYUSAGE P6CKU_USAGEMASK
Definition: p6cert.h:149
virtual P6R::P6ERR getSerialNumber(P6R::P6WCHAR *pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten)=0
An enumerator that enumerates a certificates RFC 6125 DNS-IDs and CN-IDs.
Definition: p6cert.h:119
P6UINT8 P6BYTE
Definition: p6types.h:32
P6UINT32 P6CERTMATCHFLAGS
Definition: p6cert.h:128
const P6CERTKEYUSAGE P6CKU_NON_REPUDIATION
Definition: p6cert.h:151
virtual P6R::P6ERR matchDnsName(const P6R::P6CHAR *pszDnsName, P6CERTMATCHFLAGS fFlags)=0
Matches the hostname against the certificate hostname.
Used to initialize and load a certificate from a file or buffer.
Definition: p6cert.h:40
This interface allows the caller to access parts of an X509 V3 certificate for use in protocols and i...
Definition: p6cert.h:180
const P6CERTKEYUSAGE P6CKU_DECIPHER_ONLY
Definition: p6cert.h:158
const P6CERTMATCHFLAGS P6CMF_DISABLE_WILDCARDS
Definition: p6cert.h:130
virtual P6R::P6ERR loadCert(const P6WCHAR *pCertFile)=0
This function loads the certificate (in PEM format) contained in the specified file.
virtual P6R::P6ERR reset(void)=0
const P6CERTKEYUSAGE P6CEKU_EXMSCTLSIGN
Definition: p6cert.h:169
const P6CERTKEYUSAGE P6CKU_CRL_SIGN
Definition: p6cert.h:156
#define P6COMMETHOD
Definition: p6types.h:872
virtual P6R::P6ERR getFingerprintHexStr(P6R::P6DIGESTS nDigest, P6R::P6CHAR *pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten)=0
This method is used to get a fingerprint (using the requested digest method) for the certificate...
const P6CERTKEYUSAGE P6CKU_DATA_ENCIPHERMENT
Definition: p6cert.h:153
virtual P6R::P6ERR getIssuerHash(P6R::P6SIZE *pHash)=0
This method returns a hash of the issuer field that can by used to easily compare the issue field...
Interface definition for the one way digest functions.
const P6CERTKEYUSAGE P6CEKU_EXCLIENTAUTH
Definition: p6cert.h:162
const P6CERTKEYUSAGE P6CKU_ENCIPHER_ONLY
Definition: p6cert.h:157
const P6CERTKEYUSAGE P6CEKU_EXUSAGEMASK
Definition: p6cert.h:160
const P6CERTKEYUSAGE P6CKU_KEY_AGREEMENT
Definition: p6cert.h:154
void P6VOID
Definition: p6types.h:75
virtual P6R::P6ERR next(P6R::P6UINT32 cElements, const P6R::P6CHAR **parElements, P6R::P6UINT32 *pcReturned)=0
const P6CERTKEYUSAGE P6CEKU_EXNSSGC
Definition: p6cert.h:172
virtual P6R::P6ERR getSubjectHash(P6R::P6SIZE *pHash)=0
This method returns a hash of the subject field that can by used to easily compare the subject field...
virtual P6R::P6ERR getVersionNumber(P6R::P6UINT32 *pVersion)=0
virtual P6R::P6ERR getPublicKey(P6UCHAR *pBuffer, P6SIZE cBuffer, P6SIZE *pcWritten)=0
This method is used to get a copy of the public key stored in the certificate (in DER format)...
P6DIGESTS
Definition: p6digest.h:295
char P6CHAR
Narrow character type.
Definition: p6types.h:71