| Index: mozilla/security/nss/lib/smime/cmst.h
|
| ===================================================================
|
| --- mozilla/security/nss/lib/smime/cmst.h (revision 191424)
|
| +++ mozilla/security/nss/lib/smime/cmst.h (working copy)
|
| @@ -1,498 +0,0 @@
|
| -/* This Source Code Form is subject to the terms of the Mozilla Public
|
| - * License, v. 2.0. If a copy of the MPL was not distributed with this
|
| - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
| -
|
| -/*
|
| - * Header for CMS types.
|
| - *
|
| - * $Id: cmst.h,v 1.15 2012/04/25 14:50:09 gerv%gerv.net Exp $
|
| - */
|
| -
|
| -#ifndef _CMST_H_
|
| -#define _CMST_H_
|
| -
|
| -#include "seccomon.h"
|
| -#include "secoidt.h"
|
| -#include "certt.h"
|
| -#include "secmodt.h"
|
| -#include "secmodt.h"
|
| -
|
| -#include "plarena.h"
|
| -
|
| -/* Non-opaque objects. NOTE, though: I want them to be treated as
|
| - * opaque as much as possible. If I could hide them completely,
|
| - * I would. (I tried, but ran into trouble that was taking me too
|
| - * much time to get out of.) I still intend to try to do so.
|
| - * In fact, the only type that "outsiders" should even *name* is
|
| - * NSSCMSMessage, and they should not reference its fields.
|
| - */
|
| -/* rjr: PKCS #11 cert handling (pk11cert.c) does use NSSCMSRecipientInfo's.
|
| - * This is because when we search the recipient list for the cert and key we
|
| - * want, we need to invert the order of the loops we used to have. The old
|
| - * loops were:
|
| - *
|
| - * For each recipient {
|
| - * find_cert = PK11_Find_AllCert(recipient->issuerSN);
|
| - * [which unrolls to... ]
|
| - * For each slot {
|
| - * Log into slot;
|
| - * search slot for cert;
|
| - * }
|
| - * }
|
| - *
|
| - * the new loop searchs all the recipients at once on a slot. this allows
|
| - * PKCS #11 to order slots in such a way that logout slots don't get checked
|
| - * if we can find the cert on a logged in slot. This eliminates lots of
|
| - * spurious password prompts when smart cards are installed... so why this
|
| - * comment? If you make NSSCMSRecipientInfo completely opaque, you need
|
| - * to provide a non-opaque list of issuerSN's (the only field PKCS#11 needs
|
| - * and fix up pk11cert.c first. NOTE: Only S/MIME calls this special PKCS #11
|
| - * function.
|
| - */
|
| -
|
| -typedef struct NSSCMSMessageStr NSSCMSMessage;
|
| -
|
| -typedef union NSSCMSContentUnion NSSCMSContent;
|
| -typedef struct NSSCMSContentInfoStr NSSCMSContentInfo;
|
| -
|
| -typedef struct NSSCMSSignedDataStr NSSCMSSignedData;
|
| -typedef struct NSSCMSSignerInfoStr NSSCMSSignerInfo;
|
| -typedef struct NSSCMSSignerIdentifierStr NSSCMSSignerIdentifier;
|
| -
|
| -typedef struct NSSCMSEnvelopedDataStr NSSCMSEnvelopedData;
|
| -typedef struct NSSCMSOriginatorInfoStr NSSCMSOriginatorInfo;
|
| -typedef struct NSSCMSRecipientInfoStr NSSCMSRecipientInfo;
|
| -
|
| -typedef struct NSSCMSDigestedDataStr NSSCMSDigestedData;
|
| -typedef struct NSSCMSEncryptedDataStr NSSCMSEncryptedData;
|
| -
|
| -typedef struct NSSCMSGenericWrapperDataStr NSSCMSGenericWrapperData;
|
| -
|
| -typedef struct NSSCMSAttributeStr NSSCMSAttribute;
|
| -
|
| -typedef struct NSSCMSDecoderContextStr NSSCMSDecoderContext;
|
| -typedef struct NSSCMSEncoderContextStr NSSCMSEncoderContext;
|
| -
|
| -typedef struct NSSCMSCipherContextStr NSSCMSCipherContext;
|
| -typedef struct NSSCMSDigestContextStr NSSCMSDigestContext;
|
| -
|
| -typedef struct NSSCMSContentInfoPrivateStr NSSCMSContentInfoPrivate;
|
| -
|
| -typedef SECStatus (*NSSCMSGenericWrapperDataCallback)
|
| - (NSSCMSGenericWrapperData *);
|
| -typedef void (*NSSCMSGenericWrapperDataDestroy)
|
| - (NSSCMSGenericWrapperData *);
|
| -
|
| -extern const SEC_ASN1Template NSSCMSGenericWrapperDataTemplate[];
|
| -extern const SEC_ASN1Template NSS_PointerToCMSGenericWrapperDataTemplate[];
|
| -
|
| -SEC_ASN1_CHOOSER_DECLARE(NSS_PointerToCMSGenericWrapperDataTemplate)
|
| -SEC_ASN1_CHOOSER_DECLARE(NSSCMSGenericWrapperDataTemplate)
|
| -
|
| -
|
| -
|
| -/*
|
| - * Type of function passed to NSSCMSDecode or NSSCMSDecoderStart.
|
| - * If specified, this is where the content bytes (only) will be "sent"
|
| - * as they are recovered during the decoding.
|
| - * And:
|
| - * Type of function passed to NSSCMSEncode or NSSCMSEncoderStart.
|
| - * This is where the DER-encoded bytes will be "sent".
|
| - *
|
| - * XXX Should just combine this with NSSCMSEncoderContentCallback type
|
| - * and use a simpler, common name.
|
| - */
|
| -typedef void (*NSSCMSContentCallback)(void *arg, const char *buf, unsigned long len);
|
| -
|
| -/*
|
| - * Type of function passed to NSSCMSDecode or NSSCMSDecoderStart
|
| - * to retrieve the decryption key. This function is intended to be
|
| - * used for EncryptedData content info's which do not have a key available
|
| - * in a certificate, etc.
|
| - */
|
| -typedef PK11SymKey *(*NSSCMSGetDecryptKeyCallback)(void *arg, SECAlgorithmID *algid);
|
| -
|
| -
|
| -/* =============================================================================
|
| - * ENCAPSULATED CONTENTINFO & CONTENTINFO
|
| - */
|
| -
|
| -union NSSCMSContentUnion {
|
| - /* either unstructured */
|
| - SECItem * data;
|
| - /* or structured data */
|
| - NSSCMSDigestedData * digestedData;
|
| - NSSCMSEncryptedData * encryptedData;
|
| - NSSCMSEnvelopedData * envelopedData;
|
| - NSSCMSSignedData * signedData;
|
| - NSSCMSGenericWrapperData * genericData;
|
| - /* or anonymous pointer to something */
|
| - void * pointer;
|
| -};
|
| -
|
| -struct NSSCMSContentInfoStr {
|
| - SECItem contentType;
|
| - NSSCMSContent content;
|
| - /* --------- local; not part of encoding --------- */
|
| - SECOidData * contentTypeTag;
|
| -
|
| - /* additional info for encryptedData and envelopedData */
|
| - /* we waste this space for signedData and digestedData. sue me. */
|
| -
|
| - SECAlgorithmID contentEncAlg;
|
| - SECItem * rawContent; /* encrypted DER, optional */
|
| - /* XXXX bytes not encrypted, but encoded? */
|
| - /* --------- local; not part of encoding --------- */
|
| - PK11SymKey * bulkkey; /* bulk encryption key */
|
| - int keysize; /* size of bulk encryption key
|
| - * (only used by creation code) */
|
| - SECOidTag contentEncAlgTag; /* oid tag of encryption algorithm
|
| - * (only used by creation code) */
|
| - NSSCMSContentInfoPrivate *privateInfo; /* place for NSS private info */
|
| - void *reserved; /* keep binary compatibility */
|
| -};
|
| -
|
| -/* =============================================================================
|
| - * MESSAGE
|
| - */
|
| -
|
| -struct NSSCMSMessageStr {
|
| - NSSCMSContentInfo contentInfo; /* "outer" cinfo */
|
| - /* --------- local; not part of encoding --------- */
|
| - PLArenaPool * poolp;
|
| - PRBool poolp_is_ours;
|
| - int refCount;
|
| - /* properties of the "inner" data */
|
| - SECAlgorithmID ** detached_digestalgs;
|
| - SECItem ** detached_digests;
|
| - void * pwfn_arg;
|
| - NSSCMSGetDecryptKeyCallback decrypt_key_cb;
|
| - void * decrypt_key_cb_arg;
|
| -};
|
| -
|
| -/* ============================================================================
|
| - * GENERIC WRAPPER
|
| - *
|
| - * used for user defined types.
|
| - */
|
| -struct NSSCMSGenericWrapperDataStr {
|
| - NSSCMSContentInfo contentInfo;
|
| - /* ---- local; not part of encoding ------ */
|
| - NSSCMSMessage * cmsg;
|
| - /* wrapperspecific data starts here */
|
| -};
|
| -
|
| -/* =============================================================================
|
| - * SIGNEDDATA
|
| - */
|
| -
|
| -struct NSSCMSSignedDataStr {
|
| - SECItem version;
|
| - SECAlgorithmID ** digestAlgorithms;
|
| - NSSCMSContentInfo contentInfo;
|
| - SECItem ** rawCerts;
|
| - CERTSignedCrl ** crls;
|
| - NSSCMSSignerInfo ** signerInfos;
|
| - /* --------- local; not part of encoding --------- */
|
| - NSSCMSMessage * cmsg; /* back pointer to message */
|
| - SECItem ** digests;
|
| - CERTCertificate ** certs;
|
| - CERTCertificateList ** certLists;
|
| - CERTCertificate ** tempCerts; /* temporary certs, needed
|
| - * for example for signature
|
| - * verification */
|
| -};
|
| -#define NSS_CMS_SIGNED_DATA_VERSION_BASIC 1 /* what we *create* */
|
| -#define NSS_CMS_SIGNED_DATA_VERSION_EXT 3 /* what we *create* */
|
| -
|
| -typedef enum {
|
| - NSSCMSVS_Unverified = 0,
|
| - NSSCMSVS_GoodSignature = 1,
|
| - NSSCMSVS_BadSignature = 2,
|
| - NSSCMSVS_DigestMismatch = 3,
|
| - NSSCMSVS_SigningCertNotFound = 4,
|
| - NSSCMSVS_SigningCertNotTrusted = 5,
|
| - NSSCMSVS_SignatureAlgorithmUnknown = 6,
|
| - NSSCMSVS_SignatureAlgorithmUnsupported = 7,
|
| - NSSCMSVS_MalformedSignature = 8,
|
| - NSSCMSVS_ProcessingError = 9
|
| -} NSSCMSVerificationStatus;
|
| -
|
| -typedef enum {
|
| - NSSCMSSignerID_IssuerSN = 0,
|
| - NSSCMSSignerID_SubjectKeyID = 1
|
| -} NSSCMSSignerIDSelector;
|
| -
|
| -struct NSSCMSSignerIdentifierStr {
|
| - NSSCMSSignerIDSelector identifierType;
|
| - union {
|
| - CERTIssuerAndSN *issuerAndSN;
|
| - SECItem *subjectKeyID;
|
| - } id;
|
| -};
|
| -
|
| -struct NSSCMSSignerInfoStr {
|
| - SECItem version;
|
| - NSSCMSSignerIdentifier signerIdentifier;
|
| - SECAlgorithmID digestAlg;
|
| - NSSCMSAttribute ** authAttr;
|
| - SECAlgorithmID digestEncAlg;
|
| - SECItem encDigest;
|
| - NSSCMSAttribute ** unAuthAttr;
|
| - /* --------- local; not part of encoding --------- */
|
| - NSSCMSMessage * cmsg; /* back pointer to message */
|
| - CERTCertificate * cert;
|
| - CERTCertificateList * certList;
|
| - PRTime signingTime;
|
| - NSSCMSVerificationStatus verificationStatus;
|
| - SECKEYPrivateKey * signingKey; /* Used if we're using subjKeyID*/
|
| - SECKEYPublicKey * pubKey;
|
| -};
|
| -#define NSS_CMS_SIGNER_INFO_VERSION_ISSUERSN 1 /* what we *create* */
|
| -#define NSS_CMS_SIGNER_INFO_VERSION_SUBJKEY 3 /* what we *create* */
|
| -
|
| -typedef enum {
|
| - NSSCMSCM_None = 0,
|
| - NSSCMSCM_CertOnly = 1,
|
| - NSSCMSCM_CertChain = 2,
|
| - NSSCMSCM_CertChainWithRoot = 3
|
| -} NSSCMSCertChainMode;
|
| -
|
| -/* =============================================================================
|
| - * ENVELOPED DATA
|
| - */
|
| -struct NSSCMSEnvelopedDataStr {
|
| - SECItem version;
|
| - NSSCMSOriginatorInfo * originatorInfo; /* optional */
|
| - NSSCMSRecipientInfo ** recipientInfos;
|
| - NSSCMSContentInfo contentInfo;
|
| - NSSCMSAttribute ** unprotectedAttr;
|
| - /* --------- local; not part of encoding --------- */
|
| - NSSCMSMessage * cmsg; /* back pointer to message */
|
| -};
|
| -#define NSS_CMS_ENVELOPED_DATA_VERSION_REG 0 /* what we *create* */
|
| -#define NSS_CMS_ENVELOPED_DATA_VERSION_ADV 2 /* what we *create* */
|
| -
|
| -struct NSSCMSOriginatorInfoStr {
|
| - SECItem ** rawCerts;
|
| - CERTSignedCrl ** crls;
|
| - /* --------- local; not part of encoding --------- */
|
| - CERTCertificate ** certs;
|
| -};
|
| -
|
| -/* -----------------------------------------------------------------------------
|
| - * key transport recipient info
|
| - */
|
| -typedef enum {
|
| - NSSCMSRecipientID_IssuerSN = 0,
|
| - NSSCMSRecipientID_SubjectKeyID = 1,
|
| - NSSCMSRecipientID_BrandNew = 2
|
| -} NSSCMSRecipientIDSelector;
|
| -
|
| -struct NSSCMSRecipientIdentifierStr {
|
| - NSSCMSRecipientIDSelector identifierType;
|
| - union {
|
| - CERTIssuerAndSN *issuerAndSN;
|
| - SECItem *subjectKeyID;
|
| - } id;
|
| -};
|
| -typedef struct NSSCMSRecipientIdentifierStr NSSCMSRecipientIdentifier;
|
| -
|
| -struct NSSCMSKeyTransRecipientInfoStr {
|
| - SECItem version;
|
| - NSSCMSRecipientIdentifier recipientIdentifier;
|
| - SECAlgorithmID keyEncAlg;
|
| - SECItem encKey;
|
| -};
|
| -typedef struct NSSCMSKeyTransRecipientInfoStr NSSCMSKeyTransRecipientInfo;
|
| -
|
| -/*
|
| - * View comments before NSSCMSRecipientInfoStr for purpose of this
|
| - * structure.
|
| - */
|
| -struct NSSCMSKeyTransRecipientInfoExStr {
|
| - NSSCMSKeyTransRecipientInfo recipientInfo;
|
| - int version; /* version of this structure (0) */
|
| - SECKEYPublicKey *pubKey;
|
| -};
|
| -
|
| -typedef struct NSSCMSKeyTransRecipientInfoExStr NSSCMSKeyTransRecipientInfoEx;
|
| -
|
| -#define NSS_CMS_KEYTRANS_RECIPIENT_INFO_VERSION_ISSUERSN 0 /* what we *create* */
|
| -#define NSS_CMS_KEYTRANS_RECIPIENT_INFO_VERSION_SUBJKEY 2 /* what we *create* */
|
| -
|
| -/* -----------------------------------------------------------------------------
|
| - * key agreement recipient info
|
| - */
|
| -struct NSSCMSOriginatorPublicKeyStr {
|
| - SECAlgorithmID algorithmIdentifier;
|
| - SECItem publicKey; /* bit string! */
|
| -};
|
| -typedef struct NSSCMSOriginatorPublicKeyStr NSSCMSOriginatorPublicKey;
|
| -
|
| -typedef enum {
|
| - NSSCMSOriginatorIDOrKey_IssuerSN = 0,
|
| - NSSCMSOriginatorIDOrKey_SubjectKeyID = 1,
|
| - NSSCMSOriginatorIDOrKey_OriginatorPublicKey = 2
|
| -} NSSCMSOriginatorIDOrKeySelector;
|
| -
|
| -struct NSSCMSOriginatorIdentifierOrKeyStr {
|
| - NSSCMSOriginatorIDOrKeySelector identifierType;
|
| - union {
|
| - CERTIssuerAndSN *issuerAndSN; /* static-static */
|
| - SECItem *subjectKeyID; /* static-static */
|
| - NSSCMSOriginatorPublicKey originatorPublicKey; /* ephemeral-static */
|
| - } id;
|
| -};
|
| -typedef struct NSSCMSOriginatorIdentifierOrKeyStr NSSCMSOriginatorIdentifierOrKey;
|
| -
|
| -struct NSSCMSRecipientKeyIdentifierStr {
|
| - SECItem * subjectKeyIdentifier;
|
| - SECItem * date; /* optional */
|
| - SECItem * other; /* optional */
|
| -};
|
| -typedef struct NSSCMSRecipientKeyIdentifierStr NSSCMSRecipientKeyIdentifier;
|
| -
|
| -typedef enum {
|
| - NSSCMSKeyAgreeRecipientID_IssuerSN = 0,
|
| - NSSCMSKeyAgreeRecipientID_RKeyID = 1
|
| -} NSSCMSKeyAgreeRecipientIDSelector;
|
| -
|
| -struct NSSCMSKeyAgreeRecipientIdentifierStr {
|
| - NSSCMSKeyAgreeRecipientIDSelector identifierType;
|
| - union {
|
| - CERTIssuerAndSN *issuerAndSN;
|
| - NSSCMSRecipientKeyIdentifier recipientKeyIdentifier;
|
| - } id;
|
| -};
|
| -typedef struct NSSCMSKeyAgreeRecipientIdentifierStr NSSCMSKeyAgreeRecipientIdentifier;
|
| -
|
| -struct NSSCMSRecipientEncryptedKeyStr {
|
| - NSSCMSKeyAgreeRecipientIdentifier recipientIdentifier;
|
| - SECItem encKey;
|
| -};
|
| -typedef struct NSSCMSRecipientEncryptedKeyStr NSSCMSRecipientEncryptedKey;
|
| -
|
| -struct NSSCMSKeyAgreeRecipientInfoStr {
|
| - SECItem version;
|
| - NSSCMSOriginatorIdentifierOrKey originatorIdentifierOrKey;
|
| - SECItem * ukm; /* optional */
|
| - SECAlgorithmID keyEncAlg;
|
| - NSSCMSRecipientEncryptedKey ** recipientEncryptedKeys;
|
| -};
|
| -typedef struct NSSCMSKeyAgreeRecipientInfoStr NSSCMSKeyAgreeRecipientInfo;
|
| -
|
| -#define NSS_CMS_KEYAGREE_RECIPIENT_INFO_VERSION 3 /* what we *create* */
|
| -
|
| -/* -----------------------------------------------------------------------------
|
| - * KEK recipient info
|
| - */
|
| -struct NSSCMSKEKIdentifierStr {
|
| - SECItem keyIdentifier;
|
| - SECItem * date; /* optional */
|
| - SECItem * other; /* optional */
|
| -};
|
| -typedef struct NSSCMSKEKIdentifierStr NSSCMSKEKIdentifier;
|
| -
|
| -struct NSSCMSKEKRecipientInfoStr {
|
| - SECItem version;
|
| - NSSCMSKEKIdentifier kekIdentifier;
|
| - SECAlgorithmID keyEncAlg;
|
| - SECItem encKey;
|
| -};
|
| -typedef struct NSSCMSKEKRecipientInfoStr NSSCMSKEKRecipientInfo;
|
| -
|
| -#define NSS_CMS_KEK_RECIPIENT_INFO_VERSION 4 /* what we *create* */
|
| -
|
| -/* -----------------------------------------------------------------------------
|
| - * recipient info
|
| - */
|
| -
|
| -typedef enum {
|
| - NSSCMSRecipientInfoID_KeyTrans = 0,
|
| - NSSCMSRecipientInfoID_KeyAgree = 1,
|
| - NSSCMSRecipientInfoID_KEK = 2
|
| -} NSSCMSRecipientInfoIDSelector;
|
| -
|
| -/*
|
| - * In order to preserve backwards binary compatibility when implementing
|
| - * creation of Recipient Info's that uses subjectKeyID in the
|
| - * keyTransRecipientInfo we need to stash a public key pointer in this
|
| - * structure somewhere. We figured out that NSSCMSKeyTransRecipientInfo
|
| - * is the smallest member of the ri union. We're in luck since that's
|
| - * the very structure that would need to use the public key. So we created
|
| - * a new structure NSSCMSKeyTransRecipientInfoEx which has a member
|
| - * NSSCMSKeyTransRecipientInfo as the first member followed by a version
|
| - * and a public key pointer. This way we can keep backwards compatibility
|
| - * without changing the size of this structure.
|
| - *
|
| - * BTW, size of structure:
|
| - * NSSCMSKeyTransRecipientInfo: 9 ints, 4 pointers
|
| - * NSSCMSKeyAgreeRecipientInfo: 12 ints, 8 pointers
|
| - * NSSCMSKEKRecipientInfo: 10 ints, 7 pointers
|
| - *
|
| - * The new structure:
|
| - * NSSCMSKeyTransRecipientInfoEx: sizeof(NSSCMSKeyTransRecipientInfo) +
|
| - * 1 int, 1 pointer
|
| - */
|
| -
|
| -struct NSSCMSRecipientInfoStr {
|
| - NSSCMSRecipientInfoIDSelector recipientInfoType;
|
| - union {
|
| - NSSCMSKeyTransRecipientInfo keyTransRecipientInfo;
|
| - NSSCMSKeyAgreeRecipientInfo keyAgreeRecipientInfo;
|
| - NSSCMSKEKRecipientInfo kekRecipientInfo;
|
| - NSSCMSKeyTransRecipientInfoEx keyTransRecipientInfoEx;
|
| - } ri;
|
| - /* --------- local; not part of encoding --------- */
|
| - NSSCMSMessage * cmsg; /* back pointer to message */
|
| - CERTCertificate * cert; /* recipient's certificate */
|
| -};
|
| -
|
| -/* =============================================================================
|
| - * DIGESTED DATA
|
| - */
|
| -struct NSSCMSDigestedDataStr {
|
| - SECItem version;
|
| - SECAlgorithmID digestAlg;
|
| - NSSCMSContentInfo contentInfo;
|
| - SECItem digest;
|
| - /* --------- local; not part of encoding --------- */
|
| - NSSCMSMessage * cmsg; /* back pointer */
|
| - SECItem cdigest; /* calculated digest */
|
| -};
|
| -#define NSS_CMS_DIGESTED_DATA_VERSION_DATA 0 /* what we *create* */
|
| -#define NSS_CMS_DIGESTED_DATA_VERSION_ENCAP 2 /* what we *create* */
|
| -
|
| -/* =============================================================================
|
| - * ENCRYPTED DATA
|
| - */
|
| -struct NSSCMSEncryptedDataStr {
|
| - SECItem version;
|
| - NSSCMSContentInfo contentInfo;
|
| - NSSCMSAttribute ** unprotectedAttr; /* optional */
|
| - /* --------- local; not part of encoding --------- */
|
| - NSSCMSMessage * cmsg; /* back pointer */
|
| -};
|
| -#define NSS_CMS_ENCRYPTED_DATA_VERSION 0 /* what we *create* */
|
| -#define NSS_CMS_ENCRYPTED_DATA_VERSION_UPATTR 2 /* what we *create* */
|
| -
|
| -/*
|
| - * *****************************************************************************
|
| - * *****************************************************************************
|
| - * *****************************************************************************
|
| - */
|
| -
|
| -/*
|
| - * See comment above about this type not really belonging to CMS.
|
| - */
|
| -struct NSSCMSAttributeStr {
|
| - /* The following fields make up an encoded Attribute: */
|
| - SECItem type;
|
| - SECItem ** values; /* data may or may not be encoded */
|
| - /* The following fields are not part of an encoded Attribute: */
|
| - SECOidData * typeTag;
|
| - PRBool encoded; /* when true, values are encoded */
|
| -};
|
| -
|
| -#endif /* _CMST_H_ */
|
|
|