Merged update from upstream sources
This is an automated DistroBaker update from upstream sources. If you do not know what this is about or would like to opt out, contact the OSCI team. Source: https://src.fedoraproject.org/rpms/libgcrypt.git#e12a03494690ed17d13ee81d78f4e1d8e7b0a083
This commit is contained in:
parent
c0967add9b
commit
570c9025e0
1
.gitignore
vendored
1
.gitignore
vendored
@ -23,3 +23,4 @@ libgcrypt-1.4.5-hobbled.tar.bz2
|
||||
/libgcrypt-1.8.5-hobbled.tar.xz
|
||||
/libgcrypt-1.8.6-hobbled.tar.xz
|
||||
/libgcrypt-1.8.7-hobbled.tar.xz
|
||||
/libgcrypt-1.9.0-hobbled.tar.xz
|
||||
|
14
curves.c
14
curves.c
@ -32,8 +32,8 @@
|
||||
#define PGM "curves"
|
||||
#include "t-common.h"
|
||||
|
||||
/* Number of curves defined in ../cipger/ecc.c */
|
||||
#define N_CURVES 14
|
||||
/* Number of curves defined in ../cipger/ecc-curves.c */
|
||||
#define N_CURVES 19
|
||||
|
||||
/* A real world sample public key. */
|
||||
static char const sample_key_1[] =
|
||||
@ -52,8 +52,6 @@ static char const sample_key_1[] =
|
||||
static char const sample_key_1_curve[] = "NIST P-256";
|
||||
static unsigned int sample_key_1_nbits = 256;
|
||||
|
||||
|
||||
|
||||
static void
|
||||
list_curves (void)
|
||||
{
|
||||
@ -95,7 +93,6 @@ check_matching (void)
|
||||
sample_key_1_nbits, nbits);
|
||||
|
||||
gcry_sexp_release (key);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -117,7 +114,6 @@ check_get_params (void)
|
||||
sample_key_1_curve, name);
|
||||
|
||||
gcry_sexp_release (param);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -132,10 +128,10 @@ main (int argc, char **argv)
|
||||
if (!gcry_check_version (GCRYPT_VERSION))
|
||||
die ("version mismatch\n");
|
||||
|
||||
xgcry_control (GCRYCTL_DISABLE_SECMEM, 0);
|
||||
xgcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
xgcry_control ((GCRYCTL_DISABLE_SECMEM, 0));
|
||||
xgcry_control ((GCRYCTL_INITIALIZATION_FINISHED, 0));
|
||||
if (debug)
|
||||
xgcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u, 0);
|
||||
xgcry_control ((GCRYCTL_SET_DEBUG_FLAGS, 1u, 0));
|
||||
list_curves ();
|
||||
check_matching ();
|
||||
check_get_params ();
|
||||
|
758
ecc-curves.c
758
ecc-curves.c
File diff suppressed because it is too large
Load Diff
@ -1,322 +0,0 @@
|
||||
diff -up libgcrypt-1.8.3/cipher/cipher-cmac.c.cmac-selftest libgcrypt-1.8.3/cipher/cipher-cmac.c
|
||||
--- libgcrypt-1.8.3/cipher/cipher-cmac.c.cmac-selftest 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.3/cipher/cipher-cmac.c 2019-05-31 17:33:35.594407152 +0200
|
||||
@@ -251,3 +251,246 @@ _gcry_cipher_cmac_set_subkeys (gcry_ciph
|
||||
|
||||
return GPG_ERR_NO_ERROR;
|
||||
}
|
||||
+
|
||||
+/* CMAC selftests.
|
||||
+ * Copyright (C) 2008 Free Software Foundation, Inc.
|
||||
+ * Copyright (C) 2019 Red Hat, Inc.
|
||||
+ */
|
||||
+
|
||||
+
|
||||
+
|
||||
+/* Check one MAC with MAC ALGO using the regular MAC
|
||||
+ * API. (DATA,DATALEN) is the data to be MACed, (KEY,KEYLEN) the key
|
||||
+ * and (EXPECT,EXPECTLEN) the expected result. If TRUNC is set, the
|
||||
+ * EXPECTLEN may be less than the digest length. Returns NULL on
|
||||
+ * success or a string describing the failure. */
|
||||
+static const char *
|
||||
+check_one (int algo,
|
||||
+ const void *data, size_t datalen,
|
||||
+ const void *key, size_t keylen,
|
||||
+ const void *expect, size_t expectlen)
|
||||
+{
|
||||
+ gcry_mac_hd_t hd;
|
||||
+ unsigned char mac[512]; /* hardcoded to avoid allocation */
|
||||
+ size_t macoutlen = expectlen;
|
||||
+
|
||||
+/* printf ("MAC algo %d\n", algo); */
|
||||
+ if (_gcry_mac_get_algo_maclen (algo) != expectlen ||
|
||||
+ expectlen > sizeof (mac))
|
||||
+ return "invalid tests data";
|
||||
+ if (_gcry_mac_open (&hd, algo, 0, NULL))
|
||||
+ return "gcry_mac_open failed";
|
||||
+ if (_gcry_mac_setkey (hd, key, keylen))
|
||||
+ {
|
||||
+ _gcry_mac_close (hd);
|
||||
+ return "gcry_md_setkey failed";
|
||||
+ }
|
||||
+ if (_gcry_mac_write (hd, data, datalen))
|
||||
+ {
|
||||
+ _gcry_mac_close (hd);
|
||||
+ return "gcry_mac_write failed";
|
||||
+ }
|
||||
+ if (_gcry_mac_read (hd, mac, &macoutlen))
|
||||
+ {
|
||||
+ _gcry_mac_close (hd);
|
||||
+ return "gcry_mac_read failed";
|
||||
+ }
|
||||
+ _gcry_mac_close (hd);
|
||||
+ if (macoutlen != expectlen || memcmp (mac, expect, expectlen))
|
||||
+ {
|
||||
+/* int i; */
|
||||
+
|
||||
+/* fputs (" {", stdout); */
|
||||
+/* for (i=0; i < expectlen-1; i++) */
|
||||
+/* { */
|
||||
+/* if (i && !(i % 8)) */
|
||||
+/* fputs ("\n ", stdout); */
|
||||
+/* printf (" 0x%02x,", mac[i]); */
|
||||
+/* } */
|
||||
+/* printf (" 0x%02x } },\n", mac[i]); */
|
||||
+
|
||||
+ return "does not match";
|
||||
+ }
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static gpg_err_code_t
|
||||
+selftests_cmac_tdes (int extended, selftest_report_func_t report)
|
||||
+{
|
||||
+ const char *what;
|
||||
+ const char *errtxt;
|
||||
+
|
||||
+ what = "Basic TDES";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_3DES,
|
||||
+ "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
|
||||
+ "\xae\x2d\x8a\x57", 20,
|
||||
+ "\x8a\xa8\x3b\xf8\xcb\xda\x10\x62\x0b\xc1\xbf\x19\xfb\xb6\xcd\x58"
|
||||
+ "\xbc\x31\x3d\x4a\x37\x1c\xa8\xb5", 24,
|
||||
+ "\x74\x3d\xdb\xe0\xce\x2d\xc2\xed", 8);
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+
|
||||
+ if (extended)
|
||||
+ {
|
||||
+ what = "Extended TDES #1";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_3DES,
|
||||
+ "", 0,
|
||||
+ "\x8a\xa8\x3b\xf8\xcb\xda\x10\x62\x0b\xc1\xbf\x19\xfb\xb6\xcd\x58"
|
||||
+ "\xbc\x31\x3d\x4a\x37\x1c\xa8\xb5", 24,
|
||||
+ "\xb7\xa6\x88\xe1\x22\xff\xaf\x95", 8);
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+
|
||||
+ what = "Extended TDES #2";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_3DES,
|
||||
+ "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96", 8,
|
||||
+ "\x8a\xa8\x3b\xf8\xcb\xda\x10\x62\x0b\xc1\xbf\x19\xfb\xb6\xcd\x58"
|
||||
+ "\xbc\x31\x3d\x4a\x37\x1c\xa8\xb5", 24,
|
||||
+ "\x8e\x8f\x29\x31\x36\x28\x37\x97", 8);
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+
|
||||
+ what = "Extended TDES #3";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_3DES,
|
||||
+ "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
|
||||
+ "\xae\x2d\x8a\x57\x1e\x03\xac\x9c\x9e\xb7\x6f\xac\x45\xaf\x8e\x51", 32,
|
||||
+ "\x8a\xa8\x3b\xf8\xcb\xda\x10\x62\x0b\xc1\xbf\x19\xfb\xb6\xcd\x58"
|
||||
+ "\xbc\x31\x3d\x4a\x37\x1c\xa8\xb5", 24,
|
||||
+ "\x33\xe6\xb1\x09\x24\x00\xea\xe5", 8);
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+ }
|
||||
+
|
||||
+ return 0; /* Succeeded. */
|
||||
+
|
||||
+ failed:
|
||||
+ if (report)
|
||||
+ report ("cmac", GCRY_MAC_CMAC_3DES, what, errtxt);
|
||||
+ return GPG_ERR_SELFTEST_FAILED;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+
|
||||
+static gpg_err_code_t
|
||||
+selftests_cmac_aes (int extended, selftest_report_func_t report)
|
||||
+{
|
||||
+ const char *what;
|
||||
+ const char *errtxt;
|
||||
+
|
||||
+ what = "Basic AES128";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_AES,
|
||||
+ "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
|
||||
+ "\xae\x2d\x8a\x57\x1e\x03\xac\x9c\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
|
||||
+ "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11", 40,
|
||||
+ "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c", 16,
|
||||
+ "\xdf\xa6\x67\x47\xde\x9a\xe6\x30\x30\xca\x32\x61\x14\x97\xc8\x27", 16);
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+
|
||||
+ what = "Basic AES192";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_AES,
|
||||
+ "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
|
||||
+ "\xae\x2d\x8a\x57\x1e\x03\xac\x9c\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
|
||||
+ "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11", 40,
|
||||
+ "\x8e\x73\xb0\xf7\xda\x0e\x64\x52\xc8\x10\xf3\x2b\x80\x90\x79\xe5"
|
||||
+ "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b", 24,
|
||||
+ "\x8a\x1d\xe5\xbe\x2e\xb3\x1a\xad\x08\x9a\x82\xe6\xee\x90\x8b\x0e", 16);
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+
|
||||
+ what = "Basic AES256";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_AES,
|
||||
+ "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
|
||||
+ "\xae\x2d\x8a\x57\x1e\x03\xac\x9c\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
|
||||
+ "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11", 40,
|
||||
+ "\x60\x3d\xeb\x10\x15\xca\x71\xbe\x2b\x73\xae\xf0\x85\x7d\x77\x81"
|
||||
+ "\x1f\x35\x2c\x07\x3b\x61\x08\xd7\x2d\x98\x10\xa3\x09\x14\xdf\xf4", 32,
|
||||
+ "\xaa\xf3\xd8\xf1\xde\x56\x40\xc2\x32\xf5\xb1\x69\xb9\xc9\x11\xe6", 16);
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+ if (extended)
|
||||
+ {
|
||||
+ what = "Extended AES #1";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_AES,
|
||||
+ "", 0,
|
||||
+ "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c", 16,
|
||||
+ "\xbb\x1d\x69\x29\xe9\x59\x37\x28\x7f\xa3\x7d\x12\x9b\x75\x67\x46", 16);
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+
|
||||
+ what = "Extended AES #2";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_AES,
|
||||
+ "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a", 16,
|
||||
+ "\x8e\x73\xb0\xf7\xda\x0e\x64\x52\xc8\x10\xf3\x2b\x80\x90\x79\xe5"
|
||||
+ "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b", 24,
|
||||
+ "\x9e\x99\xa7\xbf\x31\xe7\x10\x90\x06\x62\xf6\x5e\x61\x7c\x51\x84", 16);
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+
|
||||
+ what = "Extended AES #3";
|
||||
+ errtxt = check_one (GCRY_MAC_CMAC_AES,
|
||||
+ "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
|
||||
+ "\xae\x2d\x8a\x57\x1e\x03\xac\x9c\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
|
||||
+ "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
|
||||
+ "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17\xad\x2b\x41\x7b\xe6\x6c\x37\x10", 64,
|
||||
+ "\x60\x3d\xeb\x10\x15\xca\x71\xbe\x2b\x73\xae\xf0\x85\x7d\x77\x81"
|
||||
+ "\x1f\x35\x2c\x07\x3b\x61\x08\xd7\x2d\x98\x10\xa3\x09\x14\xdf\xf4", 32,
|
||||
+ "\xe1\x99\x21\x90\x54\x9f\x6e\xd5\x69\x6a\x2c\x05\x6c\x31\x54\x10", 16 );
|
||||
+ if (errtxt)
|
||||
+ goto failed;
|
||||
+ }
|
||||
+
|
||||
+ return 0; /* Succeeded. */
|
||||
+
|
||||
+ failed:
|
||||
+ if (report)
|
||||
+ report ("cmac", GCRY_MAC_CMAC_AES, what, errtxt);
|
||||
+ return GPG_ERR_SELFTEST_FAILED;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* Run a full self-test for ALGO and return 0 on success. */
|
||||
+static gpg_err_code_t
|
||||
+run_cmac_selftests (int algo, int extended, selftest_report_func_t report)
|
||||
+{
|
||||
+ gpg_err_code_t ec;
|
||||
+
|
||||
+ switch (algo)
|
||||
+ {
|
||||
+ case GCRY_MAC_CMAC_3DES:
|
||||
+ ec = selftests_cmac_tdes (extended, report);
|
||||
+ break;
|
||||
+ case GCRY_MAC_CMAC_AES:
|
||||
+ ec = selftests_cmac_aes (extended, report);
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ ec = GPG_ERR_MAC_ALGO;
|
||||
+ break;
|
||||
+ }
|
||||
+ return ec;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+/* Run the selftests for CMAC with CMAC algorithm ALGO with optional
|
||||
+ reporting function REPORT. */
|
||||
+gpg_error_t
|
||||
+_gcry_cmac_selftest (int algo, int extended, selftest_report_func_t report)
|
||||
+{
|
||||
+ gcry_err_code_t ec = 0;
|
||||
+
|
||||
+ if (!_gcry_mac_algo_info( algo, GCRYCTL_TEST_ALGO, NULL, NULL ))
|
||||
+ {
|
||||
+ ec = run_cmac_selftests (algo, extended, report);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ ec = GPG_ERR_MAC_ALGO;
|
||||
+ if (report)
|
||||
+ report ("mac", algo, "module", "algorithm not available");
|
||||
+ }
|
||||
+ return gpg_error (ec);
|
||||
+}
|
||||
diff -up libgcrypt-1.8.3/src/cipher-proto.h.cmac-selftest libgcrypt-1.8.3/src/cipher-proto.h
|
||||
--- libgcrypt-1.8.3/src/cipher-proto.h.cmac-selftest 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.3/src/cipher-proto.h 2019-05-31 17:29:34.574588234 +0200
|
||||
@@ -256,6 +256,8 @@ gcry_error_t _gcry_pk_selftest (int algo
|
||||
selftest_report_func_t report);
|
||||
gcry_error_t _gcry_hmac_selftest (int algo, int extended,
|
||||
selftest_report_func_t report);
|
||||
+gcry_error_t _gcry_cmac_selftest (int algo, int extended,
|
||||
+ selftest_report_func_t report);
|
||||
|
||||
gcry_error_t _gcry_random_selftest (selftest_report_func_t report);
|
||||
|
||||
diff -up libgcrypt-1.8.3/src/fips.c.cmac-selftest libgcrypt-1.8.3/src/fips.c
|
||||
--- libgcrypt-1.8.3/src/fips.c.cmac-selftest 2018-11-01 15:40:36.051865535 +0100
|
||||
+++ libgcrypt-1.8.3/src/fips.c 2019-05-31 17:31:20.157756640 +0200
|
||||
@@ -521,29 +521,32 @@ run_digest_selftests (int extended)
|
||||
|
||||
/* Run self-tests for all HMAC algorithms. Return 0 on success. */
|
||||
static int
|
||||
-run_hmac_selftests (int extended)
|
||||
+run_mac_selftests (int extended)
|
||||
{
|
||||
- static int algos[] =
|
||||
+ static int algos[][2] =
|
||||
{
|
||||
- GCRY_MD_SHA1,
|
||||
- GCRY_MD_SHA224,
|
||||
- GCRY_MD_SHA256,
|
||||
- GCRY_MD_SHA384,
|
||||
- GCRY_MD_SHA512,
|
||||
- GCRY_MD_SHA3_224,
|
||||
- GCRY_MD_SHA3_256,
|
||||
- GCRY_MD_SHA3_384,
|
||||
- GCRY_MD_SHA3_512,
|
||||
- 0
|
||||
+ { GCRY_MD_SHA1, 0 },
|
||||
+ { GCRY_MD_SHA224, 0 },
|
||||
+ { GCRY_MD_SHA256, 0 },
|
||||
+ { GCRY_MD_SHA384, 0 },
|
||||
+ { GCRY_MD_SHA512, 0 },
|
||||
+ { GCRY_MD_SHA3_224, 0 },
|
||||
+ { GCRY_MD_SHA3_256, 0 },
|
||||
+ { GCRY_MD_SHA3_384, 0 },
|
||||
+ { GCRY_MD_SHA3_512, 0 },
|
||||
+ { GCRY_MAC_CMAC_3DES, 1 },
|
||||
+ { GCRY_MAC_CMAC_AES, 1 },
|
||||
+ { 0, 0 }
|
||||
};
|
||||
int idx;
|
||||
gpg_error_t err;
|
||||
int anyerr = 0;
|
||||
|
||||
- for (idx=0; algos[idx]; idx++)
|
||||
+ for (idx=0; algos[idx][0]; idx++)
|
||||
{
|
||||
- err = _gcry_hmac_selftest (algos[idx], extended, reporter);
|
||||
- reporter ("hmac", algos[idx], NULL,
|
||||
+ err = algos[idx][1] ? _gcry_cmac_selftest (algos[idx][0], extended, reporter) :
|
||||
+ _gcry_hmac_selftest (algos[idx][0], extended, reporter);
|
||||
+ reporter (algos[idx][1] ? "cmac" : "hmac", algos[idx][0], NULL,
|
||||
err? gpg_strerror (err):NULL);
|
||||
if (err)
|
||||
anyerr = 1;
|
||||
@@ -747,7 +750,7 @@ _gcry_fips_run_selftests (int extended)
|
||||
if (run_digest_selftests (extended))
|
||||
goto leave;
|
||||
|
||||
- if (run_hmac_selftests (extended))
|
||||
+ if (run_mac_selftests (extended))
|
||||
goto leave;
|
||||
|
||||
/* Run random tests before the pubkey tests because the latter
|
@ -50,7 +50,7 @@ diff -up libgcrypt-1.8.3/src/global.c.fips-ctor libgcrypt-1.8.3/src/global.c
|
||||
break;
|
||||
|
||||
case GCRYCTL_SET_ENFORCED_FIPS_FLAG:
|
||||
- if (!any_init_done)
|
||||
- if (!_gcry_global_any_init_done)
|
||||
+ if (fips_mode ())
|
||||
{
|
||||
- /* Not yet initialized at all. Set the enforced fips mode flag */
|
||||
|
@ -2,7 +2,7 @@ diff -up libgcrypt-1.8.3/random/random-drbg.c.fips-enttest libgcrypt-1.8.3/rando
|
||||
--- libgcrypt-1.8.3/random/random-drbg.c.fips-enttest 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.3/random/random-drbg.c 2019-06-24 10:04:23.219547141 +0200
|
||||
@@ -317,6 +317,7 @@ struct drbg_state_s
|
||||
unsigned char *ctr_null; /* CTR mode zero buffer */
|
||||
gcry_cipher_hd_t ctr_handle; /* CTR mode cipher handle */
|
||||
int seeded:1; /* DRBG fully seeded? */
|
||||
int pr:1; /* Prediction resistance enabled? */
|
||||
+ int ent_primed:1; /* Previous entropy data primed? */
|
||||
|
@ -2,7 +2,7 @@ diff -up libgcrypt-1.8.4/tests/basic.c.tests-fipsmode libgcrypt-1.8.4/tests/basi
|
||||
--- libgcrypt-1.8.4/tests/basic.c.tests-fipsmode 2018-04-17 17:29:40.000000000 +0200
|
||||
+++ libgcrypt-1.8.4/tests/basic.c 2019-02-12 13:30:48.935791024 +0100
|
||||
@@ -6964,7 +6964,7 @@ check_ciphers (void)
|
||||
check_one_cipher (algos[i], GCRY_CIPHER_MODE_CTR, 0);
|
||||
check_one_cipher (algos[i], GCRY_CIPHER_MODE_EAX, 0);
|
||||
if (gcry_cipher_get_algo_blklen (algos[i]) == GCRY_CCM_BLOCK_LEN)
|
||||
check_one_cipher (algos[i], GCRY_CIPHER_MODE_CCM, 0);
|
||||
- if (gcry_cipher_get_algo_blklen (algos[i]) == GCRY_GCM_BLOCK_LEN)
|
||||
@ -10,7 +10,7 @@ diff -up libgcrypt-1.8.4/tests/basic.c.tests-fipsmode libgcrypt-1.8.4/tests/basi
|
||||
check_one_cipher (algos[i], GCRY_CIPHER_MODE_GCM, 0);
|
||||
if (gcry_cipher_get_algo_blklen (algos[i]) == GCRY_OCB_BLOCK_LEN)
|
||||
check_one_cipher (algos[i], GCRY_CIPHER_MODE_OCB, 0);
|
||||
@@ -7010,11 +7010,17 @@ check_cipher_modes(void)
|
||||
@@ -7010,12 +7010,18 @@ check_cipher_modes(void)
|
||||
check_cfb_cipher ();
|
||||
check_ofb_cipher ();
|
||||
check_ccm_cipher ();
|
||||
@ -24,6 +24,7 @@ diff -up libgcrypt-1.8.4/tests/basic.c.tests-fipsmode libgcrypt-1.8.4/tests/basi
|
||||
+ check_ocb_cipher ();
|
||||
+ }
|
||||
check_xts_cipher ();
|
||||
check_eax_cipher ();
|
||||
- check_gost28147_cipher ();
|
||||
+ if (!in_fips_mode)
|
||||
+ {
|
||||
@ -46,7 +47,7 @@ diff -up libgcrypt-1.8.4/tests/basic.c.tests-fipsmode libgcrypt-1.8.4/tests/basi
|
||||
gcry_md_hd_t md;
|
||||
|
||||
- /* First trigger a self-test. */
|
||||
- xgcry_control (GCRYCTL_FORCE_FIPS_MODE, 0);
|
||||
- xgcry_control ((GCRYCTL_FORCE_FIPS_MODE, 0));
|
||||
if (!gcry_control (GCRYCTL_OPERATIONAL_P, 0))
|
||||
fail ("not in operational state after self-test\n");
|
||||
|
||||
@ -58,7 +59,7 @@ diff -up libgcrypt-1.8.4/tests/basic.c.tests-fipsmode libgcrypt-1.8.4/tests/basi
|
||||
- {
|
||||
- /* Now run a self-test and to get back into
|
||||
- operational state. */
|
||||
- xgcry_control (GCRYCTL_FORCE_FIPS_MODE, 0);
|
||||
- xgcry_control ((GCRYCTL_FORCE_FIPS_MODE, 0));
|
||||
- if (!gcry_control (GCRYCTL_OPERATIONAL_P, 0))
|
||||
- fail ("did not reach operational after error "
|
||||
- "and self-test\n");
|
||||
@ -70,7 +71,7 @@ diff -up libgcrypt-1.8.4/tests/benchmark.c.tests-fipsmode libgcrypt-1.8.4/tests/
|
||||
--- libgcrypt-1.8.4/tests/benchmark.c.tests-fipsmode 2019-02-12 11:31:44.859603883 +0100
|
||||
+++ libgcrypt-1.8.4/tests/benchmark.c 2019-02-12 14:10:40.271999352 +0100
|
||||
@@ -872,8 +872,10 @@ cipher_bench ( const char *algoname )
|
||||
|| (blklen == 1 && modes[modeidx].mode != GCRY_CIPHER_MODE_STREAM))
|
||||
&& algo != GCRY_CIPHER_CHACHA20)
|
||||
continue;
|
||||
|
||||
- if (modes[modeidx].req_blocksize > 0
|
||||
@ -150,9 +151,9 @@ diff -up libgcrypt-1.8.4/tests/t-cv25519.c.tests-fipsmode libgcrypt-1.8.4/tests/
|
||||
--- libgcrypt-1.8.4/tests/t-cv25519.c.tests-fipsmode 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.4/tests/t-cv25519.c 2019-02-12 14:02:35.935705390 +0100
|
||||
@@ -560,6 +560,9 @@ main (int argc, char **argv)
|
||||
xgcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u , 0);
|
||||
xgcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
|
||||
xgcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
xgcry_control ((GCRYCTL_SET_DEBUG_FLAGS, 1u , 0));
|
||||
xgcry_control ((GCRYCTL_ENABLE_QUICK_RANDOM, 0));
|
||||
xgcry_control ((GCRYCTL_INITIALIZATION_FINISHED, 0));
|
||||
+ /* Curve25519 isn't supported in fips mode */
|
||||
+ if (gcry_fips_mode_active())
|
||||
+ return 77;
|
||||
@ -163,13 +164,13 @@ diff -up libgcrypt-1.8.4/tests/t-secmem.c.tests-fipsmode libgcrypt-1.8.4/tests/t
|
||||
--- libgcrypt-1.8.4/tests/t-secmem.c.tests-fipsmode 2017-11-23 19:19:54.000000000 +0100
|
||||
+++ libgcrypt-1.8.4/tests/t-secmem.c 2019-02-12 11:51:02.462190538 +0100
|
||||
@@ -174,7 +174,8 @@ main (int argc, char **argv)
|
||||
xgcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u , 0);
|
||||
xgcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
|
||||
xgcry_control (GCRYCTL_INIT_SECMEM, pool_size, 0);
|
||||
xgcry_control ((GCRYCTL_SET_DEBUG_FLAGS, 1u , 0));
|
||||
xgcry_control ((GCRYCTL_ENABLE_QUICK_RANDOM, 0));
|
||||
xgcry_control ((GCRYCTL_INIT_SECMEM, pool_size, 0));
|
||||
- gcry_set_outofcore_handler (outofcore_handler, NULL);
|
||||
+ if (!gcry_fips_mode_active ())
|
||||
+ gcry_set_outofcore_handler (outofcore_handler, NULL);
|
||||
xgcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
xgcry_control ((GCRYCTL_INITIALIZATION_FINISHED, 0));
|
||||
|
||||
/* Libgcrypt prints a warning when the first overflow is allocated;
|
||||
@@ -184,7 +185,8 @@ main (int argc, char **argv)
|
||||
|
@ -6,9 +6,9 @@ diff -up libgcrypt-1.8.4/random/rndlinux.c.use-poll libgcrypt-1.8.4/random/rndli
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
+#include <poll.h>
|
||||
#if defined(__linux__) && defined(HAVE_SYSCALL)
|
||||
#if defined(__linux__) || !defined(HAVE_GETENTROPY)
|
||||
#ifdef HAVE_SYSCALL
|
||||
# include <sys/syscall.h>
|
||||
#endif
|
||||
@@ -241,9 +242,8 @@ _gcry_rndlinux_gather_random (void (*add
|
||||
return with something we will actually use 100ms. */
|
||||
while (length)
|
||||
@ -18,8 +18,8 @@ diff -up libgcrypt-1.8.4/random/rndlinux.c.use-poll libgcrypt-1.8.4/random/rndli
|
||||
int rc;
|
||||
+ struct pollfd pfd;
|
||||
|
||||
/* If we have a modern Linux kernel, we first try to use the new
|
||||
* getrandom syscall. That call guarantees that the kernel's
|
||||
/* If we have a modern operating system, we first try to use the new
|
||||
* getentropy function. That call guarantees that the kernel's
|
||||
@@ -300,36 +300,25 @@ _gcry_rndlinux_gather_random (void (*add
|
||||
any_need_entropy = 1;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -23,7 +23,7 @@ diff -up libgcrypt-1.8.5/src/fips.c.fips-module libgcrypt-1.8.5/src/fips.c
|
||||
- actually used. The file itself may be empty. */
|
||||
- if ( !access (FIPS_FORCE_FILE, F_OK) )
|
||||
- {
|
||||
- gcry_assert (!no_fips_mode_required);
|
||||
- gcry_assert (!_gcry_no_fips_mode_required);
|
||||
- goto leave;
|
||||
- }
|
||||
-
|
||||
@ -42,7 +42,7 @@ diff -up libgcrypt-1.8.5/src/fips.c.fips-module libgcrypt-1.8.5/src/fips.c
|
||||
- {
|
||||
- /* System is in fips mode. */
|
||||
- fclose (fp);
|
||||
- gcry_assert (!no_fips_mode_required);
|
||||
- gcry_assert (!_gcry_no_fips_mode_required);
|
||||
- goto leave;
|
||||
- }
|
||||
- fclose (fp);
|
||||
@ -65,7 +65,7 @@ diff -up libgcrypt-1.8.5/src/fips.c.fips-module libgcrypt-1.8.5/src/fips.c
|
||||
- }
|
||||
-
|
||||
/* Fips not not requested, set flag. */
|
||||
no_fips_mode_required = 1;
|
||||
_gcry_no_fips_mode_required = 1;
|
||||
|
||||
diff -up libgcrypt-1.8.5/src/g10lib.h.fips-module libgcrypt-1.8.5/src/g10lib.h
|
||||
--- libgcrypt-1.8.5/src/g10lib.h.fips-module 2020-04-20 19:07:45.918919759 +0200
|
||||
@ -77,9 +77,9 @@ diff -up libgcrypt-1.8.5/src/g10lib.h.fips-module libgcrypt-1.8.5/src/g10lib.h
|
||||
+/* The name of the file used to force libgcrypt into fips mode. */
|
||||
+#define FIPS_FORCE_FILE "/etc/gcrypt/fips_enabled"
|
||||
+
|
||||
void _gcry_initialize_fips_mode (int force);
|
||||
extern int _gcry_no_fips_mode_required;
|
||||
|
||||
int _gcry_fips_mode (void);
|
||||
void _gcry_initialize_fips_mode (int force);
|
||||
diff -up libgcrypt-1.8.5/src/global.c.fips-module libgcrypt-1.8.5/src/global.c
|
||||
--- libgcrypt-1.8.5/src/global.c.fips-module 2020-04-20 19:07:45.919919741 +0200
|
||||
+++ libgcrypt-1.8.5/src/global.c 2020-04-20 19:07:45.950919149 +0200
|
||||
|
@ -154,13 +154,13 @@ diff -up libgcrypt-1.8.5/random/rndlinux.c.getrandom libgcrypt-1.8.5/random/rndl
|
||||
--- libgcrypt-1.8.5/random/rndlinux.c.getrandom 2020-04-20 15:01:50.159848963 +0200
|
||||
+++ libgcrypt-1.8.5/random/rndlinux.c 2020-04-20 16:14:21.901610921 +0200
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <poll.h>
|
||||
#if defined(__linux__) && defined(HAVE_SYSCALL)
|
||||
#if defined(__linux__) || !defined(HAVE_GETENTROPY)
|
||||
#ifdef HAVE_SYSCALL
|
||||
# include <sys/syscall.h>
|
||||
+# include <linux/random.h>
|
||||
#endif
|
||||
|
||||
#include "types.h"
|
||||
# ifdef __NR_getrandom
|
||||
# define getentropy(buf,buflen) syscall (__NR_getrandom, buf, buflen, 0)
|
||||
# endif
|
||||
@@ -147,12 +148,12 @@ _gcry_rndlinux_gather_random (void (*add
|
||||
if (!add)
|
||||
{
|
||||
@ -216,25 +216,17 @@ diff -up libgcrypt-1.8.5/random/rndlinux.c.getrandom libgcrypt-1.8.5/random/rndl
|
||||
{
|
||||
if (fd_random == -1)
|
||||
{
|
||||
@@ -255,6 +272,7 @@ _gcry_rndlinux_gather_random (void (*add
|
||||
* syscall and not a new device and thus we are not able to use
|
||||
* select(2) to have a timeout. */
|
||||
#if defined(__linux__) && defined(HAVE_SYSCALL) && defined(__NR_getrandom)
|
||||
+ if (fd == -2)
|
||||
{
|
||||
long ret;
|
||||
size_t nbytes;
|
||||
@@ -270,9 +288,7 @@ _gcry_rndlinux_gather_random (void (*add
|
||||
_gcry_post_syscall ();
|
||||
}
|
||||
while (ret == -1 && errno == EINTR);
|
||||
- if (ret == -1 && errno == ENOSYS)
|
||||
- ; /* The syscall is not supported - fallback to pulling from fd. */
|
||||
- ; /* getentropy is not supported - fallback to pulling from fd. */
|
||||
- else
|
||||
+ if (1)
|
||||
{ /* The syscall is supported. Some sanity checks. */
|
||||
{ /* getentropy is supported. Some sanity checks. */
|
||||
if (ret == -1)
|
||||
log_fatal ("unexpected error from getrandom: %s\n",
|
||||
log_fatal ("unexpected error from getentropy: %s\n",
|
||||
diff -up libgcrypt-1.8.5/src/g10lib.h.getrandom libgcrypt-1.8.5/src/g10lib.h
|
||||
--- libgcrypt-1.8.5/src/g10lib.h.getrandom 2020-04-20 15:08:16.528538580 +0200
|
||||
+++ libgcrypt-1.8.5/src/g10lib.h 2020-04-20 15:08:28.641309399 +0200
|
||||
|
@ -1,348 +0,0 @@
|
||||
diff -up libgcrypt-1.8.5/cipher/camellia-aesni-avx2-amd64.S.intel-cet libgcrypt-1.8.5/cipher/camellia-aesni-avx2-amd64.S
|
||||
--- libgcrypt-1.8.5/cipher/camellia-aesni-avx2-amd64.S.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/cipher/camellia-aesni-avx2-amd64.S 2020-01-23 15:36:44.148972045 +0100
|
||||
@@ -18,8 +18,9 @@
|
||||
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
-#ifdef __x86_64
|
||||
#include <config.h>
|
||||
+
|
||||
+#ifdef __x86_64
|
||||
#if (defined(HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS) || \
|
||||
defined(HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS)) && \
|
||||
defined(ENABLE_AESNI_SUPPORT) && defined(ENABLE_AVX2_SUPPORT)
|
||||
diff -up libgcrypt-1.8.5/cipher/camellia-aesni-avx-amd64.S.intel-cet libgcrypt-1.8.5/cipher/camellia-aesni-avx-amd64.S
|
||||
--- libgcrypt-1.8.5/cipher/camellia-aesni-avx-amd64.S.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/cipher/camellia-aesni-avx-amd64.S 2020-01-23 15:36:44.145972088 +0100
|
||||
@@ -18,8 +18,9 @@
|
||||
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
-#ifdef __x86_64
|
||||
#include <config.h>
|
||||
+
|
||||
+#ifdef __x86_64
|
||||
#if (defined(HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS) || \
|
||||
defined(HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS)) && \
|
||||
defined(ENABLE_AESNI_SUPPORT) && defined(ENABLE_AVX_SUPPORT)
|
||||
diff -up libgcrypt-1.8.5/cipher/chacha20-avx2-amd64.S.intel-cet libgcrypt-1.8.5/cipher/chacha20-avx2-amd64.S
|
||||
--- libgcrypt-1.8.5/cipher/chacha20-avx2-amd64.S.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/cipher/chacha20-avx2-amd64.S 2020-01-23 15:36:16.780250066 +0100
|
||||
@@ -48,6 +48,9 @@
|
||||
.globl _gcry_chacha20_amd64_avx2_blocks
|
||||
ELF(.type _gcry_chacha20_amd64_avx2_blocks,@function;)
|
||||
_gcry_chacha20_amd64_avx2_blocks:
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
.Lchacha_blocks_avx2_local:
|
||||
vzeroupper
|
||||
pushq %rbx
|
||||
diff -up libgcrypt-1.8.5/cipher/chacha20-sse2-amd64.S.intel-cet libgcrypt-1.8.5/cipher/chacha20-sse2-amd64.S
|
||||
--- libgcrypt-1.8.5/cipher/chacha20-sse2-amd64.S.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/cipher/chacha20-sse2-amd64.S 2020-01-23 15:36:16.783250095 +0100
|
||||
@@ -41,6 +41,9 @@
|
||||
.globl _gcry_chacha20_amd64_sse2_blocks
|
||||
ELF(.type _gcry_chacha20_amd64_sse2_blocks,@function;)
|
||||
_gcry_chacha20_amd64_sse2_blocks:
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
.Lchacha_blocks_sse2_local:
|
||||
pushq %rbx
|
||||
pushq %rbp
|
||||
diff -up libgcrypt-1.8.5/cipher/poly1305-avx2-amd64.S.intel-cet libgcrypt-1.8.5/cipher/poly1305-avx2-amd64.S
|
||||
--- libgcrypt-1.8.5/cipher/poly1305-avx2-amd64.S.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/cipher/poly1305-avx2-amd64.S 2020-01-23 15:36:16.784250105 +0100
|
||||
@@ -43,6 +43,9 @@
|
||||
.globl _gcry_poly1305_amd64_avx2_init_ext
|
||||
ELF(.type _gcry_poly1305_amd64_avx2_init_ext,@function;)
|
||||
_gcry_poly1305_amd64_avx2_init_ext:
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
.Lpoly1305_init_ext_avx2_local:
|
||||
xor %edx, %edx
|
||||
vzeroupper
|
||||
@@ -406,6 +409,9 @@ ELF(.size _gcry_poly1305_amd64_avx2_init
|
||||
.globl _gcry_poly1305_amd64_avx2_blocks
|
||||
ELF(.type _gcry_poly1305_amd64_avx2_blocks,@function;)
|
||||
_gcry_poly1305_amd64_avx2_blocks:
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
.Lpoly1305_blocks_avx2_local:
|
||||
vzeroupper
|
||||
pushq %rbp
|
||||
@@ -732,6 +738,9 @@ ELF(.size _gcry_poly1305_amd64_avx2_bloc
|
||||
.globl _gcry_poly1305_amd64_avx2_finish_ext
|
||||
ELF(.type _gcry_poly1305_amd64_avx2_finish_ext,@function;)
|
||||
_gcry_poly1305_amd64_avx2_finish_ext:
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
.Lpoly1305_finish_ext_avx2_local:
|
||||
vzeroupper
|
||||
pushq %rbp
|
||||
diff -up libgcrypt-1.8.5/cipher/poly1305-sse2-amd64.S.intel-cet libgcrypt-1.8.5/cipher/poly1305-sse2-amd64.S
|
||||
--- libgcrypt-1.8.5/cipher/poly1305-sse2-amd64.S.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/cipher/poly1305-sse2-amd64.S 2020-01-23 15:36:16.787250134 +0100
|
||||
@@ -42,6 +42,9 @@
|
||||
.globl _gcry_poly1305_amd64_sse2_init_ext
|
||||
ELF(.type _gcry_poly1305_amd64_sse2_init_ext,@function;)
|
||||
_gcry_poly1305_amd64_sse2_init_ext:
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
.Lpoly1305_init_ext_x86_local:
|
||||
xor %edx, %edx
|
||||
pushq %r12
|
||||
@@ -288,6 +291,9 @@ ELF(.size _gcry_poly1305_amd64_sse2_init
|
||||
.globl _gcry_poly1305_amd64_sse2_finish_ext
|
||||
ELF(.type _gcry_poly1305_amd64_sse2_finish_ext,@function;)
|
||||
_gcry_poly1305_amd64_sse2_finish_ext:
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
.Lpoly1305_finish_ext_x86_local:
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
@@ -439,6 +445,9 @@ ELF(.size _gcry_poly1305_amd64_sse2_fini
|
||||
.globl _gcry_poly1305_amd64_sse2_blocks
|
||||
ELF(.type _gcry_poly1305_amd64_sse2_blocks,@function;)
|
||||
_gcry_poly1305_amd64_sse2_blocks:
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
.Lpoly1305_blocks_x86_local:
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
diff -up libgcrypt-1.8.5/cipher/serpent-avx2-amd64.S.intel-cet libgcrypt-1.8.5/cipher/serpent-avx2-amd64.S
|
||||
--- libgcrypt-1.8.5/cipher/serpent-avx2-amd64.S.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/cipher/serpent-avx2-amd64.S 2020-01-23 15:36:44.151972003 +0100
|
||||
@@ -18,8 +18,9 @@
|
||||
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
-#ifdef __x86_64
|
||||
#include <config.h>
|
||||
+
|
||||
+#ifdef __x86_64
|
||||
#if (defined(HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS) || \
|
||||
defined(HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS)) && defined(USE_SERPENT) && \
|
||||
defined(ENABLE_AVX2_SUPPORT)
|
||||
diff -up libgcrypt-1.8.5/configure.ac.intel-cet libgcrypt-1.8.5/configure.ac
|
||||
--- libgcrypt-1.8.5/configure.ac.intel-cet 2019-08-29 15:00:08.000000000 +0200
|
||||
+++ libgcrypt-1.8.5/configure.ac 2020-01-23 15:35:28.147774463 +0100
|
||||
@@ -95,6 +95,12 @@ AH_TOP([
|
||||
AH_BOTTOM([
|
||||
#define _GCRYPT_IN_LIBGCRYPT 1
|
||||
|
||||
+/* Add .note.gnu.property section for Intel CET in assembler sources
|
||||
+ when CET is enabled. */
|
||||
+#if defined(__ASSEMBLER__) && defined(__CET__)
|
||||
+# include <cet.h>
|
||||
+#endif
|
||||
+
|
||||
/* If the configure check for endianness has been disabled, get it from
|
||||
OS macros. This is intended for making fat binary builds on OS X. */
|
||||
#ifdef DISABLED_ENDIAN_CHECK
|
||||
diff -up libgcrypt-1.8.5/mpi/config.links.intel-cet libgcrypt-1.8.5/mpi/config.links
|
||||
--- libgcrypt-1.8.5/mpi/config.links.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/mpi/config.links 2020-01-23 15:35:46.398952954 +0100
|
||||
@@ -382,6 +382,16 @@ if test x"$mpi_cpu_arch" = x ; then
|
||||
mpi_cpu_arch="unknown"
|
||||
fi
|
||||
|
||||
+# Add .note.gnu.property section for Intel CET in assembler sources
|
||||
+# when CET is enabled. */
|
||||
+if test x"$mpi_cpu_arch" = xx86 ; then
|
||||
+ cat <<EOF >> ./mpi/asm-syntax.h
|
||||
+
|
||||
+#if defined(__ASSEMBLER__) && defined(__CET__)
|
||||
+# include <cet.h>
|
||||
+#endif
|
||||
+EOF
|
||||
+fi
|
||||
|
||||
# Make sysdep.h
|
||||
echo '/* created by config.links - do not edit */' >./mpi/sysdep.h
|
||||
diff -up libgcrypt-1.8.5/mpi/i386/mpih-add1.S.intel-cet libgcrypt-1.8.5/mpi/i386/mpih-add1.S
|
||||
--- libgcrypt-1.8.5/mpi/i386/mpih-add1.S.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/mpi/i386/mpih-add1.S 2020-01-23 15:37:40.470175379 +0100
|
||||
@@ -52,6 +52,10 @@ C_SYMBOL_NAME(_gcry_mpih_add_n:)
|
||||
movl 20(%esp),%edx /* s2_ptr */
|
||||
movl 24(%esp),%ecx /* size */
|
||||
|
||||
+#if defined __CET__ && (__CET__ & 1) != 0
|
||||
+ pushl %ebx
|
||||
+#endif
|
||||
+
|
||||
movl %ecx,%eax
|
||||
shrl $3,%ecx /* compute count for unrolled loop */
|
||||
negl %eax
|
||||
@@ -63,6 +67,9 @@ C_SYMBOL_NAME(_gcry_mpih_add_n:)
|
||||
subl %eax,%esi /* ... by a constant when we ... */
|
||||
subl %eax,%edx /* ... enter the loop */
|
||||
shrl $2,%eax /* restore previous value */
|
||||
+#if defined __CET__ && (__CET__ & 1) != 0
|
||||
+ leal -4(,%eax,4),%ebx /* Count for 4-byte endbr32 */
|
||||
+#endif
|
||||
#ifdef PIC
|
||||
/* Calculate start address in loop for PIC. Due to limitations in some
|
||||
assemblers, Loop-L0-3 cannot be put into the leal */
|
||||
@@ -75,29 +82,53 @@ L0: leal (%eax,%eax,8),%eax
|
||||
/* Calculate start address in loop for non-PIC. */
|
||||
leal (Loop - 3)(%eax,%eax,8),%eax
|
||||
#endif
|
||||
+#if defined __CET__ && (__CET__ & 1) != 0
|
||||
+ addl %ebx,%eax /* Adjust for endbr32 */
|
||||
+#endif
|
||||
jmp *%eax /* jump into loop */
|
||||
ALIGN (3)
|
||||
Loop: movl (%esi),%eax
|
||||
adcl (%edx),%eax
|
||||
movl %eax,(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 4(%esi),%eax
|
||||
adcl 4(%edx),%eax
|
||||
movl %eax,4(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 8(%esi),%eax
|
||||
adcl 8(%edx),%eax
|
||||
movl %eax,8(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 12(%esi),%eax
|
||||
adcl 12(%edx),%eax
|
||||
movl %eax,12(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 16(%esi),%eax
|
||||
adcl 16(%edx),%eax
|
||||
movl %eax,16(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 20(%esi),%eax
|
||||
adcl 20(%edx),%eax
|
||||
movl %eax,20(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 24(%esi),%eax
|
||||
adcl 24(%edx),%eax
|
||||
movl %eax,24(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 28(%esi),%eax
|
||||
adcl 28(%edx),%eax
|
||||
movl %eax,28(%edi)
|
||||
@@ -110,6 +141,10 @@ Loop: movl (%esi),%eax
|
||||
sbbl %eax,%eax
|
||||
negl %eax
|
||||
|
||||
+#if defined __CET__ && (__CET__ & 1) != 0
|
||||
+ popl %ebx
|
||||
+#endif
|
||||
+
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
diff -up libgcrypt-1.8.5/mpi/i386/mpih-sub1.S.intel-cet libgcrypt-1.8.5/mpi/i386/mpih-sub1.S
|
||||
--- libgcrypt-1.8.5/mpi/i386/mpih-sub1.S.intel-cet 2017-11-23 19:16:58.000000000 +0100
|
||||
+++ libgcrypt-1.8.5/mpi/i386/mpih-sub1.S 2020-01-23 15:37:40.472175351 +0100
|
||||
@@ -53,6 +53,10 @@ C_SYMBOL_NAME(_gcry_mpih_sub_n:)
|
||||
movl 20(%esp),%edx /* s2_ptr */
|
||||
movl 24(%esp),%ecx /* size */
|
||||
|
||||
+#if defined __CET__ && (__CET__ & 1) != 0
|
||||
+ pushl %ebx
|
||||
+#endif
|
||||
+
|
||||
movl %ecx,%eax
|
||||
shrl $3,%ecx /* compute count for unrolled loop */
|
||||
negl %eax
|
||||
@@ -64,6 +68,9 @@ C_SYMBOL_NAME(_gcry_mpih_sub_n:)
|
||||
subl %eax,%esi /* ... by a constant when we ... */
|
||||
subl %eax,%edx /* ... enter the loop */
|
||||
shrl $2,%eax /* restore previous value */
|
||||
+#if defined __CET__ && (__CET__ & 1) != 0
|
||||
+ leal -4(,%eax,4),%ebx /* Count for 4-byte endbr32 */
|
||||
+#endif
|
||||
#ifdef PIC
|
||||
/* Calculate start address in loop for PIC. Due to limitations in some
|
||||
assemblers, Loop-L0-3 cannot be put into the leal */
|
||||
@@ -76,29 +83,53 @@ L0: leal (%eax,%eax,8),%eax
|
||||
/* Calculate start address in loop for non-PIC. */
|
||||
leal (Loop - 3)(%eax,%eax,8),%eax
|
||||
#endif
|
||||
+#if defined __CET__ && (__CET__ & 1) != 0
|
||||
+ addl %ebx,%eax /* Adjust for endbr32 */
|
||||
+#endif
|
||||
jmp *%eax /* jump into loop */
|
||||
ALIGN (3)
|
||||
Loop: movl (%esi),%eax
|
||||
sbbl (%edx),%eax
|
||||
movl %eax,(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 4(%esi),%eax
|
||||
sbbl 4(%edx),%eax
|
||||
movl %eax,4(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 8(%esi),%eax
|
||||
sbbl 8(%edx),%eax
|
||||
movl %eax,8(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 12(%esi),%eax
|
||||
sbbl 12(%edx),%eax
|
||||
movl %eax,12(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 16(%esi),%eax
|
||||
sbbl 16(%edx),%eax
|
||||
movl %eax,16(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 20(%esi),%eax
|
||||
sbbl 20(%edx),%eax
|
||||
movl %eax,20(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 24(%esi),%eax
|
||||
sbbl 24(%edx),%eax
|
||||
movl %eax,24(%edi)
|
||||
+#ifdef _CET_ENDBR
|
||||
+ _CET_ENDBR
|
||||
+#endif
|
||||
movl 28(%esi),%eax
|
||||
sbbl 28(%edx),%eax
|
||||
movl %eax,28(%edi)
|
||||
@@ -111,6 +142,10 @@ Loop: movl (%esi),%eax
|
||||
sbbl %eax,%eax
|
||||
negl %eax
|
||||
|
||||
+#if defined __CET__ && (__CET__ & 1) != 0
|
||||
+ popl %ebx
|
||||
+#endif
|
||||
+
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
@ -75,15 +75,3 @@ diff -up libgcrypt-1.8.5/src/fips.c.use-fipscheck libgcrypt-1.8.5/src/fips.c
|
||||
p = strrchr (fname, '/');
|
||||
if (p)
|
||||
p++;
|
||||
diff -up libgcrypt-1.8.5/src/Makefile.am.use-fipscheck libgcrypt-1.8.5/src/Makefile.am
|
||||
--- libgcrypt-1.8.5/src/Makefile.am.use-fipscheck 2020-04-23 10:18:36.237764702 +0200
|
||||
+++ libgcrypt-1.8.5/src/Makefile.am 2020-04-23 10:19:03.186247455 +0200
|
||||
@@ -125,7 +125,7 @@ libgcrypt_la_LIBADD = $(gcrypt_res) \
|
||||
../cipher/libcipher.la \
|
||||
../random/librandom.la \
|
||||
../mpi/libmpi.la \
|
||||
- ../compat/libcompat.la $(GPG_ERROR_LIBS)
|
||||
+ ../compat/libcompat.la $(GPG_ERROR_LIBS) -ldl
|
||||
|
||||
|
||||
dumpsexp_SOURCES = dumpsexp.c
|
||||
|
31
libgcrypt-1.9.0-kdf-missing-terminator.patch
Normal file
31
libgcrypt-1.9.0-kdf-missing-terminator.patch
Normal file
@ -0,0 +1,31 @@
|
||||
From: Jussi Kivilinna <jussi.kivilinna@iki.fi>
|
||||
Date: Tue, 19 Jan 2021 18:04:30 +0000 (+0200)
|
||||
Subject: kdf: add missing null-terminator for self-test test-vector array
|
||||
X-Git-Url: http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commitdiff_plain;h=c6425a5537294dfe2beaafc9105f7af4ceac677f
|
||||
|
||||
kdf: add missing null-terminator for self-test test-vector array
|
||||
|
||||
* cipher/kdf.c (selftest_pbkdf2): Add null-terminator to TV array.
|
||||
--
|
||||
|
||||
This was causing kdf self-test to fail on s390x builds.
|
||||
|
||||
GnuPG-bug-id: 5254
|
||||
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
|
||||
---
|
||||
|
||||
diff --git a/cipher/kdf.c b/cipher/kdf.c
|
||||
index 3d707bd0..b916a3f8 100644
|
||||
--- a/cipher/kdf.c
|
||||
+++ b/cipher/kdf.c
|
||||
@@ -452,7 +452,8 @@ selftest_pbkdf2 (int extended, selftest_report_func_t report)
|
||||
"\x34\x8c\x89\xdb\xcb\xd3\x2b\x2f\x32\xd8\x14\xb8\x11\x6e\x84\xcf"
|
||||
"\x2b\x17\x34\x7e\xbc\x18\x00\x18\x1c\x4e\x2a\x1f\xb8\xdd\x53\xe1"
|
||||
"\xc6\x35\x51\x8c\x7d\xac\x47\xe9"
|
||||
- }
|
||||
+ },
|
||||
+ { NULL }
|
||||
};
|
||||
const char *what;
|
||||
const char *errtxt;
|
||||
|
@ -1,17 +1,17 @@
|
||||
Name: libgcrypt
|
||||
Version: 1.8.7
|
||||
Version: 1.9.0
|
||||
Release: 1%{?dist}
|
||||
URL: http://www.gnupg.org/
|
||||
URL: https://www.gnupg.org/
|
||||
Source0: libgcrypt-%{version}-hobbled.tar.xz
|
||||
# The original libgcrypt sources now contain potentially patented ECC
|
||||
# cipher support. We have to remove it in the tarball we ship with
|
||||
# the hobble-libgcrypt script.
|
||||
# (We replace it with RH approved ECC in Source4-5)
|
||||
# tar -xf libgcrypt-1.8.7.tar.bz2
|
||||
# pushd libgcrypt-1.8.7 && ../hobble-libgcrypt && popd
|
||||
# tar -cvJf libgcrypt-1.8.7-hobbled.tar.xz libgcrypt-1.8.7
|
||||
#Source0: ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-{version}.tar.bz2
|
||||
#Source1: ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-{version}.tar.bz2.sig
|
||||
# tar -xf libgcrypt-x.y.z.tar.bz2
|
||||
# pushd libgcrypt-x.y.z && ../hobble-libgcrypt && popd
|
||||
# tar -cvJf libgcrypt-x.y.z-hobbled.tar.xz libgcrypt-x.y.z
|
||||
#Source0: https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-{version}.tar.bz2
|
||||
#Source1: https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-{version}.tar.bz2.sig
|
||||
Source2: wk@g10code.com
|
||||
Source3: hobble-libgcrypt
|
||||
# Approved ECC support
|
||||
@ -40,18 +40,14 @@ Patch18: libgcrypt-1.8.3-fips-ctor.patch
|
||||
Patch22: libgcrypt-1.7.3-fips-reqs.patch
|
||||
# Do not try to open /dev/urandom if getrandom() works
|
||||
Patch24: libgcrypt-1.8.5-getrandom.patch
|
||||
# CMAC selftest for FIPS POST
|
||||
Patch25: libgcrypt-1.8.3-cmac-selftest.patch
|
||||
# Continuous FIPS entropy test
|
||||
Patch26: libgcrypt-1.8.3-fips-enttest.patch
|
||||
# Disable non-approved FIPS hashes in the enforced FIPS mode
|
||||
Patch27: libgcrypt-1.8.3-md-fips-enforce.patch
|
||||
# Intel CET support, in upstream master
|
||||
Patch28: libgcrypt-1.8.5-intel-cet.patch
|
||||
# FIPS module is redefined a little bit (implicit by kernel FIPS mode)
|
||||
Patch30: libgcrypt-1.8.5-fips-module.patch
|
||||
# Backported AES performance improvements
|
||||
Patch31: libgcrypt-1.8.5-aes-perf.patch
|
||||
# Missing terminator in the kdf vectors causing s390x builds failing
|
||||
Patch31: libgcrypt-1.9.0-kdf-missing-terminator.patch
|
||||
|
||||
%global gcrylibdir %{_libdir}
|
||||
%global gcrysoname libgcrypt.so.20
|
||||
@ -67,12 +63,13 @@ BuildRequires: gawk, libgpg-error-devel >= 1.11, pkgconfig
|
||||
# This is needed only when patching the .texi doc.
|
||||
BuildRequires: texinfo
|
||||
BuildRequires: autoconf, automake, libtool
|
||||
BuildRequires: make
|
||||
|
||||
%package devel
|
||||
Summary: Development files for the %{name} package
|
||||
License: LGPLv2+ and GPLv2+
|
||||
Requires: libgpg-error-devel
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: pkgconfig
|
||||
|
||||
%description
|
||||
@ -97,12 +94,10 @@ applications using libgcrypt.
|
||||
%patch18 -p1 -b .fips-ctor
|
||||
%patch22 -p1 -b .fips-reqs
|
||||
%patch24 -p1 -b .getrandom
|
||||
%patch25 -p1 -b .cmac-selftest
|
||||
%patch26 -p1 -b .fips-enttest
|
||||
%patch27 -p1 -b .fips-enforce
|
||||
%patch28 -p1 -b .intel-cet
|
||||
%patch30 -p1 -b .fips-module
|
||||
%patch31 -p1 -b .aes-perf
|
||||
%patch31 -p1 -b .kdf-terminator
|
||||
|
||||
cp %{SOURCE4} cipher/
|
||||
cp %{SOURCE5} %{SOURCE6} tests/
|
||||
@ -194,7 +189,6 @@ install -m644 %{SOURCE7} $RPM_BUILD_ROOT/etc/gcrypt/random.conf
|
||||
%{gcrylibdir}/libgcrypt.so.*.*
|
||||
%{gcrylibdir}/%{gcrysoname}
|
||||
%{gcrylibdir}/.%{gcrysoname}.hmac
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING.LIB
|
||||
%doc AUTHORS NEWS THANKS
|
||||
|
||||
@ -210,10 +204,12 @@ install -m644 %{SOURCE7} $RPM_BUILD_ROOT/etc/gcrypt/random.conf
|
||||
%{_mandir}/man1/*
|
||||
|
||||
%{_infodir}/gcrypt.info*
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING
|
||||
|
||||
%changelog
|
||||
* Wed Jan 20 2021 Jakub Jelen <jjelen@redhat.com> - 1.9.0-1
|
||||
- New upstream release (#1917878)
|
||||
|
||||
* Tue Nov 24 2020 Jakub Jelen <jjelen@redhat.com> - 1.8.7-1
|
||||
- new upstream release (#1891123)
|
||||
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (libgcrypt-1.8.7-hobbled.tar.xz) = e9655f5387f08d18dcfcef3bce737aa7bb0242a5ebcb2be0dd2892fad3761496e3e51b283b61e8537b30b157a3ef5657a5bf4288c7d3aec94982b0c6da749876
|
||||
SHA512 (libgcrypt-1.9.0-hobbled.tar.xz) = d4ea9a1b732b05f605f0c99dd2b1e9747539bf2b6a8ff2fad7ab5350888f68b7f0b94bdd9253356ec9c8e6d3b87b5c76bc8dc4fbb3950acd8354b691f1f2ad3e
|
||||
|
@ -1188,11 +1188,11 @@ main (int argc, char **argv)
|
||||
if (!gcry_check_version (GCRYPT_VERSION))
|
||||
die ("version mismatch\n");
|
||||
|
||||
xgcry_control (GCRYCTL_DISABLE_SECMEM, 0);
|
||||
xgcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
|
||||
xgcry_control ((GCRYCTL_DISABLE_SECMEM, 0));
|
||||
xgcry_control ((GCRYCTL_ENABLE_QUICK_RANDOM, 0));
|
||||
if (debug)
|
||||
xgcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u, 0);
|
||||
xgcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
xgcry_control ((GCRYCTL_SET_DEBUG_FLAGS, 1u, 0));
|
||||
xgcry_control ((GCRYCTL_INITIALIZATION_FINISHED, 0));
|
||||
|
||||
set_get_point ();
|
||||
context_alloc ();
|
||||
|
Loading…
Reference in New Issue
Block a user