如何为PRNG播种BN_generate_prime

时间:2013-08-15 03:28:30

标签: c openssl bignum prng

我无法找到关于在openssl / bn.h中用BN_generate_prime生成素数的答案。另外,我如何播种此函数使用的PRNG?

单独的问题,但与我的代码相关(我正在编写一个程序来生成RSA密钥对):我如何检查是否在BIGNUM中设置了高阶位?假设我生成512位素数。我会使用BN_is_bit_set(prime,512)吗?

由于

1 个答案:

答案 0 :(得分:6)

BN_generate_prime是一个不推荐使用的函数,here说。此外,它在crypto / bn_depr.c中定义。你不应该用它来生成素数。相反,您应该使用BN_generate_prime_ex。以下是BN_generate_prime_ex的示例用法:

BIGNUM *r;
static const char rnd_seed[] = "string to make the random number generator think it has entropy";

r = BN_new();
RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_generate_prime_ex may fail */

BN_generate_prime_ex(r, 512, 0, NULL, NULL, NULL);

BN_free(r);

然后你将拥有一个512位的伪随机素数。如上例所示,您可以通过RAND_seed为PRNG播种。

对于第二个问题,请尝试BN_num_bits