2c8c022
diff -up libgcrypt-1.7.3/src/visibility.c.fips-reqs libgcrypt-1.7.3/src/visibility.c
2c8c022
--- libgcrypt-1.7.3/src/visibility.c.fips-reqs	2016-03-23 12:59:34.000000000 +0100
2c8c022
+++ libgcrypt-1.7.3/src/visibility.c	2016-11-22 16:29:36.992042480 +0100
2c8c022
@@ -1288,6 +1288,8 @@ gcry_kdf_derive (const void *passphrase,
2c8c022
                  unsigned long iterations,
2c8c022
                  size_t keysize, void *keybuffer)
2c8c022
 {
2c8c022
+  if (!fips_is_operational ())
2c8c022
+    return gpg_error (fips_not_operational ());
2c8c022
   return gpg_error (_gcry_kdf_derive (passphrase, passphraselen, algo, hashalgo,
2c8c022
                                       salt, saltlen, iterations,
2c8c022
                                       keysize, keybuffer));
2c8c022
@@ -1343,6 +1345,13 @@ void
2c8c022
 gcry_mpi_randomize (gcry_mpi_t w,
2c8c022
                     unsigned int nbits, enum gcry_random_level level)
2c8c022
 {
2c8c022
+  if (!fips_is_operational ())
2c8c022
+    {
2c8c022
+      (void)fips_not_operational ();
2c8c022
+      fips_signal_fatal_error ("called in non-operational state");
2c8c022
+      fips_noreturn ();
2c8c022
+    }
2c8c022
+
2c8c022
   _gcry_mpi_randomize (w, nbits, level);
2c8c022
 }
2c8c022
 
2c8c022
@@ -1368,6 +1377,8 @@ gcry_prime_generate (gcry_mpi_t *prime,
2c8c022
                      gcry_random_level_t random_level,
2c8c022
                      unsigned int flags)
2c8c022
 {
2c8c022
+  if (!fips_is_operational ())
2c8c022
+    return gpg_error (fips_not_operational ());
2c8c022
   return gpg_error (_gcry_prime_generate (prime, prime_bits, factor_bits,
2c8c022
                                           factors, cb_func, cb_arg,
2c8c022
                                           random_level, flags));