forked from pool/libgcrypt
Pedro Monreal Gonzalez
dea0435690
- Update to 1.9.1 * *Fix exploitable bug* in hash functions introduced with 1.9.0. [bsc#1181632, CVE-2021-3345] * Return an error if a negative MPI is used with sexp scan functions. * Check for operational FIPS in the random and KDF functions. * Fix compile error on ARMv7 with NEON disabled. * Fix self-test in KDF module. * Improve assembler checks for better LTO support. * Fix 32-bit cross build on x86. * Fix non-NEON ARM assembly implementation for SHA512. * Fix build problems with the cipher_bulk_ops_t typedef. * Fix Ed25519 private key handling for preceding ZEROs. * Fix overflow in modular inverse implementation. * Fix register access for AVX/AVX2 implementations of Blake2. * Add optimized cipher and hash functions for s390x/zSeries. * Use hardware bit counting functionx when available. * Update DSA functions to match FIPS 186-3. * New self-tests for CMACs and KDFs. * Add bulk cipher functions for OFB and GCM modes. - Update libgpg-error required version - Use the suffix variable correctly in get_hmac_path() - Rebase libgcrypt-fips_selftest_trigger_file.patch - Add the global config file /etc/gcrypt/random.conf * This file can be used to globally change parameters of the random generator with the options: only-urandom and disable-jent. - Update to 1.9.0: OBS-URL: https://build.opensuse.org/request/show/868925 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/libgcrypt?expand=0&rev=142
67 lines
2.6 KiB
Diff
67 lines
2.6 KiB
Diff
Index: libgcrypt-1.9.1/cipher/dsa.c
|
|
===================================================================
|
|
--- libgcrypt-1.9.1.orig/cipher/dsa.c
|
|
+++ libgcrypt-1.9.1/cipher/dsa.c
|
|
@@ -457,13 +457,22 @@ generate_fips186 (DSA_secret_key *sk, un
|
|
&prime_q, &prime_p,
|
|
r_counter,
|
|
r_seed, r_seedlen);
|
|
- else
|
|
+ else if (!domain->p || !domain->q)
|
|
ec = _gcry_generate_fips186_3_prime (nbits, qbits,
|
|
initial_seed.seed,
|
|
initial_seed.seedlen,
|
|
&prime_q, &prime_p,
|
|
r_counter,
|
|
r_seed, r_seedlen, NULL);
|
|
+ else
|
|
+ {
|
|
+ /* Domain parameters p and q are given; use them. */
|
|
+ prime_p = mpi_copy (domain->p);
|
|
+ prime_q = mpi_copy (domain->q);
|
|
+ gcry_assert (mpi_get_nbits (prime_p) == nbits);
|
|
+ gcry_assert (mpi_get_nbits (prime_q) == qbits);
|
|
+ ec = 0;
|
|
+ }
|
|
sexp_release (initial_seed.sexp);
|
|
if (ec)
|
|
goto leave;
|
|
@@ -859,13 +868,12 @@ dsa_generate (const gcry_sexp_t genparms
|
|
sexp_release (l1);
|
|
sexp_release (domainsexp);
|
|
|
|
- /* Check that all domain parameters are available. */
|
|
- if (!domain.p || !domain.q || !domain.g)
|
|
+ /* Check that p and q domain parameters are available. */
|
|
+ if (!domain.p || !domain.q || (!domain.g && !(flags & PUBKEY_FLAG_USE_FIPS186)))
|
|
{
|
|
_gcry_mpi_release (domain.p);
|
|
_gcry_mpi_release (domain.q);
|
|
_gcry_mpi_release (domain.g);
|
|
- sexp_release (deriveparms);
|
|
return GPG_ERR_MISSING_VALUE;
|
|
}
|
|
|
|
Index: libgcrypt-1.9.1/cipher/rsa.c
|
|
===================================================================
|
|
--- libgcrypt-1.9.1.orig/cipher/rsa.c
|
|
+++ libgcrypt-1.9.1/cipher/rsa.c
|
|
@@ -389,7 +389,7 @@ generate_fips (RSA_secret_key *sk, unsig
|
|
|
|
if (nbits < 1024 || (nbits & 0x1FF))
|
|
return GPG_ERR_INV_VALUE;
|
|
- if (_gcry_enforced_fips_mode() && nbits != 2048 && nbits != 3072)
|
|
+ if (fips_mode() && nbits < 2048)
|
|
return GPG_ERR_INV_VALUE;
|
|
|
|
/* The random quality depends on the transient_key flag. */
|
|
@@ -696,7 +696,7 @@ generate_x931 (RSA_secret_key *sk, unsig
|
|
|
|
*swapped = 0;
|
|
|
|
- if (e_value == 1) /* Alias for a secure value. */
|
|
+ if (e_value == 1 || e_value == 0) /* Alias for a secure value. */
|
|
e_value = 65537;
|
|
|
|
/* Point 1 of section 4.1: k = 1024 + 256s with S >= 0 */
|