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

Side by Side Diff: nss/lib/smime/cmst.h

Issue 2078763002: Delete bundled copy of NSS and replace with README. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/nss@master
Patch Set: Delete bundled copy of NSS and replace with README. Created 4 years, 6 months 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
« no previous file with comments | « nss/lib/smime/cmsreclist.h ('k') | nss/lib/smime/smime.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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 * Header for CMS types.
7 */
8
9 #ifndef _CMST_H_
10 #define _CMST_H_
11
12 #include "seccomon.h"
13 #include "secoidt.h"
14 #include "certt.h"
15 #include "secmodt.h"
16 #include "secmodt.h"
17
18 #include "plarena.h"
19
20 /* Non-opaque objects. NOTE, though: I want them to be treated as
21 * opaque as much as possible. If I could hide them completely,
22 * I would. (I tried, but ran into trouble that was taking me too
23 * much time to get out of.) I still intend to try to do so.
24 * In fact, the only type that "outsiders" should even *name* is
25 * NSSCMSMessage, and they should not reference its fields.
26 */
27 /* rjr: PKCS #11 cert handling (pk11cert.c) does use NSSCMSRecipientInfo's.
28 * This is because when we search the recipient list for the cert and key we
29 * want, we need to invert the order of the loops we used to have. The old
30 * loops were:
31 *
32 * For each recipient {
33 * find_cert = PK11_Find_AllCert(recipient->issuerSN);
34 * [which unrolls to... ]
35 * For each slot {
36 * Log into slot;
37 * search slot for cert;
38 * }
39 * }
40 *
41 * the new loop searchs all the recipients at once on a slot. this allows
42 * PKCS #11 to order slots in such a way that logout slots don't get checked
43 * if we can find the cert on a logged in slot. This eliminates lots of
44 * spurious password prompts when smart cards are installed... so why this
45 * comment? If you make NSSCMSRecipientInfo completely opaque, you need
46 * to provide a non-opaque list of issuerSN's (the only field PKCS#11 needs
47 * and fix up pk11cert.c first. NOTE: Only S/MIME calls this special PKCS #11
48 * function.
49 */
50
51 typedef struct NSSCMSMessageStr NSSCMSMessage;
52
53 typedef union NSSCMSContentUnion NSSCMSContent;
54 typedef struct NSSCMSContentInfoStr NSSCMSContentInfo;
55
56 typedef struct NSSCMSSignedDataStr NSSCMSSignedData;
57 typedef struct NSSCMSSignerInfoStr NSSCMSSignerInfo;
58 typedef struct NSSCMSSignerIdentifierStr NSSCMSSignerIdentifier;
59
60 typedef struct NSSCMSEnvelopedDataStr NSSCMSEnvelopedData;
61 typedef struct NSSCMSOriginatorInfoStr NSSCMSOriginatorInfo;
62 typedef struct NSSCMSRecipientInfoStr NSSCMSRecipientInfo;
63
64 typedef struct NSSCMSDigestedDataStr NSSCMSDigestedData;
65 typedef struct NSSCMSEncryptedDataStr NSSCMSEncryptedData;
66
67 typedef struct NSSCMSGenericWrapperDataStr NSSCMSGenericWrapperData;
68
69 typedef struct NSSCMSAttributeStr NSSCMSAttribute;
70
71 typedef struct NSSCMSDecoderContextStr NSSCMSDecoderContext;
72 typedef struct NSSCMSEncoderContextStr NSSCMSEncoderContext;
73
74 typedef struct NSSCMSCipherContextStr NSSCMSCipherContext;
75 typedef struct NSSCMSDigestContextStr NSSCMSDigestContext;
76
77 typedef struct NSSCMSContentInfoPrivateStr NSSCMSContentInfoPrivate;
78
79 typedef SECStatus (*NSSCMSGenericWrapperDataCallback)
80 (NSSCMSGenericWrapperData *);
81 typedef void (*NSSCMSGenericWrapperDataDestroy)
82 (NSSCMSGenericWrapperData *);
83
84 extern const SEC_ASN1Template NSSCMSGenericWrapperDataTemplate[];
85 extern const SEC_ASN1Template NSS_PointerToCMSGenericWrapperDataTemplate[];
86
87 SEC_ASN1_CHOOSER_DECLARE(NSS_PointerToCMSGenericWrapperDataTemplate)
88 SEC_ASN1_CHOOSER_DECLARE(NSSCMSGenericWrapperDataTemplate)
89
90
91
92 /*
93 * Type of function passed to NSSCMSDecode or NSSCMSDecoderStart.
94 * If specified, this is where the content bytes (only) will be "sent"
95 * as they are recovered during the decoding.
96 * And:
97 * Type of function passed to NSSCMSEncode or NSSCMSEncoderStart.
98 * This is where the DER-encoded bytes will be "sent".
99 *
100 * XXX Should just combine this with NSSCMSEncoderContentCallback type
101 * and use a simpler, common name.
102 */
103 typedef void (*NSSCMSContentCallback)(void *arg, const char *buf, unsigned long len);
104
105 /*
106 * Type of function passed to NSSCMSDecode or NSSCMSDecoderStart
107 * to retrieve the decryption key. This function is intended to be
108 * used for EncryptedData content info's which do not have a key available
109 * in a certificate, etc.
110 */
111 typedef PK11SymKey *(*NSSCMSGetDecryptKeyCallback)(void *arg, SECAlgorithmID *al gid);
112
113
114 /* =============================================================================
115 * ENCAPSULATED CONTENTINFO & CONTENTINFO
116 */
117
118 union NSSCMSContentUnion {
119 /* either unstructured */
120 SECItem * data;
121 /* or structured data */
122 NSSCMSDigestedData * digestedData;
123 NSSCMSEncryptedData * encryptedData;
124 NSSCMSEnvelopedData * envelopedData;
125 NSSCMSSignedData * signedData;
126 NSSCMSGenericWrapperData * genericData;
127 /* or anonymous pointer to something */
128 void * pointer;
129 };
130
131 struct NSSCMSContentInfoStr {
132 SECItem contentType;
133 NSSCMSContent content;
134 /* --------- local; not part of encoding --------- */
135 SECOidData * contentTypeTag;
136
137 /* additional info for encryptedData and envelopedData */
138 /* we waste this space for signedData and digestedData. sue me. */
139
140 SECAlgorithmID contentEncAlg;
141 SECItem * rawContent; /* encrypted DER, option al */
142 /* XXXX bytes not encryp ted, but encoded? */
143 /* --------- local; not part of encoding --------- */
144 PK11SymKey * bulkkey; /* bulk encryption key * /
145 int keysize; /* size of bulk encrypti on key
146 * (only used by creatio n code) */
147 SECOidTag contentEncAlgTag; /* oid tag of encryption algorithm
148 * (only used by creatio n code) */
149 NSSCMSContentInfoPrivate *privateInfo; /* place for NSS private info */
150 void *reserved; /* keep binary compatibi lity */
151 };
152
153 /* =============================================================================
154 * MESSAGE
155 */
156
157 struct NSSCMSMessageStr {
158 NSSCMSContentInfo contentInfo; /* "outer" cinfo */
159 /* --------- local; not part of encoding --------- */
160 PLArenaPool * poolp;
161 PRBool poolp_is_ours;
162 int refCount;
163 /* properties of the "inner" data */
164 SECAlgorithmID ** detached_digestalgs;
165 SECItem ** detached_digests;
166 void * pwfn_arg;
167 NSSCMSGetDecryptKeyCallback decrypt_key_cb;
168 void * decrypt_key_cb_arg;
169 };
170
171 /* ============================================================================
172 * GENERIC WRAPPER
173 *
174 * used for user defined types.
175 */
176 struct NSSCMSGenericWrapperDataStr {
177 NSSCMSContentInfo contentInfo;
178 /* ---- local; not part of encoding ------ */
179 NSSCMSMessage * cmsg;
180 /* wrapperspecific data starts here */
181 };
182
183 /* =============================================================================
184 * SIGNEDDATA
185 */
186
187 struct NSSCMSSignedDataStr {
188 SECItem version;
189 SECAlgorithmID ** digestAlgorithms;
190 NSSCMSContentInfo contentInfo;
191 SECItem ** rawCerts;
192 CERTSignedCrl ** crls;
193 NSSCMSSignerInfo ** signerInfos;
194 /* --------- local; not part of encoding --------- */
195 NSSCMSMessage * cmsg; /* back pointer to messa ge */
196 SECItem ** digests;
197 CERTCertificate ** certs;
198 CERTCertificateList ** certLists;
199 CERTCertificate ** tempCerts; /* temporary certs, need ed
200 * for example for signa ture
201 * verification */
202 };
203 #define NSS_CMS_SIGNED_DATA_VERSION_BASIC 1 /* what we *create* */
204 #define NSS_CMS_SIGNED_DATA_VERSION_EXT 3 /* what we *create* */
205
206 typedef enum {
207 NSSCMSVS_Unverified = 0,
208 NSSCMSVS_GoodSignature = 1,
209 NSSCMSVS_BadSignature = 2,
210 NSSCMSVS_DigestMismatch = 3,
211 NSSCMSVS_SigningCertNotFound = 4,
212 NSSCMSVS_SigningCertNotTrusted = 5,
213 NSSCMSVS_SignatureAlgorithmUnknown = 6,
214 NSSCMSVS_SignatureAlgorithmUnsupported = 7,
215 NSSCMSVS_MalformedSignature = 8,
216 NSSCMSVS_ProcessingError = 9
217 } NSSCMSVerificationStatus;
218
219 typedef enum {
220 NSSCMSSignerID_IssuerSN = 0,
221 NSSCMSSignerID_SubjectKeyID = 1
222 } NSSCMSSignerIDSelector;
223
224 struct NSSCMSSignerIdentifierStr {
225 NSSCMSSignerIDSelector identifierType;
226 union {
227 CERTIssuerAndSN *issuerAndSN;
228 SECItem *subjectKeyID;
229 } id;
230 };
231
232 struct NSSCMSSignerInfoStr {
233 SECItem version;
234 NSSCMSSignerIdentifier signerIdentifier;
235 SECAlgorithmID digestAlg;
236 NSSCMSAttribute ** authAttr;
237 SECAlgorithmID digestEncAlg;
238 SECItem encDigest;
239 NSSCMSAttribute ** unAuthAttr;
240 /* --------- local; not part of encoding --------- */
241 NSSCMSMessage * cmsg; /* back pointer to messa ge */
242 CERTCertificate * cert;
243 CERTCertificateList * certList;
244 PRTime signingTime;
245 NSSCMSVerificationStatus verificationStatus;
246 SECKEYPrivateKey * signingKey; /* Used if we're using subjKeyID*/
247 SECKEYPublicKey * pubKey;
248 };
249 #define NSS_CMS_SIGNER_INFO_VERSION_ISSUERSN 1 /* what we *create* */
250 #define NSS_CMS_SIGNER_INFO_VERSION_SUBJKEY 3 /* what we *create* */
251
252 typedef enum {
253 NSSCMSCM_None = 0,
254 NSSCMSCM_CertOnly = 1,
255 NSSCMSCM_CertChain = 2,
256 NSSCMSCM_CertChainWithRoot = 3
257 } NSSCMSCertChainMode;
258
259 /* =============================================================================
260 * ENVELOPED DATA
261 */
262 struct NSSCMSEnvelopedDataStr {
263 SECItem version;
264 NSSCMSOriginatorInfo * originatorInfo; /* optional */
265 NSSCMSRecipientInfo ** recipientInfos;
266 NSSCMSContentInfo contentInfo;
267 NSSCMSAttribute ** unprotectedAttr;
268 /* --------- local; not part of encoding --------- */
269 NSSCMSMessage * cmsg; /* back pointer to messa ge */
270 };
271 #define NSS_CMS_ENVELOPED_DATA_VERSION_REG 0 /* what we *create* */
272 #define NSS_CMS_ENVELOPED_DATA_VERSION_ADV 2 /* what we *create* */
273
274 struct NSSCMSOriginatorInfoStr {
275 SECItem ** rawCerts;
276 CERTSignedCrl ** crls;
277 /* --------- local; not part of encoding --------- */
278 CERTCertificate ** certs;
279 };
280
281 /* -----------------------------------------------------------------------------
282 * key transport recipient info
283 */
284 typedef enum {
285 NSSCMSRecipientID_IssuerSN = 0,
286 NSSCMSRecipientID_SubjectKeyID = 1,
287 NSSCMSRecipientID_BrandNew = 2
288 } NSSCMSRecipientIDSelector;
289
290 struct NSSCMSRecipientIdentifierStr {
291 NSSCMSRecipientIDSelector identifierType;
292 union {
293 CERTIssuerAndSN *issuerAndSN;
294 SECItem *subjectKeyID;
295 } id;
296 };
297 typedef struct NSSCMSRecipientIdentifierStr NSSCMSRecipientIdentifier;
298
299 struct NSSCMSKeyTransRecipientInfoStr {
300 SECItem version;
301 NSSCMSRecipientIdentifier recipientIdentifier;
302 SECAlgorithmID keyEncAlg;
303 SECItem encKey;
304 };
305 typedef struct NSSCMSKeyTransRecipientInfoStr NSSCMSKeyTransRecipientInfo;
306
307 /*
308 * View comments before NSSCMSRecipientInfoStr for purpose of this
309 * structure.
310 */
311 struct NSSCMSKeyTransRecipientInfoExStr {
312 NSSCMSKeyTransRecipientInfo recipientInfo;
313 int version; /* version of this structure (0) */
314 SECKEYPublicKey *pubKey;
315 };
316
317 typedef struct NSSCMSKeyTransRecipientInfoExStr NSSCMSKeyTransRecipientInfoEx;
318
319 #define NSS_CMS_KEYTRANS_RECIPIENT_INFO_VERSION_ISSUERSN 0 /* what we *create* */
320 #define NSS_CMS_KEYTRANS_RECIPIENT_INFO_VERSION_SUBJKEY 2 /* what we *create* */
321
322 /* -----------------------------------------------------------------------------
323 * key agreement recipient info
324 */
325 struct NSSCMSOriginatorPublicKeyStr {
326 SECAlgorithmID algorithmIdentifier;
327 SECItem publicKey; /* bit s tring! */
328 };
329 typedef struct NSSCMSOriginatorPublicKeyStr NSSCMSOriginatorPublicKey;
330
331 typedef enum {
332 NSSCMSOriginatorIDOrKey_IssuerSN = 0,
333 NSSCMSOriginatorIDOrKey_SubjectKeyID = 1,
334 NSSCMSOriginatorIDOrKey_OriginatorPublicKey = 2
335 } NSSCMSOriginatorIDOrKeySelector;
336
337 struct NSSCMSOriginatorIdentifierOrKeyStr {
338 NSSCMSOriginatorIDOrKeySelector identifierType;
339 union {
340 CERTIssuerAndSN *issuerAndSN; /* static-static */
341 SECItem *subjectKeyID; /* static-static */
342 NSSCMSOriginatorPublicKey originatorPublicKey; /* ephemeral-sta tic */
343 } id;
344 };
345 typedef struct NSSCMSOriginatorIdentifierOrKeyStr NSSCMSOriginatorIdentifierOrKe y;
346
347 struct NSSCMSRecipientKeyIdentifierStr {
348 SECItem * subjectKeyIdentifier;
349 SECItem * date; /* optional */
350 SECItem * other; /* optional */
351 };
352 typedef struct NSSCMSRecipientKeyIdentifierStr NSSCMSRecipientKeyIdentifier;
353
354 typedef enum {
355 NSSCMSKeyAgreeRecipientID_IssuerSN = 0,
356 NSSCMSKeyAgreeRecipientID_RKeyID = 1
357 } NSSCMSKeyAgreeRecipientIDSelector;
358
359 struct NSSCMSKeyAgreeRecipientIdentifierStr {
360 NSSCMSKeyAgreeRecipientIDSelector identifierType;
361 union {
362 CERTIssuerAndSN *issuerAndSN;
363 NSSCMSRecipientKeyIdentifier recipientKeyIdentifier;
364 } id;
365 };
366 typedef struct NSSCMSKeyAgreeRecipientIdentifierStr NSSCMSKeyAgreeRecipientIdent ifier;
367
368 struct NSSCMSRecipientEncryptedKeyStr {
369 NSSCMSKeyAgreeRecipientIdentifier recipientIdentifier;
370 SECItem encKey;
371 };
372 typedef struct NSSCMSRecipientEncryptedKeyStr NSSCMSRecipientEncryptedKey;
373
374 struct NSSCMSKeyAgreeRecipientInfoStr {
375 SECItem version;
376 NSSCMSOriginatorIdentifierOrKey originatorIdentifierOrKey;
377 SECItem * ukm; /* optio nal */
378 SECAlgorithmID keyEncAlg;
379 NSSCMSRecipientEncryptedKey ** recipientEncryptedKeys;
380 };
381 typedef struct NSSCMSKeyAgreeRecipientInfoStr NSSCMSKeyAgreeRecipientInfo;
382
383 #define NSS_CMS_KEYAGREE_RECIPIENT_INFO_VERSION 3 /* what we *create* */
384
385 /* -----------------------------------------------------------------------------
386 * KEK recipient info
387 */
388 struct NSSCMSKEKIdentifierStr {
389 SECItem keyIdentifier;
390 SECItem * date; /* optional */
391 SECItem * other; /* optional */
392 };
393 typedef struct NSSCMSKEKIdentifierStr NSSCMSKEKIdentifier;
394
395 struct NSSCMSKEKRecipientInfoStr {
396 SECItem version;
397 NSSCMSKEKIdentifier kekIdentifier;
398 SECAlgorithmID keyEncAlg;
399 SECItem encKey;
400 };
401 typedef struct NSSCMSKEKRecipientInfoStr NSSCMSKEKRecipientInfo;
402
403 #define NSS_CMS_KEK_RECIPIENT_INFO_VERSION 4 /* what we *create* */
404
405 /* -----------------------------------------------------------------------------
406 * recipient info
407 */
408
409 typedef enum {
410 NSSCMSRecipientInfoID_KeyTrans = 0,
411 NSSCMSRecipientInfoID_KeyAgree = 1,
412 NSSCMSRecipientInfoID_KEK = 2
413 } NSSCMSRecipientInfoIDSelector;
414
415 /*
416 * In order to preserve backwards binary compatibility when implementing
417 * creation of Recipient Info's that uses subjectKeyID in the
418 * keyTransRecipientInfo we need to stash a public key pointer in this
419 * structure somewhere. We figured out that NSSCMSKeyTransRecipientInfo
420 * is the smallest member of the ri union. We're in luck since that's
421 * the very structure that would need to use the public key. So we created
422 * a new structure NSSCMSKeyTransRecipientInfoEx which has a member
423 * NSSCMSKeyTransRecipientInfo as the first member followed by a version
424 * and a public key pointer. This way we can keep backwards compatibility
425 * without changing the size of this structure.
426 *
427 * BTW, size of structure:
428 * NSSCMSKeyTransRecipientInfo: 9 ints, 4 pointers
429 * NSSCMSKeyAgreeRecipientInfo: 12 ints, 8 pointers
430 * NSSCMSKEKRecipientInfo: 10 ints, 7 pointers
431 *
432 * The new structure:
433 * NSSCMSKeyTransRecipientInfoEx: sizeof(NSSCMSKeyTransRecipientInfo) +
434 * 1 int, 1 pointer
435 */
436
437 struct NSSCMSRecipientInfoStr {
438 NSSCMSRecipientInfoIDSelector recipientInfoType;
439 union {
440 NSSCMSKeyTransRecipientInfo keyTransRecipientInfo;
441 NSSCMSKeyAgreeRecipientInfo keyAgreeRecipientInfo;
442 NSSCMSKEKRecipientInfo kekRecipientInfo;
443 NSSCMSKeyTransRecipientInfoEx keyTransRecipientInfoEx;
444 } ri;
445 /* --------- local; not part of encoding --------- */
446 NSSCMSMessage * cmsg; /* back pointer to messa ge */
447 CERTCertificate * cert; /* recipient's certifica te */
448 };
449
450 /* =============================================================================
451 * DIGESTED DATA
452 */
453 struct NSSCMSDigestedDataStr {
454 SECItem version;
455 SECAlgorithmID digestAlg;
456 NSSCMSContentInfo contentInfo;
457 SECItem digest;
458 /* --------- local; not part of encoding --------- */
459 NSSCMSMessage * cmsg; /* back pointer */
460 SECItem cdigest; /* calculated digest */
461 };
462 #define NSS_CMS_DIGESTED_DATA_VERSION_DATA 0 /* what we *create* */
463 #define NSS_CMS_DIGESTED_DATA_VERSION_ENCAP 2 /* what we *create* */
464
465 /* =============================================================================
466 * ENCRYPTED DATA
467 */
468 struct NSSCMSEncryptedDataStr {
469 SECItem version;
470 NSSCMSContentInfo contentInfo;
471 NSSCMSAttribute ** unprotectedAttr; /* optional */
472 /* --------- local; not part of encoding --------- */
473 NSSCMSMessage * cmsg; /* back pointer */
474 };
475 #define NSS_CMS_ENCRYPTED_DATA_VERSION 0 /* what we *create* */
476 #define NSS_CMS_ENCRYPTED_DATA_VERSION_UPATTR 2 /* what we *create* */
477
478 /*
479 * *****************************************************************************
480 * *****************************************************************************
481 * *****************************************************************************
482 */
483
484 /*
485 * See comment above about this type not really belonging to CMS.
486 */
487 struct NSSCMSAttributeStr {
488 /* The following fields make up an encoded Attribute: */
489 SECItem type;
490 SECItem ** values; /* data may or may not be encoded */
491 /* The following fields are not part of an encoded Attribute: */
492 SECOidData * typeTag;
493 PRBool encoded; /* when true, values are encoded */
494 };
495
496 #endif /* _CMST_H_ */
OLDNEW
« no previous file with comments | « nss/lib/smime/cmsreclist.h ('k') | nss/lib/smime/smime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698