diff options
Diffstat (limited to 'src/lib/libcrypto/pkcs12/p12_mutl.c')
-rw-r--r-- | src/lib/libcrypto/pkcs12/p12_mutl.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/lib/libcrypto/pkcs12/p12_mutl.c b/src/lib/libcrypto/pkcs12/p12_mutl.c index 70bfef6e5d..9ab740d51f 100644 --- a/src/lib/libcrypto/pkcs12/p12_mutl.c +++ b/src/lib/libcrypto/pkcs12/p12_mutl.c | |||
@@ -71,6 +71,7 @@ int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | |||
71 | HMAC_CTX hmac; | 71 | HMAC_CTX hmac; |
72 | unsigned char key[EVP_MAX_MD_SIZE], *salt; | 72 | unsigned char key[EVP_MAX_MD_SIZE], *salt; |
73 | int saltlen, iter; | 73 | int saltlen, iter; |
74 | int md_size; | ||
74 | 75 | ||
75 | if (!PKCS7_type_is_data(p12->authsafes)) | 76 | if (!PKCS7_type_is_data(p12->authsafes)) |
76 | { | 77 | { |
@@ -87,13 +88,16 @@ int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | |||
87 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_UNKNOWN_DIGEST_ALGORITHM); | 88 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_UNKNOWN_DIGEST_ALGORITHM); |
88 | return 0; | 89 | return 0; |
89 | } | 90 | } |
91 | md_size = EVP_MD_size(md_type); | ||
92 | if (md_size < 0) | ||
93 | return 0; | ||
90 | if(!PKCS12_key_gen (pass, passlen, salt, saltlen, PKCS12_MAC_ID, iter, | 94 | if(!PKCS12_key_gen (pass, passlen, salt, saltlen, PKCS12_MAC_ID, iter, |
91 | EVP_MD_size(md_type), key, md_type)) { | 95 | md_size, key, md_type)) { |
92 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_KEY_GEN_ERROR); | 96 | PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_KEY_GEN_ERROR); |
93 | return 0; | 97 | return 0; |
94 | } | 98 | } |
95 | HMAC_CTX_init(&hmac); | 99 | HMAC_CTX_init(&hmac); |
96 | HMAC_Init_ex(&hmac, key, EVP_MD_size(md_type), md_type, NULL); | 100 | HMAC_Init_ex(&hmac, key, md_size, md_type, NULL); |
97 | HMAC_Update(&hmac, p12->authsafes->d.data->data, | 101 | HMAC_Update(&hmac, p12->authsafes->d.data->data, |
98 | p12->authsafes->d.data->length); | 102 | p12->authsafes->d.data->length); |
99 | HMAC_Final(&hmac, mac, maclen); | 103 | HMAC_Final(&hmac, mac, maclen); |