| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/evp/p5_crpt2.c |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||||||||
| 2 | - | |||||||||||||||||||
| 3 | - | |||||||||||||||||||
| 4 | - | |||||||||||||||||||
| 5 | - | |||||||||||||||||||
| 6 | - | |||||||||||||||||||
| 7 | - | |||||||||||||||||||
| 8 | - | |||||||||||||||||||
| 9 | - | |||||||||||||||||||
| 10 | - | |||||||||||||||||||
| 11 | - | |||||||||||||||||||
| 12 | - | |||||||||||||||||||
| 13 | int | - | ||||||||||||||||||
| 14 | PKCS5_PBKDF2_HMAC(const char *pass, int passlen, const unsigned char *salt, | - | ||||||||||||||||||
| 15 | int saltlen, int iter, const EVP_MD *digest, int keylen, unsigned char *out) | - | ||||||||||||||||||
| 16 | { | - | ||||||||||||||||||
| 17 | unsigned char digtmp[64], *p, itmp[4]; | - | ||||||||||||||||||
| 18 | int cplen, j, k, tkeylen, mdlen; | - | ||||||||||||||||||
| 19 | unsigned long i = 1; | - | ||||||||||||||||||
| 20 | HMAC_CTX hctx_tpl, hctx; | - | ||||||||||||||||||
| 21 | - | |||||||||||||||||||
| 22 | mdlen = EVP_MD_size(digest); | - | ||||||||||||||||||
| 23 | if (mdlen < 0
| 0-15 | ||||||||||||||||||
| 24 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 25 | - | |||||||||||||||||||
| 26 | HMAC_CTX_init(&hctx_tpl); | - | ||||||||||||||||||
| 27 | p = out; | - | ||||||||||||||||||
| 28 | tkeylen = keylen; | - | ||||||||||||||||||
| 29 | if (!pass
| 0-15 | ||||||||||||||||||
| 30 | passlen = 0; never executed: passlen = 0; | 0 | ||||||||||||||||||
| 31 | else if (passlen == -1
| 0-15 | ||||||||||||||||||
| 32 | passlen = strlen(pass); never executed: passlen = strlen(pass); | 0 | ||||||||||||||||||
| 33 | if (!HMAC_Init_ex(&hctx_tpl, pass, passlen, digest,
| 0-15 | ||||||||||||||||||
| 34 | ((void *)0)
| 0-15 | ||||||||||||||||||
| 35 | )
| 0-15 | ||||||||||||||||||
| 36 | HMAC_CTX_cleanup(&hctx_tpl); | - | ||||||||||||||||||
| 37 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 38 | } | - | ||||||||||||||||||
| 39 | while (tkeylen
| 15-17 | ||||||||||||||||||
| 40 | if (tkeylen > mdlen
| 2-15 | ||||||||||||||||||
| 41 | cplen = mdlen; executed 2 times by 1 test: cplen = mdlen;Executed by:
| 2 | ||||||||||||||||||
| 42 | else | - | ||||||||||||||||||
| 43 | cplen = tkeylen; executed 15 times by 1 test: cplen = tkeylen;Executed by:
| 15 | ||||||||||||||||||
| 44 | - | |||||||||||||||||||
| 45 | - | |||||||||||||||||||
| 46 | - | |||||||||||||||||||
| 47 | itmp[0] = (unsigned char)((i >> 24) & 0xff); | - | ||||||||||||||||||
| 48 | itmp[1] = (unsigned char)((i >> 16) & 0xff); | - | ||||||||||||||||||
| 49 | itmp[2] = (unsigned char)((i >> 8) & 0xff); | - | ||||||||||||||||||
| 50 | itmp[3] = (unsigned char)(i & 0xff); | - | ||||||||||||||||||
| 51 | if (!HMAC_CTX_copy(&hctx, &hctx_tpl)
| 0-17 | ||||||||||||||||||
| 52 | HMAC_CTX_cleanup(&hctx_tpl); | - | ||||||||||||||||||
| 53 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 54 | } | - | ||||||||||||||||||
| 55 | if (!HMAC_Update(&hctx, salt, saltlen)
| 0-17 | ||||||||||||||||||
| 56 | !HMAC_Update(&hctx, itmp, 4)
| 0-17 | ||||||||||||||||||
| 57 | !HMAC_Final(&hctx, digtmp,
| 0-17 | ||||||||||||||||||
| 58 | ((void *)0)
| 0-17 | ||||||||||||||||||
| 59 | )
| 0-17 | ||||||||||||||||||
| 60 | HMAC_CTX_cleanup(&hctx_tpl); | - | ||||||||||||||||||
| 61 | HMAC_CTX_cleanup(&hctx); | - | ||||||||||||||||||
| 62 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 63 | } | - | ||||||||||||||||||
| 64 | HMAC_CTX_cleanup(&hctx); | - | ||||||||||||||||||
| 65 | memcpy(p, digtmp, cplen); | - | ||||||||||||||||||
| 66 | for (j = 1; j < iter
| 17-45048 | ||||||||||||||||||
| 67 | if (!HMAC_CTX_copy(&hctx, &hctx_tpl)
| 0-45048 | ||||||||||||||||||
| 68 | HMAC_CTX_cleanup(&hctx_tpl); | - | ||||||||||||||||||
| 69 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 70 | } | - | ||||||||||||||||||
| 71 | if (!HMAC_Update(&hctx, digtmp, mdlen)
| 0-45048 | ||||||||||||||||||
| 72 | !HMAC_Final(&hctx, digtmp,
| 0-45048 | ||||||||||||||||||
| 73 | ((void *)0)
| 0-45048 | ||||||||||||||||||
| 74 | )
| 0-45048 | ||||||||||||||||||
| 75 | HMAC_CTX_cleanup(&hctx_tpl); | - | ||||||||||||||||||
| 76 | HMAC_CTX_cleanup(&hctx); | - | ||||||||||||||||||
| 77 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 78 | } | - | ||||||||||||||||||
| 79 | HMAC_CTX_cleanup(&hctx); | - | ||||||||||||||||||
| 80 | for (k = 0; k < cplen
| 45048-1199951 | ||||||||||||||||||
| 81 | p[k] ^= digtmp[k]; executed 1199951 times by 1 test: p[k] ^= digtmp[k];Executed by:
| 1199951 | ||||||||||||||||||
| 82 | } executed 45048 times by 1 test: end of blockExecuted by:
| 45048 | ||||||||||||||||||
| 83 | tkeylen -= cplen; | - | ||||||||||||||||||
| 84 | i++; | - | ||||||||||||||||||
| 85 | p += cplen; | - | ||||||||||||||||||
| 86 | } executed 17 times by 1 test: end of blockExecuted by:
| 17 | ||||||||||||||||||
| 87 | HMAC_CTX_cleanup(&hctx_tpl); | - | ||||||||||||||||||
| 88 | return executed 15 times by 1 test: 1;return 1;Executed by:
executed 15 times by 1 test: return 1;Executed by:
| 15 | ||||||||||||||||||
| 89 | } | - | ||||||||||||||||||
| 90 | - | |||||||||||||||||||
| 91 | int | - | ||||||||||||||||||
| 92 | PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, const unsigned char *salt, | - | ||||||||||||||||||
| 93 | int saltlen, int iter, int keylen, unsigned char *out) | - | ||||||||||||||||||
| 94 | { | - | ||||||||||||||||||
| 95 | return never executed: PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, iter,return PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, iter, EVP_sha1(), keylen, out);never executed: return PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, iter, EVP_sha1(), keylen, out); | 0 | ||||||||||||||||||
| 96 | EVP_sha1(), keylen, out); never executed: return PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, iter, EVP_sha1(), keylen, out); | 0 | ||||||||||||||||||
| 97 | } | - | ||||||||||||||||||
| 98 | - | |||||||||||||||||||
| 99 | - | |||||||||||||||||||
| 100 | - | |||||||||||||||||||
| 101 | - | |||||||||||||||||||
| 102 | - | |||||||||||||||||||
| 103 | - | |||||||||||||||||||
| 104 | int | - | ||||||||||||||||||
| 105 | PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, | - | ||||||||||||||||||
| 106 | ASN1_TYPE *param, const EVP_CIPHER *c, const EVP_MD *md, int en_de) | - | ||||||||||||||||||
| 107 | { | - | ||||||||||||||||||
| 108 | const unsigned char *pbuf; | - | ||||||||||||||||||
| 109 | int plen; | - | ||||||||||||||||||
| 110 | PBE2PARAM *pbe2 = | - | ||||||||||||||||||
| 111 | ((void *)0) | - | ||||||||||||||||||
| 112 | ; | - | ||||||||||||||||||
| 113 | const EVP_CIPHER *cipher; | - | ||||||||||||||||||
| 114 | - | |||||||||||||||||||
| 115 | int rv = 0; | - | ||||||||||||||||||
| 116 | - | |||||||||||||||||||
| 117 | if (param ==
| 0 | ||||||||||||||||||
| 118 | ((void *)0)
| 0 | ||||||||||||||||||
| 119 | || param->type != 16
| 0 | ||||||||||||||||||
| 120 | param->value.sequence ==
| 0 | ||||||||||||||||||
| 121 | ((void *)0)
| 0 | ||||||||||||||||||
| 122 | ) { | - | ||||||||||||||||||
| 123 | ERR_put_error(6,(0xfff),(114),__FILE__,178); | - | ||||||||||||||||||
| 124 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 125 | } | - | ||||||||||||||||||
| 126 | - | |||||||||||||||||||
| 127 | pbuf = param->value.sequence->data; | - | ||||||||||||||||||
| 128 | plen = param->value.sequence->length; | - | ||||||||||||||||||
| 129 | if (!(pbe2 = d2i_PBE2PARAM(
| 0 | ||||||||||||||||||
| 130 | ((void *)0)
| 0 | ||||||||||||||||||
| 131 | , &pbuf, plen))
| 0 | ||||||||||||||||||
| 132 | ERR_put_error(6,(0xfff),(114),__FILE__,185); | - | ||||||||||||||||||
| 133 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 134 | } | - | ||||||||||||||||||
| 135 | - | |||||||||||||||||||
| 136 | - | |||||||||||||||||||
| 137 | - | |||||||||||||||||||
| 138 | if (OBJ_obj2nid(pbe2->keyfunc->algorithm) != 69
| 0 | ||||||||||||||||||
| 139 | ERR_put_error(6,(0xfff),(124),__FILE__,192); | - | ||||||||||||||||||
| 140 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 141 | } | - | ||||||||||||||||||
| 142 | - | |||||||||||||||||||
| 143 | - | |||||||||||||||||||
| 144 | - | |||||||||||||||||||
| 145 | - | |||||||||||||||||||
| 146 | cipher = EVP_get_cipherbyname(OBJ_nid2sn(OBJ_obj2nid(pbe2->encryption->algorithm))); | - | ||||||||||||||||||
| 147 | - | |||||||||||||||||||
| 148 | if (!cipher
| 0 | ||||||||||||||||||
| 149 | ERR_put_error(6,(0xfff),(107),__FILE__,202); | - | ||||||||||||||||||
| 150 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 151 | } | - | ||||||||||||||||||
| 152 | - | |||||||||||||||||||
| 153 | - | |||||||||||||||||||
| 154 | if (!EVP_CipherInit_ex(ctx, cipher,
| 0 | ||||||||||||||||||
| 155 | ((void *)0)
| 0 | ||||||||||||||||||
| 156 | ,
| 0 | ||||||||||||||||||
| 157 | ((void *)0)
| 0 | ||||||||||||||||||
| 158 | ,
| 0 | ||||||||||||||||||
| 159 | ((void *)0)
| 0 | ||||||||||||||||||
| 160 | , en_de)
| 0 | ||||||||||||||||||
| 161 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 162 | if (EVP_CIPHER_asn1_to_param(ctx, pbe2->encryption->parameter) < 0
| 0 | ||||||||||||||||||
| 163 | ERR_put_error(6,(0xfff),(122),__FILE__,210); | - | ||||||||||||||||||
| 164 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 165 | } | - | ||||||||||||||||||
| 166 | rv = PKCS5_v2_PBKDF2_keyivgen(ctx, pass, passlen, | - | ||||||||||||||||||
| 167 | pbe2->keyfunc->parameter, c, md, en_de); | - | ||||||||||||||||||
| 168 | - | |||||||||||||||||||
| 169 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||
| 170 | PBE2PARAM_free(pbe2); | - | ||||||||||||||||||
| 171 | return never executed: rv;return rv;never executed: return rv; | 0 | ||||||||||||||||||
| 172 | } | - | ||||||||||||||||||
| 173 | - | |||||||||||||||||||
| 174 | int | - | ||||||||||||||||||
| 175 | PKCS5_v2_PBKDF2_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, | - | ||||||||||||||||||
| 176 | ASN1_TYPE *param, const EVP_CIPHER *c, const EVP_MD *md, int en_de) | - | ||||||||||||||||||
| 177 | { | - | ||||||||||||||||||
| 178 | unsigned char *salt, key[64]; | - | ||||||||||||||||||
| 179 | const unsigned char *pbuf; | - | ||||||||||||||||||
| 180 | int saltlen, iter, plen; | - | ||||||||||||||||||
| 181 | int rv = 0; | - | ||||||||||||||||||
| 182 | unsigned int keylen = 0; | - | ||||||||||||||||||
| 183 | int prf_nid, hmac_md_nid; | - | ||||||||||||||||||
| 184 | PBKDF2PARAM *kdf = | - | ||||||||||||||||||
| 185 | ((void *)0) | - | ||||||||||||||||||
| 186 | ; | - | ||||||||||||||||||
| 187 | const EVP_MD *prfmd; | - | ||||||||||||||||||
| 188 | - | |||||||||||||||||||
| 189 | if (EVP_CIPHER_CTX_cipher(ctx) ==
| 0 | ||||||||||||||||||
| 190 | ((void *)0)
| 0 | ||||||||||||||||||
| 191 | ) { | - | ||||||||||||||||||
| 192 | ERR_put_error(6,(0xfff),(131),__FILE__,235); | - | ||||||||||||||||||
| 193 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 194 | } | - | ||||||||||||||||||
| 195 | keylen = EVP_CIPHER_CTX_key_length(ctx); | - | ||||||||||||||||||
| 196 | if (keylen > sizeof key
| 0 | ||||||||||||||||||
| 197 | ERR_put_error(6,(0xfff),(137),__FILE__,240); | - | ||||||||||||||||||
| 198 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 199 | } | - | ||||||||||||||||||
| 200 | - | |||||||||||||||||||
| 201 | - | |||||||||||||||||||
| 202 | - | |||||||||||||||||||
| 203 | if (!param
| 0 | ||||||||||||||||||
| 204 | ERR_put_error(6,(0xfff),(114),__FILE__,247); | - | ||||||||||||||||||
| 205 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 206 | } | - | ||||||||||||||||||
| 207 | - | |||||||||||||||||||
| 208 | pbuf = param->value.sequence->data; | - | ||||||||||||||||||
| 209 | plen = param->value.sequence->length; | - | ||||||||||||||||||
| 210 | - | |||||||||||||||||||
| 211 | if (!(kdf = d2i_PBKDF2PARAM(
| 0 | ||||||||||||||||||
| 212 | ((void *)0)
| 0 | ||||||||||||||||||
| 213 | , &pbuf, plen))
| 0 | ||||||||||||||||||
| 214 | ERR_put_error(6,(0xfff),(114),__FILE__,255); | - | ||||||||||||||||||
| 215 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||||||||
| 216 | } | - | ||||||||||||||||||
| 217 | - | |||||||||||||||||||
| 218 | - | |||||||||||||||||||
| 219 | - | |||||||||||||||||||
| 220 | if (kdf->keylength
| 0 | ||||||||||||||||||
| 221 | (
| 0 | ||||||||||||||||||
| 222 | ERR_put_error(6,(0xfff),(123),__FILE__,263); | - | ||||||||||||||||||
| 223 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 224 | } | - | ||||||||||||||||||
| 225 | - | |||||||||||||||||||
| 226 | if (kdf->prf
| 0 | ||||||||||||||||||
| 227 | prf_nid = OBJ_obj2nid(kdf->prf->algorithm); never executed: prf_nid = OBJ_obj2nid(kdf->prf->algorithm); | 0 | ||||||||||||||||||
| 228 | else | - | ||||||||||||||||||
| 229 | prf_nid = 163; never executed: prf_nid = 163; | 0 | ||||||||||||||||||
| 230 | - | |||||||||||||||||||
| 231 | if (!EVP_PBE_find(0x1, prf_nid,
| 0 | ||||||||||||||||||
| 232 | ((void *)0)
| 0 | ||||||||||||||||||
| 233 | , &hmac_md_nid, 0)
| 0 | ||||||||||||||||||
| 234 | ERR_put_error(6,(0xfff),(125),__FILE__,273); | - | ||||||||||||||||||
| 235 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 236 | } | - | ||||||||||||||||||
| 237 | - | |||||||||||||||||||
| 238 | prfmd = EVP_get_digestbyname(OBJ_nid2sn(hmac_md_nid)); | - | ||||||||||||||||||
| 239 | if (prfmd ==
| 0 | ||||||||||||||||||
| 240 | ((void *)0)
| 0 | ||||||||||||||||||
| 241 | ) { | - | ||||||||||||||||||
| 242 | ERR_put_error(6,(0xfff),(125),__FILE__,279); | - | ||||||||||||||||||
| 243 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 244 | } | - | ||||||||||||||||||
| 245 | - | |||||||||||||||||||
| 246 | if (kdf->salt->type != 4
| 0 | ||||||||||||||||||
| 247 | ERR_put_error(6,(0xfff),(126),__FILE__,284); | - | ||||||||||||||||||
| 248 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 249 | } | - | ||||||||||||||||||
| 250 | - | |||||||||||||||||||
| 251 | - | |||||||||||||||||||
| 252 | salt = kdf->salt->value.octet_string->data; | - | ||||||||||||||||||
| 253 | saltlen = kdf->salt->value.octet_string->length; | - | ||||||||||||||||||
| 254 | if ((
| 0 | ||||||||||||||||||
| 255 | ERR_put_error(6,(0xfff),(135),__FILE__,292); | - | ||||||||||||||||||
| 256 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 257 | } | - | ||||||||||||||||||
| 258 | if (!PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, iter, prfmd,
| 0 | ||||||||||||||||||
| 259 | keylen, key)
| 0 | ||||||||||||||||||
| 260 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||||||||
| 261 | rv = EVP_CipherInit_ex(ctx, | - | ||||||||||||||||||
| 262 | ((void *)0) | - | ||||||||||||||||||
| 263 | , | - | ||||||||||||||||||
| 264 | ((void *)0) | - | ||||||||||||||||||
| 265 | , key, | - | ||||||||||||||||||
| 266 | ((void *)0) | - | ||||||||||||||||||
| 267 | , en_de); | - | ||||||||||||||||||
| 268 | - | |||||||||||||||||||
| 269 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||
| 270 | explicit_bzero(key, keylen); | - | ||||||||||||||||||
| 271 | PBKDF2PARAM_free(kdf); | - | ||||||||||||||||||
| 272 | return never executed: rv;return rv;never executed: return rv; | 0 | ||||||||||||||||||
| 273 | } | - | ||||||||||||||||||
| Switch to Source code | Preprocessed file |