| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/pkcs12/p12_mutl.c |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||
| 2 | - | |||||||||||||
| 3 | - | |||||||||||||
| 4 | - | |||||||||||||
| 5 | - | |||||||||||||
| 6 | - | |||||||||||||
| 7 | int | - | ||||||||||||
| 8 | PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | - | ||||||||||||
| 9 | unsigned char *mac, unsigned int *maclen) | - | ||||||||||||
| 10 | { | - | ||||||||||||
| 11 | const EVP_MD *md_type; | - | ||||||||||||
| 12 | HMAC_CTX hmac; | - | ||||||||||||
| 13 | unsigned char key[64], *salt; | - | ||||||||||||
| 14 | int saltlen, iter; | - | ||||||||||||
| 15 | int md_size; | - | ||||||||||||
| 16 | - | |||||||||||||
| 17 | if (!(OBJ_obj2nid((p12->authsafes)->type) == 21)
| 0 | ||||||||||||
| 18 | ERR_put_error(35,(0xfff),(121),__FILE__,83); | - | ||||||||||||
| 19 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 20 | } | - | ||||||||||||
| 21 | - | |||||||||||||
| 22 | salt = p12->mac->salt->data; | - | ||||||||||||
| 23 | saltlen = p12->mac->salt->length; | - | ||||||||||||
| 24 | if (!p12->mac->iter
| 0 | ||||||||||||
| 25 | iter = 1; never executed: iter = 1; | 0 | ||||||||||||
| 26 | else if ((
| 0 | ||||||||||||
| 27 | ERR_put_error(35,(0xfff),(101),__FILE__,92); | - | ||||||||||||
| 28 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 29 | } | - | ||||||||||||
| 30 | if (!(md_type = EVP_get_digestbyname(OBJ_nid2sn(OBJ_obj2nid(p12->mac->dinfo->algor->algorithm)))
| 0 | ||||||||||||
| 31 | )
| 0 | ||||||||||||
| 32 | ERR_put_error(35,(0xfff),(118),__FILE__,97); | - | ||||||||||||
| 33 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 34 | } | - | ||||||||||||
| 35 | md_size = EVP_MD_size(md_type); | - | ||||||||||||
| 36 | if (md_size < 0
| 0 | ||||||||||||
| 37 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 38 | if (!PKCS12_key_gen_asc(pass, passlen, salt, saltlen, 3, iter,
| 0 | ||||||||||||
| 39 | md_size, key, md_type)
| 0 | ||||||||||||
| 40 | ERR_put_error(35,(0xfff),(107),__FILE__,105); | - | ||||||||||||
| 41 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 42 | } | - | ||||||||||||
| 43 | HMAC_CTX_init(&hmac); | - | ||||||||||||
| 44 | if (!HMAC_Init_ex(&hmac, key, md_size, md_type,
| 0 | ||||||||||||
| 45 | ((void *)0)
| 0 | ||||||||||||
| 46 | )
| 0 | ||||||||||||
| 47 | !HMAC_Update(&hmac, p12->authsafes->d.data->data,
| 0 | ||||||||||||
| 48 | p12->authsafes->d.data->length)
| 0 | ||||||||||||
| 49 | !HMAC_Final(&hmac, mac, maclen)
| 0 | ||||||||||||
| 50 | HMAC_CTX_cleanup(&hmac); | - | ||||||||||||
| 51 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 52 | } | - | ||||||||||||
| 53 | HMAC_CTX_cleanup(&hmac); | - | ||||||||||||
| 54 | return never executed: 1;return 1;never executed: return 1; | 0 | ||||||||||||
| 55 | } | - | ||||||||||||
| 56 | - | |||||||||||||
| 57 | - | |||||||||||||
| 58 | int | - | ||||||||||||
| 59 | PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen) | - | ||||||||||||
| 60 | { | - | ||||||||||||
| 61 | unsigned char mac[64]; | - | ||||||||||||
| 62 | unsigned int maclen; | - | ||||||||||||
| 63 | - | |||||||||||||
| 64 | if (p12->mac ==
| 0 | ||||||||||||
| 65 | ((void *)0)
| 0 | ||||||||||||
| 66 | ) { | - | ||||||||||||
| 67 | ERR_put_error(35,(0xfff),(108),__FILE__,128); | - | ||||||||||||
| 68 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 69 | } | - | ||||||||||||
| 70 | if (!PKCS12_gen_mac(p12, pass, passlen, mac, &maclen)
| 0 | ||||||||||||
| 71 | ERR_put_error(35,(0xfff),(109),__FILE__,132); | - | ||||||||||||
| 72 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 73 | } | - | ||||||||||||
| 74 | if ((
| 0 | ||||||||||||
| 75 | memcmp(mac, p12->mac->dinfo->digest->data, maclen)
| 0 | ||||||||||||
| 76 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 77 | return never executed: 1;return 1;never executed: return 1; | 0 | ||||||||||||
| 78 | } | - | ||||||||||||
| 79 | - | |||||||||||||
| 80 | - | |||||||||||||
| 81 | - | |||||||||||||
| 82 | int | - | ||||||||||||
| 83 | PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, unsigned char *salt, | - | ||||||||||||
| 84 | int saltlen, int iter, const EVP_MD *md_type) | - | ||||||||||||
| 85 | { | - | ||||||||||||
| 86 | unsigned char mac[64]; | - | ||||||||||||
| 87 | unsigned int maclen; | - | ||||||||||||
| 88 | - | |||||||||||||
| 89 | if (!md_type
| 0 | ||||||||||||
| 90 | md_type = EVP_sha1(); never executed: md_type = EVP_sha1(); | 0 | ||||||||||||
| 91 | if (PKCS12_setup_mac(p12, iter, salt, saltlen, md_type) ==
| 0 | ||||||||||||
| 92 | 0
| 0 | ||||||||||||
| 93 | ERR_put_error(35,(0xfff),(110),__FILE__,154); | - | ||||||||||||
| 94 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 95 | } | - | ||||||||||||
| 96 | if (!PKCS12_gen_mac(p12, pass, passlen, mac, &maclen)
| 0 | ||||||||||||
| 97 | ERR_put_error(35,(0xfff),(109),__FILE__,158); | - | ||||||||||||
| 98 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 99 | } | - | ||||||||||||
| 100 | if (!(ASN1_STRING_set(p12->mac->dinfo->digest, mac, maclen))
| 0 | ||||||||||||
| 101 | ERR_put_error(35,(0xfff),(111),__FILE__,162); | - | ||||||||||||
| 102 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 103 | } | - | ||||||||||||
| 104 | return never executed: 1;return 1;never executed: return 1; | 0 | ||||||||||||
| 105 | } | - | ||||||||||||
| 106 | - | |||||||||||||
| 107 | - | |||||||||||||
| 108 | int | - | ||||||||||||
| 109 | PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen, | - | ||||||||||||
| 110 | const EVP_MD *md_type) | - | ||||||||||||
| 111 | { | - | ||||||||||||
| 112 | if (!(p12->mac = PKCS12_MAC_DATA_new())
| 0 | ||||||||||||
| 113 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 114 | if (iter > 1
| 0 | ||||||||||||
| 115 | if (!(p12->mac->iter = ASN1_INTEGER_new())
| 0 | ||||||||||||
| 116 | ERR_put_error(35,(0xfff),((1|64)),__FILE__,177); | - | ||||||||||||
| 117 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 118 | } | - | ||||||||||||
| 119 | if (!ASN1_INTEGER_set(p12->mac->iter, iter)
| 0 | ||||||||||||
| 120 | ERR_put_error(35,(0xfff),((1|64)),__FILE__,181); | - | ||||||||||||
| 121 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 122 | } | - | ||||||||||||
| 123 | } never executed: end of block | 0 | ||||||||||||
| 124 | if (!saltlen
| 0 | ||||||||||||
| 125 | saltlen = 8; never executed: saltlen = 8; | 0 | ||||||||||||
| 126 | if (!(p12->mac->salt->data = malloc(saltlen))
| 0 | ||||||||||||
| 127 | ERR_put_error(35,(0xfff),((1|64)),__FILE__,188); | - | ||||||||||||
| 128 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 129 | } | - | ||||||||||||
| 130 | p12->mac->salt->length = saltlen; | - | ||||||||||||
| 131 | if (!salt
| 0 | ||||||||||||
| 132 | arc4random_buf(p12->mac->salt->data, saltlen); never executed: arc4random_buf(p12->mac->salt->data, saltlen); | 0 | ||||||||||||
| 133 | else | - | ||||||||||||
| 134 | memcpy (p12->mac->salt->data, salt, saltlen); never executed: memcpy (p12->mac->salt->data, salt, saltlen); | 0 | ||||||||||||
| 135 | p12->mac->dinfo->algor->algorithm = OBJ_nid2obj(EVP_MD_type(md_type)); | - | ||||||||||||
| 136 | if (!(p12->mac->dinfo->algor->parameter = ASN1_TYPE_new())
| 0 | ||||||||||||
| 137 | ERR_put_error(35,(0xfff),((1|64)),__FILE__,198); | - | ||||||||||||
| 138 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 139 | } | - | ||||||||||||
| 140 | p12->mac->dinfo->algor->parameter->type = 5; | - | ||||||||||||
| 141 | - | |||||||||||||
| 142 | return never executed: 1;return 1;never executed: return 1; | 0 | ||||||||||||
| 143 | } | - | ||||||||||||
| Switch to Source code | Preprocessed file |