| 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 * 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_ */ | |
| OLD | NEW |