#include <stdio.h> #include <time.h> #include "cryptlib.h" #include <openssl/bn.h> #include <openssl/rsa.h> RSA *RSA_generate_key(int bits, unsigned long e_value, void (*callback)(int,int,void *), void *cb_arg) { BN_GENCB cb; int i; RSA *rsa = RSA_new(); BIGNUM *e = BN_new(); if(!rsa || !e) goto err; /* The problem is when building with 8, 16, or 32 BN_ULONG, * unsigned long can be larger */ for (i=0; i<(int)sizeof(unsigned long)*8; i++) { if (e_value & (1UL<<i)) if (BN_set_bit(e,i) == 0) goto err; } BN_GENCB_set_old(&cb, callback, cb_arg); if(RSA_generate_key_ex(rsa, bits, e, &cb)) { BN_free(e); return rsa; } err: if(e) BN_free(e); if(rsa) RSA_free(rsa); return 0; } void mlockall(){} char * getpass (prompt) const char *prompt; { return ""; }