libgcrypt-1.9.0-1
This commit is contained in:
parent
c3f576ebd7
commit
b661d80e2f
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
|
||||
|
@ -1,5 +1,5 @@
|
||||
Name: libgcrypt
|
||||
Version: 1.8.7
|
||||
Version: 1.9.0
|
||||
Release: 1%{?dist}
|
||||
URL: https://www.gnupg.org/
|
||||
Source0: libgcrypt-%{version}-hobbled.tar.xz
|
||||
@ -40,18 +40,12 @@ 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
|
||||
|
||||
%global gcrylibdir %{_libdir}
|
||||
%global gcrysoname libgcrypt.so.20
|
||||
@ -98,12 +92,9 @@ 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
|
||||
|
||||
cp %{SOURCE4} cipher/
|
||||
cp %{SOURCE5} %{SOURCE6} tests/
|
||||
@ -213,6 +204,9 @@ install -m644 %{SOURCE7} $RPM_BUILD_ROOT/etc/gcrypt/random.conf
|
||||
%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