Hello,
> I want to generate an RSA key pair from a c/c++ program using Openssl's API.
> 
> I saw that there is an RSA_generate_key() function, but it requires an 
> initialization of the random generator.
RSA_generate_key() when generating RSA p and q primes requires probably
seeded RNG but all rand functions perform self seeding (if possible).
If RSA_generate_key() returns no error than RNG was properly self seeded
(if not seeded before). 
 
> Could anyone explain me how to initialize the random generator (on Linux)? 
Something like:
        RAND_load_file("/dev/urandom", 1024);
should be enough.

> A 
> short c sample of the generation would be of a great help!
Some simple example attached.

Best regards,
-- 
Marek Marcola <[EMAIL PROTECTED]>
#include <stdio.h>

#include <openssl/bn.h>
#include <openssl/rsa.h>

int main()
{
	RSA *r;

	r = RSA_generate_key(32,656537,NULL,NULL);
	if( r==NULL ) { 
		printf("Key failed");
		exit(1);
	} else {
		printf("public modulus (n):\n");
		printf("   %s\n",BN_bn2hex(r->n));

		printf("public exponent (e):\n");
		printf("   %s\n",BN_bn2hex(r->e));

		printf("private exponent (d):\n");
		printf("   %s\n",BN_bn2hex(r->d));

		printf("secret prime factor (p):\n");
		printf("   %s\n",BN_bn2hex(r->p));
		printf("secret prime factor (q):\n");
		printf("   %s\n",BN_bn2hex(r->q));

		printf("dmp1 [ d mod (p-1) ]:\n");
		printf("   %s\n",BN_bn2hex(r->dmp1));
		printf("dmq1 [ d mod (q-1) ]:\n");
		printf("   %s\n",BN_bn2hex(r->dmq1));

		printf("iqmp [ q^-1 mod p ]:\n");
		printf("   %s\n",BN_bn2hex(r->iqmp));
	}	

	printf("RSA SIZE: %d\n", RSA_size(r));

	return(0);
}

Reply via email to