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
66 lines
2.1 KiB
Diff
66 lines
2.1 KiB
Diff
Index: libgcrypt-1.6.1/tests/fipsdrv.c
|
||
===================================================================
|
||
--- libgcrypt-1.6.1.orig/tests/fipsdrv.c
|
||
+++ libgcrypt-1.6.1/tests/fipsdrv.c
|
||
@@ -2190,11 +2190,12 @@ dsa_hash_from_key(gcry_sexp_t s_key)
|
||
return GCRY_MD_NONE;
|
||
}
|
||
|
||
-
|
||
+
|
||
/* Sign DATA of length DATALEN using the key taken from the S-expression
|
||
encoded KEYFILE. */
|
||
static void
|
||
-run_dsa_sign (const void *data, size_t datalen, const char *keyfile)
|
||
+run_dsa_sign (const void *data, size_t datalen,
|
||
+ int hashalgo, const char *keyfile)
|
||
|
||
{
|
||
gpg_error_t err;
|
||
@@ -2202,13 +2203,20 @@ run_dsa_sign (const void *data, size_t d
|
||
char hash[128];
|
||
gcry_mpi_t tmpmpi;
|
||
int algo;
|
||
+ int algo_len;
|
||
+ int hashalgo_len;
|
||
|
||
s_key = read_sexp_from_file (keyfile);
|
||
algo = dsa_hash_from_key(s_key);
|
||
+ algo_len = gcry_md_get_algo_dlen(algo);
|
||
+ hashalgo_len = gcry_md_get_algo_dlen(hashalgo);
|
||
|
||
- gcry_md_hash_buffer (algo, hash, data, datalen);
|
||
+ if (hashalgo_len < algo_len)
|
||
+ algo_len = hashalgo_len;
|
||
+
|
||
+ gcry_md_hash_buffer (hashalgo, hash, data, datalen);
|
||
err = gcry_mpi_scan (&tmpmpi, GCRYMPI_FMT_USG, hash,
|
||
- gcry_md_get_algo_dlen(algo), NULL);
|
||
+ algo_len, NULL);
|
||
if (!err)
|
||
{
|
||
err = gcry_sexp_build (&s_data, NULL,
|
||
@@ -3000,14 +3008,21 @@ main (int argc, char **argv)
|
||
}
|
||
else if (!strcmp (mode_string, "dsa-sign"))
|
||
{
|
||
+ int algo;
|
||
+
|
||
if (!key_string)
|
||
die ("option --key is required in this mode\n");
|
||
if (access (key_string, R_OK))
|
||
die ("option --key needs to specify an existing keyfile\n");
|
||
+ if (!algo_string)
|
||
+ die ("option --algo is required in this mode\n");
|
||
+ algo = gcry_md_map_name (algo_string);
|
||
+ if (!algo)
|
||
+ die ("digest algorithm `%s' is not supported\n", algo_string);
|
||
if (!data)
|
||
die ("no data available (do not use --chunk)\n");
|
||
|
||
- run_dsa_sign (data, datalen, key_string);
|
||
+ run_dsa_sign (data, datalen, algo, key_string);
|
||
}
|
||
else if (!strcmp (mode_string, "dsa-verify"))
|
||
{
|