summaryrefslogtreecommitdiffstats
path: root/providers
diff options
context:
space:
mode:
authorTomas Mraz <tomas@openssl.org>2022-03-10 13:11:21 +0100
committerTomas Mraz <tomas@openssl.org>2022-03-14 10:08:02 +0100
commit8b7d3957fc7e9d728c44cca78e0a7f0aa5537086 (patch)
tree4ba2c8e6da635d2d6a76973651131e11beea1001 /providers
parent0fcbfa84e9c08c36600bb852bdba8e9db412f4a3 (diff)
DH: Make padding always on when X9.42 KDF is used
Fixes #17834 Reviewed-by: Shane Lontis <shane.lontis@oracle.com> Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com> (Merged from https://github.com/openssl/openssl/pull/17859) (cherry picked from commit 01b18775676115945956f4de0eb0cafedaf027ab)
Diffstat (limited to 'providers')
-rw-r--r--providers/implementations/exchange/dh_exch.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/providers/implementations/exchange/dh_exch.c b/providers/implementations/exchange/dh_exch.c
index 3cfb580687..5f1f98805a 100644
--- a/providers/implementations/exchange/dh_exch.c
+++ b/providers/implementations/exchange/dh_exch.c
@@ -141,7 +141,7 @@ static int dh_set_peer(void *vpdhctx, void *vdh)
static int dh_plain_derive(void *vpdhctx,
unsigned char *secret, size_t *secretlen,
- size_t outlen)
+ size_t outlen, unsigned int pad)
{
PROV_DH_CTX *pdhctx = (PROV_DH_CTX *)vpdhctx;
int ret;
@@ -164,7 +164,7 @@ static int dh_plain_derive(void *vpdhctx,
}
DH_get0_key(pdhctx->dhpeer, &pub_key, NULL);
- if (pdhctx->pad)
+ if (pad)
ret = DH_compute_key_padded(secret, pub_key, pdhctx->dh);
else
ret = DH_compute_key(secret, pub_key, pdhctx->dh);
@@ -192,13 +192,13 @@ static int dh_X9_42_kdf_derive(void *vpdhctx, unsigned char *secret,
ERR_raise(ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL);
return 0;
}
- if (!dh_plain_derive(pdhctx, NULL, &stmplen, 0))
+ if (!dh_plain_derive(pdhctx, NULL, &stmplen, 0, 1))
return 0;
if ((stmp = OPENSSL_secure_malloc(stmplen)) == NULL) {
ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
return 0;
}
- if (!dh_plain_derive(pdhctx, stmp, &stmplen, stmplen))
+ if (!dh_plain_derive(pdhctx, stmp, &stmplen, stmplen, 1))
goto err;
/* Do KDF stuff */
@@ -229,7 +229,8 @@ static int dh_derive(void *vpdhctx, unsigned char *secret,
switch (pdhctx->kdf_type) {
case PROV_DH_KDF_NONE:
- return dh_plain_derive(pdhctx, secret, psecretlen, outlen);
+ return dh_plain_derive(pdhctx, secret, psecretlen, outlen,
+ pdhctx->pad);
case PROV_DH_KDF_X9_42_ASN1:
return dh_X9_42_kdf_derive(pdhctx, secret, psecretlen, outlen);
default: