Hi All,

OpenSSL 1.0.1e is not loading Intel's hardware random number
generator. ENGINE_load_rdrand() silently fails:

/*** eng_rand.c ***/
void ENGINE_load_rdrand (void)
{
    extern unsigned int OPENSSL_ia32cap_P[];

    if (OPENSSL_ia32cap_P[1] & (1<<(62-32)))
    {
        ENGINE *toadd = ENGINE_rdrand();
        if(!toadd) return;
        ENGINE_add(toadd);
        ENGINE_free(toadd);
        ERR_clear_error();
    }
}

When I check capabilities:

int rdrand = OPENSSL_ia32cap_P[1] & (1<<(62-32));
if(rdrand)
    fprintf(stdout, "rdrand is available\n");
else
    fprintf(stderr, "rdrand is not available\n");

I receive a message that rdrand is not available.

OpenSSL Capable 1.0.1e was configured with hardware and engines:

./config fips -no-comp -no-dso -no-sslv2 -no-sslv3
--openssldir=/usr/local/ssl/darwin
--with-fipsdir=/usr/local/ssl/darwin

And the engine appears to be present:

$ nm /usr/local/ssl/darwin/lib/libcrypto.a | egrep -i rdrand | sort -k 3
...
                 U _ENGINE_load_rdrand
                 U _OPENSSL_ia32_rdrand
/usr/local/ssl/darwin/lib/libcrypto.a(eng_rdrand.o):
0000000000000000 T _ENGINE_load_rdrand
0000000000000208 S _ENGINE_load_rdrand.eh
0000000000000270 T _OPENSSL_ia32_rdrand
000000000002ace0 T _fips_openssl_ia32_rdrand
00000000000000a0 t _rdrand_init
0000000000000230 s _rdrand_init.eh
0000000000000140 d _rdrand_meth

The failure occurs with and without calling FIPS_mode_set().

Any ideas?

Jeff
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to