Mercurial > trustbridge > nss-cmake-static
comparison nss/lib/pkcs7/pkcs7t.h @ 0:1e5118fa0cb1
This is NSS with a Cmake Buildsyste
To compile a static NSS library for Windows we've used the
Chromium-NSS fork and added a Cmake buildsystem to compile
it statically for Windows. See README.chromium for chromium
changes and README.trustbridge for our modifications.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 28 Jul 2014 10:47:06 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1e5118fa0cb1 |
---|---|
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 pkcs7 types. | |
7 */ | |
8 | |
9 #ifndef _PKCS7T_H_ | |
10 #define _PKCS7T_H_ | |
11 | |
12 #include "plarena.h" | |
13 | |
14 #include "seccomon.h" | |
15 #include "secoidt.h" | |
16 #include "certt.h" | |
17 #include "secmodt.h" | |
18 | |
19 /* Opaque objects */ | |
20 typedef struct SEC_PKCS7DecoderContextStr SEC_PKCS7DecoderContext; | |
21 typedef struct SEC_PKCS7EncoderContextStr SEC_PKCS7EncoderContext; | |
22 | |
23 /* legacy defines that haven't been active for years */ | |
24 typedef void *(*SECKEYGetPasswordKey)(void *arg, void *handle); | |
25 | |
26 | |
27 /* Non-opaque objects. NOTE, though: I want them to be treated as | |
28 * opaque as much as possible. If I could hide them completely, | |
29 * I would. (I tried, but ran into trouble that was taking me too | |
30 * much time to get out of.) I still intend to try to do so. | |
31 * In fact, the only type that "outsiders" should even *name* is | |
32 * SEC_PKCS7ContentInfo, and they should not reference its fields. | |
33 */ | |
34 /* rjr: PKCS #11 cert handling (pk11cert.c) does use SEC_PKCS7RecipientInfo's. | |
35 * This is because when we search the recipient list for the cert and key we | |
36 * want, we need to invert the order of the loops we used to have. The old | |
37 * loops were: | |
38 * | |
39 * For each recipient { | |
40 * find_cert = PK11_Find_AllCert(recipient->issuerSN); | |
41 * [which unrolls to... ] | |
42 * For each slot { | |
43 * Log into slot; | |
44 * search slot for cert; | |
45 * } | |
46 * } | |
47 * | |
48 * the new loop searchs all the recipients at once on a slot. this allows | |
49 * PKCS #11 to order slots in such a way that logout slots don't get checked | |
50 * if we can find the cert on a logged in slot. This eliminates lots of | |
51 * spurious password prompts when smart cards are installed... so why this | |
52 * comment? If you make SEC_PKCS7RecipientInfo completely opaque, you need | |
53 * to provide a non-opaque list of issuerSN's (the only field PKCS#11 needs | |
54 * and fix up pk11cert.c first. NOTE: Only S/MIME calls this special PKCS #11 | |
55 * function. | |
56 */ | |
57 typedef struct SEC_PKCS7ContentInfoStr SEC_PKCS7ContentInfo; | |
58 typedef struct SEC_PKCS7SignedDataStr SEC_PKCS7SignedData; | |
59 typedef struct SEC_PKCS7EncryptedContentInfoStr SEC_PKCS7EncryptedContentInfo; | |
60 typedef struct SEC_PKCS7EnvelopedDataStr SEC_PKCS7EnvelopedData; | |
61 typedef struct SEC_PKCS7SignedAndEnvelopedDataStr | |
62 SEC_PKCS7SignedAndEnvelopedData; | |
63 typedef struct SEC_PKCS7SignerInfoStr SEC_PKCS7SignerInfo; | |
64 typedef struct SEC_PKCS7RecipientInfoStr SEC_PKCS7RecipientInfo; | |
65 typedef struct SEC_PKCS7DigestedDataStr SEC_PKCS7DigestedData; | |
66 typedef struct SEC_PKCS7EncryptedDataStr SEC_PKCS7EncryptedData; | |
67 /* | |
68 * The following is not actually a PKCS7 type, but for now it is only | |
69 * used by PKCS7, so we have adopted it. If someone else *ever* needs | |
70 * it, its name should be changed and it should be moved out of here. | |
71 * Do not dare to use it without doing so! | |
72 */ | |
73 typedef struct SEC_PKCS7AttributeStr SEC_PKCS7Attribute; | |
74 | |
75 struct SEC_PKCS7ContentInfoStr { | |
76 PLArenaPool *poolp; /* local; not part of encoding */ | |
77 PRBool created; /* local; not part of encoding */ | |
78 int refCount; /* local; not part of encoding */ | |
79 SECOidData *contentTypeTag; /* local; not part of encoding */ | |
80 SECKEYGetPasswordKey pwfn; /* local; not part of encoding */ | |
81 void *pwfn_arg; /* local; not part of encoding */ | |
82 SECItem contentType; | |
83 union { | |
84 SECItem *data; | |
85 SEC_PKCS7DigestedData *digestedData; | |
86 SEC_PKCS7EncryptedData *encryptedData; | |
87 SEC_PKCS7EnvelopedData *envelopedData; | |
88 SEC_PKCS7SignedData *signedData; | |
89 SEC_PKCS7SignedAndEnvelopedData *signedAndEnvelopedData; | |
90 } content; | |
91 }; | |
92 | |
93 struct SEC_PKCS7SignedDataStr { | |
94 SECItem version; | |
95 SECAlgorithmID **digestAlgorithms; | |
96 SEC_PKCS7ContentInfo contentInfo; | |
97 SECItem **rawCerts; | |
98 CERTSignedCrl **crls; | |
99 SEC_PKCS7SignerInfo **signerInfos; | |
100 SECItem **digests; /* local; not part of encoding */ | |
101 CERTCertificate **certs; /* local; not part of encoding */ | |
102 CERTCertificateList **certLists; /* local; not part of encoding */ | |
103 }; | |
104 #define SEC_PKCS7_SIGNED_DATA_VERSION 1 /* what we *create* */ | |
105 | |
106 struct SEC_PKCS7EncryptedContentInfoStr { | |
107 SECOidData *contentTypeTag; /* local; not part of encoding */ | |
108 SECItem contentType; | |
109 SECAlgorithmID contentEncAlg; | |
110 SECItem encContent; | |
111 SECItem plainContent; /* local; not part of encoding */ | |
112 /* bytes not encrypted, but encoded */ | |
113 int keysize; /* local; not part of encoding */ | |
114 /* size of bulk encryption key | |
115 * (only used by creation code) */ | |
116 SECOidTag encalg; /* local; not part of encoding */ | |
117 /* oid tag of encryption algorithm | |
118 * (only used by creation code) */ | |
119 }; | |
120 | |
121 struct SEC_PKCS7EnvelopedDataStr { | |
122 SECItem version; | |
123 SEC_PKCS7RecipientInfo **recipientInfos; | |
124 SEC_PKCS7EncryptedContentInfo encContentInfo; | |
125 }; | |
126 #define SEC_PKCS7_ENVELOPED_DATA_VERSION 0 /* what we *create* */ | |
127 | |
128 struct SEC_PKCS7SignedAndEnvelopedDataStr { | |
129 SECItem version; | |
130 SEC_PKCS7RecipientInfo **recipientInfos; | |
131 SECAlgorithmID **digestAlgorithms; | |
132 SEC_PKCS7EncryptedContentInfo encContentInfo; | |
133 SECItem **rawCerts; | |
134 CERTSignedCrl **crls; | |
135 SEC_PKCS7SignerInfo **signerInfos; | |
136 SECItem **digests; /* local; not part of encoding */ | |
137 CERTCertificate **certs; /* local; not part of encoding */ | |
138 CERTCertificateList **certLists; /* local; not part of encoding */ | |
139 PK11SymKey *sigKey; /* local; not part of encoding */ | |
140 }; | |
141 #define SEC_PKCS7_SIGNED_AND_ENVELOPED_DATA_VERSION 1 /* what we *create* */ | |
142 | |
143 struct SEC_PKCS7SignerInfoStr { | |
144 SECItem version; | |
145 CERTIssuerAndSN *issuerAndSN; | |
146 SECAlgorithmID digestAlg; | |
147 SEC_PKCS7Attribute **authAttr; | |
148 SECAlgorithmID digestEncAlg; | |
149 SECItem encDigest; | |
150 SEC_PKCS7Attribute **unAuthAttr; | |
151 CERTCertificate *cert; /* local; not part of encoding */ | |
152 CERTCertificateList *certList; /* local; not part of encoding */ | |
153 }; | |
154 #define SEC_PKCS7_SIGNER_INFO_VERSION 1 /* what we *create* */ | |
155 | |
156 struct SEC_PKCS7RecipientInfoStr { | |
157 SECItem version; | |
158 CERTIssuerAndSN *issuerAndSN; | |
159 SECAlgorithmID keyEncAlg; | |
160 SECItem encKey; | |
161 CERTCertificate *cert; /* local; not part of encoding */ | |
162 }; | |
163 #define SEC_PKCS7_RECIPIENT_INFO_VERSION 0 /* what we *create* */ | |
164 | |
165 struct SEC_PKCS7DigestedDataStr { | |
166 SECItem version; | |
167 SECAlgorithmID digestAlg; | |
168 SEC_PKCS7ContentInfo contentInfo; | |
169 SECItem digest; | |
170 }; | |
171 #define SEC_PKCS7_DIGESTED_DATA_VERSION 0 /* what we *create* */ | |
172 | |
173 struct SEC_PKCS7EncryptedDataStr { | |
174 SECItem version; | |
175 SEC_PKCS7EncryptedContentInfo encContentInfo; | |
176 }; | |
177 #define SEC_PKCS7_ENCRYPTED_DATA_VERSION 0 /* what we *create* */ | |
178 | |
179 /* | |
180 * See comment above about this type not really belonging to PKCS7. | |
181 */ | |
182 struct SEC_PKCS7AttributeStr { | |
183 /* The following fields make up an encoded Attribute: */ | |
184 SECItem type; | |
185 SECItem **values; /* data may or may not be encoded */ | |
186 /* The following fields are not part of an encoded Attribute: */ | |
187 SECOidData *typeTag; | |
188 PRBool encoded; /* when true, values are encoded */ | |
189 }; | |
190 | |
191 /* | |
192 * Type of function passed to SEC_PKCS7Decode or SEC_PKCS7DecoderStart. | |
193 * If specified, this is where the content bytes (only) will be "sent" | |
194 * as they are recovered during the decoding. | |
195 * | |
196 * XXX Should just combine this with SEC_PKCS7EncoderContentCallback type | |
197 * and use a simpler, common name. | |
198 */ | |
199 typedef void (* SEC_PKCS7DecoderContentCallback)(void *arg, | |
200 const char *buf, | |
201 unsigned long len); | |
202 | |
203 /* | |
204 * Type of function passed to SEC_PKCS7Encode or SEC_PKCS7EncoderStart. | |
205 * This is where the encoded bytes will be "sent". | |
206 * | |
207 * XXX Should just combine this with SEC_PKCS7DecoderContentCallback type | |
208 * and use a simpler, common name. | |
209 */ | |
210 typedef void (* SEC_PKCS7EncoderOutputCallback)(void *arg, | |
211 const char *buf, | |
212 unsigned long len); | |
213 | |
214 | |
215 /* | |
216 * Type of function passed to SEC_PKCS7Decode or SEC_PKCS7DecoderStart | |
217 * to retrieve the decryption key. This function is inteded to be | |
218 * used for EncryptedData content info's which do not have a key available | |
219 * in a certificate, etc. | |
220 */ | |
221 typedef PK11SymKey * (* SEC_PKCS7GetDecryptKeyCallback)(void *arg, | |
222 SECAlgorithmID *algid); | |
223 | |
224 /* | |
225 * Type of function passed to SEC_PKCS7Decode or SEC_PKCS7DecoderStart. | |
226 * This function in intended to be used to verify that decrypting a | |
227 * particular crypto algorithm is allowed. Content types which do not | |
228 * require decryption will not need the callback. If the callback | |
229 * is not specified for content types which require decryption, the | |
230 * decryption will be disallowed. | |
231 */ | |
232 typedef PRBool (* SEC_PKCS7DecryptionAllowedCallback)(SECAlgorithmID *algid, | |
233 PK11SymKey *bulkkey); | |
234 | |
235 #endif /* _PKCS7T_H_ */ |