OpenCoverage

cms_asn1.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/cms/cms_asn1.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.-
3 *-
4 * Licensed under the OpenSSL license (the "License"). You may not use-
5 * this file except in compliance with the License. You can obtain a copy-
6 * in the file LICENSE in the source distribution or at-
7 * https://www.openssl.org/source/license.html-
8 */-
9-
10#include <openssl/asn1t.h>-
11#include <openssl/pem.h>-
12#include <openssl/x509v3.h>-
13#include <openssl/cms.h>-
14#include "cms_lcl.h"-
15-
16-
17ASN1_SEQUENCE(CMS_IssuerAndSerialNumber) = {-
18 ASN1_SIMPLE(CMS_IssuerAndSerialNumber, issuer, X509_NAME),-
19 ASN1_SIMPLE(CMS_IssuerAndSerialNumber, serialNumber, ASN1_INTEGER)-
20} ASN1_SEQUENCE_END(CMS_IssuerAndSerialNumber)-
21-
22ASN1_SEQUENCE(CMS_OtherCertificateFormat) = {-
23 ASN1_SIMPLE(CMS_OtherCertificateFormat, otherCertFormat, ASN1_OBJECT),-
24 ASN1_OPT(CMS_OtherCertificateFormat, otherCert, ASN1_ANY)-
25} static_ASN1_SEQUENCE_END(CMS_OtherCertificateFormat)-
26-
27ASN1_CHOICE(CMS_CertificateChoices) = {-
28 ASN1_SIMPLE(CMS_CertificateChoices, d.certificate, X509),-
29 ASN1_IMP(CMS_CertificateChoices, d.extendedCertificate, ASN1_SEQUENCE, 0),-
30 ASN1_IMP(CMS_CertificateChoices, d.v1AttrCert, ASN1_SEQUENCE, 1),-
31 ASN1_IMP(CMS_CertificateChoices, d.v2AttrCert, ASN1_SEQUENCE, 2),-
32 ASN1_IMP(CMS_CertificateChoices, d.other, CMS_OtherCertificateFormat, 3)-
33} ASN1_CHOICE_END(CMS_CertificateChoices)-
34-
35ASN1_CHOICE(CMS_SignerIdentifier) = {-
36 ASN1_SIMPLE(CMS_SignerIdentifier, d.issuerAndSerialNumber, CMS_IssuerAndSerialNumber),-
37 ASN1_IMP(CMS_SignerIdentifier, d.subjectKeyIdentifier, ASN1_OCTET_STRING, 0)-
38} static_ASN1_CHOICE_END(CMS_SignerIdentifier)-
39-
40ASN1_NDEF_SEQUENCE(CMS_EncapsulatedContentInfo) = {-
41 ASN1_SIMPLE(CMS_EncapsulatedContentInfo, eContentType, ASN1_OBJECT),-
42 ASN1_NDEF_EXP_OPT(CMS_EncapsulatedContentInfo, eContent, ASN1_OCTET_STRING_NDEF, 0)-
43} static_ASN1_NDEF_SEQUENCE_END(CMS_EncapsulatedContentInfo)-
44-
45/* Minor tweak to operation: free up signer key, cert */-
46static int cms_si_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,-
47 void *exarg)-
48{-
49 if (operation == ASN1_OP_FREE_POST) {
operation == 3Description
TRUEevaluated 1669 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 15598 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1669-15598
50 CMS_SignerInfo *si = (CMS_SignerInfo *)*pval;-
51 EVP_PKEY_free(si->pkey);-
52 X509_free(si->signer);-
53 EVP_MD_CTX_free(si->mctx);-
54 }
executed 1669 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1669
55 return 1;
executed 17267 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
17267
56}-
57-
58ASN1_SEQUENCE_cb(CMS_SignerInfo, cms_si_cb) = {-
59 ASN1_EMBED(CMS_SignerInfo, version, INT32),-
60 ASN1_SIMPLE(CMS_SignerInfo, sid, CMS_SignerIdentifier),-
61 ASN1_SIMPLE(CMS_SignerInfo, digestAlgorithm, X509_ALGOR),-
62 ASN1_IMP_SET_OF_OPT(CMS_SignerInfo, signedAttrs, X509_ATTRIBUTE, 0),-
63 ASN1_SIMPLE(CMS_SignerInfo, signatureAlgorithm, X509_ALGOR),-
64 ASN1_SIMPLE(CMS_SignerInfo, signature, ASN1_OCTET_STRING),-
65 ASN1_IMP_SET_OF_OPT(CMS_SignerInfo, unsignedAttrs, X509_ATTRIBUTE, 1)-
66} ASN1_SEQUENCE_END_cb(CMS_SignerInfo, CMS_SignerInfo)-
67-
68ASN1_SEQUENCE(CMS_OtherRevocationInfoFormat) = {-
69 ASN1_SIMPLE(CMS_OtherRevocationInfoFormat, otherRevInfoFormat, ASN1_OBJECT),-
70 ASN1_OPT(CMS_OtherRevocationInfoFormat, otherRevInfo, ASN1_ANY)-
71} static_ASN1_SEQUENCE_END(CMS_OtherRevocationInfoFormat)-
72-
73ASN1_CHOICE(CMS_RevocationInfoChoice) = {-
74 ASN1_SIMPLE(CMS_RevocationInfoChoice, d.crl, X509_CRL),-
75 ASN1_IMP(CMS_RevocationInfoChoice, d.other, CMS_OtherRevocationInfoFormat, 1)-
76} ASN1_CHOICE_END(CMS_RevocationInfoChoice)-
77-
78ASN1_NDEF_SEQUENCE(CMS_SignedData) = {-
79 ASN1_EMBED(CMS_SignedData, version, INT32),-
80 ASN1_SET_OF(CMS_SignedData, digestAlgorithms, X509_ALGOR),-
81 ASN1_SIMPLE(CMS_SignedData, encapContentInfo, CMS_EncapsulatedContentInfo),-
82 ASN1_IMP_SET_OF_OPT(CMS_SignedData, certificates, CMS_CertificateChoices, 0),-
83 ASN1_IMP_SET_OF_OPT(CMS_SignedData, crls, CMS_RevocationInfoChoice, 1),-
84 ASN1_SET_OF(CMS_SignedData, signerInfos, CMS_SignerInfo)-
85} ASN1_NDEF_SEQUENCE_END(CMS_SignedData)-
86-
87ASN1_SEQUENCE(CMS_OriginatorInfo) = {-
88 ASN1_IMP_SET_OF_OPT(CMS_OriginatorInfo, certificates, CMS_CertificateChoices, 0),-
89 ASN1_IMP_SET_OF_OPT(CMS_OriginatorInfo, crls, CMS_RevocationInfoChoice, 1)-
90} static_ASN1_SEQUENCE_END(CMS_OriginatorInfo)-
91-
92ASN1_NDEF_SEQUENCE(CMS_EncryptedContentInfo) = {-
93 ASN1_SIMPLE(CMS_EncryptedContentInfo, contentType, ASN1_OBJECT),-
94 ASN1_SIMPLE(CMS_EncryptedContentInfo, contentEncryptionAlgorithm, X509_ALGOR),-
95 ASN1_IMP_OPT(CMS_EncryptedContentInfo, encryptedContent, ASN1_OCTET_STRING_NDEF, 0)-
96} static_ASN1_NDEF_SEQUENCE_END(CMS_EncryptedContentInfo)-
97-
98ASN1_SEQUENCE(CMS_KeyTransRecipientInfo) = {-
99 ASN1_EMBED(CMS_KeyTransRecipientInfo, version, INT32),-
100 ASN1_SIMPLE(CMS_KeyTransRecipientInfo, rid, CMS_SignerIdentifier),-
101 ASN1_SIMPLE(CMS_KeyTransRecipientInfo, keyEncryptionAlgorithm, X509_ALGOR),-
102 ASN1_SIMPLE(CMS_KeyTransRecipientInfo, encryptedKey, ASN1_OCTET_STRING)-
103} ASN1_SEQUENCE_END(CMS_KeyTransRecipientInfo)-
104-
105ASN1_SEQUENCE(CMS_OtherKeyAttribute) = {-
106 ASN1_SIMPLE(CMS_OtherKeyAttribute, keyAttrId, ASN1_OBJECT),-
107 ASN1_OPT(CMS_OtherKeyAttribute, keyAttr, ASN1_ANY)-
108} ASN1_SEQUENCE_END(CMS_OtherKeyAttribute)-
109-
110ASN1_SEQUENCE(CMS_RecipientKeyIdentifier) = {-
111 ASN1_SIMPLE(CMS_RecipientKeyIdentifier, subjectKeyIdentifier, ASN1_OCTET_STRING),-
112 ASN1_OPT(CMS_RecipientKeyIdentifier, date, ASN1_GENERALIZEDTIME),-
113 ASN1_OPT(CMS_RecipientKeyIdentifier, other, CMS_OtherKeyAttribute)-
114} ASN1_SEQUENCE_END(CMS_RecipientKeyIdentifier)-
115-
116ASN1_CHOICE(CMS_KeyAgreeRecipientIdentifier) = {-
117 ASN1_SIMPLE(CMS_KeyAgreeRecipientIdentifier, d.issuerAndSerialNumber, CMS_IssuerAndSerialNumber),-
118 ASN1_IMP(CMS_KeyAgreeRecipientIdentifier, d.rKeyId, CMS_RecipientKeyIdentifier, 0)-
119} static_ASN1_CHOICE_END(CMS_KeyAgreeRecipientIdentifier)-
120-
121static int cms_rek_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,-
122 void *exarg)-
123{-
124 CMS_RecipientEncryptedKey *rek = (CMS_RecipientEncryptedKey *)*pval;-
125 if (operation == ASN1_OP_FREE_POST) {
operation == 3Description
TRUEevaluated 1044 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 5310 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1044-5310
126 EVP_PKEY_free(rek->pkey);-
127 }
executed 1044 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1044
128 return 1;
executed 6354 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
6354
129}-
130-
131ASN1_SEQUENCE_cb(CMS_RecipientEncryptedKey, cms_rek_cb) = {-
132 ASN1_SIMPLE(CMS_RecipientEncryptedKey, rid, CMS_KeyAgreeRecipientIdentifier),-
133 ASN1_SIMPLE(CMS_RecipientEncryptedKey, encryptedKey, ASN1_OCTET_STRING)-
134} ASN1_SEQUENCE_END_cb(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey)-
135-
136ASN1_SEQUENCE(CMS_OriginatorPublicKey) = {-
137 ASN1_SIMPLE(CMS_OriginatorPublicKey, algorithm, X509_ALGOR),-
138 ASN1_SIMPLE(CMS_OriginatorPublicKey, publicKey, ASN1_BIT_STRING)-
139} ASN1_SEQUENCE_END(CMS_OriginatorPublicKey)-
140-
141ASN1_CHOICE(CMS_OriginatorIdentifierOrKey) = {-
142 ASN1_SIMPLE(CMS_OriginatorIdentifierOrKey, d.issuerAndSerialNumber, CMS_IssuerAndSerialNumber),-
143 ASN1_IMP(CMS_OriginatorIdentifierOrKey, d.subjectKeyIdentifier, ASN1_OCTET_STRING, 0),-
144 ASN1_IMP(CMS_OriginatorIdentifierOrKey, d.originatorKey, CMS_OriginatorPublicKey, 1)-
145} static_ASN1_CHOICE_END(CMS_OriginatorIdentifierOrKey)-
146-
147static int cms_kari_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,-
148 void *exarg)-
149{-
150 CMS_KeyAgreeRecipientInfo *kari = (CMS_KeyAgreeRecipientInfo *)*pval;-
151 if (operation == ASN1_OP_NEW_POST) {
operation == 1Description
TRUEevaluated 2185 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 21724 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2185-21724
152 kari->ctx = EVP_CIPHER_CTX_new();-
153 if (kari->ctx == NULL)
kari->ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2185 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2185
154 return 0;
never executed: return 0;
0
155 EVP_CIPHER_CTX_set_flags(kari->ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);-
156 kari->pctx = NULL;-
157 } else if (operation == ASN1_OP_FREE_POST) {
executed 2185 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
operation == 3Description
TRUEevaluated 2185 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 19539 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2185-19539
158 EVP_PKEY_CTX_free(kari->pctx);-
159 EVP_CIPHER_CTX_free(kari->ctx);-
160 }
executed 2185 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2185
161 return 1;
executed 23909 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
23909
162}-
163-
164ASN1_SEQUENCE_cb(CMS_KeyAgreeRecipientInfo, cms_kari_cb) = {-
165 ASN1_EMBED(CMS_KeyAgreeRecipientInfo, version, INT32),-
166 ASN1_EXP(CMS_KeyAgreeRecipientInfo, originator, CMS_OriginatorIdentifierOrKey, 0),-
167 ASN1_EXP_OPT(CMS_KeyAgreeRecipientInfo, ukm, ASN1_OCTET_STRING, 1),-
168 ASN1_SIMPLE(CMS_KeyAgreeRecipientInfo, keyEncryptionAlgorithm, X509_ALGOR),-
169 ASN1_SEQUENCE_OF(CMS_KeyAgreeRecipientInfo, recipientEncryptedKeys, CMS_RecipientEncryptedKey)-
170} ASN1_SEQUENCE_END_cb(CMS_KeyAgreeRecipientInfo, CMS_KeyAgreeRecipientInfo)-
171-
172ASN1_SEQUENCE(CMS_KEKIdentifier) = {-
173 ASN1_SIMPLE(CMS_KEKIdentifier, keyIdentifier, ASN1_OCTET_STRING),-
174 ASN1_OPT(CMS_KEKIdentifier, date, ASN1_GENERALIZEDTIME),-
175 ASN1_OPT(CMS_KEKIdentifier, other, CMS_OtherKeyAttribute)-
176} static_ASN1_SEQUENCE_END(CMS_KEKIdentifier)-
177-
178ASN1_SEQUENCE(CMS_KEKRecipientInfo) = {-
179 ASN1_EMBED(CMS_KEKRecipientInfo, version, INT32),-
180 ASN1_SIMPLE(CMS_KEKRecipientInfo, kekid, CMS_KEKIdentifier),-
181 ASN1_SIMPLE(CMS_KEKRecipientInfo, keyEncryptionAlgorithm, X509_ALGOR),-
182 ASN1_SIMPLE(CMS_KEKRecipientInfo, encryptedKey, ASN1_OCTET_STRING)-
183} ASN1_SEQUENCE_END(CMS_KEKRecipientInfo)-
184-
185ASN1_SEQUENCE(CMS_PasswordRecipientInfo) = {-
186 ASN1_EMBED(CMS_PasswordRecipientInfo, version, INT32),-
187 ASN1_IMP_OPT(CMS_PasswordRecipientInfo, keyDerivationAlgorithm, X509_ALGOR, 0),-
188 ASN1_SIMPLE(CMS_PasswordRecipientInfo, keyEncryptionAlgorithm, X509_ALGOR),-
189 ASN1_SIMPLE(CMS_PasswordRecipientInfo, encryptedKey, ASN1_OCTET_STRING)-
190} ASN1_SEQUENCE_END(CMS_PasswordRecipientInfo)-
191-
192ASN1_SEQUENCE(CMS_OtherRecipientInfo) = {-
193 ASN1_SIMPLE(CMS_OtherRecipientInfo, oriType, ASN1_OBJECT),-
194 ASN1_OPT(CMS_OtherRecipientInfo, oriValue, ASN1_ANY)-
195} static_ASN1_SEQUENCE_END(CMS_OtherRecipientInfo)-
196-
197/* Free up RecipientInfo additional data */-
198static int cms_ri_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,-
199 void *exarg)-
200{-
201 if (operation == ASN1_OP_FREE_PRE) {
operation == 2Description
TRUEevaluated 10183 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 80416 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
10183-80416
202 CMS_RecipientInfo *ri = (CMS_RecipientInfo *)*pval;-
203 if (ri->type == CMS_RECIPINFO_TRANS) {
ri->type == 0Description
TRUEevaluated 809 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 9374 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
809-9374
204 CMS_KeyTransRecipientInfo *ktri = ri->d.ktri;-
205 EVP_PKEY_free(ktri->pkey);-
206 X509_free(ktri->recip);-
207 EVP_PKEY_CTX_free(ktri->pctx);-
208 } else if (ri->type == CMS_RECIPINFO_KEK) {
executed 809 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
ri->type == 2Description
TRUEevaluated 638 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 8736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
638-8736
209 CMS_KEKRecipientInfo *kekri = ri->d.kekri;-
210 OPENSSL_clear_free(kekri->key, kekri->keylen);-
211 } else if (ri->type == CMS_RECIPINFO_PASS) {
executed 638 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
ri->type == 3Description
TRUEevaluated 4073 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 4663 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
638-4663
212 CMS_PasswordRecipientInfo *pwri = ri->d.pwri;-
213 OPENSSL_clear_free(pwri->pass, pwri->passlen);-
214 }
executed 4073 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
4073
215 }
executed 10183 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
10183
216 return 1;
executed 90599 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
90599
217}-
218-
219ASN1_CHOICE_cb(CMS_RecipientInfo, cms_ri_cb) = {-
220 ASN1_SIMPLE(CMS_RecipientInfo, d.ktri, CMS_KeyTransRecipientInfo),-
221 ASN1_IMP(CMS_RecipientInfo, d.kari, CMS_KeyAgreeRecipientInfo, 1),-
222 ASN1_IMP(CMS_RecipientInfo, d.kekri, CMS_KEKRecipientInfo, 2),-
223 ASN1_IMP(CMS_RecipientInfo, d.pwri, CMS_PasswordRecipientInfo, 3),-
224 ASN1_IMP(CMS_RecipientInfo, d.ori, CMS_OtherRecipientInfo, 4)-
225} ASN1_CHOICE_END_cb(CMS_RecipientInfo, CMS_RecipientInfo, type)-
226-
227ASN1_NDEF_SEQUENCE(CMS_EnvelopedData) = {-
228 ASN1_EMBED(CMS_EnvelopedData, version, INT32),-
229 ASN1_IMP_OPT(CMS_EnvelopedData, originatorInfo, CMS_OriginatorInfo, 0),-
230 ASN1_SET_OF(CMS_EnvelopedData, recipientInfos, CMS_RecipientInfo),-
231 ASN1_SIMPLE(CMS_EnvelopedData, encryptedContentInfo, CMS_EncryptedContentInfo),-
232 ASN1_IMP_SET_OF_OPT(CMS_EnvelopedData, unprotectedAttrs, X509_ATTRIBUTE, 1)-
233} ASN1_NDEF_SEQUENCE_END(CMS_EnvelopedData)-
234-
235ASN1_NDEF_SEQUENCE(CMS_DigestedData) = {-
236 ASN1_EMBED(CMS_DigestedData, version, INT32),-
237 ASN1_SIMPLE(CMS_DigestedData, digestAlgorithm, X509_ALGOR),-
238 ASN1_SIMPLE(CMS_DigestedData, encapContentInfo, CMS_EncapsulatedContentInfo),-
239 ASN1_SIMPLE(CMS_DigestedData, digest, ASN1_OCTET_STRING)-
240} ASN1_NDEF_SEQUENCE_END(CMS_DigestedData)-
241-
242ASN1_NDEF_SEQUENCE(CMS_EncryptedData) = {-
243 ASN1_EMBED(CMS_EncryptedData, version, INT32),-
244 ASN1_SIMPLE(CMS_EncryptedData, encryptedContentInfo, CMS_EncryptedContentInfo),-
245 ASN1_IMP_SET_OF_OPT(CMS_EncryptedData, unprotectedAttrs, X509_ATTRIBUTE, 1)-
246} ASN1_NDEF_SEQUENCE_END(CMS_EncryptedData)-
247-
248ASN1_NDEF_SEQUENCE(CMS_AuthenticatedData) = {-
249 ASN1_EMBED(CMS_AuthenticatedData, version, INT32),-
250 ASN1_IMP_OPT(CMS_AuthenticatedData, originatorInfo, CMS_OriginatorInfo, 0),-
251 ASN1_SET_OF(CMS_AuthenticatedData, recipientInfos, CMS_RecipientInfo),-
252 ASN1_SIMPLE(CMS_AuthenticatedData, macAlgorithm, X509_ALGOR),-
253 ASN1_IMP(CMS_AuthenticatedData, digestAlgorithm, X509_ALGOR, 1),-
254 ASN1_SIMPLE(CMS_AuthenticatedData, encapContentInfo, CMS_EncapsulatedContentInfo),-
255 ASN1_IMP_SET_OF_OPT(CMS_AuthenticatedData, authAttrs, X509_ALGOR, 2),-
256 ASN1_SIMPLE(CMS_AuthenticatedData, mac, ASN1_OCTET_STRING),-
257 ASN1_IMP_SET_OF_OPT(CMS_AuthenticatedData, unauthAttrs, X509_ALGOR, 3)-
258} static_ASN1_NDEF_SEQUENCE_END(CMS_AuthenticatedData)-
259-
260ASN1_NDEF_SEQUENCE(CMS_CompressedData) = {-
261 ASN1_EMBED(CMS_CompressedData, version, INT32),-
262 ASN1_SIMPLE(CMS_CompressedData, compressionAlgorithm, X509_ALGOR),-
263 ASN1_SIMPLE(CMS_CompressedData, encapContentInfo, CMS_EncapsulatedContentInfo),-
264} ASN1_NDEF_SEQUENCE_END(CMS_CompressedData)-
265-
266/* This is the ANY DEFINED BY table for the top level ContentInfo structure */-
267-
268ASN1_ADB_TEMPLATE(cms_default) = ASN1_EXP(CMS_ContentInfo, d.other, ASN1_ANY, 0);-
269-
270ASN1_ADB(CMS_ContentInfo) = {-
271 ADB_ENTRY(NID_pkcs7_data, ASN1_NDEF_EXP(CMS_ContentInfo, d.data, ASN1_OCTET_STRING_NDEF, 0)),-
272 ADB_ENTRY(NID_pkcs7_signed, ASN1_NDEF_EXP(CMS_ContentInfo, d.signedData, CMS_SignedData, 0)),-
273 ADB_ENTRY(NID_pkcs7_enveloped, ASN1_NDEF_EXP(CMS_ContentInfo, d.envelopedData, CMS_EnvelopedData, 0)),-
274 ADB_ENTRY(NID_pkcs7_digest, ASN1_NDEF_EXP(CMS_ContentInfo, d.digestedData, CMS_DigestedData, 0)),-
275 ADB_ENTRY(NID_pkcs7_encrypted, ASN1_NDEF_EXP(CMS_ContentInfo, d.encryptedData, CMS_EncryptedData, 0)),-
276 ADB_ENTRY(NID_id_smime_ct_authData, ASN1_NDEF_EXP(CMS_ContentInfo, d.authenticatedData, CMS_AuthenticatedData, 0)),-
277 ADB_ENTRY(NID_id_smime_ct_compressedData, ASN1_NDEF_EXP(CMS_ContentInfo, d.compressedData, CMS_CompressedData, 0)),-
278} ASN1_ADB_END(CMS_ContentInfo, 0, contentType, 0, &cms_default_tt, NULL);-
279-
280/* CMS streaming support */-
281static int cms_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,-
282 void *exarg)-
283{-
284 ASN1_STREAM_ARG *sarg = exarg;-
285 CMS_ContentInfo *cms = NULL;-
286 if (pval)
pvalDescription
TRUEevaluated 24507 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-24507
287 cms = (CMS_ContentInfo *)*pval;
executed 24507 times by 1 test: cms = (CMS_ContentInfo *)*pval;
Executed by:
  • libcrypto.so.1.1
24507
288 else-
289 return 1;
never executed: return 1;
0
290 switch (operation) {-
291-
292 case ASN1_OP_STREAM_PRE:
executed 36 times by 1 test: case 10:
Executed by:
  • libcrypto.so.1.1
36
293 if (CMS_stream(&sarg->boundary, cms) <= 0)
CMS_stream(&sa...ary, cms) <= 0Description
TRUEnever evaluated
FALSEevaluated 36 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-36
294 return 0;
never executed: return 0;
0
295 /* fall thru */-
296 case ASN1_OP_DETACHED_PRE:
code before this statement executed 36 times by 1 test: case 12:
Executed by:
  • libcrypto.so.1.1
executed 4 times by 1 test: case 12:
Executed by:
  • libcrypto.so.1.1
4-36
297 sarg->ndef_bio = CMS_dataInit(cms, sarg->out);-
298 if (!sarg->ndef_bio)
!sarg->ndef_bioDescription
TRUEnever evaluated
FALSEevaluated 40 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-40
299 return 0;
never executed: return 0;
0
300 break;
executed 40 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
40
301-
302 case ASN1_OP_STREAM_POST:
executed 36 times by 1 test: case 11:
Executed by:
  • libcrypto.so.1.1
36
303 case ASN1_OP_DETACHED_POST:
executed 4 times by 1 test: case 13:
Executed by:
  • libcrypto.so.1.1
4
304 if (CMS_dataFinal(cms, sarg->ndef_bio) <= 0)
CMS_dataFinal(...ndef_bio) <= 0Description
TRUEnever evaluated
FALSEevaluated 40 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-40
305 return 0;
never executed: return 0;
0
306 break;
executed 40 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
40
307-
308 }-
309 return 1;
executed 24507 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
24507
310}-
311-
312ASN1_NDEF_SEQUENCE_cb(CMS_ContentInfo, cms_cb) = {-
313 ASN1_SIMPLE(CMS_ContentInfo, contentType, ASN1_OBJECT),-
314 ASN1_ADB_OBJECT(CMS_ContentInfo)-
315} ASN1_NDEF_SEQUENCE_END_cb(CMS_ContentInfo, CMS_ContentInfo)-
316-
317/* Specials for signed attributes */-
318-
319/*-
320 * When signing attributes we want to reorder them to match the sorted-
321 * encoding.-
322 */-
323-
324ASN1_ITEM_TEMPLATE(CMS_Attributes_Sign) =-
325 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_ORDER, 0, CMS_ATTRIBUTES, X509_ATTRIBUTE)-
326ASN1_ITEM_TEMPLATE_END(CMS_Attributes_Sign)-
327-
328/*-
329 * When verifying attributes we need to use the received order. So we use-
330 * SEQUENCE OF and tag it to SET OF-
331 */-
332-
333ASN1_ITEM_TEMPLATE(CMS_Attributes_Verify) =-
334 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_IMPTAG | ASN1_TFLG_UNIVERSAL,-
335 V_ASN1_SET, CMS_ATTRIBUTES, X509_ATTRIBUTE)-
336ASN1_ITEM_TEMPLATE_END(CMS_Attributes_Verify)-
337-
338-
339-
340ASN1_CHOICE(CMS_ReceiptsFrom) = {-
341 ASN1_IMP_EMBED(CMS_ReceiptsFrom, d.allOrFirstTier, INT32, 0),-
342 ASN1_IMP_SEQUENCE_OF(CMS_ReceiptsFrom, d.receiptList, GENERAL_NAMES, 1)-
343} static_ASN1_CHOICE_END(CMS_ReceiptsFrom)-
344-
345ASN1_SEQUENCE(CMS_ReceiptRequest) = {-
346 ASN1_SIMPLE(CMS_ReceiptRequest, signedContentIdentifier, ASN1_OCTET_STRING),-
347 ASN1_SIMPLE(CMS_ReceiptRequest, receiptsFrom, CMS_ReceiptsFrom),-
348 ASN1_SEQUENCE_OF(CMS_ReceiptRequest, receiptsTo, GENERAL_NAMES)-
349} ASN1_SEQUENCE_END(CMS_ReceiptRequest)-
350-
351ASN1_SEQUENCE(CMS_Receipt) = {-
352 ASN1_EMBED(CMS_Receipt, version, INT32),-
353 ASN1_SIMPLE(CMS_Receipt, contentType, ASN1_OBJECT),-
354 ASN1_SIMPLE(CMS_Receipt, signedContentIdentifier, ASN1_OCTET_STRING),-
355 ASN1_SIMPLE(CMS_Receipt, originatorSignatureValue, ASN1_OCTET_STRING)-
356} ASN1_SEQUENCE_END(CMS_Receipt)-
357-
358/*-
359 * Utilities to encode the CMS_SharedInfo structure used during key-
360 * derivation.-
361 */-
362-
363typedef struct {-
364 X509_ALGOR *keyInfo;-
365 ASN1_OCTET_STRING *entityUInfo;-
366 ASN1_OCTET_STRING *suppPubInfo;-
367} CMS_SharedInfo;-
368-
369ASN1_SEQUENCE(CMS_SharedInfo) = {-
370 ASN1_SIMPLE(CMS_SharedInfo, keyInfo, X509_ALGOR),-
371 ASN1_EXP_OPT(CMS_SharedInfo, entityUInfo, ASN1_OCTET_STRING, 0),-
372 ASN1_EXP_OPT(CMS_SharedInfo, suppPubInfo, ASN1_OCTET_STRING, 2),-
373} static_ASN1_SEQUENCE_END(CMS_SharedInfo)-
374-
375int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg,-
376 ASN1_OCTET_STRING *ukm, int keylen)-
377{-
378 union {-
379 CMS_SharedInfo *pecsi;-
380 ASN1_VALUE *a;-
381 } intsi = {-
382 NULL-
383 };-
384-
385 ASN1_OCTET_STRING oklen;-
386 unsigned char kl[4];-
387 CMS_SharedInfo ecsi;-
388-
389 keylen <<= 3;-
390 kl[0] = (keylen >> 24) & 0xff;-
391 kl[1] = (keylen >> 16) & 0xff;-
392 kl[2] = (keylen >> 8) & 0xff;-
393 kl[3] = keylen & 0xff;-
394 oklen.length = 4;-
395 oklen.data = kl;-
396 oklen.type = V_ASN1_OCTET_STRING;-
397 oklen.flags = 0;-
398 ecsi.keyInfo = kekalg;-
399 ecsi.entityUInfo = ukm;-
400 ecsi.suppPubInfo = &oklen;-
401 intsi.pecsi = &ecsi;-
402 return ASN1_item_i2d(intsi.a, pder, ASN1_ITEM_rptr(CMS_SharedInfo));
executed 13 times by 1 test: return ASN1_item_i2d(intsi.a, pder, (&(CMS_SharedInfo_it)));
Executed by:
  • libcrypto.so.1.1
13
403}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2