| 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 blockExecuted 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 blockExecuted by:
| 3 | ||||||||||||
| 145 | ktri->version = 0; | - | ||||||||||||
| 146 | idtype = 0; | - | ||||||||||||
| 147 | } executed 27 times by 1 test: end of blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted by:
| 12 | ||||||||||||
| 899 | } executed 39 times by 1 test: end of blockExecuted 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 blockExecuted 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 blockExecuted 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 |