Beispiel #1
0
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;
}
Beispiel #2
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);
    }
}