| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/pkcs12/p12_mutl.c |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||
| 2 | - | |||||||||||||
| 3 | int PKCS12_mac_present(const PKCS12 *p12) | - | ||||||||||||
| 4 | { | - | ||||||||||||
| 5 | return never executed: p12->macreturn p12->mac ? 1 : 0;
never executed: return p12->mac ? 1 : 0; | 0 | ||||||||||||
| 6 | } | - | ||||||||||||
| 7 | - | |||||||||||||
| 8 | void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, | - | ||||||||||||
| 9 | const X509_ALGOR **pmacalg, | - | ||||||||||||
| 10 | const ASN1_OCTET_STRING **psalt, | - | ||||||||||||
| 11 | const ASN1_INTEGER **piter, | - | ||||||||||||
| 12 | const PKCS12 *p12) | - | ||||||||||||
| 13 | { | - | ||||||||||||
| 14 | if (p12->mac
| 0 | ||||||||||||
| 15 | X509_SIG_get0(p12->mac->dinfo, pmacalg, pmac); | - | ||||||||||||
| 16 | if (psalt
| 0 | ||||||||||||
| 17 | * never executed: psalt = p12->mac->salt;*psalt = p12->mac->salt;never executed: *psalt = p12->mac->salt; | 0 | ||||||||||||
| 18 | if (piter
| 0 | ||||||||||||
| 19 | * never executed: piter = p12->mac->iter;*piter = p12->mac->iter;never executed: *piter = p12->mac->iter; | 0 | ||||||||||||
| 20 | } never executed: else {end of block | 0 | ||||||||||||
| 21 | if (pmac
| 0 | ||||||||||||
| 22 | * never executed: pmac = *pmac = ((void *)0) ;never executed: *pmac = ((void *)0) ; | 0 | ||||||||||||
| 23 | ((void *)0) never executed: *pmac = ((void *)0) ; | 0 | ||||||||||||
| 24 | ; never executed: *pmac = ((void *)0) ; | 0 | ||||||||||||
| 25 | if (pmacalg
| 0 | ||||||||||||
| 26 | * never executed: pmacalg = *pmacalg = ((void *)0) ;never executed: *pmacalg = ((void *)0) ; | 0 | ||||||||||||
| 27 | ((void *)0) never executed: *pmacalg = ((void *)0) ; | 0 | ||||||||||||
| 28 | ; never executed: *pmacalg = ((void *)0) ; | 0 | ||||||||||||
| 29 | if (psalt
| 0 | ||||||||||||
| 30 | * never executed: psalt = *psalt = ((void *)0) ;never executed: *psalt = ((void *)0) ; | 0 | ||||||||||||
| 31 | ((void *)0) never executed: *psalt = ((void *)0) ; | 0 | ||||||||||||
| 32 | ; never executed: *psalt = ((void *)0) ; | 0 | ||||||||||||
| 33 | if (piter
| 0 | ||||||||||||
| 34 | * never executed: piter = *piter = ((void *)0) ;never executed: *piter = ((void *)0) ; | 0 | ||||||||||||
| 35 | ((void *)0) never executed: *piter = ((void *)0) ; | 0 | ||||||||||||
| 36 | ; never executed: *piter = ((void *)0) ; | 0 | ||||||||||||
| 37 | } never executed: end of block | 0 | ||||||||||||
| 38 | } | - | ||||||||||||
| 39 | - | |||||||||||||
| 40 | - | |||||||||||||
| 41 | - | |||||||||||||
| 42 | static int pkcs12_gen_gost_mac_key(const char *pass, int passlen, | - | ||||||||||||
| 43 | const unsigned char *salt, int saltlen, | - | ||||||||||||
| 44 | int iter, int keylen, unsigned char *key, | - | ||||||||||||
| 45 | const EVP_MD *digest) | - | ||||||||||||
| 46 | { | - | ||||||||||||
| 47 | unsigned char out[96]; | - | ||||||||||||
| 48 | - | |||||||||||||
| 49 | if (keylen != 32
| 0 | ||||||||||||
| 50 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 51 | } | - | ||||||||||||
| 52 | - | |||||||||||||
| 53 | if (!PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, iter,
| 0 | ||||||||||||
| 54 | digest, sizeof(out), out)
| 0 | ||||||||||||
| 55 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 56 | } | - | ||||||||||||
| 57 | memcpy(key, out + sizeof(out) - 32, 32); | - | ||||||||||||
| 58 | OPENSSL_cleanse(out, sizeof(out)); | - | ||||||||||||
| 59 | return never executed: 1;return 1;never executed: return 1; | 0 | ||||||||||||
| 60 | } | - | ||||||||||||
| 61 | - | |||||||||||||
| 62 | - | |||||||||||||
| 63 | static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | - | ||||||||||||
| 64 | unsigned char *mac, unsigned int *maclen, | - | ||||||||||||
| 65 | int (*pkcs12_key_gen)(const char *pass, int passlen, | - | ||||||||||||
| 66 | unsigned char *salt, int slen, | - | ||||||||||||
| 67 | int id, int iter, int n, | - | ||||||||||||
| 68 | unsigned char *out, | - | ||||||||||||
| 69 | const EVP_MD *md_type)) | - | ||||||||||||
| 70 | { | - | ||||||||||||
| 71 | int ret = 0; | - | ||||||||||||
| 72 | const EVP_MD *md_type; | - | ||||||||||||
| 73 | HMAC_CTX *hmac = | - | ||||||||||||
| 74 | ((void *)0) | - | ||||||||||||
| 75 | ; | - | ||||||||||||
| 76 | unsigned char key[64], *salt; | - | ||||||||||||
| 77 | int saltlen, iter; | - | ||||||||||||
| 78 | int md_size = 0; | - | ||||||||||||
| 79 | int md_type_nid; | - | ||||||||||||
| 80 | const X509_ALGOR *macalg; | - | ||||||||||||
| 81 | const ASN1_OBJECT *macoid; | - | ||||||||||||
| 82 | - | |||||||||||||
| 83 | if (pkcs12_key_gen ==
| 0-1 | ||||||||||||
| 84 | ((void *)0)
| 0-1 | ||||||||||||
| 85 | ) | - | ||||||||||||
| 86 | pkcs12_key_gen = PKCS12_key_gen_utf8; never executed: pkcs12_key_gen = PKCS12_key_gen_utf8; | 0 | ||||||||||||
| 87 | - | |||||||||||||
| 88 | if (!(OBJ_obj2nid((p12->authsafes)->type) == 21)
| 0-1 | ||||||||||||
| 89 | ERR_put_error(35,(107),(121),__FILE__,92); | - | ||||||||||||
| 90 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 91 | } | - | ||||||||||||
| 92 | - | |||||||||||||
| 93 | salt = p12->mac->salt->data; | - | ||||||||||||
| 94 | saltlen = p12->mac->salt->length; | - | ||||||||||||
| 95 | if (!p12->mac->iter
| 0-1 | ||||||||||||
| 96 | iter = 1; never executed: iter = 1; | 0 | ||||||||||||
| 97 | else | - | ||||||||||||
| 98 | iter = ASN1_INTEGER_get(p12->mac->iter); executed 1 time by 1 test: iter = ASN1_INTEGER_get(p12->mac->iter);Executed by:
| 1 | ||||||||||||
| 99 | X509_SIG_get0(p12->mac->dinfo, &macalg, | - | ||||||||||||
| 100 | ((void *)0) | - | ||||||||||||
| 101 | ); | - | ||||||||||||
| 102 | X509_ALGOR_get0(&macoid, | - | ||||||||||||
| 103 | ((void *)0) | - | ||||||||||||
| 104 | , | - | ||||||||||||
| 105 | ((void *)0) | - | ||||||||||||
| 106 | , macalg); | - | ||||||||||||
| 107 | if ((
| 0-1 | ||||||||||||
| 108 | ((void *)0)
| 0-1 | ||||||||||||
| 109 | ) { | - | ||||||||||||
| 110 | ERR_put_error(35,(107),(118),__FILE__,105); | - | ||||||||||||
| 111 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 112 | } | - | ||||||||||||
| 113 | md_size = EVP_MD_size(md_type); | - | ||||||||||||
| 114 | md_type_nid = EVP_MD_type(md_type); | - | ||||||||||||
| 115 | if (md_size < 0
| 0-1 | ||||||||||||
| 116 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 117 | if ((md_type_nid == 809
| 0-1 | ||||||||||||
| 118 | || md_type_nid == 982
| 0-1 | ||||||||||||
| 119 | || md_type_nid == 983
| 0-1 | ||||||||||||
| 120 | && !getenv("LEGACY_GOST_PKCS12")
| 0 | ||||||||||||
| 121 | md_size = 32; | - | ||||||||||||
| 122 | if (!pkcs12_gen_gost_mac_key(pass, passlen, salt, saltlen, iter,
| 0 | ||||||||||||
| 123 | md_size, key, md_type)
| 0 | ||||||||||||
| 124 | ERR_put_error(35,(107),(107),__FILE__,119); | - | ||||||||||||
| 125 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 126 | } | - | ||||||||||||
| 127 | } never executed: elseend of block | 0 | ||||||||||||
| 128 | if (!(*pkcs12_key_gen)(pass, passlen, salt, saltlen, 3,
| 0-1 | ||||||||||||
| 129 | iter, md_size, key, md_type)
| 0-1 | ||||||||||||
| 130 | ERR_put_error(35,(107),(107),__FILE__,125); | - | ||||||||||||
| 131 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 132 | } | - | ||||||||||||
| 133 | if ((
| 0-1 | ||||||||||||
| 134 | ((void *)0)
| 0-1 | ||||||||||||
| 135 | - | |||||||||||||
| 136 | || !HMAC_Init_ex(hmac, key, md_size, md_type,
| 0-1 | ||||||||||||
| 137 | ((void *)0)
| 0-1 | ||||||||||||
| 138 | )
| 0-1 | ||||||||||||
| 139 | || !HMAC_Update(hmac, p12->authsafes->d.data->data,
| 0-1 | ||||||||||||
| 140 | p12->authsafes->d.data->length)
| 0-1 | ||||||||||||
| 141 | || !HMAC_Final(hmac, mac, maclen)
| 0-1 | ||||||||||||
| 142 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 143 | } | - | ||||||||||||
| 144 | ret = 1; | - | ||||||||||||
| 145 | - | |||||||||||||
| 146 | err: code before this statement executed 1 time by 1 test: err:Executed by:
| 1 | ||||||||||||
| 147 | OPENSSL_cleanse(key, sizeof(key)); | - | ||||||||||||
| 148 | HMAC_CTX_free(hmac); | - | ||||||||||||
| 149 | return executed 1 time by 1 test: ret;return ret;Executed by:
executed 1 time by 1 test: return ret;Executed by:
| 1 | ||||||||||||
| 150 | } | - | ||||||||||||
| 151 | - | |||||||||||||
| 152 | int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | - | ||||||||||||
| 153 | unsigned char *mac, unsigned int *maclen) | - | ||||||||||||
| 154 | { | - | ||||||||||||
| 155 | return never executed: pkcs12_gen_mac(p12, pass, passlen, mac, maclen, return pkcs12_gen_mac(p12, pass, passlen, mac, maclen, ((void *)0) );never executed: return pkcs12_gen_mac(p12, pass, passlen, mac, maclen, ((void *)0) ); | 0 | ||||||||||||
| 156 | ((void *)0) never executed: return pkcs12_gen_mac(p12, pass, passlen, mac, maclen, ((void *)0) ); | 0 | ||||||||||||
| 157 | ); never executed: return pkcs12_gen_mac(p12, pass, passlen, mac, maclen, ((void *)0) ); | 0 | ||||||||||||
| 158 | } | - | ||||||||||||
| 159 | - | |||||||||||||
| 160 | - | |||||||||||||
| 161 | int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen) | - | ||||||||||||
| 162 | { | - | ||||||||||||
| 163 | unsigned char mac[64]; | - | ||||||||||||
| 164 | unsigned int maclen; | - | ||||||||||||
| 165 | const ASN1_OCTET_STRING *macoct; | - | ||||||||||||
| 166 | - | |||||||||||||
| 167 | if (p12->mac ==
| 0-1 | ||||||||||||
| 168 | ((void *)0)
| 0-1 | ||||||||||||
| 169 | ) { | - | ||||||||||||
| 170 | ERR_put_error(35,(126),(108),__FILE__,157); | - | ||||||||||||
| 171 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 172 | } | - | ||||||||||||
| 173 | if (!pkcs12_gen_mac(p12, pass, passlen, mac, &maclen,
| 0-1 | ||||||||||||
| 174 | PKCS12_key_gen_utf8)
| 0-1 | ||||||||||||
| 175 | ERR_put_error(35,(126),(109),__FILE__,162); | - | ||||||||||||
| 176 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 177 | } | - | ||||||||||||
| 178 | X509_SIG_get0(p12->mac->dinfo, | - | ||||||||||||
| 179 | ((void *)0) | - | ||||||||||||
| 180 | , &macoct); | - | ||||||||||||
| 181 | if ((
| 0-1 | ||||||||||||
| 182 | || CRYPTO_memcmp(mac, ASN1_STRING_get0_data(macoct), maclen) != 0
| 0-1 | ||||||||||||
| 183 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 184 | - | |||||||||||||
| 185 | return executed 1 time by 1 test: 1;return 1;Executed by:
executed 1 time by 1 test: return 1;Executed by:
| 1 | ||||||||||||
| 186 | } | - | ||||||||||||
| 187 | - | |||||||||||||
| 188 | - | |||||||||||||
| 189 | - | |||||||||||||
| 190 | int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, | - | ||||||||||||
| 191 | unsigned char *salt, int saltlen, int iter, | - | ||||||||||||
| 192 | const EVP_MD *md_type) | - | ||||||||||||
| 193 | { | - | ||||||||||||
| 194 | unsigned char mac[64]; | - | ||||||||||||
| 195 | unsigned int maclen; | - | ||||||||||||
| 196 | ASN1_OCTET_STRING *macoct; | - | ||||||||||||
| 197 | - | |||||||||||||
| 198 | if (!md_type
| 0 | ||||||||||||
| 199 | md_type = EVP_sha1(); never executed: md_type = EVP_sha1(); | 0 | ||||||||||||
| 200 | if (PKCS12_setup_mac(p12, iter, salt, saltlen, md_type) == 0
| 0 | ||||||||||||
| 201 | ERR_put_error(35,(123),(110),__FILE__,186); | - | ||||||||||||
| 202 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 203 | } | - | ||||||||||||
| 204 | - | |||||||||||||
| 205 | - | |||||||||||||
| 206 | - | |||||||||||||
| 207 | if (!pkcs12_gen_mac(p12, pass, passlen, mac, &maclen,
| 0 | ||||||||||||
| 208 | PKCS12_key_gen_utf8)
| 0 | ||||||||||||
| 209 | ERR_put_error(35,(123),(109),__FILE__,194); | - | ||||||||||||
| 210 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 211 | } | - | ||||||||||||
| 212 | X509_SIG_getm(p12->mac->dinfo, | - | ||||||||||||
| 213 | ((void *)0) | - | ||||||||||||
| 214 | , &macoct); | - | ||||||||||||
| 215 | if (!ASN1_OCTET_STRING_set(macoct, mac, maclen)
| 0 | ||||||||||||
| 216 | ERR_put_error(35,(123),(111),__FILE__,199); | - | ||||||||||||
| 217 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 218 | } | - | ||||||||||||
| 219 | return never executed: 1;return 1;never executed: return 1; | 0 | ||||||||||||
| 220 | } | - | ||||||||||||
| 221 | - | |||||||||||||
| 222 | - | |||||||||||||
| 223 | int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen, | - | ||||||||||||
| 224 | const EVP_MD *md_type) | - | ||||||||||||
| 225 | { | - | ||||||||||||
| 226 | X509_ALGOR *macalg; | - | ||||||||||||
| 227 | - | |||||||||||||
| 228 | PKCS12_MAC_DATA_free(p12->mac); | - | ||||||||||||
| 229 | p12->mac = | - | ||||||||||||
| 230 | ((void *)0) | - | ||||||||||||
| 231 | ; | - | ||||||||||||
| 232 | - | |||||||||||||
| 233 | if ((
| 0 | ||||||||||||
| 234 | ((void *)0)
| 0 | ||||||||||||
| 235 | ) | - | ||||||||||||
| 236 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 237 | if (iter > 1
| 0 | ||||||||||||
| 238 | if ((
| 0 | ||||||||||||
| 239 | ((void *)0)
| 0 | ||||||||||||
| 240 | ) { | - | ||||||||||||
| 241 | ERR_put_error(35,(122),((1|64)),__FILE__,218); | - | ||||||||||||
| 242 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 243 | } | - | ||||||||||||
| 244 | if (!ASN1_INTEGER_set(p12->mac->iter, iter)
| 0 | ||||||||||||
| 245 | ERR_put_error(35,(122),((1|64)),__FILE__,222); | - | ||||||||||||
| 246 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 247 | } | - | ||||||||||||
| 248 | } never executed: end of block | 0 | ||||||||||||
| 249 | if (!saltlen
| 0 | ||||||||||||
| 250 | saltlen = 8; never executed: saltlen = 8; | 0 | ||||||||||||
| 251 | if ((
| 0 | ||||||||||||
| 252 | ((void *)0)
| 0 | ||||||||||||
| 253 | ) { | - | ||||||||||||
| 254 | ERR_put_error(35,(122),((1|64)),__FILE__,229); | - | ||||||||||||
| 255 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 256 | } | - | ||||||||||||
| 257 | p12->mac->salt->length = saltlen; | - | ||||||||||||
| 258 | if (!salt
| 0 | ||||||||||||
| 259 | if (RAND_bytes(p12->mac->salt->data, saltlen) <= 0
| 0 | ||||||||||||
| 260 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 261 | } never executed: elseend of block | 0 | ||||||||||||
| 262 | memcpy(p12->mac->salt->data, salt, saltlen); never executed: memcpy(p12->mac->salt->data, salt, saltlen); | 0 | ||||||||||||
| 263 | X509_SIG_getm(p12->mac->dinfo, &macalg, | - | ||||||||||||
| 264 | ((void *)0) | - | ||||||||||||
| 265 | ); | - | ||||||||||||
| 266 | if (!X509_ALGOR_set0(macalg, OBJ_nid2obj(EVP_MD_type(md_type)),
| 0 | ||||||||||||
| 267 | 5,
| 0 | ||||||||||||
| 268 | ((void *)0)
| 0 | ||||||||||||
| 269 | )
| 0 | ||||||||||||
| 270 | ERR_put_error(35,(122),((1|64)),__FILE__,241); | - | ||||||||||||
| 271 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 272 | } | - | ||||||||||||
| 273 | - | |||||||||||||
| 274 | return never executed: 1;return 1;never executed: return 1; | 0 | ||||||||||||
| 275 | } | - | ||||||||||||
| Switch to Source code | Preprocessed file |