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 
18 #ifdef __cplusplus
19 namespace P6R {
20 extern "C" {
21 #endif
22 
23 
32 static const P6CERTFLAGS P6CERT_NOFLAGS = 0x00000000;
33 
34 
45 #undef INTERFACE
46 #define INTERFACE p6IEnumCertIDs
48 {
50  P6DECLCOMMETHOD(next)(P6THIS_ P6UINT32 cElements,const P6CHAR **parElements,P6UINT32* pcReturned) P6PURE;
52 };
53 
54 // {4B5EFEE5-1CA5-4477-BB0A-3540E615D2B8}
55 #define IF_p6IEnumCertIDs {0x4B5EFEE5,0x1CA5,0x4477,{0xBB,0x0A,0x35,0x40,0xE6,0x15,0xD2,0xB8}}
56 
58 static const P6CERTMATCHFLAGS P6CMF_NOFLAGS = 0x00000000;
59 static const P6CERTMATCHFLAGS P6CMF_DISABLE_WILDCARDS = 0x00000001;
60 static const P6CERTMATCHFLAGS P6CMF_ALWAYS_CHECK_SUBJECT = 0x00000002;
61 
62 
78 static const P6CERTKEYUSAGE P6CKU_USAGEMASK = 0x000001ff;
79 static const P6CERTKEYUSAGE P6CKU_DIGITAL_SIGNATURE = 0x00000001;
80 static const P6CERTKEYUSAGE P6CKU_NON_REPUDIATION = 0x00000002;
81 static const P6CERTKEYUSAGE P6CKU_KEY_ENCIPHERMENT = 0x00000004;
82 static const P6CERTKEYUSAGE P6CKU_DATA_ENCIPHERMENT = 0x00000008;
83 static const P6CERTKEYUSAGE P6CKU_KEY_AGREEMENT = 0x00000010;
84 static const P6CERTKEYUSAGE P6CKU_KEY_CERT_SIGN = 0x00000020;
85 static const P6CERTKEYUSAGE P6CKU_CRL_SIGN = 0x00000040;
86 static const P6CERTKEYUSAGE P6CKU_ENCIPHER_ONLY = 0x00000080;
87 static const P6CERTKEYUSAGE P6CKU_DECIPHER_ONLY = 0x00000100;
88 
89 static const P6CERTKEYUSAGE P6CEKU_EXUSAGEMASK = 0x0003fd00;
90 static const P6CERTKEYUSAGE P6CEKU_EXSERVERAUTH = 0x00000200; // OID 1.3.6.1.5.5.7.3.1 TAG id-kp-serverAuth
91 static const P6CERTKEYUSAGE P6CEKU_EXCLIENTAUTH = 0x00000400; // OID 1.3.6.1.5.5.7.3.2 TAG id-kp-clientAuth
92 static const P6CERTKEYUSAGE P6CEKU_EXCODESIGNING = 0x00000800; // OID 1.3.6.1.5.5.7.3.3 TAG id-kp-codeSigning
93 static const P6CERTKEYUSAGE P6CEKU_EXEMAILPROTECTION = 0x00001000; // OID 1.3.6.1.5.5.7.3.4 TAG id-kp-emailProtection
94 static const P6CERTKEYUSAGE P6CEKU_EXTIMESTAMPING = 0x00002000; // OID 1.3.6.1.5.5.7.3.8 TAG id-kp-timeStamping
95 static const P6CERTKEYUSAGE P6CEKU_EXOCSPSIGNING = 0x00004000; // OID 1.3.6.1.5.5.7.3.9 TAG id-kp-OCSPSigning
96 static const P6CERTKEYUSAGE P6CEKU_EXMSCODEIND = 0x00008000; // OID 1.3.6.1.4.1.311.2.1.21 TAG msCodeInd - "Microsoft Individual Code Signing"
97 static const P6CERTKEYUSAGE P6CEKU_EXMSCODECOM = 0x00010000; // OID 1.3.6.1.4.1.311.2.1.22 TAG msCodeCom - "Microsoft Commercial Code Signing"
98 static const P6CERTKEYUSAGE P6CEKU_EXMSCTLSIGN = 0x00020000; // OID 1.3.6.1.4.1.311.10.3.1 TAG msCTLSign - "Microsoft Trust List Signing"
99 static const P6CERTKEYUSAGE P6CEKU_EXMSSGC = 0x00040000; // OID 1.3.6.1.4.1.311.10.3.3 TAG msSGC - "Microsoft Server Gated Crypto"
100 static const P6CERTKEYUSAGE P6CEKU_EXMSEFS = 0x00080000; // OID 1.3.6.1.4.1.311.10.3.4 TAG msEFS - "Microsoft Encrypted File System"
101 static const P6CERTKEYUSAGE P6CEKU_EXNSSGC = 0x00100000; // OID 2.16.840.1.113730.4.1 TAG nsSGC - "Netscape Server Gated Crypto"
102 
109 #undef INTERFACE
110 #define INTERFACE p6ICert
112 {
133  P6DECLCOMMETHOD(getDistinguishedName)(P6THIS_ P6WCHAR* pBuffer, P6SIZE cBuffer, P6SIZE* pcWritten ) P6PURE;
134 
147  P6DECLCOMMETHOD(serializeToFile)(P6THIS_ const P6WCHAR* pFile ) P6PURE;
148 
168  P6DECLCOMMETHOD(serializeToBuffer)(P6THIS_ P6VOID* pBuffer, P6UINT32 cBuffer, P6UINT32* pcBytesWritten ) P6PURE;
169 
189  P6DECLCOMMETHOD(serializeDERToBuffer)(P6THIS_ P6VOID* pBuffer, P6UINT32 cBuffer, P6UINT32* pcBytesWritten ) P6PURE;
190 
206  P6DECLCOMMETHOD(printCertificate)(P6THIS_ const P6WCHAR* pCertFile ) P6PURE;
207 
220  P6DECLCOMMETHOD(isEquals)(P6THIS_ p6ICert* pOtherCert, P6BOOL* pbEqual ) P6PURE;
221 
237  P6DECLCOMMETHOD(getFingerprint)(P6THIS_ P6DIGESTS nDigest, P6BYTE* pBuffer, P6SIZE cBuffer, P6SIZE *pcWritten ) P6PURE;
238 
254  P6DECLCOMMETHOD(getFingerprintHexStr)(P6THIS_ P6DIGESTS nDigest, P6CHAR* pBuffer, P6SIZE cBuffer, P6SIZE *pcWritten ) P6PURE;
255 
271  P6DECLCOMMETHOD(getFingerprintHexStrW)(P6THIS_ P6DIGESTS nDigest, P6WCHAR* pBuffer, P6SIZE cBuffer, P6SIZE *pcWritten ) P6PURE;
272 
282  P6DECLCOMMETHOD(enumCertIDs)(P6THIS_ p6IEnumCertIDs** ppEnum) P6PURE;
283 
300  P6DECLCOMMETHOD(matchDnsName)(P6THIS_ const P6CHAR *pszDnsName,P6CERTMATCHFLAGS fFlags) P6PURE;
301 
319  P6DECLCOMMETHOD(matchDnsNameW)(P6THIS_ const P6WCHAR *pszDnsName,P6CERTMATCHFLAGS fFlags) P6PURE;
320 
334  P6DECLCOMMETHOD(getKeyUsage)(P6THIS_ P6CERTKEYUSAGE *pUsage) P6PURE;
335 
351  P6DECLCOMMETHOD(getSubjectHash)(P6THIS_ P6SIZE *pHash) P6PURE;
352 
353  P6DECLCOMMETHOD(getIssuerName)(P6THIS_ P6WCHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
354 
370  P6DECLCOMMETHOD(getIssuerHash)(P6THIS_ P6SIZE *pHash) P6PURE;
371 
372  P6DECLCOMMETHOD(getSerialNumber)(P6THIS_ P6WCHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
373 
374  P6DECLCOMMETHOD(getVersionNumber)(P6THIS_ P6UINT32 *pVersion) P6PURE;
375 
393  P6DECLCOMMETHOD(getPublicKey)(P6THIS_ P6UCHAR* pBuffer, P6SIZE cBuffer, P6SIZE* pcWritten ) P6PURE;
394 };
395 
396 // {204FAA90-579C-4bc9-80A3-ECB9D4EE3105}
397 #define IF_p6ICert {0x204faa90,0x579c,0x4bc9,{0x80,0xa3,0xec,0xb9,0xd4,0xee,0x31,0x5}}
398 
399 
406 #undef INTERFACE
407 #define INTERFACE p6ICert2
409 {
430  P6DECLCOMMETHOD(getDistinguishedName)(P6THIS_ P6WCHAR* pBuffer, P6SIZE cBuffer, P6SIZE* pcWritten ) P6PURE;
431 
444  P6DECLCOMMETHOD(serializeToFile)(P6THIS_ const P6WCHAR* pFile ) P6PURE;
445 
465  P6DECLCOMMETHOD(serializeToBuffer)(P6THIS_ P6VOID* pBuffer, P6UINT32 cBuffer, P6UINT32* pcBytesWritten ) P6PURE;
466 
486  P6DECLCOMMETHOD(serializeDERToBuffer)(P6THIS_ P6VOID* pBuffer, P6UINT32 cBuffer, P6UINT32* pcBytesWritten ) P6PURE;
487 
503  P6DECLCOMMETHOD(printCertificate)(P6THIS_ const P6WCHAR* pCertFile ) P6PURE;
504 
517  P6DECLCOMMETHOD(isEquals)(P6THIS_ p6ICert* pOtherCert, P6BOOL* pbEqual ) P6PURE;
518 
534  P6DECLCOMMETHOD(getFingerprint)(P6THIS_ P6DIGESTS nDigest, P6BYTE* pBuffer, P6SIZE cBuffer, P6SIZE *pcWritten ) P6PURE;
535 
551  P6DECLCOMMETHOD(getFingerprintHexStr)(P6THIS_ P6DIGESTS nDigest, P6CHAR* pBuffer, P6SIZE cBuffer, P6SIZE *pcWritten ) P6PURE;
552 
568  P6DECLCOMMETHOD(getFingerprintHexStrW)(P6THIS_ P6DIGESTS nDigest, P6WCHAR* pBuffer, P6SIZE cBuffer, P6SIZE *pcWritten ) P6PURE;
569 
579  P6DECLCOMMETHOD(enumCertIDs)(P6THIS_ p6IEnumCertIDs** ppEnum) P6PURE;
580 
597  P6DECLCOMMETHOD(matchDnsName)(P6THIS_ const P6CHAR *pszDnsName,P6CERTMATCHFLAGS fFlags) P6PURE;
598 
616  P6DECLCOMMETHOD(matchDnsNameW)(P6THIS_ const P6WCHAR *pszDnsName,P6CERTMATCHFLAGS fFlags) P6PURE;
617 
631  P6DECLCOMMETHOD(getKeyUsage)(P6THIS_ P6CERTKEYUSAGE *pUsage) P6PURE;
632 
648  P6DECLCOMMETHOD(getSubjectHash)(P6THIS_ P6SIZE *pHash) P6PURE;
649 
671  P6DECLCOMMETHOD(getIssuerName)(P6THIS_ P6WCHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
672 
688  P6DECLCOMMETHOD(getIssuerHash)(P6THIS_ P6SIZE *pHash) P6PURE;
689 
711  P6DECLCOMMETHOD(getSerialNumber)(P6THIS_ P6WCHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
712 
726  P6DECLCOMMETHOD(getVersionNumber)(P6THIS_ P6UINT32 *pVersion) P6PURE;
727 
745  P6DECLCOMMETHOD(getPublicKey)(P6THIS_ P6UCHAR* pBuffer, P6SIZE cBuffer, P6SIZE* pcWritten ) P6PURE;
746 
764  P6DECLCOMMETHOD(getSubjectPublicKeyInfo)(P6THIS_ P6UCHAR* pBuffer, P6SIZE cBuffer, P6SIZE* pcWritten ) P6PURE;
765 
787  P6DECLCOMMETHOD(getSubjectNameDER)(P6THIS_ P6UCHAR* pBuffer, P6SIZE cBuffer, P6SIZE* pcWritten ) P6PURE;
788 };
789 
790 // {36284E03-4801-4273-91C9-EB2574877CF9}
791 #define IF_p6ICert2 {0x36284e03,0x4801,0x4273,{0x91,0xc9,0xeb,0x25,0x74,0x87,0x7c,0xf9}}
792 
793 
794 // {AAF9C5A8-5EE2-4490-85E1-A897F53DAC16}
795 #define COMP_p6Cert {0xaaf9c5a8,0x5ee2,0x4490,{0x85,0xe1,0xa8,0x97,0xf5,0x3d,0xac,0x16}}
796 
797 
804 #undef INTERFACE
805 #define INTERFACE p6IEnumCerts
807 {
826  P6DECLCOMMETHOD(next)(P6THIS_ P6UINT32 cElements,p6ICert **parElements,P6UINT32 *pcReturned) P6PURE;
827 
834  P6DECLCOMMETHOD(reset)(P6THIS) P6PURE;
835 };
836 
837 // {D3810A32-2F26-4F44-A103-D9AA21610C3D}
838 #define IF_p6IEnumCerts {0xD3810A32,0x2F26,0x4F44,{0xA1,0x03,0xD9,0xAA,0x21,0x61,0x0C,0x3D}}
839 
840 
848 #undef INTERFACE
849 #define INTERFACE p6ICertInit
851 {
863  P6DECLCOMMETHOD(initialize)(P6THIS_ P6CERTFLAGS flags ) P6PURE;
864 
879  P6DECLCOMMETHOD(loadCert)(P6THIS_ const P6WCHAR* pCertFile ) P6PURE;
880 
896  P6DECLCOMMETHOD(loadCertFromBuffer)(P6THIS_ P6VOID* pBuffer, P6UINT32 cBuffer ) P6PURE;
897 
913  P6DECLCOMMETHOD(loadCertDERFromBuffer)(P6THIS_ P6VOID* pBuffer, P6UINT32 cBuffer ) P6PURE;
914 
962  P6DECLCOMMETHOD(loadCertFromBuffer2)(P6THIS_ P6VOID* pBuffer, P6UINT32 cBuffer, P6CRYPTCERTFMT nFormat, const P6CHAR *pszPassPhrase,p6ICert **parCACerts,P6UINT32 cCACerts,P6UINT32 *pcReturned ) P6PURE;
963 
1006  P6DECLCOMMETHOD(loadCertFromFile2)(P6THIS_ const P6WCHAR *pszCertFile, P6CRYPTCERTFMT nFormat, const P6CHAR *pszPassPhrase, p6ICert **parCACerts, P6UINT32 cCACerts, P6UINT32 *pcReturned) P6PURE;
1007 };
1008 
1009 // {D467D71E-DE03-4810-929B-C65B4A9C4E85}
1010 #define IF_p6ICertInit {0xd467d71e,0xde03,0x4810,{0x92,0x9b,0xc6,0x5b,0x4a,0x9c,0x4e,0x85}}
1011 
1012 #ifdef __cplusplus
1013 } /* extern "C" */
1014 } // namespace
1015 #endif
1016 
1017 #endif
P6UINT32 P6CERTFLAGS
P6CERTFLAGS.
Definition: p6cert.h:31
size_t P6SIZE
Definition: p6types.h:90
This interface is used to enumerate a set of certificates.
Definition: p6cert.h:806
unsigned char P6UCHAR
Definition: p6types.h:108
Cryptography component definitions.
uint32_t P6UINT32
Definition: p6types.h:77
#define P6DECLAREICOM
Definition: p6defs.h:191
#define P6PURE
Definition: p6defs.h:192
unsigned char P6BOOL
Boolean type.
Definition: p6types.h:133
P6UINT32 P6CERTKEYUSAGE
P6R::P6CERTUSAGE defines values returned by the p6ICert::getKeyUsage() method.
Definition: p6cert.h:77
wchar_t P6WCHAR
Wide character type see p6i18n.h.
Definition: p6types.h:111
P6CRYPTCERTFMT
Defines the supported encodings for certificate data.
Definition: p6crypto.h:250
The base interface all [p6]COM components must derive from and implement.
Definition: p6comdef.h:97
An enumerator that enumerates a certificates RFC 6125 DNS-IDs and CN-IDs.
Definition: p6cert.h:47
P6UINT8 P6BYTE
Definition: p6types.h:73
P6UINT32 P6CERTMATCHFLAGS
Definition: p6cert.h:57
Used to initialize and load a certificate from a file or buffer.
Definition: p6cert.h:850
This interface allows the caller to access parts of an X509 V3 certificate for use in protocols and i...
Definition: p6cert.h:111
#define P6DECLCOMMETHOD(method)
Definition: p6defs.h:189
#define P6THIS_
Definition: p6defs.h:193
Interface definition for the one way digest functions.
This interface allows the caller to access parts of an X509 V3 certificate for use in protocols and i...
Definition: p6cert.h:408
void P6VOID
Definition: p6types.h:109
#define P6THIS
Definition: p6defs.h:194
P6DIGESTS
P6DIGESTS.
Definition: p6digest.h:43
char P6CHAR
Narrow character type.
Definition: p6types.h:105
#define P6DECLAREIF_(iface, baseif)
Definition: p6defs.h:188