Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(139)

Side by Side Diff: mozilla/security/nss/lib/util/utilmodt.h

Issue 11362174: Update NSS to NSS 3.14 pre-release snapshot 2012-06-28 01:00:00 PDT. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Update the snapshot timestamp in README.chromium Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* This Source Code Form is subject to the terms of the Mozilla Public 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 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/. */ 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 #ifndef _SECMODT_H_ 4 #ifndef _UTILMODT_H_
5 #define _SECMODT_H_ 1 5 #define _UTILMODT_H_ 1
6
7 #include "nssrwlkt.h"
8 #include "nssilckt.h"
9 #include "secoid.h"
10 #include "secasn1.h"
11 #include "pkcs11t.h"
12
13 SEC_BEGIN_PROTOS
14
15 /* find a better home for these... */
16 extern const SEC_ASN1Template SECKEY_PointerToEncryptedPrivateKeyInfoTemplate[];
17 SEC_ASN1_CHOOSER_DECLARE(SECKEY_PointerToEncryptedPrivateKeyInfoTemplate)
18 extern const SEC_ASN1Template SECKEY_EncryptedPrivateKeyInfoTemplate[];
19 SEC_ASN1_CHOOSER_DECLARE(SECKEY_EncryptedPrivateKeyInfoTemplate)
20 extern const SEC_ASN1Template SECKEY_PrivateKeyInfoTemplate[];
21 SEC_ASN1_CHOOSER_DECLARE(SECKEY_PrivateKeyInfoTemplate)
22 extern const SEC_ASN1Template SECKEY_PointerToPrivateKeyInfoTemplate[];
23 SEC_ASN1_CHOOSER_DECLARE(SECKEY_PointerToPrivateKeyInfoTemplate)
24
25 SEC_END_PROTOS
26
27 /* PKCS11 needs to be included */
28 typedef struct SECMODModuleStr SECMODModule;
29 typedef struct SECMODModuleListStr SECMODModuleList;
30 typedef NSSRWLock SECMODListLock;
31 typedef struct PK11SlotInfoStr PK11SlotInfo; /* defined in secmodti.h */
32 typedef struct PK11PreSlotInfoStr PK11PreSlotInfo; /* defined in secmodti.h */
33 typedef struct PK11SymKeyStr PK11SymKey; /* defined in secmodti.h */
34 typedef struct PK11ContextStr PK11Context; /* defined in secmodti.h */
35 typedef struct PK11SlotListStr PK11SlotList;
36 typedef struct PK11SlotListElementStr PK11SlotListElement;
37 typedef struct PK11RSAGenParamsStr PK11RSAGenParams;
38 typedef unsigned long SECMODModuleID;
39 typedef struct PK11DefaultArrayEntryStr PK11DefaultArrayEntry;
40 typedef struct PK11GenericObjectStr PK11GenericObject;
41 typedef void (*PK11FreeDataFunc)(void *);
42
43 struct SECMODModuleStr {
44 PLArenaPool»*arena;
45 PRBool» internal;» /* true of internally linked modules, false
46 » » » » * for the loaded modules */
47 PRBool» loaded;»» /* Set to true if module has been loaded */
48 PRBool» isFIPS;»» /* Set to true if module is finst internal */
49 char» *dllName;» /* name of the shared library which implements
50 » » » » * this module */
51 char» *commonName;» /* name of the module to display to the user */
52 void» *library;» /* pointer to the library. opaque. used only by
53 » » » » * pk11load.c */
54 void» *functionList; /* The PKCS #11 function table */
55 PZLock» *refLock;» /* only used pk11db.c */
56 int»» refCount;» /* Module reference count */
57 PK11SlotInfo **slots;» /* array of slot points attached to this mod*/
58 int»» slotCount;» /* count of slot in above array */
59 PK11PreSlotInfo *slotInfo;» /* special info about slots default settings */
60 int»» slotInfoCount; /* count */
61 SECMODModuleID moduleID;» /* ID so we can find this module again */
62 PRBool» isThreadSafe;
63 unsigned long ssl[2];» /* SSL cipher enable flags */
64 char» *libraryParams; /* Module specific parameters */
65 void *moduleDBFunc; /* function to return module configuration data*/
66 SECMODModule *parent;» /* module that loaded us */
67 PRBool» isCritical;» /* This module must load successfully */
68 PRBool» isModuleDB;» /* this module has lists of PKCS #11 modules */
69 PRBool» moduleDBOnly;» /* this module only has lists of PKCS #11 module s */
70 int»» trustOrder;» /* order for this module's certificate trust rol lup */
71 int»» cipherOrder;» /* order for cipher operations */
72 unsigned long evControlMask; /* control the running and shutdown of slot
73 » » » » * events (SECMOD_WaitForAnyTokenEvent) */
74 CK_VERSION cryptokiVersion; /* version of this library */
75 };
76
77 /* evControlMask flags */
78 /*
79 * These bits tell the current state of a SECMOD_WaitForAnyTokenEvent.
80 *
81 * SECMOD_WAIT_PKCS11_EVENT - we're waiting in the PKCS #11 module in
82 * C_WaitForSlotEvent().
83 * SECMOD_WAIT_SIMULATED_EVENT - we're waiting in the NSS simulation code
84 * which polls for token insertion and removal events.
85 * SECMOD_END_WAIT - SECMOD_CancelWait has been called while the module is
86 * waiting in SECMOD_WaitForAnyTokenEvent. SECMOD_WaitForAnyTokenEvent
87 * should return immediately to it's caller.
88 */
89 #define SECMOD_END_WAIT » 0x01
90 #define SECMOD_WAIT_SIMULATED_EVENT 0x02
91 #define SECMOD_WAIT_PKCS11_EVENT 0x04
92
93 struct SECMODModuleListStr {
94 SECMODModuleList» *next;
95 SECMODModule» *module;
96 };
97
98 struct PK11SlotListStr {
99 PK11SlotListElement *head;
100 PK11SlotListElement *tail;
101 PZLock *lock;
102 };
103
104 struct PK11SlotListElementStr {
105 PK11SlotListElement *next;
106 PK11SlotListElement *prev;
107 PK11SlotInfo *slot;
108 int refCount;
109 };
110
111 struct PK11RSAGenParamsStr {
112 int keySizeInBits;
113 unsigned long pe;
114 };
115
116 typedef enum {
117 PK11CertListUnique = 0, /* get one instance of all certs */
118 PK11CertListUser = 1, /* get all instances of user certs */
119 PK11CertListRootUnique = 2, /* get one instance of CA certs without a priva te key.
120 * deprecated. Use PK11CertListCAUnique
121 */
122 PK11CertListCA = 3, /* get all instances of CA certs */
123 PK11CertListCAUnique = 4, /* get one instance of CA certs */
124 PK11CertListUserUnique = 5, /* get one instance of user certs */
125 PK11CertListAll = 6 /* get all instances of all certs */
126 } PK11CertListType;
127 6
128 /* 7 /*
129 * Entry into the Array which lists all the legal bits for the default flags 8 * these are SECMOD flags that would normally be in secmodt.h, but are needed
130 * in the slot, their definition, and the PKCS #11 mechanism the represent 9 * for the parser in util. Fort this reason we preserve the SECMOD names.
131 * Always Statically allocated.
132 */ 10 */
133 struct PK11DefaultArrayEntryStr {
134 char *name;
135 unsigned long flag;
136 unsigned long mechanism; /* this is a long so we don't include the
137 * whole pkcs 11 world to use this header */
138 };
139
140
141 #define SECMOD_RSA_FLAG 0x00000001L 11 #define SECMOD_RSA_FLAG 0x00000001L
142 #define SECMOD_DSA_FLAG 0x00000002L 12 #define SECMOD_DSA_FLAG 0x00000002L
143 #define SECMOD_RC2_FLAG 0x00000004L 13 #define SECMOD_RC2_FLAG 0x00000004L
144 #define SECMOD_RC4_FLAG 0x00000008L 14 #define SECMOD_RC4_FLAG 0x00000008L
145 #define SECMOD_DES_FLAG 0x00000010L 15 #define SECMOD_DES_FLAG 0x00000010L
146 #define SECMOD_DH_FLAG 0x00000020L 16 #define SECMOD_DH_FLAG 0x00000020L
147 #define SECMOD_FORTEZZA_FLAG 0x00000040L 17 #define SECMOD_FORTEZZA_FLAG 0x00000040L
148 #define SECMOD_RC5_FLAG 0x00000080L 18 #define SECMOD_RC5_FLAG 0x00000080L
149 #define SECMOD_SHA1_FLAG 0x00000100L 19 #define SECMOD_SHA1_FLAG 0x00000100L
150 #define SECMOD_MD5_FLAG 0x00000200L 20 #define SECMOD_MD5_FLAG 0x00000200L
151 #define SECMOD_MD2_FLAG 0x00000400L 21 #define SECMOD_MD2_FLAG 0x00000400L
152 #define SECMOD_SSL_FLAG 0x00000800L 22 #define SECMOD_SSL_FLAG 0x00000800L
153 #define SECMOD_TLS_FLAG 0x00001000L 23 #define SECMOD_TLS_FLAG 0x00001000L
154 #define SECMOD_AES_FLAG 0x00002000L 24 #define SECMOD_AES_FLAG 0x00002000L
155 #define SECMOD_SHA256_FLAG 0x00004000L 25 #define SECMOD_SHA256_FLAG 0x00004000L
156 #define SECMOD_SHA512_FLAG 0x00008000L /* also for SHA384 */ 26 #define SECMOD_SHA512_FLAG 0x00008000L /* also for SHA384 */
157 #define SECMOD_CAMELLIA_FLAG 0x00010000L /* = PUBLIC_MECH_CAMELLIA_FLAG */ 27 #define SECMOD_CAMELLIA_FLAG 0x00010000L /* = PUBLIC_MECH_CAMELLIA_FLAG */
158 #define SECMOD_SEED_FLAG 0x00020000L 28 #define SECMOD_SEED_FLAG 0x00020000L
159 /* reserved bit for future, do not use */ 29 /* reserved bit for future, do not use */
160 #define SECMOD_RESERVED_FLAG 0X08000000L 30 #define SECMOD_RESERVED_FLAG 0X08000000L
161 #define SECMOD_FRIENDLY_FLAG 0x10000000L 31 #define SECMOD_FRIENDLY_FLAG 0x10000000L
162 #define SECMOD_RANDOM_FLAG 0x80000000L 32 #define SECMOD_RANDOM_FLAG 0x80000000L
163 33
164 /* need to make SECMOD and PK11 prefixes consistant. */
165 #define PK11_OWN_PW_DEFAULTS 0x20000000L 34 #define PK11_OWN_PW_DEFAULTS 0x20000000L
166 #define PK11_DISABLE_FLAG 0x40000000L 35 #define PK11_DISABLE_FLAG 0x40000000L
167 36
168 /* 37 /* need to make SECMOD and PK11 prefixes consistent. */
169 * PK11AttrFlags 38 #define SECMOD_OWN_PW_DEFAULTS PK11_OWN_PW_DEFAULTS
170 * 39 #define SECMOD_DISABLE_FLAG PK11_DISABLE_FLAG
171 * A 32-bit bitmask of PK11_ATTR_XXX flags 40 #endif
172 */
173 typedef PRUint32 PK11AttrFlags;
174
175 /*
176 * PK11_ATTR_XXX
177 *
178 * The following PK11_ATTR_XXX bitflags are used to specify
179 * PKCS #11 object attributes that have Boolean values. Some NSS
180 * functions have a "PK11AttrFlags attrFlags" parameter whose value
181 * is the logical OR of these bitflags. NSS use these bitflags on
182 * private keys or secret keys. Some of these bitflags also apply
183 * to the public keys associated with the private keys.
184 *
185 * For each PKCS #11 object attribute, we need two bitflags to
186 * specify not only "true" and "false" but also "default". For
187 * example, PK11_ATTR_PRIVATE and PK11_ATTR_PUBLIC control the
188 * CKA_PRIVATE attribute. If PK11_ATTR_PRIVATE is set, we add
189 * { CKA_PRIVATE, &cktrue, sizeof(CK_BBOOL) }
190 * to the template. If PK11_ATTR_PUBLIC is set, we add
191 * { CKA_PRIVATE, &ckfalse, sizeof(CK_BBOOL) }
192 * to the template. If neither flag is set, we don't add any
193 * CKA_PRIVATE entry to the template.
194 */
195
196 /*
197 * Attributes for PKCS #11 storage objects, which include not only
198 * keys but also certificates and domain parameters.
199 */
200
201 /*
202 * PK11_ATTR_TOKEN
203 * PK11_ATTR_SESSION
204 *
205 * These two flags determine whether the object is a token or
206 * session object.
207 *
208 * These two flags are related and cannot both be set.
209 * If the PK11_ATTR_TOKEN flag is set, the object is a token
210 * object. If the PK11_ATTR_SESSION flag is set, the object is
211 * a session object. If neither flag is set, the object is *by
212 * default* a session object.
213 *
214 * These two flags specify the value of the PKCS #11 CKA_TOKEN
215 * attribute.
216 */
217 #define PK11_ATTR_TOKEN 0x00000001L
218 #define PK11_ATTR_SESSION 0x00000002L
219
220 /*
221 * PK11_ATTR_PRIVATE
222 * PK11_ATTR_PUBLIC
223 *
224 * These two flags determine whether the object is a private or
225 * public object. A user may not access a private object until the
226 * user has authenticated to the token.
227 *
228 * These two flags are related and cannot both be set.
229 * If the PK11_ATTR_PRIVATE flag is set, the object is a private
230 * object. If the PK11_ATTR_PUBLIC flag is set, the object is a
231 * public object. If neither flag is set, it is token-specific
232 * whether the object is private or public.
233 *
234 * These two flags specify the value of the PKCS #11 CKA_PRIVATE
235 * attribute. NSS only uses this attribute on private and secret
236 * keys, so public keys created by NSS get the token-specific
237 * default value of the CKA_PRIVATE attribute.
238 */
239 #define PK11_ATTR_PRIVATE 0x00000004L
240 #define PK11_ATTR_PUBLIC 0x00000008L
241
242 /*
243 * PK11_ATTR_MODIFIABLE
244 * PK11_ATTR_UNMODIFIABLE
245 *
246 * These two flags determine whether the object is modifiable or
247 * read-only.
248 *
249 * These two flags are related and cannot both be set.
250 * If the PK11_ATTR_MODIFIABLE flag is set, the object can be
251 * modified. If the PK11_ATTR_UNMODIFIABLE flag is set, the object
252 * is read-only. If neither flag is set, the object is *by default*
253 * modifiable.
254 *
255 * These two flags specify the value of the PKCS #11 CKA_MODIFIABLE
256 * attribute.
257 */
258 #define PK11_ATTR_MODIFIABLE 0x00000010L
259 #define PK11_ATTR_UNMODIFIABLE 0x00000020L
260
261 /* Attributes for PKCS #11 key objects. */
262
263 /*
264 * PK11_ATTR_SENSITIVE
265 * PK11_ATTR_INSENSITIVE
266 *
267 * These two flags are related and cannot both be set.
268 * If the PK11_ATTR_SENSITIVE flag is set, the key is sensitive.
269 * If the PK11_ATTR_INSENSITIVE flag is set, the key is not
270 * sensitive. If neither flag is set, it is token-specific whether
271 * the key is sensitive or not.
272 *
273 * If a key is sensitive, certain attributes of the key cannot be
274 * revealed in plaintext outside the token.
275 *
276 * This flag specifies the value of the PKCS #11 CKA_SENSITIVE
277 * attribute. Although the default value of the CKA_SENSITIVE
278 * attribute for secret keys is CK_FALSE per PKCS #11, some FIPS
279 * tokens set the default value to CK_TRUE because only CK_TRUE
280 * is allowed. So in practice the default value of this attribute
281 * is token-specific, hence the need for two bitflags.
282 */
283 #define PK11_ATTR_SENSITIVE 0x00000040L
284 #define PK11_ATTR_INSENSITIVE 0x00000080L
285
286 /*
287 * PK11_ATTR_EXTRACTABLE
288 * PK11_ATTR_UNEXTRACTABLE
289 *
290 * These two flags are related and cannot both be set.
291 * If the PK11_ATTR_EXTRACTABLE flag is set, the key is extractable
292 * and can be wrapped. If the PK11_ATTR_UNEXTRACTABLE flag is set,
293 * the key is not extractable, and certain attributes of the key
294 * cannot be revealed in plaintext outside the token (just like a
295 * sensitive key). If neither flag is set, it is token-specific
296 * whether the key is extractable or not.
297 *
298 * These two flags specify the value of the PKCS #11 CKA_EXTRACTABLE
299 * attribute.
300 */
301 #define PK11_ATTR_EXTRACTABLE 0x00000100L
302 #define PK11_ATTR_UNEXTRACTABLE 0x00000200L
303
304 /* Cryptographic module types */
305 #define SECMOD_EXTERNAL 0 /* external module */
306 #define SECMOD_INTERNAL 1 /* internal default module */
307 #define SECMOD_FIPS 2 /* internal fips module */
308
309 /* default module configuration strings */
310 #define SECMOD_SLOT_FLAGS "slotFlags=[RSA,DSA,DH,RC2,RC4,DES,RANDOM,SHA1,MD5,MD2 ,SSL,TLS,AES,Camellia,SEED,SHA256,SHA512]"
311
312 #define SECMOD_MAKE_NSS_FLAGS(fips,slot) \
313 "Flags=internal,critical" fips " slotparams=(" #slot "={" SECMOD_SLOT_FLAGS "})"
314
315 #define SECMOD_INT_NAME "NSS Internal PKCS #11 Module"
316 #define SECMOD_INT_FLAGS SECMOD_MAKE_NSS_FLAGS("",1)
317 #define SECMOD_FIPS_NAME "NSS Internal FIPS PKCS #11 Module"
318 #define SECMOD_FIPS_FLAGS SECMOD_MAKE_NSS_FLAGS(",fips",3)
319
320 /*
321 * What is the origin of a given Key. Normally this doesn't matter, but
322 * the fortezza code needs to know if it needs to invoke the SSL3 fortezza
323 * hack.
324 */
325 typedef enum {
326 PK11_OriginNULL = 0, /* There is not key, it's a null SymKey */
327 PK11_OriginDerive = 1, /* Key was derived from some other key */
328 PK11_OriginGenerated = 2, /* Key was generated (also PBE keys) */
329 PK11_OriginFortezzaHack = 3,/* Key was marked for fortezza hack */
330 PK11_OriginUnwrap = 4 /* Key was unwrapped or decrypted */
331 } PK11Origin;
332
333 /* PKCS #11 disable reasons */
334 typedef enum {
335 PK11_DIS_NONE = 0,
336 PK11_DIS_USER_SELECTED = 1,
337 PK11_DIS_COULD_NOT_INIT_TOKEN = 2,
338 PK11_DIS_TOKEN_VERIFY_FAILED = 3,
339 PK11_DIS_TOKEN_NOT_PRESENT = 4
340 } PK11DisableReasons;
341
342 /* types of PKCS #11 objects
343 * used to identify which NSS data structure is
344 * passed to the PK11_Raw* functions. Types map as follows:
345 * PK11_TypeGeneric PK11GenericObject *
346 * PK11_TypePrivKey SECKEYPrivateKey *
347 * PK11_TypePubKey SECKEYPublicKey *
348 * PK11_TypeSymKey PK11SymKey *
349 * PK11_TypeCert CERTCertificate * (currently not used).
350 */
351 typedef enum {
352 PK11_TypeGeneric = 0,
353 PK11_TypePrivKey = 1,
354 PK11_TypePubKey = 2,
355 PK11_TypeCert = 3,
356 PK11_TypeSymKey = 4
357 } PK11ObjectType;
358
359
360
361 /* function pointer type for password callback function.
362 * This type is passed in to PK11_SetPasswordFunc()
363 */
364 typedef char *(PR_CALLBACK *PK11PasswordFunc)(PK11SlotInfo *slot, PRBool retry, void *arg);
365 typedef PRBool (PR_CALLBACK *PK11VerifyPasswordFunc)(PK11SlotInfo *slot, void *a rg);
366 typedef PRBool (PR_CALLBACK *PK11IsLoggedInFunc)(PK11SlotInfo *slot, void *arg);
367
368 /*
369 * Special strings the password callback function can return only if
370 * the slot is an protected auth path slot.
371 */
372 #define PK11_PW_RETRY "RETRY" /* an failed attempt to authenticate
373 * has already been made, just retry
374 * the operation */
375 #define PK11_PW_AUTHENTICATED "AUTH" /* a successful attempt to authenticate
376 * has completed. Continue without
377 * another call to C_Login */
378 /* All other non-null values mean that that NSS could call C_Login to force
379 * the authentication. The following define is to aid applications in
380 * documenting that is what it's trying to do */
381 #define PK11_PW_TRY "TRY" /* Default: a prompt has been presented
382 * to the user, initiate a C_Login
383 * to authenticate the token */
384
385 /*
386 * PKCS #11 key structures
387 */
388
389 /*
390 ** Attributes
391 */
392 struct SECKEYAttributeStr {
393 SECItem attrType;
394 SECItem **attrValue;
395 };
396 typedef struct SECKEYAttributeStr SECKEYAttribute;
397
398 /*
399 ** A PKCS#8 private key info object
400 */
401 struct SECKEYPrivateKeyInfoStr {
402 PLArenaPool *arena;
403 SECItem version;
404 SECAlgorithmID algorithm;
405 SECItem privateKey;
406 SECKEYAttribute **attributes;
407 };
408 typedef struct SECKEYPrivateKeyInfoStr SECKEYPrivateKeyInfo;
409
410 /*
411 ** A PKCS#8 private key info object
412 */
413 struct SECKEYEncryptedPrivateKeyInfoStr {
414 PLArenaPool *arena;
415 SECAlgorithmID algorithm;
416 SECItem encryptedData;
417 };
418 typedef struct SECKEYEncryptedPrivateKeyInfoStr SECKEYEncryptedPrivateKeyInfo;
419
420 /*
421 * token removal detection
422 */
423 typedef enum {
424 PK11TokenNotRemovable = 0,
425 PK11TokenPresent = 1,
426 PK11TokenChanged = 2,
427 PK11TokenRemoved = 3
428 } PK11TokenStatus;
429
430 typedef enum {
431 PK11TokenRemovedOrChangedEvent = 0,
432 PK11TokenPresentEvent = 1
433 } PK11TokenEvent;
434
435 /*
436 * CRL Import Flags
437 */
438 #define CRL_IMPORT_DEFAULT_OPTIONS 0x00000000
439 #define CRL_IMPORT_BYPASS_CHECKS 0x00000001
440
441
442 /*
443 * Merge Error Log
444 */
445 typedef struct PK11MergeLogStr PK11MergeLog;
446 typedef struct PK11MergeLogNodeStr PK11MergeLogNode;
447
448 /* These need to be global, leave some open fields so we can 'expand'
449 * these without breaking binary compatibility */
450 struct PK11MergeLogNodeStr {
451 PK11MergeLogNode *next; /* next entry in the list */
452 PK11MergeLogNode *prev; /* last entry in the list */
453 PK11GenericObject *object; /* object that failed */
454 int error; /* what the error was */
455 CK_RV reserved1;
456 unsigned long reserved2; /* future flags */
457 unsigned long reserved3; /* future scalar */
458 void *reserved4; /* future pointer */
459 void *reserved5; /* future expansion pointer */
460 };
461
462 struct PK11MergeLogStr {
463 PK11MergeLogNode *head;
464 PK11MergeLogNode *tail;
465 PLArenaPool *arena;
466 int version;
467 unsigned long reserved1;
468 unsigned long reserved2;
469 unsigned long reserved3;
470 void *reserverd4;
471 void *reserverd5;
472 };
473
474
475 #endif /*_SECMODT_H_ */
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698