diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index 6991ac9..be36c4b 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -90,7 +90,7 @@
 # Level 1, depends only on 0.*
 add_subdirectory(digest_extra)
 add_subdirectory(cipher)
-add_subdirectory(rand)
+add_subdirectory(rand_extra)
 add_subdirectory(bio)
 add_subdirectory(bn)
 add_subdirectory(obj)
@@ -177,7 +177,7 @@
   $<TARGET_OBJECTS:buf>
   $<TARGET_OBJECTS:bn>
   $<TARGET_OBJECTS:bio>
-  $<TARGET_OBJECTS:rand>
+  $<TARGET_OBJECTS:rand_extra>
   $<TARGET_OBJECTS:obj>
   $<TARGET_OBJECTS:asn1>
   $<TARGET_OBJECTS:engine>
@@ -245,7 +245,7 @@
   ec/ec_test.cc
   err/err_test.cc
   evp/evp_extra_test.cc
-  rand/ctrdrbg_test.cc
+  fipsmodule/rand/ctrdrbg_test.cc
   rsa/rsa_test.cc
 
   $<TARGET_OBJECTS:gtest_main>
diff --git a/crypto/bn/random.c b/crypto/bn/random.c
index 55eca80..4b3da75 100644
--- a/crypto/bn/random.c
+++ b/crypto/bn/random.c
@@ -117,7 +117,7 @@
 #include <openssl/type_check.h>
 
 #include "../internal.h"
-#include "../rand/internal.h"
+#include "../fipsmodule/rand/internal.h"
 
 
 static const uint8_t kZeroAdditionalData[32] = {0};
diff --git a/crypto/fipsmodule/CMakeLists.txt b/crypto/fipsmodule/CMakeLists.txt
index 375a3db..4c20218 100644
--- a/crypto/fipsmodule/CMakeLists.txt
+++ b/crypto/fipsmodule/CMakeLists.txt
@@ -14,6 +14,7 @@
     vpaes-x86_64.${ASM_EXT}
     aesni-gcm-x86_64.${ASM_EXT}
     ghash-x86_64.${ASM_EXT}
+    rdrand-x86_64.${ASM_EXT}
   )
 endif()
 
@@ -85,6 +86,7 @@
 perlasm(ghash-x86.${ASM_EXT} modes/asm/ghash-x86.pl)
 perlasm(md5-586.${ASM_EXT} md5/asm/md5-586.pl)
 perlasm(md5-x86_64.${ASM_EXT} md5/asm/md5-x86_64.pl)
+perlasm(rdrand-x86_64.${ASM_EXT} rand/asm/rdrand-x86_64.pl)
 perlasm(sha1-586.${ASM_EXT} sha/asm/sha1-586.pl)
 perlasm(sha1-armv4-large.${ASM_EXT} sha/asm/sha1-armv4-large.pl)
 perlasm(sha1-armv8.${ASM_EXT} sha/asm/sha1-armv8.pl)
@@ -198,3 +200,14 @@
 
 target_link_libraries(gcm_test crypto)
 add_dependencies(all_tests gcm_test)
+
+add_executable(
+  ctrdrbg_vector_test
+
+  rand/ctrdrbg_vector_test.cc
+
+  $<TARGET_OBJECTS:test_support>
+)
+
+target_link_libraries(ctrdrbg_vector_test crypto)
+add_dependencies(all_tests ctrdrbg_vector_test)
diff --git a/crypto/fipsmodule/bcm.c b/crypto/fipsmodule/bcm.c
index b93ab83..e90f0a4 100644
--- a/crypto/fipsmodule/bcm.c
+++ b/crypto/fipsmodule/bcm.c
@@ -12,6 +12,10 @@
  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
 
+#if !defined(_GNU_SOURCE)
+#define _GNU_SOURCE  /* needed for syscall() on Linux. */
+#endif
+
 #include <openssl/aead.h>
 #include <openssl/aes.h>
 #include <openssl/base.h>
@@ -19,13 +23,13 @@
 #include <openssl/bytestring.h>
 #include <openssl/crypto.h>
 #include <openssl/des.h>
-#include <openssl/ec_key.h>
 #include <openssl/ecdsa.h>
+#include <openssl/ec_key.h>
 #include <openssl/hmac.h>
 #include <openssl/rsa.h>
 
 #include "../internal.h"
-#include "../rand/internal.h"
+#include "rand/internal.h"
 
 #include "aes/aes.c"
 #include "aes/key_wrap.c"
@@ -41,6 +45,9 @@
 #include "modes/gcm.c"
 #include "modes/ofb.c"
 #include "modes/polyval.c"
+#include "rand/ctrdrbg.c"
+#include "rand/rand.c"
+#include "rand/urandom.c"
 #include "sha/sha1-altivec.c"
 #include "sha/sha1.c"
 #include "sha/sha256.c"
diff --git a/crypto/fipsmodule/delocate.h b/crypto/fipsmodule/delocate.h
index 676073c..f4ee3c8 100644
--- a/crypto/fipsmodule/delocate.h
+++ b/crypto/fipsmodule/delocate.h
@@ -21,13 +21,24 @@
 
 
 #if defined(BORINGSSL_FIPS)
-#define DEFINE_BSS_GET(type, name)            \
+#define DEFINE_BSS_GET(type, name)        \
   static type name __attribute__((used)); \
   type *name##_bss_get(void);
+/* For FIPS builds we require that CRYPTO_ONCE_INIT be zero. */
+#define DEFINE_STATIC_ONCE(name) DEFINE_BSS_GET(CRYPTO_once_t, name)
+/* For FIPS builds we require that CRYPTO_STATIC_MUTEX_INIT be zero. */
+#define DEFINE_STATIC_MUTEX(name) \
+  DEFINE_BSS_GET(struct CRYPTO_STATIC_MUTEX, name)
 #else
 #define DEFINE_BSS_GET(type, name) \
-  static type name;            \
+  static type name;                \
   static type *name##_bss_get(void) { return &name; }
+#define DEFINE_STATIC_ONCE(name)                \
+  static CRYPTO_once_t name = CRYPTO_ONCE_INIT; \
+  static CRYPTO_once_t *name##_bss_get(void) { return &name; }
+#define DEFINE_STATIC_MUTEX(name)                                    \
+  static struct CRYPTO_STATIC_MUTEX name = CRYPTO_STATIC_MUTEX_INIT; \
+  static struct CRYPTO_STATIC_MUTEX *name##_bss_get(void) { return &name; }
 #endif
 
 /* DEFINE_METHOD_FUNCTION defines a function named |name| which returns a
@@ -53,7 +64,7 @@
  * order is undefined. See FIPS.md for more details. */
 #define DEFINE_METHOD_FUNCTION(type, name)                                    \
   DEFINE_BSS_GET(type, name##_storage)                                        \
-  DEFINE_BSS_GET(CRYPTO_once_t, name##_once)                                  \
+  DEFINE_STATIC_ONCE(name##_once)                                             \
   static void name##_do_init(type *out);                                      \
   static void name##_init(void) { name##_do_init(name##_storage_bss_get()); } \
   const type *name(void) {                                                    \
diff --git a/crypto/rand/asm/rdrand-x86_64.pl b/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl
similarity index 96%
rename from crypto/rand/asm/rdrand-x86_64.pl
rename to crypto/fipsmodule/rand/asm/rdrand-x86_64.pl
index c32a55c..3583d4c 100644
--- a/crypto/rand/asm/rdrand-x86_64.pl
+++ b/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl
@@ -19,7 +19,7 @@
 if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
 
 $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+( $xlate="${dir}../../../perlasm/x86_64-xlate.pl" and -f $xlate) or
 die "can't locate x86_64-xlate.pl";
 
 open OUT,"| \"$^X\" $xlate $flavour $output";
diff --git a/crypto/rand/ctrdrbg.c b/crypto/fipsmodule/rand/ctrdrbg.c
similarity index 99%
rename from crypto/rand/ctrdrbg.c
rename to crypto/fipsmodule/rand/ctrdrbg.c
index 2b22f5d..5920837 100644
--- a/crypto/rand/ctrdrbg.c
+++ b/crypto/fipsmodule/rand/ctrdrbg.c
@@ -18,7 +18,7 @@
 #include <openssl/mem.h>
 
 #include "internal.h"
-#include "../cipher/internal.h"
+#include "../../cipher/internal.h"
 
 
 /* Section references in this file refer to SP 800-90Ar1:
diff --git a/crypto/rand/ctrdrbg_test.cc b/crypto/fipsmodule/rand/ctrdrbg_test.cc
similarity index 98%
rename from crypto/rand/ctrdrbg_test.cc
rename to crypto/fipsmodule/rand/ctrdrbg_test.cc
index 2ff1027..a35e6b0 100644
--- a/crypto/rand/ctrdrbg_test.cc
+++ b/crypto/fipsmodule/rand/ctrdrbg_test.cc
@@ -18,7 +18,7 @@
 #include <openssl/sha.h>
 
 #include "internal.h"
-#include "../test/test_util.h"
+#include "../../test/test_util.h"
 
 
 TEST(CTRDRBGTest, Basic) {
diff --git a/crypto/rand/ctrdrbg_vector_test.cc b/crypto/fipsmodule/rand/ctrdrbg_vector_test.cc
similarity index 97%
rename from crypto/rand/ctrdrbg_vector_test.cc
rename to crypto/fipsmodule/rand/ctrdrbg_vector_test.cc
index 7c93861..4680e6e 100644
--- a/crypto/rand/ctrdrbg_vector_test.cc
+++ b/crypto/fipsmodule/rand/ctrdrbg_vector_test.cc
@@ -17,8 +17,8 @@
 #include <openssl/crypto.h>
 
 #include "internal.h"
-#include "../test/test_util.h"
-#include "../test/file_test.h"
+#include "../../test/test_util.h"
+#include "../../test/file_test.h"
 
 
 static bool TestCTRDRBG(FileTest *t, void *arg) {
diff --git a/crypto/rand/ctrdrbg_vectors.txt b/crypto/fipsmodule/rand/ctrdrbg_vectors.txt
similarity index 100%
rename from crypto/rand/ctrdrbg_vectors.txt
rename to crypto/fipsmodule/rand/ctrdrbg_vectors.txt
diff --git a/crypto/rand/internal.h b/crypto/fipsmodule/rand/internal.h
similarity index 97%
rename from crypto/rand/internal.h
rename to crypto/fipsmodule/rand/internal.h
index 349daf0..f569c38 100644
--- a/crypto/rand/internal.h
+++ b/crypto/fipsmodule/rand/internal.h
@@ -17,8 +17,8 @@
 
 #include <openssl/aes.h>
 
-#include "../internal.h"
-#include "../fipsmodule/modes/internal.h"
+#include "../../internal.h"
+#include "../modes/internal.h"
 
 #if defined(__cplusplus)
 extern "C" {
diff --git a/crypto/rand/rand.c b/crypto/fipsmodule/rand/rand.c
similarity index 88%
rename from crypto/rand/rand.c
rename to crypto/fipsmodule/rand/rand.c
index 028979a..e42ad46 100644
--- a/crypto/rand/rand.c
+++ b/crypto/fipsmodule/rand/rand.c
@@ -23,7 +23,7 @@
 #include <openssl/mem.h>
 
 #include "internal.h"
-#include "../internal.h"
+#include "../../internal.h"
 
 
 /* It's assumed that the operating system always has an unfailing source of
@@ -261,53 +261,3 @@
 int RAND_pseudo_bytes(uint8_t *buf, size_t len) {
   return RAND_bytes(buf, len);
 }
-
-void RAND_seed(const void *buf, int num) {
-  /* OpenSSH calls |RAND_seed| before jailing on the assumption that any needed
-   * file descriptors etc will be opened. */
-  uint8_t unused;
-  RAND_bytes(&unused, sizeof(unused));
-}
-
-int RAND_load_file(const char *path, long num) {
-  if (num < 0) {  /* read the "whole file" */
-    return 1;
-  } else if (num <= INT_MAX) {
-    return (int) num;
-  } else {
-    return INT_MAX;
-  }
-}
-
-const char *RAND_file_name(char *buf, size_t num) { return NULL; }
-
-void RAND_add(const void *buf, int num, double entropy) {}
-
-int RAND_egd(const char *path) {
-  return 255;
-}
-
-int RAND_poll(void) {
-  return 1;
-}
-
-int RAND_status(void) {
-  return 1;
-}
-
-static const struct rand_meth_st kSSLeayMethod = {
-  RAND_seed,
-  RAND_bytes,
-  RAND_cleanup,
-  RAND_add,
-  RAND_pseudo_bytes,
-  RAND_status,
-};
-
-RAND_METHOD *RAND_SSLeay(void) {
-  return (RAND_METHOD*) &kSSLeayMethod;
-}
-
-void RAND_set_rand_method(const RAND_METHOD *method) {}
-
-void RAND_cleanup(void) {}
diff --git a/crypto/rand/urandom.c b/crypto/fipsmodule/rand/urandom.c
similarity index 67%
rename from crypto/rand/urandom.c
rename to crypto/fipsmodule/rand/urandom.c
index f3aab44..474c4bc 100644
--- a/crypto/rand/urandom.c
+++ b/crypto/fipsmodule/rand/urandom.c
@@ -12,10 +12,6 @@
  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
 
-#if !defined(_GNU_SOURCE)
-#define _GNU_SOURCE  /* needed for syscall() on Linux. */
-#endif
-
 #include <openssl/rand.h>
 
 #if !defined(OPENSSL_WINDOWS) && !defined(OPENSSL_FUCHSIA) && \
@@ -38,7 +34,8 @@
 #include <openssl/mem.h>
 
 #include "internal.h"
-#include "../internal.h"
+#include "../delocate.h"
+#include "../../internal.h"
 
 
 #if defined(OPENSSL_LINUX)
@@ -78,30 +75,42 @@
 
 #endif  /* OPENSSL_LINUX */
 
-/* requested_lock is used to protect the |*_requested| variables. */
-static struct CRYPTO_STATIC_MUTEX requested_lock = CRYPTO_STATIC_MUTEX_INIT;
+/* rand_lock is used to protect the |*_requested| variables. */
+DEFINE_STATIC_MUTEX(rand_lock);
 
 /* The following constants are magic values of |urandom_fd|. */
-static const int kUnset = -2;
+static const int kUnset = 0;
 static const int kHaveGetrandom = -3;
 
 /* urandom_fd_requested is set by |RAND_set_urandom_fd|. It's protected by
- * |requested_lock|. */
-static int urandom_fd_requested = -2 /* kUnset */;
+ * |rand_lock|. */
+DEFINE_BSS_GET(int, urandom_fd_requested);
 
 /* urandom_fd is a file descriptor to /dev/urandom. It's protected by |once|. */
-static int urandom_fd = -2 /* kUnset */;
+DEFINE_BSS_GET(int, urandom_fd);
 
-static CRYPTO_once_t once = CRYPTO_ONCE_INIT;
+DEFINE_STATIC_ONCE(rand_once);
+
+#if defined(USE_SYS_getrandom) || defined(BORINGSSL_FIPS)
+/* message writes |msg| to stderr. We use this because referencing |stderr|
+ * with |fprintf| generates relocations, which is a problem inside the FIPS
+ * module. */
+static void message(const char *msg) {
+  ssize_t r;
+  do {
+    r = write(2, msg, strlen(msg));
+  } while (r == -1 && errno == EINTR);
+}
+#endif
 
 /* init_once initializes the state of this module to values previously
  * requested. This is the only function that modifies |urandom_fd| and
  * |urandom_buffering|, whose values may be read safely after calling the
  * once. */
 static void init_once(void) {
-  CRYPTO_STATIC_MUTEX_lock_read(&requested_lock);
-  int fd = urandom_fd_requested;
-  CRYPTO_STATIC_MUTEX_unlock_read(&requested_lock);
+  CRYPTO_STATIC_MUTEX_lock_read(rand_lock_bss_get());
+  int fd = *urandom_fd_requested_bss_get();
+  CRYPTO_STATIC_MUTEX_unlock_read(rand_lock_bss_get());
 
 #if defined(USE_SYS_getrandom)
   uint8_t dummy;
@@ -109,20 +118,21 @@
       syscall(SYS_getrandom, &dummy, sizeof(dummy), GRND_NONBLOCK);
 
   if (getrandom_ret == 1) {
-    urandom_fd = kHaveGetrandom;
+    *urandom_fd_bss_get() = kHaveGetrandom;
     return;
   } else if (getrandom_ret == -1 && errno == EAGAIN) {
-    fprintf(stderr,
-            "getrandom indicates that the entropy pool has not been "
-            "initialized. Rather than continue with poor entropy, this process "
-            "will block until entropy is available.\n");
+    message(
+        "getrandom indicates that the entropy pool has not been initialized. "
+        "Rather than continue with poor entropy, this process will block until "
+        "entropy is available.\n");
+
     do {
       getrandom_ret =
           syscall(SYS_getrandom, &dummy, sizeof(dummy), 0 /* no flags */);
     } while (getrandom_ret == -1 && errno == EINTR);
 
     if (getrandom_ret == 1) {
-      urandom_fd = kHaveGetrandom;
+      *urandom_fd_bss_get() = kHaveGetrandom;
       return;
     }
   }
@@ -138,6 +148,19 @@
     abort();
   }
 
+  assert(kUnset == 0);
+  if (fd == kUnset) {
+    /* Because we want to keep |urandom_fd| in the BSS, we have to initialise
+     * it to zero. But zero is a valid file descriptor too. Thus if open
+     * returns zero for /dev/urandom, we dup it to get a non-zero number. */
+    fd = dup(fd);
+    close(kUnset);
+
+    if (fd <= 0) {
+      abort();
+    }
+  }
+
 #if defined(BORINGSSL_FIPS)
   /* In FIPS mode we ensure that the kernel has sufficient entropy before
    * continuing. This is automatically handled by getrandom, which requires
@@ -147,9 +170,9 @@
   for (;;) {
     int entropy_bits;
     if (ioctl(fd, RNDGETENTCNT, &entropy_bits)) {
-      fprintf(stderr,
-              "RNDGETENTCNT on /dev/urandom failed. We cannot continue in this "
-              "case when in FIPS mode.\n");
+      message(
+          "RNDGETENTCNT on /dev/urandom failed. We cannot continue in this "
+          "case when in FIPS mode.\n");
       abort();
     }
 
@@ -159,10 +182,10 @@
     }
 
     if (first_iteration) {
-      fprintf(stderr,
-              "The kernel entropy pool contains too few bits: have %d, want "
-              "%d. This process is built in FIPS mode and will block until "
-              "sufficient entropy is available.\n", entropy_bits, kBitsNeeded);
+      message(
+          "The kernel entropy pool contains too few bits. This process is "
+          "built in FIPS mode and will block until sufficient entropy is "
+          "available.\n");
     }
     first_iteration = 0;
 
@@ -182,7 +205,7 @@
       abort();
     }
   }
-  urandom_fd = fd;
+  *urandom_fd_bss_get() = fd;
 }
 
 void RAND_set_urandom_fd(int fd) {
@@ -191,14 +214,27 @@
     abort();
   }
 
-  CRYPTO_STATIC_MUTEX_lock_write(&requested_lock);
-  urandom_fd_requested = fd;
-  CRYPTO_STATIC_MUTEX_unlock_write(&requested_lock);
+  assert(kUnset == 0);
+  if (fd == kUnset) {
+    /* Because we want to keep |urandom_fd| in the BSS, we have to initialise
+     * it to zero. But zero is a valid file descriptor too. Thus if dup
+     * returned zero we dup it again to get a non-zero number. */
+    fd = dup(fd);
+    close(kUnset);
 
-  CRYPTO_once(&once, init_once);
-  if (urandom_fd == kHaveGetrandom) {
+    if (fd <= 0) {
+      abort();
+    }
+  }
+
+  CRYPTO_STATIC_MUTEX_lock_write(rand_lock_bss_get());
+  *urandom_fd_requested_bss_get() = fd;
+  CRYPTO_STATIC_MUTEX_unlock_write(rand_lock_bss_get());
+
+  CRYPTO_once(rand_once_bss_get(), init_once);
+  if (*urandom_fd_bss_get() == kHaveGetrandom) {
     close(fd);
-  } else if (urandom_fd != fd) {
+  } else if (*urandom_fd_bss_get() != fd) {
     abort();  // Already initialized.
   }
 }
@@ -215,7 +251,7 @@
   while (len > 0) {
     ssize_t r;
 
-    if (urandom_fd == kHaveGetrandom) {
+    if (*urandom_fd_bss_get() == kHaveGetrandom) {
 #if defined(USE_SYS_getrandom)
       do {
         r = syscall(SYS_getrandom, out, len, 0 /* no flags */);
@@ -236,7 +272,7 @@
 #endif
     } else {
       do {
-        r = read(urandom_fd, out, len);
+        r = read(*urandom_fd_bss_get(), out, len);
       } while (r == -1 && errno == EINTR);
     }
 
@@ -256,7 +292,7 @@
     return;
   }
 
-  CRYPTO_once(&once, init_once);
+  CRYPTO_once(rand_once_bss_get(), init_once);
 
   if (!fill_with_entropy(out, requested)) {
     abort();
diff --git a/crypto/rand/CMakeLists.txt b/crypto/rand/CMakeLists.txt
deleted file mode 100644
index c2b1fda..0000000
--- a/crypto/rand/CMakeLists.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-include_directories(../../include)
-
-if (${ARCH} STREQUAL "x86_64")
-  set(
-    RAND_ARCH_SOURCES
-
-    rdrand-x86_64.${ASM_EXT}
-  )
-endif()
-
-add_library(
-  rand
-
-  OBJECT
-
-  ctrdrbg.c
-  deterministic.c
-  forkunsafe.c
-  fuchsia.c
-  rand.c
-  urandom.c
-  windows.c
-
-  ${RAND_ARCH_SOURCES}
-)
-
-perlasm(rdrand-x86_64.${ASM_EXT} asm/rdrand-x86_64.pl)
-
-add_executable(
-  ctrdrbg_vector_test
-
-  ctrdrbg_vector_test.cc
-
-  $<TARGET_OBJECTS:test_support>
-)
-
-target_link_libraries(ctrdrbg_vector_test crypto)
-add_dependencies(all_tests ctrdrbg_vector_test)
diff --git a/crypto/rand_extra/CMakeLists.txt b/crypto/rand_extra/CMakeLists.txt
new file mode 100644
index 0000000..2841ef6
--- /dev/null
+++ b/crypto/rand_extra/CMakeLists.txt
@@ -0,0 +1,12 @@
+include_directories(../../include)
+
+add_library(
+  rand_extra
+
+  OBJECT
+
+  forkunsafe.c
+  fuchsia.c
+  rand_extra.c
+  windows.c
+)
diff --git a/crypto/rand/deterministic.c b/crypto/rand_extra/deterministic.c
similarity index 97%
rename from crypto/rand/deterministic.c
rename to crypto/rand_extra/deterministic.c
index 8c754c1..5d3a9ce 100644
--- a/crypto/rand/deterministic.c
+++ b/crypto/rand_extra/deterministic.c
@@ -20,8 +20,8 @@
 
 #include <openssl/chacha.h>
 
-#include "internal.h"
 #include "../internal.h"
+#include "../fipsmodule/rand/internal.h"
 
 
 /* g_num_calls is the number of calls to |CRYPTO_sysrand| that have occurred.
diff --git a/crypto/rand/forkunsafe.c b/crypto/rand_extra/forkunsafe.c
similarity index 97%
rename from crypto/rand/forkunsafe.c
rename to crypto/rand_extra/forkunsafe.c
index e9badc9..1a3977f 100644
--- a/crypto/rand/forkunsafe.c
+++ b/crypto/rand_extra/forkunsafe.c
@@ -16,7 +16,7 @@
 
 #include <stdlib.h>
 
-#include "internal.h"
+#include "../fipsmodule/rand/internal.h"
 
 
 /* g_buffering_enabled is true if fork-unsafe buffering has been enabled. */
diff --git a/crypto/rand/fuchsia.c b/crypto/rand_extra/fuchsia.c
similarity index 96%
rename from crypto/rand/fuchsia.c
rename to crypto/rand_extra/fuchsia.c
index 2e138d0..fae2989 100644
--- a/crypto/rand/fuchsia.c
+++ b/crypto/rand_extra/fuchsia.c
@@ -21,7 +21,7 @@
 
 #include <magenta/syscalls.h>
 
-#include "internal.h"
+#include "../fipsmodule/rand/internal.h"
 
 void CRYPTO_sysrand(uint8_t *out, size_t requested) {
   while (requested > 0) {
diff --git a/crypto/rand_extra/rand_extra.c b/crypto/rand_extra/rand_extra.c
new file mode 100644
index 0000000..8fce3c8
--- /dev/null
+++ b/crypto/rand_extra/rand_extra.c
@@ -0,0 +1,68 @@
+/* Copyright (c) 2017, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <openssl/rand.h>
+
+#include <limits.h>
+
+
+void RAND_seed(const void *buf, int num) {
+  /* OpenSSH calls |RAND_seed| before jailing on the assumption that any needed
+   * file descriptors etc will be opened. */
+  uint8_t unused;
+  RAND_bytes(&unused, sizeof(unused));
+}
+
+int RAND_load_file(const char *path, long num) {
+  if (num < 0) {  /* read the "whole file" */
+    return 1;
+  } else if (num <= INT_MAX) {
+    return (int) num;
+  } else {
+    return INT_MAX;
+  }
+}
+
+const char *RAND_file_name(char *buf, size_t num) { return NULL; }
+
+void RAND_add(const void *buf, int num, double entropy) {}
+
+int RAND_egd(const char *path) {
+  return 255;
+}
+
+int RAND_poll(void) {
+  return 1;
+}
+
+int RAND_status(void) {
+  return 1;
+}
+
+static const struct rand_meth_st kSSLeayMethod = {
+  RAND_seed,
+  RAND_bytes,
+  RAND_cleanup,
+  RAND_add,
+  RAND_pseudo_bytes,
+  RAND_status,
+};
+
+RAND_METHOD *RAND_SSLeay(void) {
+  return (RAND_METHOD*) &kSSLeayMethod;
+}
+
+void RAND_set_rand_method(const RAND_METHOD *method) {}
+
+void RAND_cleanup(void) {}
diff --git a/crypto/rand/windows.c b/crypto/rand_extra/windows.c
similarity index 97%
rename from crypto/rand/windows.c
rename to crypto/rand_extra/windows.c
index f47182d..fb94847 100644
--- a/crypto/rand/windows.c
+++ b/crypto/rand_extra/windows.c
@@ -32,7 +32,7 @@
 
 OPENSSL_MSVC_PRAGMA(warning(pop))
 
-#include "internal.h"
+#include "../fipsmodule/rand/internal.h"
 
 
 void CRYPTO_sysrand(uint8_t *out, size_t requested) {
diff --git a/crypto/thread_test.c b/crypto/thread_test.c
index 714bef7..4763fd3 100644
--- a/crypto/thread_test.c
+++ b/crypto/thread_test.c
@@ -103,6 +103,9 @@
 static CRYPTO_once_t once_init_value = CRYPTO_ONCE_INIT;
 static CRYPTO_once_t once_bss;
 
+static struct CRYPTO_STATIC_MUTEX mutex_init_value = CRYPTO_STATIC_MUTEX_INIT;
+static struct CRYPTO_STATIC_MUTEX mutex_bss;
+
 static int test_once(void) {
   if (g_once_init_called != 0) {
     fprintf(stderr, "g_once_init_called was non-zero at start.\n");
@@ -127,13 +130,20 @@
   }
 
   if (FIPS_mode()) {
-    /* Our FIPS tooling currently requires that |CRYPTO_ONCE_INIT| is all
-     * zeros, so the |CRYPTO_once_t| is placed in the bss. */
+    /* Our FIPS tooling currently requires that |CRYPTO_ONCE_INIT| and
+     * |CRYPTO_STATIC_MUTEX_INIT| are all zeros and so can be placed in the BSS
+     * section. */
     if (OPENSSL_memcmp((void *)&once_init_value, (void *)&once_bss,
                        sizeof(CRYPTO_once_t)) != 0) {
       fprintf(stderr, "CRYPTO_ONCE_INIT did not expand to all zeros.\n");
       return 0;
     }
+
+    if (OPENSSL_memcmp((void *)&mutex_init_value, (void *)&mutex_bss,
+                       sizeof(struct CRYPTO_STATIC_MUTEX)) != 0) {
+      fprintf(stderr, "CRYPTO_STATIC_MUTEX did not expand to all zeros.\n");
+      return 0;
+    }
   }
 
   return 1;
diff --git a/util/all_tests.json b/util/all_tests.json
index ff82a6d..f34e7c4 100644
--- a/util/all_tests.json
+++ b/util/all_tests.json
@@ -54,7 +54,7 @@
 	["crypto/pkcs8/pkcs8_test"],
 	["crypto/poly1305/poly1305_test", "crypto/poly1305/poly1305_tests.txt"],
 	["crypto/pool/pool_test"],
-	["crypto/rand/ctrdrbg_vector_test", "crypto/rand/ctrdrbg_vectors.txt"],
+	["crypto/fipsmodule/ctrdrbg_vector_test", "crypto/fipsmodule/rand/ctrdrbg_vectors.txt"],
 	["crypto/refcount_test"],
 	["crypto/thread_test"],
 	["crypto/x509/x509_test"],
