2013-08-15 3 views
1

Je n'ai pas été en mesure de trouver une réponse à ce qui est utilisé pour générer les nombres premiers avec BN_generate_prime dans OpenSSL/bn.h. Aussi, comment pourrais-je ensemencer n'importe quel PRNG que cette fonction utilise?Comment semences PRNG pour BN_generate_prime

question séparée mais pertinente à mon code (j'écris un programme pour générer RSA paires de clés): comment pourrais-je vérifier si le bit de poids fort est situé dans un BIGNUM? Dites que je génère un premier 512 bits. Est-ce que j'utiliserais BN_is_bit_set (prime, 512)?

Merci

Répondre

6

BN_generate_prime est une fonction dépréciée, dit here. En outre, il est défini dans crypto/bn_depr.c. Vous ne devriez pas l'utiliser pour générer des nombres premiers. Au lieu de cela, vous devez utiliser BN_generate_prime_ex. Voici l'utilisation de l'échantillon de 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); 

Ensuite, vous aurez un nombre premier pseudo-aléatoire 512 bits. Comme l'exemple ci-dessus, vous pouvez semer la PRNG par RAND_seed.

Pour la deuxième question, essayez BN_num_bits.

Questions connexes