我试图理解为什么RAND_bytes()
在OpenSSL FIPS模式下使用时总是返回0。我正在使用OpenSSL-FIPS-2.0.9。
要启用FIPS模式,我的代码首先调用FIPS_mode_set( 1 )
中定义的openssl-1.0.2j/crypto/o_fips.c
。这可确保设置FIPS模式。此后,如果我调用RAND_bytes()
,内部触发FIPS_rand_bytes()
中定义的openssl-fips-2.0.9/fips/rand/fips_rand_lib.c
并且它总是返回0(基本上没有随机字节)。
在进一步调试时,我注意到“fips_rand_meth
”设置为NULL,我无法推断。
我尝试使用gdb并观察此函数指针的值以及它可以设置为NULL的位置但事实证明它设置为
static RAND_METHOD *fips_rand_meth = NULL
在开头,之后在fips_rand_meth = meth
设置为FIPS_rand_set_method()
。
根据建议,我甚至在调用ERR_get_error()
后立即尝试使用RAND_bytes()
调用检查错误代码(如果有)。但是,它返回0(这表明没有错误)。
我理解这种设置FIPS模式然后调用其API的交互肯定存在一些差距。如果有人可以提供帮助,那就太棒了。提前谢谢。