You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.8 KiB
62 lines
1.8 KiB
2 years ago
|
diff -up openssl-3.0.1/crypto/dh/dh_key.c.fips3 openssl-3.0.1/crypto/dh/dh_key.c
|
||
|
--- openssl-3.0.1/crypto/dh/dh_key.c.fips3 2022-07-18 16:01:41.159543735 +0200
|
||
|
+++ openssl-3.0.1/crypto/dh/dh_key.c 2022-07-18 16:24:30.251388248 +0200
|
||
|
@@ -43,6 +43,9 @@ int ossl_dh_compute_key(unsigned char *k
|
||
|
BN_MONT_CTX *mont = NULL;
|
||
|
BIGNUM *z = NULL, *pminus1;
|
||
|
int ret = -1;
|
||
|
+#ifdef FIPS_MODULE
|
||
|
+ int validate = 0;
|
||
|
+#endif
|
||
|
|
||
|
if (BN_num_bits(dh->params.p) > OPENSSL_DH_MAX_MODULUS_BITS) {
|
||
|
ERR_raise(ERR_LIB_DH, DH_R_MODULUS_TOO_LARGE);
|
||
|
@@ -54,6 +57,13 @@ int ossl_dh_compute_key(unsigned char *k
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
+#ifdef FIPS_MODULE
|
||
|
+ if (DH_check_pub_key(dh, pub_key, &validate) <= 0) {
|
||
|
+ ERR_raise(ERR_LIB_DH, DH_R_CHECK_PUBKEY_INVALID);
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+#endif
|
||
|
+
|
||
|
ctx = BN_CTX_new_ex(dh->libctx);
|
||
|
if (ctx == NULL)
|
||
|
goto err;
|
||
|
@@ -262,6 +272,9 @@ static int generate_key(DH *dh)
|
||
|
#endif
|
||
|
BN_CTX *ctx = NULL;
|
||
|
BIGNUM *pub_key = NULL, *priv_key = NULL;
|
||
|
+#ifdef FIPS_MODULE
|
||
|
+ int validate = 0;
|
||
|
+#endif
|
||
|
|
||
|
if (BN_num_bits(dh->params.p) > OPENSSL_DH_MAX_MODULUS_BITS) {
|
||
|
ERR_raise(ERR_LIB_DH, DH_R_MODULUS_TOO_LARGE);
|
||
|
@@ -354,8 +367,23 @@ static int generate_key(DH *dh)
|
||
|
if (!ossl_dh_generate_public_key(ctx, dh, priv_key, pub_key))
|
||
|
goto err;
|
||
|
|
||
|
+#ifdef FIPS_MODULE
|
||
|
+ if (DH_check_pub_key(dh, pub_key, &validate) <= 0) {
|
||
|
+ ERR_raise(ERR_LIB_DH, DH_R_CHECK_PUBKEY_INVALID);
|
||
|
+ goto err;
|
||
|
+ }
|
||
|
+#endif
|
||
|
+
|
||
|
dh->pub_key = pub_key;
|
||
|
dh->priv_key = priv_key;
|
||
|
+#ifdef FIPS_MODULE
|
||
|
+ if (ossl_dh_check_pairwise(dh) <= 0) {
|
||
|
+ dh->pub_key = dh->priv_key = NULL;
|
||
|
+ ERR_raise(ERR_LIB_DH, DH_R_CHECK_PUBKEY_INVALID);
|
||
|
+ goto err;
|
||
|
+ }
|
||
|
+#endif
|
||
|
+
|
||
|
dh->dirty_cnt++;
|
||
|
ok = 1;
|
||
|
err:
|