Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/cms/cms_env.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | - | |||||||||||||
4 | - | |||||||||||||
5 | CMS_EnvelopedData *cms_get0_enveloped(CMS_ContentInfo *cms) | - | ||||||||||||
6 | { | - | ||||||||||||
7 | if (OBJ_obj2nid(cms->contentType) != 23
| 0-59 | ||||||||||||
8 | ERR_put_error(46,(131),(107),__FILE__,27) | - | ||||||||||||
9 | ; | - | ||||||||||||
10 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
11 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
12 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
13 | } | - | ||||||||||||
14 | return executed 59 times by 1 test: cms->d.envelopedData;return cms->d.envelopedData; Executed by:
executed 59 times by 1 test: return cms->d.envelopedData; Executed by:
| 59 | ||||||||||||
15 | } | - | ||||||||||||
16 | - | |||||||||||||
17 | static CMS_EnvelopedData *cms_enveloped_data_init(CMS_ContentInfo *cms) | - | ||||||||||||
18 | { | - | ||||||||||||
19 | if (cms->d.other ==
| 0-20 | ||||||||||||
20 | ((void *)0)
| 0-20 | ||||||||||||
21 | ) { | - | ||||||||||||
22 | cms->d.envelopedData = (CMS_EnvelopedData *)ASN1_item_new((&(CMS_EnvelopedData_it))); | - | ||||||||||||
23 | if (!cms->d.envelopedData
| 0-20 | ||||||||||||
24 | ERR_put_error(46,(126),((1|64)),__FILE__,38); | - | ||||||||||||
25 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
26 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
27 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
28 | } | - | ||||||||||||
29 | cms->d.envelopedData->version = 0; | - | ||||||||||||
30 | cms->d.envelopedData->encryptedContentInfo->contentType = | - | ||||||||||||
31 | OBJ_nid2obj(21); | - | ||||||||||||
32 | ASN1_OBJECT_free(cms->contentType); | - | ||||||||||||
33 | cms->contentType = OBJ_nid2obj(23); | - | ||||||||||||
34 | return executed 20 times by 1 test: cms->d.envelopedData;return cms->d.envelopedData; Executed by:
executed 20 times by 1 test: return cms->d.envelopedData; Executed by:
| 20 | ||||||||||||
35 | } | - | ||||||||||||
36 | return never executed: cms_get0_enveloped(cms);return cms_get0_enveloped(cms); never executed: return cms_get0_enveloped(cms); | 0 | ||||||||||||
37 | } | - | ||||||||||||
38 | - | |||||||||||||
39 | int cms_env_asn1_ctrl(CMS_RecipientInfo *ri, int cmd) | - | ||||||||||||
40 | { | - | ||||||||||||
41 | EVP_PKEY *pkey; | - | ||||||||||||
42 | int i; | - | ||||||||||||
43 | if (ri->type == 0
| 13-46 | ||||||||||||
44 | pkey = ri->d.ktri->pkey; executed 46 times by 1 test: pkey = ri->d.ktri->pkey; Executed by:
| 46 | ||||||||||||
45 | else if (ri->type == 1
| 0-13 | ||||||||||||
46 | EVP_PKEY_CTX *pctx = ri->d.kari->pctx; | - | ||||||||||||
47 | if (!pctx
| 0-13 | ||||||||||||
48 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
49 | pkey = EVP_PKEY_CTX_get0_pkey(pctx); | - | ||||||||||||
50 | if (!pkey
| 0-13 | ||||||||||||
51 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
52 | } executed 13 times by 1 test: elseend of block Executed by:
| 13 | ||||||||||||
53 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
54 | if (!pkey->ameth
| 0-59 | ||||||||||||
55 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
56 | i = pkey->ameth->pkey_ctrl(pkey, 0x7, cmd, ri); | - | ||||||||||||
57 | if (i == -2
| 0-59 | ||||||||||||
58 | ERR_put_error(46,(171),(125),__FILE__,71) | - | ||||||||||||
59 | ; | - | ||||||||||||
60 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
61 | } | - | ||||||||||||
62 | if (i <= 0
| 0-59 | ||||||||||||
63 | ERR_put_error(46,(171),(111),__FILE__,75); | - | ||||||||||||
64 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
65 | } | - | ||||||||||||
66 | return executed 59 times by 1 test: 1;return 1; Executed by:
executed 59 times by 1 test: return 1; Executed by:
| 59 | ||||||||||||
67 | } | - | ||||||||||||
68 | - | |||||||||||||
69 | struct stack_st_CMS_RecipientInfo *CMS_get0_RecipientInfos(CMS_ContentInfo *cms) | - | ||||||||||||
70 | { | - | ||||||||||||
71 | CMS_EnvelopedData *env; | - | ||||||||||||
72 | env = cms_get0_enveloped(cms); | - | ||||||||||||
73 | if (!env
| 0-20 | ||||||||||||
74 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
75 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
76 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
77 | return executed 20 times by 1 test: env->recipientInfos;return env->recipientInfos; Executed by:
executed 20 times by 1 test: return env->recipientInfos; Executed by:
| 20 | ||||||||||||
78 | } | - | ||||||||||||
79 | - | |||||||||||||
80 | int CMS_RecipientInfo_type(CMS_RecipientInfo *ri) | - | ||||||||||||
81 | { | - | ||||||||||||
82 | return executed 65 times by 1 test: ri->type;return ri->type; Executed by:
executed 65 times by 1 test: return ri->type; Executed by:
| 65 | ||||||||||||
83 | } | - | ||||||||||||
84 | - | |||||||||||||
85 | EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri) | - | ||||||||||||
86 | { | - | ||||||||||||
87 | if (ri->type == 0
| 15-48 | ||||||||||||
88 | return executed 48 times by 1 test: ri->d.ktri->pctx;return ri->d.ktri->pctx; Executed by:
executed 48 times by 1 test: return ri->d.ktri->pctx; Executed by:
| 48 | ||||||||||||
89 | else if (ri->type == 1
| 0-15 | ||||||||||||
90 | return executed 15 times by 1 test: ri->d.kari->pctx;return ri->d.kari->pctx; Executed by:
executed 15 times by 1 test: return ri->d.kari->pctx; Executed by:
| 15 | ||||||||||||
91 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
92 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
93 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
94 | } | - | ||||||||||||
95 | - | |||||||||||||
96 | CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher) | - | ||||||||||||
97 | { | - | ||||||||||||
98 | CMS_ContentInfo *cms; | - | ||||||||||||
99 | CMS_EnvelopedData *env; | - | ||||||||||||
100 | cms = CMS_ContentInfo_new(); | - | ||||||||||||
101 | if (cms ==
| 0-20 | ||||||||||||
102 | ((void *)0)
| 0-20 | ||||||||||||
103 | ) | - | ||||||||||||
104 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
105 | env = cms_enveloped_data_init(cms); | - | ||||||||||||
106 | if (env ==
| 0-20 | ||||||||||||
107 | ((void *)0)
| 0-20 | ||||||||||||
108 | ) | - | ||||||||||||
109 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
110 | if (!cms_EncryptedContent_init(env->encryptedContentInfo,
| 0-20 | ||||||||||||
111 | cipher,
| 0-20 | ||||||||||||
112 | ((void *)0)
| 0-20 | ||||||||||||
113 | , 0)
| 0-20 | ||||||||||||
114 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
115 | return executed 20 times by 1 test: cms;return cms; Executed by:
executed 20 times by 1 test: return cms; Executed by:
| 20 | ||||||||||||
116 | merr: | - | ||||||||||||
117 | CMS_ContentInfo_free(cms); | - | ||||||||||||
118 | ERR_put_error(46,(124),((1|64)),__FILE__,120); | - | ||||||||||||
119 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
120 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
121 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
122 | } | - | ||||||||||||
123 | - | |||||||||||||
124 | - | |||||||||||||
125 | - | |||||||||||||
126 | - | |||||||||||||
127 | - | |||||||||||||
128 | static int cms_RecipientInfo_ktri_init(CMS_RecipientInfo *ri, X509 *recip, | - | ||||||||||||
129 | EVP_PKEY *pk, unsigned int flags) | - | ||||||||||||
130 | { | - | ||||||||||||
131 | CMS_KeyTransRecipientInfo *ktri; | - | ||||||||||||
132 | int idtype; | - | ||||||||||||
133 | - | |||||||||||||
134 | ri->d.ktri = (CMS_KeyTransRecipientInfo *)ASN1_item_new((&(CMS_KeyTransRecipientInfo_it))); | - | ||||||||||||
135 | if (!ri->d.ktri
| 0-30 | ||||||||||||
136 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
137 | ri->type = 0; | - | ||||||||||||
138 | - | |||||||||||||
139 | ktri = ri->d.ktri; | - | ||||||||||||
140 | - | |||||||||||||
141 | if (flags & 0x10000
| 3-27 | ||||||||||||
142 | ktri->version = 2; | - | ||||||||||||
143 | idtype = 1; | - | ||||||||||||
144 | } executed 3 times by 1 test: else {end of block Executed by:
| 3 | ||||||||||||
145 | ktri->version = 0; | - | ||||||||||||
146 | idtype = 0; | - | ||||||||||||
147 | } executed 27 times by 1 test: end of block Executed by:
| 27 | ||||||||||||
148 | - | |||||||||||||
149 | - | |||||||||||||
150 | - | |||||||||||||
151 | - | |||||||||||||
152 | - | |||||||||||||
153 | - | |||||||||||||
154 | if (!cms_set1_SignerIdentifier(ktri->rid, recip, idtype)
| 0-30 | ||||||||||||
155 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
156 | - | |||||||||||||
157 | X509_up_ref(recip); | - | ||||||||||||
158 | EVP_PKEY_up_ref(pk); | - | ||||||||||||
159 | - | |||||||||||||
160 | ktri->pkey = pk; | - | ||||||||||||
161 | ktri->recip = recip; | - | ||||||||||||
162 | - | |||||||||||||
163 | if (flags & 0x40000
| 2-28 | ||||||||||||
164 | ktri->pctx = EVP_PKEY_CTX_new(ktri->pkey, | - | ||||||||||||
165 | ((void *)0) | - | ||||||||||||
166 | ); | - | ||||||||||||
167 | if (ktri->pctx ==
| 0-2 | ||||||||||||
168 | ((void *)0)
| 0-2 | ||||||||||||
169 | ) | - | ||||||||||||
170 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
171 | if (EVP_PKEY_encrypt_init(ktri->pctx) <= 0
| 0-2 | ||||||||||||
172 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
173 | } executed 2 times by 1 test: else if (!cms_env_asn1_ctrl(ri, 0)end of block Executed by:
| 0-28 | ||||||||||||
174 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
175 | return executed 30 times by 1 test: 1;return 1; Executed by:
executed 30 times by 1 test: return 1; Executed by:
| 30 | ||||||||||||
176 | } | - | ||||||||||||
177 | - | |||||||||||||
178 | - | |||||||||||||
179 | - | |||||||||||||
180 | - | |||||||||||||
181 | - | |||||||||||||
182 | CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, | - | ||||||||||||
183 | X509 *recip, unsigned int flags) | - | ||||||||||||
184 | { | - | ||||||||||||
185 | CMS_RecipientInfo *ri = | - | ||||||||||||
186 | ((void *)0) | - | ||||||||||||
187 | ; | - | ||||||||||||
188 | CMS_EnvelopedData *env; | - | ||||||||||||
189 | EVP_PKEY *pk = | - | ||||||||||||
190 | ((void *)0) | - | ||||||||||||
191 | ; | - | ||||||||||||
192 | env = cms_get0_enveloped(cms); | - | ||||||||||||
193 | if (!env
| 0-37 | ||||||||||||
194 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
195 | - | |||||||||||||
196 | - | |||||||||||||
197 | ri = (CMS_RecipientInfo *)ASN1_item_new((&(CMS_RecipientInfo_it))); | - | ||||||||||||
198 | if (!ri
| 0-37 | ||||||||||||
199 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
200 | - | |||||||||||||
201 | pk = X509_get0_pubkey(recip); | - | ||||||||||||
202 | if (!pk
| 0-37 | ||||||||||||
203 | ERR_put_error(46,(101),(113),__FILE__,195); | - | ||||||||||||
204 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
205 | } | - | ||||||||||||
206 | - | |||||||||||||
207 | switch (cms_pkey_get_ri_type(pk)) { | - | ||||||||||||
208 | - | |||||||||||||
209 | case executed 30 times by 1 test: 0:case 0: Executed by:
executed 30 times by 1 test: case 0: Executed by:
| 30 | ||||||||||||
210 | if (!cms_RecipientInfo_ktri_init(ri, recip, pk, flags)
| 0-30 | ||||||||||||
211 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
212 | break; executed 30 times by 1 test: break; Executed by:
| 30 | ||||||||||||
213 | - | |||||||||||||
214 | case executed 7 times by 1 test: 1:case 1: Executed by:
executed 7 times by 1 test: case 1: Executed by:
| 7 | ||||||||||||
215 | if (!cms_RecipientInfo_kari_init(ri, recip, pk, flags)
| 0-7 | ||||||||||||
216 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
217 | break; executed 7 times by 1 test: break; Executed by:
| 7 | ||||||||||||
218 | - | |||||||||||||
219 | default never executed: :default: never executed: default: | 0 | ||||||||||||
220 | ERR_put_error(46,(101),(125),__FILE__,213) | - | ||||||||||||
221 | ; | - | ||||||||||||
222 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
223 | - | |||||||||||||
224 | } | - | ||||||||||||
225 | - | |||||||||||||
226 | if (!sk_CMS_RecipientInfo_push(env->recipientInfos, ri)
| 0-37 | ||||||||||||
227 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
228 | - | |||||||||||||
229 | return executed 37 times by 1 test: ri;return ri; Executed by:
executed 37 times by 1 test: return ri; Executed by:
| 37 | ||||||||||||
230 | - | |||||||||||||
231 | merr: | - | ||||||||||||
232 | ERR_put_error(46,(101),((1|64)),__FILE__,224); | - | ||||||||||||
233 | err: code before this statement never executed: err: | 0 | ||||||||||||
234 | ASN1_item_free(((void*) (1 ? ri : (CMS_RecipientInfo*)0)), (&(CMS_RecipientInfo_it))); | - | ||||||||||||
235 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
236 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
237 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
238 | - | |||||||||||||
239 | } | - | ||||||||||||
240 | - | |||||||||||||
241 | int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, | - | ||||||||||||
242 | EVP_PKEY **pk, X509 **recip, | - | ||||||||||||
243 | X509_ALGOR **palg) | - | ||||||||||||
244 | { | - | ||||||||||||
245 | CMS_KeyTransRecipientInfo *ktri; | - | ||||||||||||
246 | if (ri->type != 0
| 0-46 | ||||||||||||
247 | ERR_put_error(46,(142),(124),__FILE__,238) | - | ||||||||||||
248 | ; | - | ||||||||||||
249 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
250 | } | - | ||||||||||||
251 | - | |||||||||||||
252 | ktri = ri->d.ktri; | - | ||||||||||||
253 | - | |||||||||||||
254 | if (pk
| 0-46 | ||||||||||||
255 | * never executed: pk = ktri->pkey;*pk = ktri->pkey; never executed: *pk = ktri->pkey; | 0 | ||||||||||||
256 | if (recip
| 0-46 | ||||||||||||
257 | * never executed: recip = ktri->recip;*recip = ktri->recip; never executed: *recip = ktri->recip; | 0 | ||||||||||||
258 | if (palg
| 0-46 | ||||||||||||
259 | * executed 46 times by 1 test: palg = ktri->keyEncryptionAlgorithm;*palg = ktri->keyEncryptionAlgorithm; Executed by:
executed 46 times by 1 test: *palg = ktri->keyEncryptionAlgorithm; Executed by:
| 46 | ||||||||||||
260 | return executed 46 times by 1 test: 1;return 1; Executed by:
executed 46 times by 1 test: return 1; Executed by:
| 46 | ||||||||||||
261 | } | - | ||||||||||||
262 | - | |||||||||||||
263 | int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, | - | ||||||||||||
264 | ASN1_OCTET_STRING **keyid, | - | ||||||||||||
265 | X509_NAME **issuer, | - | ||||||||||||
266 | ASN1_INTEGER **sno) | - | ||||||||||||
267 | { | - | ||||||||||||
268 | CMS_KeyTransRecipientInfo *ktri; | - | ||||||||||||
269 | if (ri->type != 0
| 0 | ||||||||||||
270 | ERR_put_error(46,(143),(124),__FILE__,261) | - | ||||||||||||
271 | ; | - | ||||||||||||
272 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
273 | } | - | ||||||||||||
274 | ktri = ri->d.ktri; | - | ||||||||||||
275 | - | |||||||||||||
276 | return never executed: cms_SignerIdentifier_get0_signer_id(ktri->rid, keyid, issuer, sno);return cms_SignerIdentifier_get0_signer_id(ktri->rid, keyid, issuer, sno); never executed: return cms_SignerIdentifier_get0_signer_id(ktri->rid, keyid, issuer, sno); | 0 | ||||||||||||
277 | } | - | ||||||||||||
278 | - | |||||||||||||
279 | int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert) | - | ||||||||||||
280 | { | - | ||||||||||||
281 | if (ri->type != 0
| 0-15 | ||||||||||||
282 | ERR_put_error(46,(139),(124),__FILE__,273) | - | ||||||||||||
283 | ; | - | ||||||||||||
284 | return never executed: -2;return -2; never executed: return -2; | 0 | ||||||||||||
285 | } | - | ||||||||||||
286 | return executed 15 times by 1 test: cms_SignerIdentifier_cert_cmp(ri->d.ktri->rid, cert);return cms_SignerIdentifier_cert_cmp(ri->d.ktri->rid, cert); Executed by:
executed 15 times by 1 test: return cms_SignerIdentifier_cert_cmp(ri->d.ktri->rid, cert); Executed by:
| 15 | ||||||||||||
287 | } | - | ||||||||||||
288 | - | |||||||||||||
289 | int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey) | - | ||||||||||||
290 | { | - | ||||||||||||
291 | if (ri->type != 0
| 0-32 | ||||||||||||
292 | ERR_put_error(46,(145),(124),__FILE__,282); | - | ||||||||||||
293 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
294 | } | - | ||||||||||||
295 | EVP_PKEY_free(ri->d.ktri->pkey); | - | ||||||||||||
296 | ri->d.ktri->pkey = pkey; | - | ||||||||||||
297 | return executed 32 times by 1 test: 1;return 1; Executed by:
executed 32 times by 1 test: return 1; Executed by:
| 32 | ||||||||||||
298 | } | - | ||||||||||||
299 | - | |||||||||||||
300 | - | |||||||||||||
301 | - | |||||||||||||
302 | static int cms_RecipientInfo_ktri_encrypt(CMS_ContentInfo *cms, | - | ||||||||||||
303 | CMS_RecipientInfo *ri) | - | ||||||||||||
304 | { | - | ||||||||||||
305 | CMS_KeyTransRecipientInfo *ktri; | - | ||||||||||||
306 | CMS_EncryptedContentInfo *ec; | - | ||||||||||||
307 | EVP_PKEY_CTX *pctx; | - | ||||||||||||
308 | unsigned char *ek = | - | ||||||||||||
309 | ((void *)0) | - | ||||||||||||
310 | ; | - | ||||||||||||
311 | size_t eklen; | - | ||||||||||||
312 | - | |||||||||||||
313 | int ret = 0; | - | ||||||||||||
314 | - | |||||||||||||
315 | if (ri->type != 0
| 0-30 | ||||||||||||
316 | ERR_put_error(46,(141),(124),__FILE__,304); | - | ||||||||||||
317 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
318 | } | - | ||||||||||||
319 | ktri = ri->d.ktri; | - | ||||||||||||
320 | ec = cms->d.envelopedData->encryptedContentInfo; | - | ||||||||||||
321 | - | |||||||||||||
322 | pctx = ktri->pctx; | - | ||||||||||||
323 | - | |||||||||||||
324 | if (pctx
| 2-28 | ||||||||||||
325 | if (!cms_env_asn1_ctrl(ri, 0)
| 0-2 | ||||||||||||
326 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
327 | } executed 2 times by 1 test: else {end of block Executed by:
| 2 | ||||||||||||
328 | pctx = EVP_PKEY_CTX_new(ktri->pkey, | - | ||||||||||||
329 | ((void *)0) | - | ||||||||||||
330 | ); | - | ||||||||||||
331 | if (pctx ==
| 0-28 | ||||||||||||
332 | ((void *)0)
| 0-28 | ||||||||||||
333 | ) | - | ||||||||||||
334 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
335 | - | |||||||||||||
336 | if (EVP_PKEY_encrypt_init(pctx) <= 0
| 0-28 | ||||||||||||
337 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
338 | } executed 28 times by 1 test: end of block Executed by:
| 28 | ||||||||||||
339 | - | |||||||||||||
340 | if (EVP_PKEY_CTX_ctrl(pctx, -1, (1<<8),
| 0-30 | ||||||||||||
341 | 9, 0, ri) <= 0
| 0-30 | ||||||||||||
342 | ERR_put_error(46,(141),(110),__FILE__,326); | - | ||||||||||||
343 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
344 | } | - | ||||||||||||
345 | - | |||||||||||||
346 | if (EVP_PKEY_encrypt(pctx,
| 0-30 | ||||||||||||
347 | ((void *)0)
| 0-30 | ||||||||||||
348 | , &eklen, ec->key, ec->keylen) <= 0
| 0-30 | ||||||||||||
349 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
350 | - | |||||||||||||
351 | ek = CRYPTO_malloc(eklen, __FILE__, 333); | - | ||||||||||||
352 | - | |||||||||||||
353 | if (ek ==
| 0-30 | ||||||||||||
354 | ((void *)0)
| 0-30 | ||||||||||||
355 | ) { | - | ||||||||||||
356 | ERR_put_error(46,(141),((1|64)),__FILE__,336); | - | ||||||||||||
357 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
358 | } | - | ||||||||||||
359 | - | |||||||||||||
360 | if (EVP_PKEY_encrypt(pctx, ek, &eklen, ec->key, ec->keylen) <= 0
| 0-30 | ||||||||||||
361 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
362 | - | |||||||||||||
363 | ASN1_STRING_set0(ktri->encryptedKey, ek, eklen); | - | ||||||||||||
364 | ek = | - | ||||||||||||
365 | ((void *)0) | - | ||||||||||||
366 | ; | - | ||||||||||||
367 | - | |||||||||||||
368 | ret = 1; | - | ||||||||||||
369 | - | |||||||||||||
370 | err: code before this statement executed 30 times by 1 test: err: Executed by:
| 30 | ||||||||||||
371 | EVP_PKEY_CTX_free(pctx); | - | ||||||||||||
372 | ktri->pctx = | - | ||||||||||||
373 | ((void *)0) | - | ||||||||||||
374 | ; | - | ||||||||||||
375 | CRYPTO_free(ek, __FILE__, 351); | - | ||||||||||||
376 | return executed 30 times by 1 test: ret;return ret; Executed by:
executed 30 times by 1 test: return ret; Executed by:
| 30 | ||||||||||||
377 | - | |||||||||||||
378 | } | - | ||||||||||||
379 | - | |||||||||||||
380 | - | |||||||||||||
381 | - | |||||||||||||
382 | static int cms_RecipientInfo_ktri_decrypt(CMS_ContentInfo *cms, | - | ||||||||||||
383 | CMS_RecipientInfo *ri) | - | ||||||||||||
384 | { | - | ||||||||||||
385 | CMS_KeyTransRecipientInfo *ktri = ri->d.ktri; | - | ||||||||||||
386 | EVP_PKEY *pkey = ktri->pkey; | - | ||||||||||||
387 | unsigned char *ek = | - | ||||||||||||
388 | ((void *)0) | - | ||||||||||||
389 | ; | - | ||||||||||||
390 | size_t eklen; | - | ||||||||||||
391 | int ret = 0; | - | ||||||||||||
392 | CMS_EncryptedContentInfo *ec; | - | ||||||||||||
393 | ec = cms->d.envelopedData->encryptedContentInfo; | - | ||||||||||||
394 | - | |||||||||||||
395 | if (ktri->pkey ==
| 0-16 | ||||||||||||
396 | ((void *)0)
| 0-16 | ||||||||||||
397 | ) { | - | ||||||||||||
398 | ERR_put_error(46,(140),(133),__FILE__,370); | - | ||||||||||||
399 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
400 | } | - | ||||||||||||
401 | - | |||||||||||||
402 | ktri->pctx = EVP_PKEY_CTX_new(pkey, | - | ||||||||||||
403 | ((void *)0) | - | ||||||||||||
404 | ); | - | ||||||||||||
405 | if (ktri->pctx ==
| 0-16 | ||||||||||||
406 | ((void *)0)
| 0-16 | ||||||||||||
407 | ) | - | ||||||||||||
408 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
409 | - | |||||||||||||
410 | if (EVP_PKEY_decrypt_init(ktri->pctx) <= 0
| 0-16 | ||||||||||||
411 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
412 | - | |||||||||||||
413 | if (!cms_env_asn1_ctrl(ri, 1)
| 0-16 | ||||||||||||
414 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
415 | - | |||||||||||||
416 | if (EVP_PKEY_CTX_ctrl(ktri->pctx, -1, (1<<9),
| 0-16 | ||||||||||||
417 | 10, 0, ri) <= 0
| 0-16 | ||||||||||||
418 | ERR_put_error(46,(140),(110),__FILE__,386); | - | ||||||||||||
419 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
420 | } | - | ||||||||||||
421 | - | |||||||||||||
422 | if (EVP_PKEY_decrypt(ktri->pctx,
| 0-16 | ||||||||||||
423 | ((void *)0)
| 0-16 | ||||||||||||
424 | , &eklen,
| 0-16 | ||||||||||||
425 | ktri->encryptedKey->data,
| 0-16 | ||||||||||||
426 | ktri->encryptedKey->length) <= 0
| 0-16 | ||||||||||||
427 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
428 | - | |||||||||||||
429 | ek = CRYPTO_malloc(eklen, __FILE__, 395); | - | ||||||||||||
430 | - | |||||||||||||
431 | if (ek ==
| 0-16 | ||||||||||||
432 | ((void *)0)
| 0-16 | ||||||||||||
433 | ) { | - | ||||||||||||
434 | ERR_put_error(46,(140),((1|64)),__FILE__,398); | - | ||||||||||||
435 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
436 | } | - | ||||||||||||
437 | - | |||||||||||||
438 | if (EVP_PKEY_decrypt(ktri->pctx, ek, &eklen,
| 4-12 | ||||||||||||
439 | ktri->encryptedKey->data,
| 4-12 | ||||||||||||
440 | ktri->encryptedKey->length) <= 0
| 4-12 | ||||||||||||
441 | ERR_put_error(46,(140),(104),__FILE__,405); | - | ||||||||||||
442 | goto executed 4 times by 1 test: err;goto err; Executed by:
executed 4 times by 1 test: goto err; Executed by:
| 4 | ||||||||||||
443 | } | - | ||||||||||||
444 | - | |||||||||||||
445 | ret = 1; | - | ||||||||||||
446 | - | |||||||||||||
447 | CRYPTO_clear_free(ec->key, ec->keylen, __FILE__, 411); | - | ||||||||||||
448 | ec->key = ek; | - | ||||||||||||
449 | ec->keylen = eklen; | - | ||||||||||||
450 | - | |||||||||||||
451 | err: code before this statement executed 12 times by 1 test: err: Executed by:
| 12 | ||||||||||||
452 | EVP_PKEY_CTX_free(ktri->pctx); | - | ||||||||||||
453 | ktri->pctx = | - | ||||||||||||
454 | ((void *)0) | - | ||||||||||||
455 | ; | - | ||||||||||||
456 | if (!ret
| 4-12 | ||||||||||||
457 | CRYPTO_free(ek, __FILE__, 419); executed 4 times by 1 test: CRYPTO_free(ek, __FILE__, 419); Executed by:
| 4 | ||||||||||||
458 | - | |||||||||||||
459 | return executed 16 times by 1 test: ret;return ret; Executed by:
executed 16 times by 1 test: return ret; Executed by:
| 16 | ||||||||||||
460 | } | - | ||||||||||||
461 | - | |||||||||||||
462 | - | |||||||||||||
463 | - | |||||||||||||
464 | int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, | - | ||||||||||||
465 | const unsigned char *id, size_t idlen) | - | ||||||||||||
466 | { | - | ||||||||||||
467 | ASN1_OCTET_STRING tmp_os; | - | ||||||||||||
468 | CMS_KEKRecipientInfo *kekri; | - | ||||||||||||
469 | if (ri->type != 2
| 0-1 | ||||||||||||
470 | ERR_put_error(46,(138),(123),__FILE__,432); | - | ||||||||||||
471 | return never executed: -2;return -2; never executed: return -2; | 0 | ||||||||||||
472 | } | - | ||||||||||||
473 | kekri = ri->d.kekri; | - | ||||||||||||
474 | tmp_os.type = 4; | - | ||||||||||||
475 | tmp_os.flags = 0; | - | ||||||||||||
476 | tmp_os.data = (unsigned char *)id; | - | ||||||||||||
477 | tmp_os.length = (int)idlen; | - | ||||||||||||
478 | return executed 1 time by 1 test: ASN1_OCTET_STRING_cmp(&tmp_os, kekri->kekid->keyIdentifier);return ASN1_OCTET_STRING_cmp(&tmp_os, kekri->kekid->keyIdentifier); Executed by:
executed 1 time by 1 test: return ASN1_OCTET_STRING_cmp(&tmp_os, kekri->kekid->keyIdentifier); Executed by:
| 1 | ||||||||||||
479 | } | - | ||||||||||||
480 | - | |||||||||||||
481 | - | |||||||||||||
482 | - | |||||||||||||
483 | static size_t aes_wrap_keylen(int nid) | - | ||||||||||||
484 | { | - | ||||||||||||
485 | switch (nid) { | - | ||||||||||||
486 | case executed 2 times by 1 test: 788:case 788: Executed by:
executed 2 times by 1 test: case 788: Executed by:
| 2 | ||||||||||||
487 | return executed 2 times by 1 test: 16;return 16; Executed by:
executed 2 times by 1 test: return 16; Executed by:
| 2 | ||||||||||||
488 | - | |||||||||||||
489 | case never executed: 789:case 789: never executed: case 789: | 0 | ||||||||||||
490 | return never executed: 24;return 24; never executed: return 24; | 0 | ||||||||||||
491 | - | |||||||||||||
492 | case never executed: 790:case 790: never executed: case 790: | 0 | ||||||||||||
493 | return never executed: 32;return 32; never executed: return 32; | 0 | ||||||||||||
494 | - | |||||||||||||
495 | default never executed: :default: never executed: default: | 0 | ||||||||||||
496 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
497 | } | - | ||||||||||||
498 | } | - | ||||||||||||
499 | - | |||||||||||||
500 | CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, | - | ||||||||||||
501 | unsigned char *key, size_t keylen, | - | ||||||||||||
502 | unsigned char *id, size_t idlen, | - | ||||||||||||
503 | ASN1_GENERALIZEDTIME *date, | - | ||||||||||||
504 | ASN1_OBJECT *otherTypeId, | - | ||||||||||||
505 | ASN1_TYPE *otherType) | - | ||||||||||||
506 | { | - | ||||||||||||
507 | CMS_RecipientInfo *ri = | - | ||||||||||||
508 | ((void *)0) | - | ||||||||||||
509 | ; | - | ||||||||||||
510 | CMS_EnvelopedData *env; | - | ||||||||||||
511 | CMS_KEKRecipientInfo *kekri; | - | ||||||||||||
512 | env = cms_get0_enveloped(cms); | - | ||||||||||||
513 | if (!env
| 0-2 | ||||||||||||
514 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
515 | - | |||||||||||||
516 | if (nid == 0
| 0-2 | ||||||||||||
517 | switch (keylen) { | - | ||||||||||||
518 | case executed 2 times by 1 test: 16:case 16: Executed by:
executed 2 times by 1 test: case 16: Executed by:
| 2 | ||||||||||||
519 | nid = 788; | - | ||||||||||||
520 | break; executed 2 times by 1 test: break; Executed by:
| 2 | ||||||||||||
521 | - | |||||||||||||
522 | case never executed: 24:case 24: never executed: case 24: | 0 | ||||||||||||
523 | nid = 789; | - | ||||||||||||
524 | break; never executed: break; | 0 | ||||||||||||
525 | - | |||||||||||||
526 | case never executed: 32:case 32: never executed: case 32: | 0 | ||||||||||||
527 | nid = 790; | - | ||||||||||||
528 | break; never executed: break; | 0 | ||||||||||||
529 | - | |||||||||||||
530 | default never executed: :default: never executed: default: | 0 | ||||||||||||
531 | ERR_put_error(46,(100),(118),__FILE__,491); | - | ||||||||||||
532 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
533 | } | - | ||||||||||||
534 | - | |||||||||||||
535 | } else { | - | ||||||||||||
536 | - | |||||||||||||
537 | size_t exp_keylen = aes_wrap_keylen(nid); | - | ||||||||||||
538 | - | |||||||||||||
539 | if (!exp_keylen
| 0 | ||||||||||||
540 | ERR_put_error(46,(100),(153),__FILE__,501) | - | ||||||||||||
541 | ; | - | ||||||||||||
542 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
543 | } | - | ||||||||||||
544 | - | |||||||||||||
545 | if (keylen != exp_keylen
| 0 | ||||||||||||
546 | ERR_put_error(46,(100),(118),__FILE__,506); | - | ||||||||||||
547 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
548 | } | - | ||||||||||||
549 | - | |||||||||||||
550 | } never executed: end of block | 0 | ||||||||||||
551 | - | |||||||||||||
552 | - | |||||||||||||
553 | ri = (CMS_RecipientInfo *)ASN1_item_new((&(CMS_RecipientInfo_it))); | - | ||||||||||||
554 | if (!ri
| 0-2 | ||||||||||||
555 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
556 | - | |||||||||||||
557 | ri->d.kekri = (CMS_KEKRecipientInfo *)ASN1_item_new((&(CMS_KEKRecipientInfo_it))); | - | ||||||||||||
558 | if (!ri->d.kekri
| 0-2 | ||||||||||||
559 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
560 | ri->type = 2; | - | ||||||||||||
561 | - | |||||||||||||
562 | kekri = ri->d.kekri; | - | ||||||||||||
563 | - | |||||||||||||
564 | if (otherTypeId
| 0-2 | ||||||||||||
565 | kekri->kekid->other = (CMS_OtherKeyAttribute *)ASN1_item_new((&(CMS_OtherKeyAttribute_it))); | - | ||||||||||||
566 | if (kekri->kekid->other ==
| 0 | ||||||||||||
567 | ((void *)0)
| 0 | ||||||||||||
568 | ) | - | ||||||||||||
569 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
570 | } never executed: end of block | 0 | ||||||||||||
571 | - | |||||||||||||
572 | if (!sk_CMS_RecipientInfo_push(env->recipientInfos, ri)
| 0-2 | ||||||||||||
573 | goto never executed: merr;goto merr; never executed: goto merr; | 0 | ||||||||||||
574 | - | |||||||||||||
575 | - | |||||||||||||
576 | - | |||||||||||||
577 | kekri->version = 4; | - | ||||||||||||
578 | - | |||||||||||||
579 | kekri->key = key; | - | ||||||||||||
580 | kekri->keylen = keylen; | - | ||||||||||||
581 | - | |||||||||||||
582 | ASN1_STRING_set0(kekri->kekid->keyIdentifier, id, idlen); | - | ||||||||||||
583 | - | |||||||||||||
584 | kekri->kekid->date = date; | - | ||||||||||||
585 | - | |||||||||||||
586 | if (kekri->kekid->other
| 0-2 | ||||||||||||
587 | kekri->kekid->other->keyAttrId = otherTypeId; | - | ||||||||||||
588 | kekri->kekid->other->keyAttr = otherType; | - | ||||||||||||
589 | } never executed: end of block | 0 | ||||||||||||
590 | - | |||||||||||||
591 | X509_ALGOR_set0(kekri->keyEncryptionAlgorithm, | - | ||||||||||||
592 | OBJ_nid2obj(nid), -1, | - | ||||||||||||
593 | ((void *)0) | - | ||||||||||||
594 | ); | - | ||||||||||||
595 | - | |||||||||||||
596 | return executed 2 times by 1 test: ri;return ri; Executed by:
executed 2 times by 1 test: return ri; Executed by:
| 2 | ||||||||||||
597 | - | |||||||||||||
598 | merr: | - | ||||||||||||
599 | ERR_put_error(46,(100),((1|64)),__FILE__,555); | - | ||||||||||||
600 | err: code before this statement never executed: err: | 0 | ||||||||||||
601 | ASN1_item_free(((void*) (1 ? ri : (CMS_RecipientInfo*)0)), (&(CMS_RecipientInfo_it))); | - | ||||||||||||
602 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
603 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
604 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
605 | - | |||||||||||||
606 | } | - | ||||||||||||
607 | - | |||||||||||||
608 | int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, | - | ||||||||||||
609 | X509_ALGOR **palg, | - | ||||||||||||
610 | ASN1_OCTET_STRING **pid, | - | ||||||||||||
611 | ASN1_GENERALIZEDTIME **pdate, | - | ||||||||||||
612 | ASN1_OBJECT **potherid, | - | ||||||||||||
613 | ASN1_TYPE **pothertype) | - | ||||||||||||
614 | { | - | ||||||||||||
615 | CMS_KEKIdentifier *rkid; | - | ||||||||||||
616 | if (ri->type != 2
| 0 | ||||||||||||
617 | ERR_put_error(46,(137),(123),__FILE__,571); | - | ||||||||||||
618 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
619 | } | - | ||||||||||||
620 | rkid = ri->d.kekri->kekid; | - | ||||||||||||
621 | if (palg
| 0 | ||||||||||||
622 | * never executed: palg = ri->d.kekri->keyEncryptionAlgorithm;*palg = ri->d.kekri->keyEncryptionAlgorithm; never executed: *palg = ri->d.kekri->keyEncryptionAlgorithm; | 0 | ||||||||||||
623 | if (pid
| 0 | ||||||||||||
624 | * never executed: pid = rkid->keyIdentifier;*pid = rkid->keyIdentifier; never executed: *pid = rkid->keyIdentifier; | 0 | ||||||||||||
625 | if (pdate
| 0 | ||||||||||||
626 | * never executed: pdate = rkid->date;*pdate = rkid->date; never executed: *pdate = rkid->date; | 0 | ||||||||||||
627 | if (potherid
| 0 | ||||||||||||
628 | if (rkid->other
| 0 | ||||||||||||
629 | * never executed: potherid = rkid->other->keyAttrId;*potherid = rkid->other->keyAttrId; never executed: *potherid = rkid->other->keyAttrId; | 0 | ||||||||||||
630 | else | - | ||||||||||||
631 | * never executed: potherid = *potherid = ((void *)0) ; never executed: *potherid = ((void *)0) ; | 0 | ||||||||||||
632 | ((void *)0) never executed: *potherid = ((void *)0) ; | 0 | ||||||||||||
633 | ; never executed: *potherid = ((void *)0) ; | 0 | ||||||||||||
634 | } | - | ||||||||||||
635 | if (pothertype
| 0 | ||||||||||||
636 | if (rkid->other
| 0 | ||||||||||||
637 | * never executed: pothertype = rkid->other->keyAttr;*pothertype = rkid->other->keyAttr; never executed: *pothertype = rkid->other->keyAttr; | 0 | ||||||||||||
638 | else | - | ||||||||||||
639 | * never executed: pothertype = *pothertype = ((void *)0) ; never executed: *pothertype = ((void *)0) ; | 0 | ||||||||||||
640 | ((void *)0) never executed: *pothertype = ((void *)0) ; | 0 | ||||||||||||
641 | ; never executed: *pothertype = ((void *)0) ; | 0 | ||||||||||||
642 | } | - | ||||||||||||
643 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
644 | } | - | ||||||||||||
645 | - | |||||||||||||
646 | int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, | - | ||||||||||||
647 | unsigned char *key, size_t keylen) | - | ||||||||||||
648 | { | - | ||||||||||||
649 | CMS_KEKRecipientInfo *kekri; | - | ||||||||||||
650 | if (ri->type != 2
| 0-4 | ||||||||||||
651 | ERR_put_error(46,(144),(123),__FILE__,601); | - | ||||||||||||
652 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
653 | } | - | ||||||||||||
654 | - | |||||||||||||
655 | kekri = ri->d.kekri; | - | ||||||||||||
656 | kekri->key = key; | - | ||||||||||||
657 | kekri->keylen = keylen; | - | ||||||||||||
658 | return executed 4 times by 1 test: 1;return 1; Executed by:
executed 4 times by 1 test: return 1; Executed by:
| 4 | ||||||||||||
659 | } | - | ||||||||||||
660 | - | |||||||||||||
661 | - | |||||||||||||
662 | - | |||||||||||||
663 | static int cms_RecipientInfo_kekri_encrypt(CMS_ContentInfo *cms, | - | ||||||||||||
664 | CMS_RecipientInfo *ri) | - | ||||||||||||
665 | { | - | ||||||||||||
666 | CMS_EncryptedContentInfo *ec; | - | ||||||||||||
667 | CMS_KEKRecipientInfo *kekri; | - | ||||||||||||
668 | AES_KEY actx; | - | ||||||||||||
669 | unsigned char *wkey = | - | ||||||||||||
670 | ((void *)0) | - | ||||||||||||
671 | ; | - | ||||||||||||
672 | int wkeylen; | - | ||||||||||||
673 | int r = 0; | - | ||||||||||||
674 | - | |||||||||||||
675 | ec = cms->d.envelopedData->encryptedContentInfo; | - | ||||||||||||
676 | - | |||||||||||||
677 | kekri = ri->d.kekri; | - | ||||||||||||
678 | - | |||||||||||||
679 | if (!kekri->key
| 0-2 | ||||||||||||
680 | ERR_put_error(46,(136),(130),__FILE__,628); | - | ||||||||||||
681 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
682 | } | - | ||||||||||||
683 | - | |||||||||||||
684 | if (AES_set_encrypt_key(kekri->key, kekri->keylen << 3, &actx)
| 0-2 | ||||||||||||
685 | ERR_put_error(46,(136),(115),__FILE__,634) | - | ||||||||||||
686 | ; | - | ||||||||||||
687 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
688 | } | - | ||||||||||||
689 | - | |||||||||||||
690 | wkey = CRYPTO_malloc(ec->keylen + 8, __FILE__, 638); | - | ||||||||||||
691 | - | |||||||||||||
692 | if (wkey ==
| 0-2 | ||||||||||||
693 | ((void *)0)
| 0-2 | ||||||||||||
694 | ) { | - | ||||||||||||
695 | ERR_put_error(46,(136),((1|64)),__FILE__,641); | - | ||||||||||||
696 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
697 | } | - | ||||||||||||
698 | - | |||||||||||||
699 | wkeylen = AES_wrap_key(&actx, | - | ||||||||||||
700 | ((void *)0) | - | ||||||||||||
701 | , wkey, ec->key, ec->keylen); | - | ||||||||||||
702 | - | |||||||||||||
703 | if (wkeylen <= 0
| 0-2 | ||||||||||||
704 | ERR_put_error(46,(136),(159),__FILE__,648); | - | ||||||||||||
705 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
706 | } | - | ||||||||||||
707 | - | |||||||||||||
708 | ASN1_STRING_set0(kekri->encryptedKey, wkey, wkeylen); | - | ||||||||||||
709 | - | |||||||||||||
710 | r = 1; | - | ||||||||||||
711 | - | |||||||||||||
712 | err: code before this statement executed 2 times by 1 test: err: Executed by:
| 2 | ||||||||||||
713 | - | |||||||||||||
714 | if (!r
| 0-2 | ||||||||||||
715 | CRYPTO_free(wkey, __FILE__, 659); never executed: CRYPTO_free(wkey, __FILE__, 659); | 0 | ||||||||||||
716 | OPENSSL_cleanse(&actx, sizeof(actx)); | - | ||||||||||||
717 | - | |||||||||||||
718 | return executed 2 times by 1 test: r;return r; Executed by:
executed 2 times by 1 test: return r; Executed by:
| 2 | ||||||||||||
719 | - | |||||||||||||
720 | } | - | ||||||||||||
721 | - | |||||||||||||
722 | - | |||||||||||||
723 | - | |||||||||||||
724 | static int cms_RecipientInfo_kekri_decrypt(CMS_ContentInfo *cms, | - | ||||||||||||
725 | CMS_RecipientInfo *ri) | - | ||||||||||||
726 | { | - | ||||||||||||
727 | CMS_EncryptedContentInfo *ec; | - | ||||||||||||
728 | CMS_KEKRecipientInfo *kekri; | - | ||||||||||||
729 | AES_KEY actx; | - | ||||||||||||
730 | unsigned char *ukey = | - | ||||||||||||
731 | ((void *)0) | - | ||||||||||||
732 | ; | - | ||||||||||||
733 | int ukeylen; | - | ||||||||||||
734 | int r = 0, wrap_nid; | - | ||||||||||||
735 | - | |||||||||||||
736 | ec = cms->d.envelopedData->encryptedContentInfo; | - | ||||||||||||
737 | - | |||||||||||||
738 | kekri = ri->d.kekri; | - | ||||||||||||
739 | - | |||||||||||||
740 | if (!kekri->key
| 0-2 | ||||||||||||
741 | ERR_put_error(46,(135),(130),__FILE__,683); | - | ||||||||||||
742 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
743 | } | - | ||||||||||||
744 | - | |||||||||||||
745 | wrap_nid = OBJ_obj2nid(kekri->keyEncryptionAlgorithm->algorithm); | - | ||||||||||||
746 | if (aes_wrap_keylen(wrap_nid) != kekri->keylen
| 0-2 | ||||||||||||
747 | ERR_put_error(46,(135),(118),__FILE__,690) | - | ||||||||||||
748 | ; | - | ||||||||||||
749 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
750 | } | - | ||||||||||||
751 | - | |||||||||||||
752 | - | |||||||||||||
753 | - | |||||||||||||
754 | if (kekri->encryptedKey->length < 16
| 0-2 | ||||||||||||
755 | ERR_put_error(46,(135),(117),__FILE__,698) | - | ||||||||||||
756 | ; | - | ||||||||||||
757 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
758 | } | - | ||||||||||||
759 | - | |||||||||||||
760 | if (AES_set_decrypt_key(kekri->key, kekri->keylen << 3, &actx)
| 0-2 | ||||||||||||
761 | ERR_put_error(46,(135),(115),__FILE__,704) | - | ||||||||||||
762 | ; | - | ||||||||||||
763 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
764 | } | - | ||||||||||||
765 | - | |||||||||||||
766 | ukey = CRYPTO_malloc(kekri->encryptedKey->length - 8, __FILE__, 708); | - | ||||||||||||
767 | - | |||||||||||||
768 | if (ukey ==
| 0-2 | ||||||||||||
769 | ((void *)0)
| 0-2 | ||||||||||||
770 | ) { | - | ||||||||||||
771 | ERR_put_error(46,(135),((1|64)),__FILE__,711); | - | ||||||||||||
772 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
773 | } | - | ||||||||||||
774 | - | |||||||||||||
775 | ukeylen = AES_unwrap_key(&actx, | - | ||||||||||||
776 | ((void *)0) | - | ||||||||||||
777 | , ukey, | - | ||||||||||||
778 | kekri->encryptedKey->data, | - | ||||||||||||
779 | kekri->encryptedKey->length); | - | ||||||||||||
780 | - | |||||||||||||
781 | if (ukeylen <= 0
| 0-2 | ||||||||||||
782 | ERR_put_error(46,(135),(157),__FILE__,720); | - | ||||||||||||
783 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
784 | } | - | ||||||||||||
785 | - | |||||||||||||
786 | ec->key = ukey; | - | ||||||||||||
787 | ec->keylen = ukeylen; | - | ||||||||||||
788 | - | |||||||||||||
789 | r = 1; | - | ||||||||||||
790 | - | |||||||||||||
791 | err: code before this statement executed 2 times by 1 test: err: Executed by:
| 2 | ||||||||||||
792 | - | |||||||||||||
793 | if (!r
| 0-2 | ||||||||||||
794 | CRYPTO_free(ukey, __FILE__, 732); never executed: CRYPTO_free(ukey, __FILE__, 732); | 0 | ||||||||||||
795 | OPENSSL_cleanse(&actx, sizeof(actx)); | - | ||||||||||||
796 | - | |||||||||||||
797 | return executed 2 times by 1 test: r;return r; Executed by:
executed 2 times by 1 test: return r; Executed by:
| 2 | ||||||||||||
798 | - | |||||||||||||
799 | } | - | ||||||||||||
800 | - | |||||||||||||
801 | int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri) | - | ||||||||||||
802 | { | - | ||||||||||||
803 | switch (ri->type) { | - | ||||||||||||
804 | case executed 16 times by 1 test: 0:case 0: Executed by:
executed 16 times by 1 test: case 0: Executed by:
| 16 | ||||||||||||
805 | return executed 16 times by 1 test: cms_RecipientInfo_ktri_decrypt(cms, ri);return cms_RecipientInfo_ktri_decrypt(cms, ri); Executed by:
executed 16 times by 1 test: return cms_RecipientInfo_ktri_decrypt(cms, ri); Executed by:
| 16 | ||||||||||||
806 | - | |||||||||||||
807 | case executed 2 times by 1 test: 2:case 2: Executed by:
executed 2 times by 1 test: case 2: Executed by:
| 2 | ||||||||||||
808 | return executed 2 times by 1 test: cms_RecipientInfo_kekri_decrypt(cms, ri);return cms_RecipientInfo_kekri_decrypt(cms, ri); Executed by:
executed 2 times by 1 test: return cms_RecipientInfo_kekri_decrypt(cms, ri); Executed by:
| 2 | ||||||||||||
809 | - | |||||||||||||
810 | case never executed: 3:case 3: never executed: case 3: | 0 | ||||||||||||
811 | return never executed: cms_RecipientInfo_pwri_crypt(cms, ri, 0);return cms_RecipientInfo_pwri_crypt(cms, ri, 0); never executed: return cms_RecipientInfo_pwri_crypt(cms, ri, 0); | 0 | ||||||||||||
812 | - | |||||||||||||
813 | default never executed: :default: never executed: default: | 0 | ||||||||||||
814 | ERR_put_error(46,(134),(155),__FILE__,753) | - | ||||||||||||
815 | ; | - | ||||||||||||
816 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
817 | } | - | ||||||||||||
818 | } | - | ||||||||||||
819 | - | |||||||||||||
820 | int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri) | - | ||||||||||||
821 | { | - | ||||||||||||
822 | switch (ri->type) { | - | ||||||||||||
823 | case executed 30 times by 1 test: 0:case 0: Executed by:
executed 30 times by 1 test: case 0: Executed by:
| 30 | ||||||||||||
824 | return executed 30 times by 1 test: cms_RecipientInfo_ktri_encrypt(cms, ri);return cms_RecipientInfo_ktri_encrypt(cms, ri); Executed by:
executed 30 times by 1 test: return cms_RecipientInfo_ktri_encrypt(cms, ri); Executed by:
| 30 | ||||||||||||
825 | - | |||||||||||||
826 | case executed 7 times by 1 test: 1:case 1: Executed by:
executed 7 times by 1 test: case 1: Executed by:
| 7 | ||||||||||||
827 | return executed 7 times by 1 test: cms_RecipientInfo_kari_encrypt(cms, ri);return cms_RecipientInfo_kari_encrypt(cms, ri); Executed by:
executed 7 times by 1 test: return cms_RecipientInfo_kari_encrypt(cms, ri); Executed by:
| 7 | ||||||||||||
828 | - | |||||||||||||
829 | case executed 2 times by 1 test: 2:case 2: Executed by:
executed 2 times by 1 test: case 2: Executed by:
| 2 | ||||||||||||
830 | return executed 2 times by 1 test: cms_RecipientInfo_kekri_encrypt(cms, ri);return cms_RecipientInfo_kekri_encrypt(cms, ri); Executed by:
executed 2 times by 1 test: return cms_RecipientInfo_kekri_encrypt(cms, ri); Executed by:
| 2 | ||||||||||||
831 | - | |||||||||||||
832 | case never executed: 3:case 3: never executed: case 3: | 0 | ||||||||||||
833 | return never executed: cms_RecipientInfo_pwri_crypt(cms, ri, 1);return cms_RecipientInfo_pwri_crypt(cms, ri, 1); never executed: return cms_RecipientInfo_pwri_crypt(cms, ri, 1); | 0 | ||||||||||||
834 | - | |||||||||||||
835 | default never executed: :default: never executed: default: | 0 | ||||||||||||
836 | ERR_put_error(46,(169),(154),__FILE__,775) | - | ||||||||||||
837 | ; | - | ||||||||||||
838 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
839 | } | - | ||||||||||||
840 | } | - | ||||||||||||
841 | - | |||||||||||||
842 | - | |||||||||||||
843 | - | |||||||||||||
844 | static void cms_env_set_originfo_version(CMS_EnvelopedData *env) | - | ||||||||||||
845 | { | - | ||||||||||||
846 | CMS_OriginatorInfo *org = env->originatorInfo; | - | ||||||||||||
847 | int i; | - | ||||||||||||
848 | if (org ==
| 0-20 | ||||||||||||
849 | ((void *)0)
| 0-20 | ||||||||||||
850 | ) | - | ||||||||||||
851 | return; executed 20 times by 1 test: return; Executed by:
| 20 | ||||||||||||
852 | for (i = 0; i < sk_CMS_CertificateChoices_num(org->certificates)
| 0 | ||||||||||||
853 | CMS_CertificateChoices *cch; | - | ||||||||||||
854 | cch = sk_CMS_CertificateChoices_value(org->certificates, i); | - | ||||||||||||
855 | if (cch->type == 4
| 0 | ||||||||||||
856 | env->version = 4; | - | ||||||||||||
857 | return; never executed: return; | 0 | ||||||||||||
858 | } else if (cch->type == 3
| 0 | ||||||||||||
859 | if (env->version < 3
| 0 | ||||||||||||
860 | env->version = 3; never executed: env->version = 3; | 0 | ||||||||||||
861 | } never executed: end of block | 0 | ||||||||||||
862 | } never executed: end of block | 0 | ||||||||||||
863 | - | |||||||||||||
864 | for (i = 0; i < sk_CMS_RevocationInfoChoice_num(org->crls)
| 0 | ||||||||||||
865 | CMS_RevocationInfoChoice *rch; | - | ||||||||||||
866 | rch = sk_CMS_RevocationInfoChoice_value(org->crls, i); | - | ||||||||||||
867 | if (rch->type == 1
| 0 | ||||||||||||
868 | env->version = 4; | - | ||||||||||||
869 | return; never executed: return; | 0 | ||||||||||||
870 | } | - | ||||||||||||
871 | } never executed: end of block | 0 | ||||||||||||
872 | } never executed: end of block | 0 | ||||||||||||
873 | - | |||||||||||||
874 | static void cms_env_set_version(CMS_EnvelopedData *env) | - | ||||||||||||
875 | { | - | ||||||||||||
876 | int i; | - | ||||||||||||
877 | CMS_RecipientInfo *ri; | - | ||||||||||||
878 | - | |||||||||||||
879 | - | |||||||||||||
880 | - | |||||||||||||
881 | - | |||||||||||||
882 | if (env->version >= 4
| 0-20 | ||||||||||||
883 | return; never executed: return; | 0 | ||||||||||||
884 | - | |||||||||||||
885 | cms_env_set_originfo_version(env); | - | ||||||||||||
886 | - | |||||||||||||
887 | if (env->version >= 3
| 0-20 | ||||||||||||
888 | return; never executed: return; | 0 | ||||||||||||
889 | - | |||||||||||||
890 | for (i = 0; i < sk_CMS_RecipientInfo_num(env->recipientInfos)
| 20-39 | ||||||||||||
891 | ri = sk_CMS_RecipientInfo_value(env->recipientInfos, i); | - | ||||||||||||
892 | if (ri->type == 3
| 0-39 | ||||||||||||
893 | env->version = 3; | - | ||||||||||||
894 | return; never executed: return; | 0 | ||||||||||||
895 | } else if (ri->type != 0
| 9-30 | ||||||||||||
896 | || ri->d.ktri->version != 0
| 3-27 | ||||||||||||
897 | env->version = 2; | - | ||||||||||||
898 | } executed 12 times by 1 test: end of block Executed by:
| 12 | ||||||||||||
899 | } executed 39 times by 1 test: end of block Executed by:
| 39 | ||||||||||||
900 | if (env->originatorInfo
| 0-20 | ||||||||||||
901 | env->version = 2; never executed: env->version = 2; | 0 | ||||||||||||
902 | if (env->version == 2
| 9-11 | ||||||||||||
903 | return; executed 9 times by 1 test: return; Executed by:
| 9 | ||||||||||||
904 | env->version = 0; | - | ||||||||||||
905 | } executed 11 times by 1 test: end of block Executed by:
| 11 | ||||||||||||
906 | - | |||||||||||||
907 | BIO *cms_EnvelopedData_init_bio(CMS_ContentInfo *cms) | - | ||||||||||||
908 | { | - | ||||||||||||
909 | CMS_EncryptedContentInfo *ec; | - | ||||||||||||
910 | struct stack_st_CMS_RecipientInfo *rinfos; | - | ||||||||||||
911 | CMS_RecipientInfo *ri; | - | ||||||||||||
912 | int i, ok = 0; | - | ||||||||||||
913 | BIO *ret; | - | ||||||||||||
914 | - | |||||||||||||
915 | - | |||||||||||||
916 | - | |||||||||||||
917 | ec = cms->d.envelopedData->encryptedContentInfo; | - | ||||||||||||
918 | ret = cms_EncryptedContent_init_bio(ec); | - | ||||||||||||
919 | - | |||||||||||||
920 | - | |||||||||||||
921 | - | |||||||||||||
922 | if (!ret
| 0-40 | ||||||||||||
923 | return executed 20 times by 1 test: ret;return ret; Executed by:
executed 20 times by 1 test: return ret; Executed by:
| 20 | ||||||||||||
924 | - | |||||||||||||
925 | - | |||||||||||||
926 | - | |||||||||||||
927 | rinfos = cms->d.envelopedData->recipientInfos; | - | ||||||||||||
928 | - | |||||||||||||
929 | for (i = 0; i < sk_CMS_RecipientInfo_num(rinfos)
| 20-39 | ||||||||||||
930 | ri = sk_CMS_RecipientInfo_value(rinfos, i); | - | ||||||||||||
931 | if (CMS_RecipientInfo_encrypt(cms, ri) <= 0
| 0-39 | ||||||||||||
932 | ERR_put_error(46,(125),(116),__FILE__,869) | - | ||||||||||||
933 | ; | - | ||||||||||||
934 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
935 | } | - | ||||||||||||
936 | } executed 39 times by 1 test: end of block Executed by:
| 39 | ||||||||||||
937 | cms_env_set_version(cms->d.envelopedData); | - | ||||||||||||
938 | - | |||||||||||||
939 | ok = 1; | - | ||||||||||||
940 | - | |||||||||||||
941 | err: code before this statement executed 20 times by 1 test: err: Executed by:
| 20 | ||||||||||||
942 | ec->cipher = | - | ||||||||||||
943 | ((void *)0) | - | ||||||||||||
944 | ; | - | ||||||||||||
945 | CRYPTO_clear_free(ec->key, ec->keylen, __FILE__, 879); | - | ||||||||||||
946 | ec->key = | - | ||||||||||||
947 | ((void *)0) | - | ||||||||||||
948 | ; | - | ||||||||||||
949 | ec->keylen = 0; | - | ||||||||||||
950 | if (ok
| 0-20 | ||||||||||||
951 | return executed 20 times by 1 test: ret;return ret; Executed by:
executed 20 times by 1 test: return ret; Executed by:
| 20 | ||||||||||||
952 | BIO_free(ret); | - | ||||||||||||
953 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||
954 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||
955 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||
956 | - | |||||||||||||
957 | } | - | ||||||||||||
958 | - | |||||||||||||
959 | - | |||||||||||||
960 | - | |||||||||||||
961 | - | |||||||||||||
962 | - | |||||||||||||
963 | - | |||||||||||||
964 | int cms_pkey_get_ri_type(EVP_PKEY *pk) | - | ||||||||||||
965 | { | - | ||||||||||||
966 | if (pk->ameth
| 0-55 | ||||||||||||
967 | int i, r; | - | ||||||||||||
968 | i = pk->ameth->pkey_ctrl(pk, 0x8, 0, &r); | - | ||||||||||||
969 | if (i > 0
| 0-55 | ||||||||||||
970 | return executed 55 times by 1 test: r;return r; Executed by:
executed 55 times by 1 test: return r; Executed by:
| 55 | ||||||||||||
971 | } never executed: end of block | 0 | ||||||||||||
972 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
973 | } | - | ||||||||||||
Switch to Source code | Preprocessed file |