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

Side by Side Diff: mozilla/security/nss/lib/smime/cms.h

Issue 14249009: Change the NSS and NSPR source tree to the new directory structure to be (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « mozilla/security/nss/lib/pki/trustdomain.c ('k') | mozilla/security/nss/lib/smime/cmslocal.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 * Interfaces of the CMS implementation.
7 *
8 * $Id: cms.h,v 1.27 2012/04/25 14:50:08 gerv%gerv.net Exp $
9 */
10
11 #ifndef _CMS_H_
12 #define _CMS_H_
13
14 #include "seccomon.h"
15
16 #include "secoidt.h"
17 #include "certt.h"
18 #include "keyt.h"
19 #include "hasht.h"
20 #include "cmst.h"
21
22 /************************************************************************/
23 SEC_BEGIN_PROTOS
24
25 /************************************************************************
26 * cmsdecode.c - CMS decoding
27 ************************************************************************/
28
29 /*
30 * NSS_CMSDecoder_Start - set up decoding of a DER-encoded CMS message
31 *
32 * "poolp" - pointer to arena for message, or NULL if new pool should be created
33 * "cb", "cb_arg" - callback function and argument for delivery of inner content
34 * inner content will be stored in the message if cb is NULL.
35 * "pwfn", pwfn_arg" - callback function for getting token password
36 * "decrypt_key_cb", "decrypt_key_cb_arg" - callback function for getting bulk k ey for encryptedData
37 */
38 extern NSSCMSDecoderContext *
39 NSS_CMSDecoder_Start(PLArenaPool *poolp,
40 NSSCMSContentCallback cb, void *cb_arg,
41 PK11PasswordFunc pwfn, void *pwfn_arg,
42 NSSCMSGetDecryptKeyCallback decrypt_key_cb, void *decrypt_ key_cb_arg);
43
44 /*
45 * NSS_CMSDecoder_Update - feed DER-encoded data to decoder
46 */
47 extern SECStatus
48 NSS_CMSDecoder_Update(NSSCMSDecoderContext *p7dcx, const char *buf, unsigned lon g len);
49
50 /*
51 * NSS_CMSDecoder_Cancel - cancel a decoding process
52 */
53 extern void
54 NSS_CMSDecoder_Cancel(NSSCMSDecoderContext *p7dcx);
55
56 /*
57 * NSS_CMSDecoder_Finish - mark the end of inner content and finish decoding
58 */
59 extern NSSCMSMessage *
60 NSS_CMSDecoder_Finish(NSSCMSDecoderContext *p7dcx);
61
62 /*
63 * NSS_CMSMessage_CreateFromDER - decode a CMS message from DER encoded data
64 */
65 extern NSSCMSMessage *
66 NSS_CMSMessage_CreateFromDER(SECItem *DERmessage,
67 NSSCMSContentCallback cb, void *cb_arg,
68 PK11PasswordFunc pwfn, void *pwfn_arg,
69 NSSCMSGetDecryptKeyCallback decrypt_key_cb, void *decrypt_ke y_cb_arg);
70
71 /************************************************************************
72 * cmsencode.c - CMS encoding
73 ************************************************************************/
74
75 /*
76 * NSS_CMSEncoder_Start - set up encoding of a CMS message
77 *
78 * "cmsg" - message to encode
79 * "outputfn", "outputarg" - callback function for delivery of DER-encoded outpu t
80 * will not be called if NULL.
81 * "dest" - if non-NULL, pointer to SECItem that will hold the DER-encoded outpu t
82 * "destpoolp" - pool to allocate DER-encoded output in
83 * "pwfn", pwfn_arg" - callback function for getting token password
84 * "decrypt_key_cb", "decrypt_key_cb_arg" - callback function for getting bulk k ey for encryptedData
85 * "detached_digestalgs", "detached_digests" - digests from detached content
86 */
87 extern NSSCMSEncoderContext *
88 NSS_CMSEncoder_Start(NSSCMSMessage *cmsg,
89 NSSCMSContentCallback outputfn, void *outputarg,
90 SECItem *dest, PLArenaPool *destpoolp,
91 PK11PasswordFunc pwfn, void *pwfn_arg,
92 NSSCMSGetDecryptKeyCallback decrypt_key_cb, void *decryp t_key_cb_arg,
93 SECAlgorithmID **detached_digestalgs, SECItem **detached _digests);
94
95 /*
96 * NSS_CMSEncoder_Update - take content data delivery from the user
97 *
98 * "p7ecx" - encoder context
99 * "data" - content data
100 * "len" - length of content data
101 */
102 extern SECStatus
103 NSS_CMSEncoder_Update(NSSCMSEncoderContext *p7ecx, const char *data, unsigned lo ng len);
104
105 /*
106 * NSS_CMSEncoder_Cancel - stop all encoding
107 */
108 extern SECStatus
109 NSS_CMSEncoder_Cancel(NSSCMSEncoderContext *p7ecx);
110
111 /*
112 * NSS_CMSEncoder_Finish - signal the end of data
113 *
114 * we need to walk down the chain of encoders and the finish them from the inner most out
115 */
116 extern SECStatus
117 NSS_CMSEncoder_Finish(NSSCMSEncoderContext *p7ecx);
118
119 /************************************************************************
120 * cmsmessage.c - CMS message object
121 ************************************************************************/
122
123 /*
124 * NSS_CMSMessage_Create - create a CMS message object
125 *
126 * "poolp" - arena to allocate memory from, or NULL if new arena should be creat ed
127 */
128 extern NSSCMSMessage *
129 NSS_CMSMessage_Create(PLArenaPool *poolp);
130
131 /*
132 * NSS_CMSMessage_SetEncodingParams - set up a CMS message object for encoding o r decoding
133 *
134 * "cmsg" - message object
135 * "pwfn", pwfn_arg" - callback function for getting token password
136 * "decrypt_key_cb", "decrypt_key_cb_arg" - callback function for getting bulk k ey for encryptedData
137 * "detached_digestalgs", "detached_digests" - digests from detached content
138 *
139 * used internally.
140 */
141 extern void
142 NSS_CMSMessage_SetEncodingParams(NSSCMSMessage *cmsg,
143 PK11PasswordFunc pwfn, void *pwfn_arg,
144 NSSCMSGetDecryptKeyCallback decrypt_key_cb, void *decryp t_key_cb_arg,
145 SECAlgorithmID **detached_digestalgs, SECItem **detached _digests);
146
147 /*
148 * NSS_CMSMessage_Destroy - destroy a CMS message and all of its sub-pieces.
149 */
150 extern void
151 NSS_CMSMessage_Destroy(NSSCMSMessage *cmsg);
152
153 /*
154 * NSS_CMSMessage_Copy - return a copy of the given message.
155 *
156 * The copy may be virtual or may be real -- either way, the result needs
157 * to be passed to NSS_CMSMessage_Destroy later (as does the original).
158 */
159 extern NSSCMSMessage *
160 NSS_CMSMessage_Copy(NSSCMSMessage *cmsg);
161
162 /*
163 * NSS_CMSMessage_GetArena - return a pointer to the message's arena pool
164 */
165 extern PLArenaPool *
166 NSS_CMSMessage_GetArena(NSSCMSMessage *cmsg);
167
168 /*
169 * NSS_CMSMessage_GetContentInfo - return a pointer to the top level contentInfo
170 */
171 extern NSSCMSContentInfo *
172 NSS_CMSMessage_GetContentInfo(NSSCMSMessage *cmsg);
173
174 /*
175 * Return a pointer to the actual content.
176 * In the case of those types which are encrypted, this returns the *plain* cont ent.
177 * In case of nested contentInfos, this descends and retrieves the innermost con tent.
178 */
179 extern SECItem *
180 NSS_CMSMessage_GetContent(NSSCMSMessage *cmsg);
181
182 /*
183 * NSS_CMSMessage_ContentLevelCount - count number of levels of CMS content obje cts in this message
184 *
185 * CMS data content objects do not count.
186 */
187 extern int
188 NSS_CMSMessage_ContentLevelCount(NSSCMSMessage *cmsg);
189
190 /*
191 * NSS_CMSMessage_ContentLevel - find content level #n
192 *
193 * CMS data content objects do not count.
194 */
195 extern NSSCMSContentInfo *
196 NSS_CMSMessage_ContentLevel(NSSCMSMessage *cmsg, int n);
197
198 /*
199 * NSS_CMSMessage_ContainsCertsOrCrls - see if message contains certs along the way
200 */
201 extern PRBool
202 NSS_CMSMessage_ContainsCertsOrCrls(NSSCMSMessage *cmsg);
203
204 /*
205 * NSS_CMSMessage_IsEncrypted - see if message contains a encrypted submessage
206 */
207 extern PRBool
208 NSS_CMSMessage_IsEncrypted(NSSCMSMessage *cmsg);
209
210 /*
211 * NSS_CMSMessage_IsSigned - see if message contains a signed submessage
212 *
213 * If the CMS message has a SignedData with a signature (not just a SignedData)
214 * return true; false otherwise. This can/should be called before calling
215 * VerifySignature, which will always indicate failure if no signature is
216 * present, but that does not mean there even was a signature!
217 * Note that the content itself can be empty (detached content was sent
218 * another way); it is the presence of the signature that matters.
219 */
220 extern PRBool
221 NSS_CMSMessage_IsSigned(NSSCMSMessage *cmsg);
222
223 /*
224 * NSS_CMSMessage_IsContentEmpty - see if content is empty
225 *
226 * returns PR_TRUE is innermost content length is < minLen
227 * XXX need the encrypted content length (why?)
228 */
229 extern PRBool
230 NSS_CMSMessage_IsContentEmpty(NSSCMSMessage *cmsg, unsigned int minLen);
231
232 /************************************************************************
233 * cmscinfo.c - CMS contentInfo methods
234 ************************************************************************/
235
236 /*
237 * NSS_CMSContentInfo_Destroy - destroy a CMS contentInfo and all of its sub-pie ces.
238 */
239 extern void
240 NSS_CMSContentInfo_Destroy(NSSCMSContentInfo *cinfo);
241
242 /*
243 * NSS_CMSContentInfo_GetChildContentInfo - get content's contentInfo (if it exi sts)
244 */
245 extern NSSCMSContentInfo *
246 NSS_CMSContentInfo_GetChildContentInfo(NSSCMSContentInfo *cinfo);
247
248 /*
249 * NSS_CMSContentInfo_SetContent - set cinfo's content type & content to CMS obj ect
250 */
251 extern SECStatus
252 NSS_CMSContentInfo_SetContent(NSSCMSMessage *cmsg, NSSCMSContentInfo *cinfo, SEC OidTag type, void *ptr);
253
254 /*
255 * NSS_CMSContentInfo_SetContent_XXXX - typesafe wrappers for NSS_CMSContentInfo _SetType
256 * set cinfo's content type & content to CMS object
257 */
258 extern SECStatus
259 NSS_CMSContentInfo_SetContent_Data(NSSCMSMessage *cmsg, NSSCMSContentInfo *cinfo , SECItem *data, PRBool detached);
260
261 extern SECStatus
262 NSS_CMSContentInfo_SetContent_SignedData(NSSCMSMessage *cmsg, NSSCMSContentInfo *cinfo, NSSCMSSignedData *sigd);
263
264 extern SECStatus
265 NSS_CMSContentInfo_SetContent_EnvelopedData(NSSCMSMessage *cmsg, NSSCMSContentIn fo *cinfo, NSSCMSEnvelopedData *envd);
266
267 extern SECStatus
268 NSS_CMSContentInfo_SetContent_DigestedData(NSSCMSMessage *cmsg, NSSCMSContentInf o *cinfo, NSSCMSDigestedData *digd);
269
270 extern SECStatus
271 NSS_CMSContentInfo_SetContent_EncryptedData(NSSCMSMessage *cmsg, NSSCMSContentIn fo *cinfo, NSSCMSEncryptedData *encd);
272
273 /*
274 * turn off streaming for this content type.
275 * This could fail with SEC_ERROR_NO_MEMORY in memory constrained conditions.
276 */
277 extern SECStatus
278 NSS_CMSContentInfo_SetDontStream(NSSCMSContentInfo *cinfo, PRBool dontStream);
279
280
281 /*
282 * NSS_CMSContentInfo_GetContent - get pointer to inner content
283 *
284 * needs to be casted...
285 */
286 extern void *
287 NSS_CMSContentInfo_GetContent(NSSCMSContentInfo *cinfo);
288
289 /*
290 * NSS_CMSContentInfo_GetInnerContent - get pointer to innermost content
291 *
292 * this is typically only called by NSS_CMSMessage_GetContent()
293 */
294 extern SECItem *
295 NSS_CMSContentInfo_GetInnerContent(NSSCMSContentInfo *cinfo);
296
297 /*
298 * NSS_CMSContentInfo_GetContentType{Tag,OID} - find out (saving pointer to look up result
299 * for future reference) and return the inner content type.
300 */
301 extern SECOidTag
302 NSS_CMSContentInfo_GetContentTypeTag(NSSCMSContentInfo *cinfo);
303
304 extern SECItem *
305 NSS_CMSContentInfo_GetContentTypeOID(NSSCMSContentInfo *cinfo);
306
307 /*
308 * NSS_CMSContentInfo_GetContentEncAlgTag - find out (saving pointer to lookup r esult
309 * for future reference) and return the content encryption algorithm tag.
310 */
311 extern SECOidTag
312 NSS_CMSContentInfo_GetContentEncAlgTag(NSSCMSContentInfo *cinfo);
313
314 /*
315 * NSS_CMSContentInfo_GetContentEncAlg - find out and return the content encrypt ion algorithm tag.
316 */
317 extern SECAlgorithmID *
318 NSS_CMSContentInfo_GetContentEncAlg(NSSCMSContentInfo *cinfo);
319
320 extern SECStatus
321 NSS_CMSContentInfo_SetContentEncAlg(PLArenaPool *poolp, NSSCMSContentInfo *cinfo ,
322 SECOidTag bulkalgtag, SECItem *parameters, i nt keysize);
323
324 extern SECStatus
325 NSS_CMSContentInfo_SetContentEncAlgID(PLArenaPool *poolp, NSSCMSContentInfo *cin fo,
326 SECAlgorithmID *algid, int keysize);
327
328 extern void
329 NSS_CMSContentInfo_SetBulkKey(NSSCMSContentInfo *cinfo, PK11SymKey *bulkkey);
330
331 extern PK11SymKey *
332 NSS_CMSContentInfo_GetBulkKey(NSSCMSContentInfo *cinfo);
333
334 extern int
335 NSS_CMSContentInfo_GetBulkKeySize(NSSCMSContentInfo *cinfo);
336
337 /************************************************************************
338 * cmsutil.c - CMS misc utility functions
339 ************************************************************************/
340
341 /*
342 * NSS_CMSArray_SortByDER - sort array of objects by objects' DER encoding
343 *
344 * make sure that the order of the objects guarantees valid DER (which must be
345 * in lexigraphically ascending order for a SET OF); if reordering is necessary it
346 * will be done in place (in objs).
347 */
348 extern SECStatus
349 NSS_CMSArray_SortByDER(void **objs, const SEC_ASN1Template *objtemplate, void ** objs2);
350
351 /*
352 * NSS_CMSUtil_DERCompare - for use with NSS_CMSArray_Sort to
353 * sort arrays of SECItems containing DER
354 */
355 extern int
356 NSS_CMSUtil_DERCompare(void *a, void *b);
357
358 /*
359 * NSS_CMSAlgArray_GetIndexByAlgID - find a specific algorithm in an array of
360 * algorithms.
361 *
362 * algorithmArray - array of algorithm IDs
363 * algid - algorithmid of algorithm to pick
364 *
365 * Returns:
366 * An integer containing the index of the algorithm in the array or -1 if
367 * algorithm was not found.
368 */
369 extern int
370 NSS_CMSAlgArray_GetIndexByAlgID(SECAlgorithmID **algorithmArray, SECAlgorithmID *algid);
371
372 /*
373 * NSS_CMSAlgArray_GetIndexByAlgID - find a specific algorithm in an array of
374 * algorithms.
375 *
376 * algorithmArray - array of algorithm IDs
377 * algiddata - id of algorithm to pick
378 *
379 * Returns:
380 * An integer containing the index of the algorithm in the array or -1 if
381 * algorithm was not found.
382 */
383 extern int
384 NSS_CMSAlgArray_GetIndexByAlgTag(SECAlgorithmID **algorithmArray, SECOidTag algt ag);
385
386 extern const SECHashObject *
387 NSS_CMSUtil_GetHashObjByAlgID(SECAlgorithmID *algid);
388
389 extern const SEC_ASN1Template *
390 NSS_CMSUtil_GetTemplateByTypeTag(SECOidTag type);
391
392 extern size_t
393 NSS_CMSUtil_GetSizeByTypeTag(SECOidTag type);
394
395 extern NSSCMSContentInfo *
396 NSS_CMSContent_GetContentInfo(void *msg, SECOidTag type);
397
398 extern const char *
399 NSS_CMSUtil_VerificationStatusToString(NSSCMSVerificationStatus vs);
400
401 /************************************************************************
402 * cmssigdata.c - CMS signedData methods
403 ************************************************************************/
404
405 extern NSSCMSSignedData *
406 NSS_CMSSignedData_Create(NSSCMSMessage *cmsg);
407
408 extern void
409 NSS_CMSSignedData_Destroy(NSSCMSSignedData *sigd);
410
411 /*
412 * NSS_CMSSignedData_Encode_BeforeStart - do all the necessary things to a Signe dData
413 * before start of encoding.
414 *
415 * In detail:
416 * - find out about the right value to put into sigd->version
417 * - come up with a list of digestAlgorithms (which should be the union of the algorithms
418 * in the signerinfos).
419 * If we happen to have a pre-set list of algorithms (and digest values! ), we
420 * check if we have all the signerinfos' algorithms. If not, this is an error.
421 */
422 extern SECStatus
423 NSS_CMSSignedData_Encode_BeforeStart(NSSCMSSignedData *sigd);
424
425 extern SECStatus
426 NSS_CMSSignedData_Encode_BeforeData(NSSCMSSignedData *sigd);
427
428 /*
429 * NSS_CMSSignedData_Encode_AfterData - do all the necessary things to a SignedD ata
430 * after all the encapsulated data was passed through the encoder.
431 *
432 * In detail:
433 * - create the signatures in all the SignerInfos
434 *
435 * Please note that nothing is done to the Certificates and CRLs in the message - this
436 * is entirely the responsibility of our callers.
437 */
438 extern SECStatus
439 NSS_CMSSignedData_Encode_AfterData(NSSCMSSignedData *sigd);
440
441 extern SECStatus
442 NSS_CMSSignedData_Decode_BeforeData(NSSCMSSignedData *sigd);
443
444 /*
445 * NSS_CMSSignedData_Decode_AfterData - do all the necessary things to a SignedD ata
446 * after all the encapsulated data was passed through the decoder.
447 */
448 extern SECStatus
449 NSS_CMSSignedData_Decode_AfterData(NSSCMSSignedData *sigd);
450
451 /*
452 * NSS_CMSSignedData_Decode_AfterEnd - do all the necessary things to a SignedDa ta
453 * after all decoding is finished.
454 */
455 extern SECStatus
456 NSS_CMSSignedData_Decode_AfterEnd(NSSCMSSignedData *sigd);
457
458 /*
459 * NSS_CMSSignedData_GetSignerInfos - retrieve the SignedData's signer list
460 */
461 extern NSSCMSSignerInfo **
462 NSS_CMSSignedData_GetSignerInfos(NSSCMSSignedData *sigd);
463
464 extern int
465 NSS_CMSSignedData_SignerInfoCount(NSSCMSSignedData *sigd);
466
467 extern NSSCMSSignerInfo *
468 NSS_CMSSignedData_GetSignerInfo(NSSCMSSignedData *sigd, int i);
469
470 /*
471 * NSS_CMSSignedData_GetDigestAlgs - retrieve the SignedData's digest algorithm list
472 */
473 extern SECAlgorithmID **
474 NSS_CMSSignedData_GetDigestAlgs(NSSCMSSignedData *sigd);
475
476 /*
477 * NSS_CMSSignedData_GetContentInfo - return pointer to this signedData's conten tinfo
478 */
479 extern NSSCMSContentInfo *
480 NSS_CMSSignedData_GetContentInfo(NSSCMSSignedData *sigd);
481
482 /*
483 * NSS_CMSSignedData_GetCertificateList - retrieve the SignedData's certificate list
484 */
485 extern SECItem **
486 NSS_CMSSignedData_GetCertificateList(NSSCMSSignedData *sigd);
487
488 extern SECStatus
489 NSS_CMSSignedData_ImportCerts(NSSCMSSignedData *sigd, CERTCertDBHandle *certdb,
490 SECCertUsage certusage, PRBool keepcerts);
491
492 /*
493 * NSS_CMSSignedData_HasDigests - see if we have digests in place
494 */
495 extern PRBool
496 NSS_CMSSignedData_HasDigests(NSSCMSSignedData *sigd);
497
498 /*
499 * NSS_CMSSignedData_VerifySignerInfo - check a signature.
500 *
501 * The digests were either calculated during decoding (and are stored in the
502 * signedData itself) or set after decoding using NSS_CMSSignedData_SetDigests.
503 *
504 * The verification checks if the signing cert is valid and has a trusted chain
505 * for the purpose specified by "certusage".
506 */
507 extern SECStatus
508 NSS_CMSSignedData_VerifySignerInfo(NSSCMSSignedData *sigd, int i, CERTCertDBHand le *certdb,
509 SECCertUsage certusage);
510
511 /*
512 * NSS_CMSSignedData_VerifyCertsOnly - verify the certs in a certs-only message
513 */
514 extern SECStatus
515 NSS_CMSSignedData_VerifyCertsOnly(NSSCMSSignedData *sigd,
516 CERTCertDBHandle *certdb,
517 SECCertUsage usage);
518
519 extern SECStatus
520 NSS_CMSSignedData_AddCertList(NSSCMSSignedData *sigd, CERTCertificateList *certl ist);
521
522 /*
523 * NSS_CMSSignedData_AddCertChain - add cert and its entire chain to the set of certs
524 */
525 extern SECStatus
526 NSS_CMSSignedData_AddCertChain(NSSCMSSignedData *sigd, CERTCertificate *cert);
527
528 extern SECStatus
529 NSS_CMSSignedData_AddCertificate(NSSCMSSignedData *sigd, CERTCertificate *cert);
530
531 extern PRBool
532 NSS_CMSSignedData_ContainsCertsOrCrls(NSSCMSSignedData *sigd);
533
534 extern SECStatus
535 NSS_CMSSignedData_AddSignerInfo(NSSCMSSignedData *sigd,
536 NSSCMSSignerInfo *signerinfo);
537
538 extern SECStatus
539 NSS_CMSSignedData_SetDigests(NSSCMSSignedData *sigd,
540 SECAlgorithmID **digestalgs,
541 SECItem **digests);
542
543 extern SECStatus
544 NSS_CMSSignedData_SetDigestValue(NSSCMSSignedData *sigd,
545 SECOidTag digestalgtag,
546 SECItem *digestdata);
547
548 extern SECStatus
549 NSS_CMSSignedData_AddDigest(PLArenaPool *poolp,
550 NSSCMSSignedData *sigd,
551 SECOidTag digestalgtag,
552 SECItem *digest);
553
554 extern SECItem *
555 NSS_CMSSignedData_GetDigestValue(NSSCMSSignedData *sigd, SECOidTag digestalgtag) ;
556
557 /*
558 * NSS_CMSSignedData_CreateCertsOnly - create a certs-only SignedData.
559 *
560 * cert - base certificates that will be included
561 * include_chain - if true, include the complete cert chain for cert
562 *
563 * More certs and chains can be added via AddCertificate and AddCertChain.
564 *
565 * An error results in a return value of NULL and an error set.
566 */
567 extern NSSCMSSignedData *
568 NSS_CMSSignedData_CreateCertsOnly(NSSCMSMessage *cmsg, CERTCertificate *cert, PR Bool include_chain);
569
570 /************************************************************************
571 * cmssiginfo.c - signerinfo methods
572 ************************************************************************/
573
574 extern NSSCMSSignerInfo *
575 NSS_CMSSignerInfo_Create(NSSCMSMessage *cmsg, CERTCertificate *cert, SECOidTag d igestalgtag);
576 extern NSSCMSSignerInfo *
577 NSS_CMSSignerInfo_CreateWithSubjKeyID(NSSCMSMessage *cmsg, SECItem *subjKeyID, S ECKEYPublicKey *pubKey, SECKEYPrivateKey *signingKey, SECOidTag digestalgtag);
578
579 /*
580 * NSS_CMSSignerInfo_Destroy - destroy a SignerInfo data structure
581 */
582 extern void
583 NSS_CMSSignerInfo_Destroy(NSSCMSSignerInfo *si);
584
585 /*
586 * NSS_CMSSignerInfo_Sign - sign something
587 *
588 */
589 extern SECStatus
590 NSS_CMSSignerInfo_Sign(NSSCMSSignerInfo *signerinfo, SECItem *digest, SECItem *c ontentType);
591
592 extern SECStatus
593 NSS_CMSSignerInfo_VerifyCertificate(NSSCMSSignerInfo *signerinfo, CERTCertDBHand le *certdb,
594 SECCertUsage certusage);
595
596 /*
597 * NSS_CMSSignerInfo_Verify - verify the signature of a single SignerInfo
598 *
599 * Just verifies the signature. The assumption is that verification of the certi ficate
600 * is done already.
601 */
602 extern SECStatus
603 NSS_CMSSignerInfo_Verify(NSSCMSSignerInfo *signerinfo, SECItem *digest, SECItem *contentType);
604
605 extern NSSCMSVerificationStatus
606 NSS_CMSSignerInfo_GetVerificationStatus(NSSCMSSignerInfo *signerinfo);
607
608 extern SECOidData *
609 NSS_CMSSignerInfo_GetDigestAlg(NSSCMSSignerInfo *signerinfo);
610
611 extern SECOidTag
612 NSS_CMSSignerInfo_GetDigestAlgTag(NSSCMSSignerInfo *signerinfo);
613
614 extern int
615 NSS_CMSSignerInfo_GetVersion(NSSCMSSignerInfo *signerinfo);
616
617 extern CERTCertificateList *
618 NSS_CMSSignerInfo_GetCertList(NSSCMSSignerInfo *signerinfo);
619
620 /*
621 * NSS_CMSSignerInfo_GetSigningTime - return the signing time,
622 * in UTCTime format, of a CMS signerInfo.
623 *
624 * sinfo - signerInfo data for this signer
625 *
626 * Returns a pointer to XXXX (what?)
627 * A return value of NULL is an error.
628 */
629 extern SECStatus
630 NSS_CMSSignerInfo_GetSigningTime(NSSCMSSignerInfo *sinfo, PRTime *stime);
631
632 /*
633 * Return the signing cert of a CMS signerInfo.
634 *
635 * the certs in the enclosing SignedData must have been imported already
636 */
637 extern CERTCertificate *
638 NSS_CMSSignerInfo_GetSigningCertificate(NSSCMSSignerInfo *signerinfo, CERTCertDB Handle *certdb);
639
640 /*
641 * NSS_CMSSignerInfo_GetSignerCommonName - return the common name of the signer
642 *
643 * sinfo - signerInfo data for this signer
644 *
645 * Returns a pointer to allocated memory, which must be freed with PORT_Free.
646 * A return value of NULL is an error.
647 */
648 extern char *
649 NSS_CMSSignerInfo_GetSignerCommonName(NSSCMSSignerInfo *sinfo);
650
651 /*
652 * NSS_CMSSignerInfo_GetSignerEmailAddress - return the common name of the signe r
653 *
654 * sinfo - signerInfo data for this signer
655 *
656 * Returns a pointer to allocated memory, which must be freed.
657 * A return value of NULL is an error.
658 */
659 extern char *
660 NSS_CMSSignerInfo_GetSignerEmailAddress(NSSCMSSignerInfo *sinfo);
661
662 /*
663 * NSS_CMSSignerInfo_AddAuthAttr - add an attribute to the
664 * authenticated (i.e. signed) attributes of "signerinfo".
665 */
666 extern SECStatus
667 NSS_CMSSignerInfo_AddAuthAttr(NSSCMSSignerInfo *signerinfo, NSSCMSAttribute *att r);
668
669 /*
670 * NSS_CMSSignerInfo_AddUnauthAttr - add an attribute to the
671 * unauthenticated attributes of "signerinfo".
672 */
673 extern SECStatus
674 NSS_CMSSignerInfo_AddUnauthAttr(NSSCMSSignerInfo *signerinfo, NSSCMSAttribute *a ttr);
675
676 /*
677 * NSS_CMSSignerInfo_AddSigningTime - add the signing time to the
678 * authenticated (i.e. signed) attributes of "signerinfo".
679 *
680 * This is expected to be included in outgoing signed
681 * messages for email (S/MIME) but is likely useful in other situations.
682 *
683 * This should only be added once; a second call will do nothing.
684 *
685 * XXX This will probably just shove the current time into "signerinfo"
686 * but it will not actually get signed until the entire item is
687 * processed for encoding. Is this (expected to be small) delay okay?
688 */
689 extern SECStatus
690 NSS_CMSSignerInfo_AddSigningTime(NSSCMSSignerInfo *signerinfo, PRTime t);
691
692 /*
693 * NSS_CMSSignerInfo_AddSMIMECaps - add a SMIMECapabilities attribute to the
694 * authenticated (i.e. signed) attributes of "signerinfo".
695 *
696 * This is expected to be included in outgoing signed
697 * messages for email (S/MIME).
698 */
699 extern SECStatus
700 NSS_CMSSignerInfo_AddSMIMECaps(NSSCMSSignerInfo *signerinfo);
701
702 /*
703 * NSS_CMSSignerInfo_AddSMIMEEncKeyPrefs - add a SMIMEEncryptionKeyPreferences a ttribute to the
704 * authenticated (i.e. signed) attributes of "signerinfo".
705 *
706 * This is expected to be included in outgoing signed messages for email (S/MIME ).
707 */
708 SECStatus
709 NSS_CMSSignerInfo_AddSMIMEEncKeyPrefs(NSSCMSSignerInfo *signerinfo, CERTCertific ate *cert, CERTCertDBHandle *certdb);
710
711 /*
712 * NSS_CMSSignerInfo_AddMSSMIMEEncKeyPrefs - add a SMIMEEncryptionKeyPreferences attribute to the
713 * authenticated (i.e. signed) attributes of "signerinfo", using the OID preferr ed by Microsoft.
714 *
715 * This is expected to be included in outgoing signed messages for email (S/MIME ),
716 * if compatibility with Microsoft mail clients is wanted.
717 */
718 SECStatus
719 NSS_CMSSignerInfo_AddMSSMIMEEncKeyPrefs(NSSCMSSignerInfo *signerinfo, CERTCertif icate *cert, CERTCertDBHandle *certdb);
720
721 /*
722 * NSS_CMSSignerInfo_AddCounterSignature - countersign a signerinfo
723 */
724 extern SECStatus
725 NSS_CMSSignerInfo_AddCounterSignature(NSSCMSSignerInfo *signerinfo,
726 SECOidTag digestalg, CERTCertificate signing cert);
727
728 /*
729 * XXXX the following needs to be done in the S/MIME layer code
730 * after signature of a signerinfo is verified
731 */
732 extern SECStatus
733 NSS_SMIMESignerInfo_SaveSMIMEProfile(NSSCMSSignerInfo *signerinfo);
734
735 /*
736 * NSS_CMSSignerInfo_IncludeCerts - set cert chain inclusion mode for this signe r
737 */
738 extern SECStatus
739 NSS_CMSSignerInfo_IncludeCerts(NSSCMSSignerInfo *signerinfo, NSSCMSCertChainMode cm, SECCertUsage usage);
740
741 /************************************************************************
742 * cmsenvdata.c - CMS envelopedData methods
743 ************************************************************************/
744
745 /*
746 * NSS_CMSEnvelopedData_Create - create an enveloped data message
747 */
748 extern NSSCMSEnvelopedData *
749 NSS_CMSEnvelopedData_Create(NSSCMSMessage *cmsg, SECOidTag algorithm, int keysiz e);
750
751 /*
752 * NSS_CMSEnvelopedData_Destroy - destroy an enveloped data message
753 */
754 extern void
755 NSS_CMSEnvelopedData_Destroy(NSSCMSEnvelopedData *edp);
756
757 /*
758 * NSS_CMSEnvelopedData_GetContentInfo - return pointer to this envelopedData's contentinfo
759 */
760 extern NSSCMSContentInfo *
761 NSS_CMSEnvelopedData_GetContentInfo(NSSCMSEnvelopedData *envd);
762
763 /*
764 * NSS_CMSEnvelopedData_AddRecipient - add a recipientinfo to the enveloped data msg
765 *
766 * rip must be created on the same pool as edp - this is not enforced, though.
767 */
768 extern SECStatus
769 NSS_CMSEnvelopedData_AddRecipient(NSSCMSEnvelopedData *edp, NSSCMSRecipientInfo *rip);
770
771 /*
772 * NSS_CMSEnvelopedData_Encode_BeforeStart - prepare this envelopedData for enco ding
773 *
774 * at this point, we need
775 * - recipientinfos set up with recipient's certificates
776 * - a content encryption algorithm (if none, 3DES will be used)
777 *
778 * this function will generate a random content encryption key (aka bulk key),
779 * initialize the recipientinfos with certificate identification and wrap the bu lk key
780 * using the proper algorithm for every certificiate.
781 * it will finally set the bulk algorithm and key so that the encode step can fi nd it.
782 */
783 extern SECStatus
784 NSS_CMSEnvelopedData_Encode_BeforeStart(NSSCMSEnvelopedData *envd);
785
786 /*
787 * NSS_CMSEnvelopedData_Encode_BeforeData - set up encryption
788 */
789 extern SECStatus
790 NSS_CMSEnvelopedData_Encode_BeforeData(NSSCMSEnvelopedData *envd);
791
792 /*
793 * NSS_CMSEnvelopedData_Encode_AfterData - finalize this envelopedData for encod ing
794 */
795 extern SECStatus
796 NSS_CMSEnvelopedData_Encode_AfterData(NSSCMSEnvelopedData *envd);
797
798 /*
799 * NSS_CMSEnvelopedData_Decode_BeforeData - find our recipientinfo,
800 * derive bulk key & set up our contentinfo
801 */
802 extern SECStatus
803 NSS_CMSEnvelopedData_Decode_BeforeData(NSSCMSEnvelopedData *envd);
804
805 /*
806 * NSS_CMSEnvelopedData_Decode_AfterData - finish decrypting this envelopedData' s content
807 */
808 extern SECStatus
809 NSS_CMSEnvelopedData_Decode_AfterData(NSSCMSEnvelopedData *envd);
810
811 /*
812 * NSS_CMSEnvelopedData_Decode_AfterEnd - finish decoding this envelopedData
813 */
814 extern SECStatus
815 NSS_CMSEnvelopedData_Decode_AfterEnd(NSSCMSEnvelopedData *envd);
816
817
818 /************************************************************************
819 * cmsrecinfo.c - CMS recipientInfo methods
820 ************************************************************************/
821
822 /*
823 * NSS_CMSRecipientInfo_Create - create a recipientinfo
824 *
825 * we currently do not create KeyAgreement recipientinfos with multiple recipien tEncryptedKeys
826 * the certificate is supposed to have been verified by the caller
827 */
828 extern NSSCMSRecipientInfo *
829 NSS_CMSRecipientInfo_Create(NSSCMSMessage *cmsg, CERTCertificate *cert);
830
831 extern NSSCMSRecipientInfo *
832 NSS_CMSRecipientInfo_CreateWithSubjKeyID(NSSCMSMessage *cmsg,
833 SECItem *subjKeyID,
834 SECKEYPublicKey *pubKey);
835
836 extern NSSCMSRecipientInfo *
837 NSS_CMSRecipientInfo_CreateWithSubjKeyIDFromCert(NSSCMSMessage *cmsg,
838 CERTCertificate *cert);
839
840 /*
841 * NSS_CMSRecipientInfo_CreateNew - create a blank recipientinfo for
842 * applications which want to encode their own CMS structures and
843 * key exchange types.
844 */
845 extern NSSCMSRecipientInfo *
846 NSS_CMSRecipientInfo_CreateNew(void* pwfn_arg);
847
848 /*
849 * NSS_CMSRecipientInfo_CreateFromDER - create a recipientinfo from partially
850 * decoded DER data for applications which want to encode their own CMS
851 * structures and key exchange types.
852 */
853 extern NSSCMSRecipientInfo *
854 NSS_CMSRecipientInfo_CreateFromDER(SECItem* input, void* pwfn_arg);
855
856 extern void
857 NSS_CMSRecipientInfo_Destroy(NSSCMSRecipientInfo *ri);
858
859 /*
860 * NSS_CMSRecipientInfo_GetCertAndKey - retrieve the cert and key from the
861 * recipientInfo struct. If retcert or retkey are NULL, the cert or
862 * key (respectively) would not be returned). This function is a no-op if both
863 * retcert and retkey are NULL. Caller inherits ownership of the cert and key
864 * he requested (and is responsible to free them).
865 */
866 SECStatus NSS_CMSRecipientInfo_GetCertAndKey(NSSCMSRecipientInfo *ri,
867 CERTCertificate** retcert, SECKEYPrivateKey** retkey);
868
869 extern int
870 NSS_CMSRecipientInfo_GetVersion(NSSCMSRecipientInfo *ri);
871
872 extern SECItem *
873 NSS_CMSRecipientInfo_GetEncryptedKey(NSSCMSRecipientInfo *ri, int subIndex);
874
875 /*
876 * NSS_CMSRecipientInfo_Encode - encode an NSS_CMSRecipientInfo as ASN.1
877 */
878 SECStatus NSS_CMSRecipientInfo_Encode(PLArenaPool* poolp,
879 const NSSCMSRecipientInfo *src,
880 SECItem* returned);
881
882 extern SECOidTag
883 NSS_CMSRecipientInfo_GetKeyEncryptionAlgorithmTag(NSSCMSRecipientInfo *ri);
884
885 extern SECStatus
886 NSS_CMSRecipientInfo_WrapBulkKey(NSSCMSRecipientInfo *ri, PK11SymKey *bulkkey, S ECOidTag bulkalgtag);
887
888 extern PK11SymKey *
889 NSS_CMSRecipientInfo_UnwrapBulkKey(NSSCMSRecipientInfo *ri, int subIndex,
890 CERTCertificate *cert, SECKEYPrivateKey *privkey, SECOidTag bulk algtag);
891
892 /************************************************************************
893 * cmsencdata.c - CMS encryptedData methods
894 ************************************************************************/
895 /*
896 * NSS_CMSEncryptedData_Create - create an empty encryptedData object.
897 *
898 * "algorithm" specifies the bulk encryption algorithm to use.
899 * "keysize" is the key size.
900 *
901 * An error results in a return value of NULL and an error set.
902 * (Retrieve specific errors via PORT_GetError()/XP_GetError().)
903 */
904 extern NSSCMSEncryptedData *
905 NSS_CMSEncryptedData_Create(NSSCMSMessage *cmsg, SECOidTag algorithm, int keysiz e);
906
907 /*
908 * NSS_CMSEncryptedData_Destroy - destroy an encryptedData object
909 */
910 extern void
911 NSS_CMSEncryptedData_Destroy(NSSCMSEncryptedData *encd);
912
913 /*
914 * NSS_CMSEncryptedData_GetContentInfo - return pointer to encryptedData object' s contentInfo
915 */
916 extern NSSCMSContentInfo *
917 NSS_CMSEncryptedData_GetContentInfo(NSSCMSEncryptedData *encd);
918
919 /*
920 * NSS_CMSEncryptedData_Encode_BeforeStart - do all the necessary things to a En cryptedData
921 * before encoding begins.
922 *
923 * In particular:
924 * - set the correct version value.
925 * - get the encryption key
926 */
927 extern SECStatus
928 NSS_CMSEncryptedData_Encode_BeforeStart(NSSCMSEncryptedData *encd);
929
930 /*
931 * NSS_CMSEncryptedData_Encode_BeforeData - set up encryption
932 */
933 extern SECStatus
934 NSS_CMSEncryptedData_Encode_BeforeData(NSSCMSEncryptedData *encd);
935
936 /*
937 * NSS_CMSEncryptedData_Encode_AfterData - finalize this encryptedData for encod ing
938 */
939 extern SECStatus
940 NSS_CMSEncryptedData_Encode_AfterData(NSSCMSEncryptedData *encd);
941
942 /*
943 * NSS_CMSEncryptedData_Decode_BeforeData - find bulk key & set up decryption
944 */
945 extern SECStatus
946 NSS_CMSEncryptedData_Decode_BeforeData(NSSCMSEncryptedData *encd);
947
948 /*
949 * NSS_CMSEncryptedData_Decode_AfterData - finish decrypting this encryptedData' s content
950 */
951 extern SECStatus
952 NSS_CMSEncryptedData_Decode_AfterData(NSSCMSEncryptedData *encd);
953
954 /*
955 * NSS_CMSEncryptedData_Decode_AfterEnd - finish decoding this encryptedData
956 */
957 extern SECStatus
958 NSS_CMSEncryptedData_Decode_AfterEnd(NSSCMSEncryptedData *encd);
959
960 /************************************************************************
961 * cmsdigdata.c - CMS encryptedData methods
962 ************************************************************************/
963 /*
964 * NSS_CMSDigestedData_Create - create a digestedData object (presumably for enc oding)
965 *
966 * version will be set by NSS_CMSDigestedData_Encode_BeforeStart
967 * digestAlg is passed as parameter
968 * contentInfo must be filled by the user
969 * digest will be calculated while encoding
970 */
971 extern NSSCMSDigestedData *
972 NSS_CMSDigestedData_Create(NSSCMSMessage *cmsg, SECAlgorithmID *digestalg);
973
974 /*
975 * NSS_CMSDigestedData_Destroy - destroy a digestedData object
976 */
977 extern void
978 NSS_CMSDigestedData_Destroy(NSSCMSDigestedData *digd);
979
980 /*
981 * NSS_CMSDigestedData_GetContentInfo - return pointer to digestedData object's contentInfo
982 */
983 extern NSSCMSContentInfo *
984 NSS_CMSDigestedData_GetContentInfo(NSSCMSDigestedData *digd);
985
986 /*
987 * NSS_CMSDigestedData_Encode_BeforeStart - do all the necessary things to a Dig estedData
988 * before encoding begins.
989 *
990 * In particular:
991 * - set the right version number. The contentInfo's content type must be set u p already.
992 */
993 extern SECStatus
994 NSS_CMSDigestedData_Encode_BeforeStart(NSSCMSDigestedData *digd);
995
996 /*
997 * NSS_CMSDigestedData_Encode_BeforeData - do all the necessary things to a Dige stedData
998 * before the encapsulated data is passed through the encoder.
999 *
1000 * In detail:
1001 * - set up the digests if necessary
1002 */
1003 extern SECStatus
1004 NSS_CMSDigestedData_Encode_BeforeData(NSSCMSDigestedData *digd);
1005
1006 /*
1007 * NSS_CMSDigestedData_Encode_AfterData - do all the necessary things to a Diges tedData
1008 * after all the encapsulated data was passed through the encoder.
1009 *
1010 * In detail:
1011 * - finish the digests
1012 */
1013 extern SECStatus
1014 NSS_CMSDigestedData_Encode_AfterData(NSSCMSDigestedData *digd);
1015
1016 /*
1017 * NSS_CMSDigestedData_Decode_BeforeData - do all the necessary things to a Dige stedData
1018 * before the encapsulated data is passed through the encoder.
1019 *
1020 * In detail:
1021 * - set up the digests if necessary
1022 */
1023 extern SECStatus
1024 NSS_CMSDigestedData_Decode_BeforeData(NSSCMSDigestedData *digd);
1025
1026 /*
1027 * NSS_CMSDigestedData_Decode_AfterData - do all the necessary things to a Diges tedData
1028 * after all the encapsulated data was passed through the encoder.
1029 *
1030 * In detail:
1031 * - finish the digests
1032 */
1033 extern SECStatus
1034 NSS_CMSDigestedData_Decode_AfterData(NSSCMSDigestedData *digd);
1035
1036 /*
1037 * NSS_CMSDigestedData_Decode_AfterEnd - finalize a digestedData.
1038 *
1039 * In detail:
1040 * - check the digests for equality
1041 */
1042 extern SECStatus
1043 NSS_CMSDigestedData_Decode_AfterEnd(NSSCMSDigestedData *digd);
1044
1045 /************************************************************************
1046 * cmsdigest.c - digestion routines
1047 ************************************************************************/
1048
1049 /*
1050 * NSS_CMSDigestContext_StartMultiple - start digest calculation using all the
1051 * digest algorithms in "digestalgs" in parallel.
1052 */
1053 extern NSSCMSDigestContext *
1054 NSS_CMSDigestContext_StartMultiple(SECAlgorithmID **digestalgs);
1055
1056 /*
1057 * NSS_CMSDigestContext_StartSingle - same as NSS_CMSDigestContext_StartMultiple , but
1058 * only one algorithm.
1059 */
1060 extern NSSCMSDigestContext *
1061 NSS_CMSDigestContext_StartSingle(SECAlgorithmID *digestalg);
1062
1063 /*
1064 * NSS_CMSDigestContext_Update - feed more data into the digest machine
1065 */
1066 extern void
1067 NSS_CMSDigestContext_Update(NSSCMSDigestContext *cmsdigcx, const unsigned char * data, int len);
1068
1069 /*
1070 * NSS_CMSDigestContext_Cancel - cancel digesting operation
1071 */
1072 extern void
1073 NSS_CMSDigestContext_Cancel(NSSCMSDigestContext *cmsdigcx);
1074
1075 /*
1076 * NSS_CMSDigestContext_FinishMultiple - finish the digests and put them
1077 * into an array of SECItems (allocated on poolp)
1078 */
1079 extern SECStatus
1080 NSS_CMSDigestContext_FinishMultiple(NSSCMSDigestContext *cmsdigcx, PLArenaPool * poolp,
1081 SECItem ***digestsp);
1082
1083 /*
1084 * NSS_CMSDigestContext_FinishSingle - same as NSS_CMSDigestContext_FinishMultip le,
1085 * but for one digest.
1086 */
1087 extern SECStatus
1088 NSS_CMSDigestContext_FinishSingle(NSSCMSDigestContext *cmsdigcx, PLArenaPool *po olp,
1089 SECItem *digest);
1090
1091 /************************************************************************
1092 *
1093 ************************************************************************/
1094
1095 /* shortcuts for basic use */
1096
1097 /*
1098 * NSS_CMSDEREncode - DER Encode a CMS message, with input being
1099 * the plaintext message and derOut being the output,
1100 * stored in arena's pool.
1101 */
1102 extern SECStatus
1103 NSS_CMSDEREncode(NSSCMSMessage *cmsg, SECItem *input, SECItem *derOut,
1104 PLArenaPool *arena);
1105
1106
1107 /************************************************************************
1108 *
1109 ************************************************************************/
1110
1111 /*
1112 * define new S/MIME content type entries
1113 *
1114 * S/MIME uses the builtin PKCS7 oid types for encoding and decoding the
1115 * various S/MIME content. Some applications have their own content type
1116 * which is different from the standard content type defined by S/MIME.
1117 *
1118 * This function allows you to register new content types. There are basically
1119 * Two different types of content, Wrappping content, and Data.
1120 *
1121 * For data types, All the functions below can be zero or NULL excext
1122 * type and is isData, which should be your oid tag and PR_FALSE respectively
1123 *
1124 * For wrapping types, everything must be provided, or you will get encoder
1125 * failures.
1126 *
1127 * If NSS doesn't already define the OID that you need, you can register
1128 * your own with SECOID_AddEntry.
1129 *
1130 * Once you have defined your new content type, you can pass your new content
1131 * type to NSS_CMSContentInfo_SetContent().
1132 *
1133 * If you are using a wrapping type you can pass your own data structure in
1134 * the ptr field, but it must contain and embedded NSSCMSGenericWrappingData
1135 * structure as the first element. The size you pass to
1136 * NSS_CMSType_RegisterContentType is the total size of your self defined
1137 * data structure. NSS_CMSContentInfo_GetContent will return that data
1138 * structure from the content info. Your ASN1Template will be evaluated
1139 * against that data structure.
1140 */
1141 SECStatus NSS_CMSType_RegisterContentType(SECOidTag type,
1142 SEC_ASN1Template *asn1Template, size_t size,
1143 NSSCMSGenericWrapperDataDestroy destroy,
1144 NSSCMSGenericWrapperDataCallback decode_before,
1145 NSSCMSGenericWrapperDataCallback decode_after,
1146 NSSCMSGenericWrapperDataCallback decode_end,
1147 NSSCMSGenericWrapperDataCallback encode_start,
1148 NSSCMSGenericWrapperDataCallback encode_before,
1149 NSSCMSGenericWrapperDataCallback encode_after,
1150 PRBool isData);
1151
1152 /************************************************************************/
1153 SEC_END_PROTOS
1154
1155 #endif /* _CMS_H_ */
OLDNEW
« no previous file with comments | « mozilla/security/nss/lib/pki/trustdomain.c ('k') | mozilla/security/nss/lib/smime/cmslocal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698