int _gnutls_rnd_preinit(void) { int ret; #if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) # warning Insecure PRNG is enabled ret = gnutls_crypto_rnd_register(100, &_gnutls_fuzz_rnd_ops); if (ret < 0) return ret; #elif defined(ENABLE_FIPS140) /* The FIPS140 random generator is only enabled when we are compiled * with FIPS support, _and_ the system requires FIPS140. */ if (_gnutls_fips_mode_enabled() == 1) { ret = gnutls_crypto_rnd_register(100, &_gnutls_fips_rnd_ops); if (ret < 0) return ret; } #endif ret = _rnd_system_entropy_init(); if (ret < 0) { gnutls_assert(); return GNUTLS_E_RANDOM_FAILED; } return 0; }
void doit (void) { int rc; char buf1[32]; char buf2[32]; int failed = 0; gnutls_crypto_rnd_st rng = { rng_init, rng_rnd, rng_deinit }; rc = gnutls_crypto_rnd_register (0, &rng); gnutls_global_init (); memset (buf2, 1, sizeof (buf2)); _gnutls_rnd (GNUTLS_RND_RANDOM, buf1, sizeof (buf1)); if (memcmp (buf1, buf2, sizeof (buf1)) != 0) failed = 1; gnutls_global_deinit (); if (failed == 0) { success ("rng registered ok\n"); } else { fail ("rng register test failed: %d\n", rc); } }