diff options
Diffstat (limited to 'src/lib/libcrypto/pkcs12/p12_mutl.c')
| -rw-r--r-- | src/lib/libcrypto/pkcs12/p12_mutl.c | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/src/lib/libcrypto/pkcs12/p12_mutl.c b/src/lib/libcrypto/pkcs12/p12_mutl.c index 56a4964a34..f3132ec75f 100644 --- a/src/lib/libcrypto/pkcs12/p12_mutl.c +++ b/src/lib/libcrypto/pkcs12/p12_mutl.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: p12_mutl.c,v 1.22 2016/11/08 20:01:06 miod Exp $ */ | 1 | /* $OpenBSD: p12_mutl.c,v 1.23 2017/01/29 17:49:23 beck Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 1999. | 3 | * project 1999. |
| 4 | */ | 4 | */ |
| @@ -80,8 +80,7 @@ PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | |||
| 80 | int md_size; | 80 | int md_size; |
| 81 | 81 | ||
| 82 | if (!PKCS7_type_is_data(p12->authsafes)) { | 82 | if (!PKCS7_type_is_data(p12->authsafes)) { |
| 83 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC, | 83 | PKCS12error(PKCS12_R_CONTENT_TYPE_NOT_DATA); |
| 84 | PKCS12_R_CONTENT_TYPE_NOT_DATA); | ||
| 85 | return 0; | 84 | return 0; |
| 86 | } | 85 | } |
| 87 | 86 | ||
| @@ -90,13 +89,12 @@ PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | |||
| 90 | if (!p12->mac->iter) | 89 | if (!p12->mac->iter) |
| 91 | iter = 1; | 90 | iter = 1; |
| 92 | else if ((iter = ASN1_INTEGER_get(p12->mac->iter)) <= 0) { | 91 | else if ((iter = ASN1_INTEGER_get(p12->mac->iter)) <= 0) { |
| 93 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC, PKCS12_R_DECODE_ERROR); | 92 | PKCS12error(PKCS12_R_DECODE_ERROR); |
| 94 | return 0; | 93 | return 0; |
| 95 | } | 94 | } |
| 96 | if (!(md_type = EVP_get_digestbyobj( | 95 | if (!(md_type = EVP_get_digestbyobj( |
| 97 | p12->mac->dinfo->algor->algorithm))) { | 96 | p12->mac->dinfo->algor->algorithm))) { |
| 98 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC, | 97 | PKCS12error(PKCS12_R_UNKNOWN_DIGEST_ALGORITHM); |
| 99 | PKCS12_R_UNKNOWN_DIGEST_ALGORITHM); | ||
| 100 | return 0; | 98 | return 0; |
| 101 | } | 99 | } |
| 102 | md_size = EVP_MD_size(md_type); | 100 | md_size = EVP_MD_size(md_type); |
| @@ -104,7 +102,7 @@ PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | |||
| 104 | return 0; | 102 | return 0; |
| 105 | if (!PKCS12_key_gen(pass, passlen, salt, saltlen, PKCS12_MAC_ID, iter, | 103 | if (!PKCS12_key_gen(pass, passlen, salt, saltlen, PKCS12_MAC_ID, iter, |
| 106 | md_size, key, md_type)) { | 104 | md_size, key, md_type)) { |
| 107 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC, PKCS12_R_KEY_GEN_ERROR); | 105 | PKCS12error(PKCS12_R_KEY_GEN_ERROR); |
| 108 | return 0; | 106 | return 0; |
| 109 | } | 107 | } |
| 110 | HMAC_CTX_init(&hmac); | 108 | HMAC_CTX_init(&hmac); |
| @@ -127,12 +125,11 @@ PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen) | |||
| 127 | unsigned int maclen; | 125 | unsigned int maclen; |
| 128 | 126 | ||
| 129 | if (p12->mac == NULL) { | 127 | if (p12->mac == NULL) { |
| 130 | PKCS12err(PKCS12_F_PKCS12_VERIFY_MAC, PKCS12_R_MAC_ABSENT); | 128 | PKCS12error(PKCS12_R_MAC_ABSENT); |
| 131 | return 0; | 129 | return 0; |
| 132 | } | 130 | } |
| 133 | if (!PKCS12_gen_mac(p12, pass, passlen, mac, &maclen)) { | 131 | if (!PKCS12_gen_mac(p12, pass, passlen, mac, &maclen)) { |
| 134 | PKCS12err(PKCS12_F_PKCS12_VERIFY_MAC, | 132 | PKCS12error(PKCS12_R_MAC_GENERATION_ERROR); |
| 135 | PKCS12_R_MAC_GENERATION_ERROR); | ||
| 136 | return 0; | 133 | return 0; |
| 137 | } | 134 | } |
| 138 | if ((maclen != (unsigned int)p12->mac->dinfo->digest->length) || | 135 | if ((maclen != (unsigned int)p12->mac->dinfo->digest->length) || |
| @@ -154,17 +151,15 @@ PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, unsigned char *salt, | |||
| 154 | md_type = EVP_sha1(); | 151 | md_type = EVP_sha1(); |
| 155 | if (PKCS12_setup_mac(p12, iter, salt, saltlen, md_type) == | 152 | if (PKCS12_setup_mac(p12, iter, salt, saltlen, md_type) == |
| 156 | PKCS12_ERROR) { | 153 | PKCS12_ERROR) { |
| 157 | PKCS12err(PKCS12_F_PKCS12_SET_MAC, PKCS12_R_MAC_SETUP_ERROR); | 154 | PKCS12error(PKCS12_R_MAC_SETUP_ERROR); |
| 158 | return 0; | 155 | return 0; |
| 159 | } | 156 | } |
| 160 | if (!PKCS12_gen_mac(p12, pass, passlen, mac, &maclen)) { | 157 | if (!PKCS12_gen_mac(p12, pass, passlen, mac, &maclen)) { |
| 161 | PKCS12err(PKCS12_F_PKCS12_SET_MAC, | 158 | PKCS12error(PKCS12_R_MAC_GENERATION_ERROR); |
| 162 | PKCS12_R_MAC_GENERATION_ERROR); | ||
| 163 | return 0; | 159 | return 0; |
| 164 | } | 160 | } |
| 165 | if (!(ASN1_STRING_set(p12->mac->dinfo->digest, mac, maclen))) { | 161 | if (!(ASN1_STRING_set(p12->mac->dinfo->digest, mac, maclen))) { |
| 166 | PKCS12err(PKCS12_F_PKCS12_SET_MAC, | 162 | PKCS12error(PKCS12_R_MAC_STRING_SET_ERROR); |
| 167 | PKCS12_R_MAC_STRING_SET_ERROR); | ||
| 168 | return 0; | 163 | return 0; |
| 169 | } | 164 | } |
| 170 | return 1; | 165 | return 1; |
| @@ -179,20 +174,18 @@ PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen, | |||
| 179 | return PKCS12_ERROR; | 174 | return PKCS12_ERROR; |
| 180 | if (iter > 1) { | 175 | if (iter > 1) { |
| 181 | if (!(p12->mac->iter = ASN1_INTEGER_new())) { | 176 | if (!(p12->mac->iter = ASN1_INTEGER_new())) { |
| 182 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, | 177 | PKCS12error(ERR_R_MALLOC_FAILURE); |
| 183 | ERR_R_MALLOC_FAILURE); | ||
| 184 | return 0; | 178 | return 0; |
| 185 | } | 179 | } |
| 186 | if (!ASN1_INTEGER_set(p12->mac->iter, iter)) { | 180 | if (!ASN1_INTEGER_set(p12->mac->iter, iter)) { |
| 187 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, | 181 | PKCS12error(ERR_R_MALLOC_FAILURE); |
| 188 | ERR_R_MALLOC_FAILURE); | ||
| 189 | return 0; | 182 | return 0; |
| 190 | } | 183 | } |
| 191 | } | 184 | } |
| 192 | if (!saltlen) | 185 | if (!saltlen) |
| 193 | saltlen = PKCS12_SALT_LEN; | 186 | saltlen = PKCS12_SALT_LEN; |
| 194 | if (!(p12->mac->salt->data = malloc(saltlen))) { | 187 | if (!(p12->mac->salt->data = malloc(saltlen))) { |
| 195 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); | 188 | PKCS12error(ERR_R_MALLOC_FAILURE); |
| 196 | return 0; | 189 | return 0; |
| 197 | } | 190 | } |
| 198 | p12->mac->salt->length = saltlen; | 191 | p12->mac->salt->length = saltlen; |
| @@ -202,7 +195,7 @@ PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen, | |||
| 202 | memcpy (p12->mac->salt->data, salt, saltlen); | 195 | memcpy (p12->mac->salt->data, salt, saltlen); |
| 203 | p12->mac->dinfo->algor->algorithm = OBJ_nid2obj(EVP_MD_type(md_type)); | 196 | p12->mac->dinfo->algor->algorithm = OBJ_nid2obj(EVP_MD_type(md_type)); |
| 204 | if (!(p12->mac->dinfo->algor->parameter = ASN1_TYPE_new())) { | 197 | if (!(p12->mac->dinfo->algor->parameter = ASN1_TYPE_new())) { |
| 205 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); | 198 | PKCS12error(ERR_R_MALLOC_FAILURE); |
| 206 | return 0; | 199 | return 0; |
| 207 | } | 200 | } |
| 208 | p12->mac->dinfo->algor->parameter->type = V_ASN1_NULL; | 201 | p12->mac->dinfo->algor->parameter->type = V_ASN1_NULL; |
