OLD | NEW |
| (Empty) |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
4 | |
5 | |
6 #ifndef _P12_H_ | |
7 #define _P12_H_ | |
8 | |
9 #include "secoid.h" | |
10 #include "key.h" | |
11 #include "secpkcs7.h" | |
12 #include "p12t.h" | |
13 | |
14 typedef int (PR_CALLBACK * PKCS12OpenFunction)(void *arg); | |
15 typedef int (PR_CALLBACK * PKCS12ReadFunction)(void *arg, | |
16 unsigned char *buffer, | |
17 unsigned int *lenRead, | |
18 unsigned int maxLen); | |
19 typedef int (PR_CALLBACK * PKCS12WriteFunction)(void *arg, | |
20 unsigned char *buffer, | |
21 unsigned int *bufLen, | |
22 unsigned int *lenWritten); | |
23 typedef int (PR_CALLBACK * PKCS12CloseFunction)(void *arg); | |
24 typedef SECStatus (PR_CALLBACK * PKCS12UnicodeConvertFunction)( | |
25 PLArenaPool *arena, | |
26 SECItem *dest, SECItem *src, | |
27 PRBool toUnicode, | |
28 PRBool swapBytes); | |
29 typedef void (PR_CALLBACK * SEC_PKCS12EncoderOutputCallback)( | |
30 void *arg, const char *buf, | |
31 unsigned long len); | |
32 typedef void (PR_CALLBACK * SEC_PKCS12DecoderOutputCallback)( | |
33 void *arg, const char *buf, | |
34 unsigned long len); | |
35 /* | |
36 * In NSS 3.12 or later, 'arg' actually points to a CERTCertificate, | |
37 * the 'leafCert' variable in sec_pkcs12_validate_cert in p12d.c. | |
38 * See r1.35 of p12d.c ("Patch 2" in bug 321584). | |
39 */ | |
40 typedef SECItem * (PR_CALLBACK * SEC_PKCS12NicknameCollisionCallback)( | |
41 SECItem *old_nickname, | |
42 PRBool *cancel, | |
43 void *arg); | |
44 | |
45 | |
46 | |
47 | |
48 typedef SECStatus (PR_CALLBACK *digestOpenFn)(void *arg, PRBool readData); | |
49 typedef SECStatus (PR_CALLBACK *digestCloseFn)(void *arg, PRBool removeFile); | |
50 typedef int (PR_CALLBACK *digestIOFn)(void *arg, unsigned char *buf, | |
51 unsigned long len); | |
52 | |
53 typedef struct SEC_PKCS12ExportContextStr SEC_PKCS12ExportContext; | |
54 typedef struct SEC_PKCS12SafeInfoStr SEC_PKCS12SafeInfo; | |
55 typedef struct SEC_PKCS12DecoderContextStr SEC_PKCS12DecoderContext; | |
56 typedef struct SEC_PKCS12DecoderItemStr SEC_PKCS12DecoderItem; | |
57 | |
58 struct sec_PKCS12PasswordModeInfo { | |
59 SECItem *password; | |
60 SECOidTag algorithm; | |
61 }; | |
62 | |
63 struct sec_PKCS12PublicKeyModeInfo { | |
64 CERTCertificate *cert; | |
65 CERTCertDBHandle *certDb; | |
66 SECOidTag algorithm; | |
67 int keySize; | |
68 }; | |
69 | |
70 struct SEC_PKCS12DecoderItemStr { | |
71 SECItem *der; | |
72 SECOidTag type; | |
73 PRBool hasKey; | |
74 SECItem *friendlyName; /* UTF-8 string */ | |
75 SECAlgorithmID *shroudAlg; | |
76 }; | |
77 | |
78 | |
79 SEC_BEGIN_PROTOS | |
80 | |
81 SEC_PKCS12SafeInfo * | |
82 SEC_PKCS12CreatePubKeyEncryptedSafe(SEC_PKCS12ExportContext *p12ctxt, | |
83 CERTCertDBHandle *certDb, | |
84 CERTCertificate *signer, | |
85 CERTCertificate **recipients, | |
86 SECOidTag algorithm, int keysize); | |
87 | |
88 extern SEC_PKCS12SafeInfo * | |
89 SEC_PKCS12CreatePasswordPrivSafe(SEC_PKCS12ExportContext *p12ctxt, | |
90 SECItem *pwitem, SECOidTag privAlg); | |
91 | |
92 extern SEC_PKCS12SafeInfo * | |
93 SEC_PKCS12CreateUnencryptedSafe(SEC_PKCS12ExportContext *p12ctxt); | |
94 | |
95 extern SECStatus | |
96 SEC_PKCS12AddPasswordIntegrity(SEC_PKCS12ExportContext *p12ctxt, | |
97 SECItem *pwitem, SECOidTag integAlg); | |
98 extern SECStatus | |
99 SEC_PKCS12AddPublicKeyIntegrity(SEC_PKCS12ExportContext *p12ctxt, | |
100 CERTCertificate *cert, CERTCertDBHandle *certDb, | |
101 SECOidTag algorithm, int keySize); | |
102 | |
103 extern SEC_PKCS12ExportContext * | |
104 SEC_PKCS12CreateExportContext(SECKEYGetPasswordKey pwfn, void *pwfnarg, | |
105 PK11SlotInfo *slot, void *wincx); | |
106 | |
107 extern SECStatus | |
108 SEC_PKCS12AddCert(SEC_PKCS12ExportContext *p12ctxt, | |
109 SEC_PKCS12SafeInfo *safe, void *nestedDest, | |
110 CERTCertificate *cert, CERTCertDBHandle *certDb, | |
111 SECItem *keyId, PRBool includeCertChain); | |
112 | |
113 extern SECStatus | |
114 SEC_PKCS12AddKeyForCert(SEC_PKCS12ExportContext *p12ctxt, | |
115 SEC_PKCS12SafeInfo *safe, | |
116 void *nestedDest, CERTCertificate *cert, | |
117 PRBool shroudKey, SECOidTag algorithm, SECItem *pwitem, | |
118 SECItem *keyId, SECItem *nickName); | |
119 | |
120 extern SECStatus | |
121 SEC_PKCS12AddCertOrChainAndKey(SEC_PKCS12ExportContext *p12ctxt, | |
122 void *certSafe, void *certNestedDest, | |
123 CERTCertificate *cert, CERTCertDBHandle *certDb, | |
124 void *keySafe, void *keyNestedDest, PRBool shroudKey, | |
125 SECItem *pwitem, SECOidTag algorithm, | |
126 PRBool includeCertChain); | |
127 | |
128 | |
129 extern SECStatus | |
130 SEC_PKCS12AddCertAndKey(SEC_PKCS12ExportContext *p12ctxt, | |
131 void *certSafe, void *certNestedDest, | |
132 CERTCertificate *cert, CERTCertDBHandle *certDb, | |
133 void *keySafe, void *keyNestedDest, | |
134 PRBool shroudKey, SECItem *pwitem, SECOidTag algorithm); | |
135 | |
136 extern void * | |
137 SEC_PKCS12CreateNestedSafeContents(SEC_PKCS12ExportContext *p12ctxt, | |
138 void *baseSafe, void *nestedDest); | |
139 | |
140 extern SECStatus | |
141 SEC_PKCS12Encode(SEC_PKCS12ExportContext *p12exp, | |
142 SEC_PKCS12EncoderOutputCallback output, void *outputarg); | |
143 | |
144 extern void | |
145 SEC_PKCS12DestroyExportContext(SEC_PKCS12ExportContext *p12exp); | |
146 | |
147 extern SEC_PKCS12DecoderContext * | |
148 SEC_PKCS12DecoderStart(SECItem *pwitem, PK11SlotInfo *slot, void *wincx, | |
149 digestOpenFn dOpen, digestCloseFn dClose, | |
150 digestIOFn dRead, digestIOFn dWrite, void *dArg); | |
151 | |
152 extern SECStatus | |
153 SEC_PKCS12DecoderSetTargetTokenCAs(SEC_PKCS12DecoderContext *p12dcx, | |
154 SECPKCS12TargetTokenCAs tokenCAs); | |
155 | |
156 extern SECStatus | |
157 SEC_PKCS12DecoderUpdate(SEC_PKCS12DecoderContext *p12dcx, unsigned char *data, | |
158 unsigned long len); | |
159 | |
160 extern void | |
161 SEC_PKCS12DecoderFinish(SEC_PKCS12DecoderContext *p12dcx); | |
162 | |
163 extern SECStatus | |
164 SEC_PKCS12DecoderVerify(SEC_PKCS12DecoderContext *p12dcx); | |
165 | |
166 extern SECStatus | |
167 SEC_PKCS12DecoderValidateBags(SEC_PKCS12DecoderContext *p12dcx, | |
168 SEC_PKCS12NicknameCollisionCallback nicknameCb); | |
169 | |
170 extern SECStatus | |
171 SEC_PKCS12DecoderImportBags(SEC_PKCS12DecoderContext *p12dcx); | |
172 | |
173 CERTCertList * | |
174 SEC_PKCS12DecoderGetCerts(SEC_PKCS12DecoderContext *p12dcx); | |
175 | |
176 SECStatus | |
177 SEC_PKCS12DecoderIterateInit(SEC_PKCS12DecoderContext *p12dcx); | |
178 | |
179 SECStatus | |
180 SEC_PKCS12DecoderIterateNext(SEC_PKCS12DecoderContext *p12dcx, | |
181 const SEC_PKCS12DecoderItem **ipp); | |
182 | |
183 SEC_END_PROTOS | |
184 | |
185 #endif | |
OLD | NEW |