if (numbits > 0)
{
BN_GENCB cb;
- cb.ver = 2;
- cb.cb_2 = dsa_cb;
- cb.arg = bio_err;
-
+ BN_GENCB_set(&cb, dsa_cb, bio_err);
assert(need_rand);
dsa = DSA_new();
if(!dsa)
void (*cb_1)(int, int, void *);
/* if(ver==2) - new callback style */
int (*cb_2)(int, int, BN_GENCB *);
- };
+ } cb;
};
/* Wrapper function to make using BN_GENCB easier, */
int BN_GENCB_call(BN_GENCB *cb, int a, int b);
+/* Macro to populate a BN_GENCB structure with an "old"-style callback */
+#define BN_GENCB_set_old(gencb, callback, cb_arg) { \
+ BN_GENCB *tmp_gencb = (gencb); \
+ tmp_gencb->ver = 1; \
+ tmp_gencb->arg = (cb_arg); \
+ tmp_gencb->cb.cb_1 = (callback); }
+/* Macro to populate a BN_GENCB structure with a "new"-style callback */
+#define BN_GENCB_set(gencb, callback, cb_arg) { \
+ BN_GENCB *tmp_gencb = (gencb); \
+ tmp_gencb->ver = 2; \
+ tmp_gencb->arg = (cb_arg); \
+ tmp_gencb->cb.cb_2 = (callback); }
#define BN_prime_checks 0 /* default: select number of iterations
based on the size of the number */
BIGNUM *rnd=NULL;
int found = 0;
- cb.ver = 1;
- cb.arg = cb_arg;
- cb.cb_1 = callback;
+ BN_GENCB_set_old(&cb, callback, cb_arg);
if (ret == NULL)
{
BN_CTX *ctx_passed, void *cb_arg)
{
BN_GENCB cb;
- cb.ver = 1;
- cb.arg = cb_arg;
- cb.cb_1 = callback;
+ BN_GENCB_set_old(&cb, callback, cb_arg);
return BN_is_prime_ex(a, checks, ctx_passed, &cb);
}
int do_trial_division)
{
BN_GENCB cb;
- cb.ver = 1;
- cb.arg = cb_arg;
- cb.cb_1 = callback;
+ BN_GENCB_set_old(&cb, callback, cb_arg);
return BN_is_prime_fasttest_ex(a, checks, ctx_passed,
do_trial_division, &cb);
}
{
case 1:
/* Deprecated-style callbacks */
- cb->cb_1(a, b, cb->arg);
+ cb->cb.cb_1(a, b, cb->arg);
return 1;
case 2:
/* New-style callbacks */
- return cb->cb_2(a, b, cb);
+ return cb->cb.cb_2(a, b, cb);
default:
break;
}
if((ret=DH_new()) == NULL)
return NULL;
- cb.ver = 1;
- cb.arg = cb_arg;
- cb.cb_1 = callback;
+ BN_GENCB_set_old(&cb, callback, cb_arg);
if(DH_generate_parameters_ex(ret, prime_len, generator, &cb))
return ret;
if ((ret=DSA_new()) == NULL) return NULL;
- cb.ver = 1;
- cb.arg = cb_arg;
- cb.cb_1 = callback;
+ BN_GENCB_set_old(&cb, callback, cb_arg);
if(DSA_generate_parameters_ex(ret, bits, seed_in, seed_len,
counter_ret, h_ret, &cb))
if((rsa=RSA_new()) == NULL)
return 0;
- cb.ver = 1;
- cb.arg = cb_arg;
- cb.cb_1 = callback;
+ BN_GENCB_set_old(&cb, callback, cb_arg);
if(RSA_generate_key_ex(rsa, bits, e_value, &cb))
return rsa;
goto err;
}
*/
- rsa->d=BN_mod_inverse(NULL,rsa->e,r0,ctx2); /* d */
- if (rsa->d == NULL) goto err;
+ if (!BN_mod_inverse(rsa->d,rsa->e,r0,ctx2)) goto err; /* d */
/* calculate d mod (p-1) */
- rsa->dmp1=BN_new();
- if (rsa->dmp1 == NULL) goto err;
if (!BN_mod(rsa->dmp1,rsa->d,r1,ctx)) goto err;
/* calculate d mod (q-1) */
- rsa->dmq1=BN_new();
- if (rsa->dmq1 == NULL) goto err;
if (!BN_mod(rsa->dmq1,rsa->d,r2,ctx)) goto err;
/* calculate inverse of q mod p */
- rsa->iqmp=BN_mod_inverse(NULL,rsa->q,rsa->p,ctx2);
- if (rsa->iqmp == NULL) goto err;
+ if (!BN_mod_inverse(rsa->iqmp,rsa->q,rsa->p,ctx2)) goto err;
ok=1;
err: