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 #ifndef NSSPKIT_H | |
6 #define NSSPKIT_H | |
7 | |
8 #ifdef DEBUG | |
9 static const char NSSPKIT_CVS_ID[] = "@(#) $RCSfile: nsspkit.h,v $ $Revision: 1.
9 $ $Date: 2012/04/25 14:50:07 $"; | |
10 #endif /* DEBUG */ | |
11 | |
12 /* | |
13 * nsspkit.h | |
14 * | |
15 * This file defines the types of the top-level PKI objects. | |
16 */ | |
17 | |
18 #ifndef NSSBASET_H | |
19 #include "nssbaset.h" | |
20 #endif /* NSSBASET_H */ | |
21 | |
22 PR_BEGIN_EXTERN_C | |
23 | |
24 /* | |
25 * NSSCertificate | |
26 * | |
27 * This is the public representation of a Certificate. The certificate | |
28 * may be one found on a smartcard or other token, one decoded from data | |
29 * received as part of a protocol, one constructed from constituent | |
30 * parts, etc. Usually it is associated with ("in") a trust domain; as | |
31 * it can be verified only within a trust domain. The underlying type | |
32 * of certificate may be of any supported standard, e.g. PKIX, PGP, etc. | |
33 * | |
34 * People speak of "verifying (with) the server's, or correspondant's, | |
35 * certificate"; for simple operations we support that simplification | |
36 * by implementing public-key crypto operations as methods on this type. | |
37 */ | |
38 | |
39 struct NSSCertificateStr; | |
40 typedef struct NSSCertificateStr NSSCertificate; | |
41 | |
42 /* | |
43 * NSSUserCertificate | |
44 * | |
45 * A ``User'' certificate is one for which the private key is available. | |
46 * People speak of "using my certificate to sign my email" and "using | |
47 * my certificate to authenticate to (or login to) the server"; for | |
48 * simple operations, we support that simplification by implementing | |
49 * private-key crypto operations as methods on this type. | |
50 * | |
51 * The current design only weakly distinguishes between certificates | |
52 * and user certificates: as far as the compiler goes they're | |
53 * interchangeable; debug libraries only have one common pointer-tracker; | |
54 * etc. However, attempts to do private-key operations on a certificate | |
55 * for which the private key is not available will fail. | |
56 * | |
57 * Open design question: should these types be more firmly separated? | |
58 */ | |
59 | |
60 typedef NSSCertificate NSSUserCertificate; | |
61 | |
62 /* | |
63 * NSSPrivateKey | |
64 * | |
65 * This is the public representation of a Private Key. In general, | |
66 * the actual value of the key is not available, but operations may | |
67 * be performed with it. | |
68 */ | |
69 | |
70 struct NSSPrivateKeyStr; | |
71 typedef struct NSSPrivateKeyStr NSSPrivateKey; | |
72 | |
73 /* | |
74 * NSSPublicKey | |
75 * | |
76 */ | |
77 | |
78 struct NSSPublicKeyStr; | |
79 typedef struct NSSPublicKeyStr NSSPublicKey; | |
80 | |
81 /* | |
82 * NSSSymmetricKey | |
83 * | |
84 */ | |
85 | |
86 struct NSSSymmetricKeyStr; | |
87 typedef struct NSSSymmetricKeyStr NSSSymmetricKey; | |
88 | |
89 /* | |
90 * NSSTrustDomain | |
91 * | |
92 * A Trust Domain is the field in which certificates may be validated. | |
93 * A trust domain will generally have one or more cryptographic modules | |
94 * open; these modules perform the cryptographic operations, and | |
95 * provide the basic "root" trust information from which the trust in | |
96 * a specific certificate or key depends. | |
97 * | |
98 * A client program, or a simple server, would typically have one | |
99 * trust domain. A server supporting multiple "virtual servers" might | |
100 * have a separate trust domain for each virtual server. The separate | |
101 * trust domains might share some modules (e.g., a hardware crypto | |
102 * accelerator) but not others (e.g., the tokens storing the different | |
103 * servers' private keys, or the databases with each server's trusted | |
104 * root certificates). | |
105 * | |
106 * This object descends from the "permananet database" in the old code. | |
107 */ | |
108 | |
109 struct NSSTrustDomainStr; | |
110 typedef struct NSSTrustDomainStr NSSTrustDomain; | |
111 | |
112 /* | |
113 * NSSCryptoContext | |
114 * | |
115 * A Crypto Context is a short-term, "helper" object which is used | |
116 * for the lifetime of one ongoing "crypto operation." Such an | |
117 * operation may be the creation of a signed message, the use of an | |
118 * TLS socket connection, etc. Each crypto context is "in" a | |
119 * specific trust domain, and it may have associated with it a | |
120 * distinguished certificate, public key, private key, and/or | |
121 * symmetric key. It can also temporarily hold and use temporary | |
122 * data (e.g. intermediate certificates) which is not stored | |
123 * permanently in the trust domain. | |
124 * | |
125 * In OO terms, this interface inherits interfaces from the trust | |
126 * domain, the certificates, and the keys. It also provides | |
127 * streaming crypto operations. | |
128 * | |
129 * This object descends from the "temporary database" concept in the | |
130 * old code, but it has changed a lot as a result of what we've | |
131 * learned. | |
132 */ | |
133 | |
134 typedef struct NSSCryptoContextStr NSSCryptoContext; | |
135 | |
136 /* | |
137 * fgmr others | |
138 */ | |
139 | |
140 /* | |
141 * OBJECT IDENTIFIER | |
142 * | |
143 * This is the basic OID that crops up everywhere. | |
144 */ | |
145 | |
146 struct NSSOIDStr; /* unused opaque structure */ | |
147 typedef struct NSSOIDStr NSSOID; | |
148 | |
149 /* | |
150 * NSSTime | |
151 * | |
152 * Unfortunately, we need an "exceptional" value to indicate | |
153 * an error upon return, or "no value" on input. Note that zero | |
154 * is a perfectly valid value for both time_t and PRTime. | |
155 * | |
156 * If we were to create a "range" object, with two times for | |
157 * Not Before and Not After, we would have an obvious place for | |
158 * the somewhat arbitrary logic involved in comparing them. | |
159 * | |
160 * Failing that, let's have an NSSTime_CompareRanges function. | |
161 */ | |
162 | |
163 struct NSSTimeStr; | |
164 typedef struct NSSTimeStr NSSTime; | |
165 | |
166 struct NSSTrustStr; | |
167 typedef struct NSSTrustStr NSSTrust; | |
168 | |
169 /* | |
170 * NSSUsage | |
171 * | |
172 * This is trickier than originally planned; I'll write up a | |
173 * doc on it. | |
174 * | |
175 * We'd still like nsspki.h to have a list of common usages, | |
176 * e.g.: | |
177 * | |
178 * extern const NSSUsage *NSSUsage_ClientAuth; | |
179 * extern const NSSUsage *NSSUsage_ServerAuth; | |
180 * extern const NSSUsage *NSSUsage_SignEmail; | |
181 * extern const NSSUsage *NSSUsage_EncryptEmail; | |
182 * etc. | |
183 */ | |
184 | |
185 struct NSSUsageStr; | |
186 typedef struct NSSUsageStr NSSUsage; | |
187 | |
188 /* | |
189 * NSSPolicies | |
190 * | |
191 * Placeholder, for now. | |
192 */ | |
193 | |
194 struct NSSPoliciesStr; | |
195 typedef struct NSSPoliciesStr NSSPolicies; | |
196 | |
197 /* | |
198 * NSSAlgorithmAndParameters | |
199 * | |
200 * Algorithm is an OID | |
201 * Parameters depend on the algorithm | |
202 */ | |
203 | |
204 struct NSSAlgorithmAndParametersStr; | |
205 typedef struct NSSAlgorithmAndParametersStr NSSAlgorithmAndParameters; | |
206 | |
207 /* | |
208 * NSSCallback | |
209 * | |
210 * At minimum, a "challenge" method and a closure argument. | |
211 * Usually the challenge will just be prompting for a password. | |
212 * How OO do we want to make it? | |
213 */ | |
214 | |
215 typedef struct NSSCallbackStr NSSCallback; | |
216 | |
217 struct NSSCallbackStr { | |
218 /* Prompt for a password to initialize a slot. */ | |
219 PRStatus (* getInitPW)(NSSUTF8 *slotName, void *arg, | |
220 NSSUTF8 **ssoPW, NSSUTF8 **userPW); | |
221 /* Prompt for oldPW and newPW in order to change the | |
222 * password on a slot. | |
223 */ | |
224 PRStatus (* getNewPW)(NSSUTF8 *slotName, PRUint32 *retries, void *arg, | |
225 NSSUTF8 **oldPW, NSSUTF8 **newPW); | |
226 /* Prompt for slot password. */ | |
227 PRStatus (* getPW)(NSSUTF8 *slotName, PRUint32 *retries, void *arg, | |
228 NSSUTF8 **password); | |
229 void *arg; | |
230 }; | |
231 | |
232 /* set errors - user cancelled, ... */ | |
233 | |
234 typedef PRUint32 NSSOperations; | |
235 /* 1) Do we want these to be preprocessor definitions or constants? */ | |
236 /* 2) What is the correct and complete list? */ | |
237 | |
238 #define NSSOperations_ENCRYPT 0x0001 | |
239 #define NSSOperations_DECRYPT 0x0002 | |
240 #define NSSOperations_WRAP 0x0004 | |
241 #define NSSOperations_UNWRAP 0x0008 | |
242 #define NSSOperations_SIGN 0x0010 | |
243 #define NSSOperations_SIGN_RECOVER 0x0020 | |
244 #define NSSOperations_VERIFY 0x0040 | |
245 #define NSSOperations_VERIFY_RECOVER 0x0080 | |
246 | |
247 struct NSSPKIXCertificateStr; | |
248 | |
249 PR_END_EXTERN_C | |
250 | |
251 #endif /* NSSPKIT_H */ | |
OLD | NEW |