Blame SOURCES/gnutls-3.3.8-fips140-dsa1024.patch

873a72
diff --git a/lib/nettle/int/dsa-fips.h b/lib/nettle/int/dsa-fips.h
873a72
index 08fac25..82d545e 100644
873a72
--- a/lib/nettle/int/dsa-fips.h
873a72
+++ b/lib/nettle/int/dsa-fips.h
873a72
@@ -80,7 +80,7 @@ int
873a72
 _dsa_validate_dss_g(struct dsa_public_key *pub,
873a72
 		    unsigned domain_seed_size, const uint8_t *domain_seed, unsigned index);
873a72
 
873a72
-unsigned _dsa_check_qp_sizes(unsigned q_bits, unsigned p_bits);
873a72
+unsigned _dsa_check_qp_sizes(unsigned q_bits, unsigned p_bits, unsigned generate);
873a72
 
873a72
 /* The following low-level functions can be used for DH key exchange as well 
873a72
  */
873a72
diff --git a/lib/nettle/int/dsa-keygen-fips186.c b/lib/nettle/int/dsa-keygen-fips186.c
873a72
index 2712ddb..1ac9441 100644
873a72
--- a/lib/nettle/int/dsa-keygen-fips186.c
873a72
+++ b/lib/nettle/int/dsa-keygen-fips186.c
873a72
@@ -36,11 +36,11 @@
873a72
 
873a72
 #include <nettle/bignum.h>
873a72
 
873a72
-unsigned _dsa_check_qp_sizes(unsigned q_bits, unsigned p_bits)
873a72
+unsigned _dsa_check_qp_sizes(unsigned q_bits, unsigned p_bits, unsigned generate)
873a72
 {
873a72
 	switch (q_bits) {
873a72
 	case 160:
873a72
-		if (_gnutls_fips_mode_enabled() != 0)
873a72
+		if (_gnutls_fips_mode_enabled() != 0 && generate != 0)
873a72
 			return 0;
873a72
 
873a72
 		if (p_bits != 1024)
873a72
@@ -77,7 +77,7 @@ _dsa_generate_dss_pq(struct dsa_public_key *pub,
873a72
 	uint8_t *storage = NULL;
873a72
 	unsigned storage_length = 0;
873a72
 
873a72
-	ret = _dsa_check_qp_sizes(q_bits, p_bits);
873a72
+	ret = _dsa_check_qp_sizes(q_bits, p_bits, 1);
873a72
 	if (ret == 0) {
873a72
 		return 0;
873a72
 	}
873a72
@@ -375,7 +375,7 @@ dsa_generate_dss_pqg(struct dsa_public_key *pub,
873a72
 	uint8_t domain_seed[MAX_PVP_SEED_SIZE*3];
873a72
 	unsigned domain_seed_size = 0;
873a72
 
873a72
-	ret = _dsa_check_qp_sizes(q_bits, p_bits);
873a72
+	ret = _dsa_check_qp_sizes(q_bits, p_bits, 1);
873a72
 	if (ret == 0)
873a72
 		return 0;
873a72
 
873a72
diff --git a/lib/nettle/int/dsa-validate.c b/lib/nettle/int/dsa-validate.c
873a72
index 3f55755..daa39da 100644
873a72
--- a/lib/nettle/int/dsa-validate.c
873a72
+++ b/lib/nettle/int/dsa-validate.c
873a72
@@ -83,7 +83,7 @@ _dsa_validate_dss_g(struct dsa_public_key *pub,
873a72
 	p_bits = mpz_sizeinbase(pub->p, 2);
873a72
 	q_bits = mpz_sizeinbase(pub->q, 2);
873a72
 
873a72
-	ret = _dsa_check_qp_sizes(q_bits, p_bits);
873a72
+	ret = _dsa_check_qp_sizes(q_bits, p_bits, 0);
873a72
 	if (ret == 0) {
873a72
 		return 0;
873a72
 	}
873a72
@@ -151,7 +151,7 @@ _dsa_validate_dss_pq(struct dsa_public_key *pub,
873a72
 	p_bits = mpz_sizeinbase(pub->p, 2);
873a72
 	q_bits = mpz_sizeinbase(pub->q, 2);
873a72
 
873a72
-	ret = _dsa_check_qp_sizes(q_bits, p_bits);
873a72
+	ret = _dsa_check_qp_sizes(q_bits, p_bits, 0);
873a72
 	if (ret == 0) {
873a72
 		return 0;
873a72
 	}