提交 f5cee414 编写于 作者: S Shane Lontis 提交者: Pauli

key zeroisation fix for p12

Reviewed-by: NPaul Yang <yang.yang@baishancloud.com>
Reviewed-by: NPaul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/7109)
上级 0239283d
...@@ -75,6 +75,7 @@ static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen, ...@@ -75,6 +75,7 @@ static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
unsigned char *out, unsigned char *out,
const EVP_MD *md_type)) const EVP_MD *md_type))
{ {
int ret = 0;
const EVP_MD *md_type; const EVP_MD *md_type;
HMAC_CTX *hmac = NULL; HMAC_CTX *hmac = NULL;
unsigned char key[EVP_MAX_MD_SIZE], *salt; unsigned char key[EVP_MAX_MD_SIZE], *salt;
...@@ -116,24 +117,27 @@ static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen, ...@@ -116,24 +117,27 @@ static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
if (!pkcs12_gen_gost_mac_key(pass, passlen, salt, saltlen, iter, if (!pkcs12_gen_gost_mac_key(pass, passlen, salt, saltlen, iter,
md_size, key, md_type)) { md_size, key, md_type)) {
PKCS12err(PKCS12_F_PKCS12_GEN_MAC, PKCS12_R_KEY_GEN_ERROR); PKCS12err(PKCS12_F_PKCS12_GEN_MAC, PKCS12_R_KEY_GEN_ERROR);
return 0; goto err;
} }
} else } else
if (!(*pkcs12_key_gen)(pass, passlen, salt, saltlen, PKCS12_MAC_ID, if (!(*pkcs12_key_gen)(pass, passlen, salt, saltlen, PKCS12_MAC_ID,
iter, md_size, key, md_type)) { iter, md_size, key, md_type)) {
PKCS12err(PKCS12_F_PKCS12_GEN_MAC, PKCS12_R_KEY_GEN_ERROR); PKCS12err(PKCS12_F_PKCS12_GEN_MAC, PKCS12_R_KEY_GEN_ERROR);
return 0; goto err;
} }
if ((hmac = HMAC_CTX_new()) == NULL if ((hmac = HMAC_CTX_new()) == NULL
|| !HMAC_Init_ex(hmac, key, md_size, md_type, NULL) || !HMAC_Init_ex(hmac, key, md_size, md_type, NULL)
|| !HMAC_Update(hmac, p12->authsafes->d.data->data, || !HMAC_Update(hmac, p12->authsafes->d.data->data,
p12->authsafes->d.data->length) p12->authsafes->d.data->length)
|| !HMAC_Final(hmac, mac, maclen)) { || !HMAC_Final(hmac, mac, maclen)) {
HMAC_CTX_free(hmac); goto err;
return 0;
} }
ret = 1;
err:
OPENSSL_cleanse(key, sizeof(key));
HMAC_CTX_free(hmac); HMAC_CTX_free(hmac);
return 1; return ret;
} }
int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册