Remove all of the variable declarations from inner blocks and hoist them
to toplevel. Initialize `mp' variables once, and use their initial
values, rather than writing `MP_NEW' explicitly in the first assignment.
There's no functional change here.
Two small (temporary) warts. Firstly, the handling of `z' and `zz' in
the factoring loop is rather nasty, repeatedly freeing and recreating
`zz'; and secondly `p1' and `q1' are used in two separate places. To
prevent conflicts here, reset the relevant variables to `MP_NEW' after
freeing them.
int rsa_recover(rsa_priv *rp)
{
int rsa_recover(rsa_priv *rp)
{
+ int i;
+ size_t s;
+ mpmont mm;
+ mp a; mpw aw;
+ mp *g = MP_NEW, *r = MP_NEW, *t = MP_NEW;
+ mp *m1 = MP_NEW, *z = MP_NEW, *zz = MP_NEW;
+ mp *phi = MP_NEW, *p1 = MP_NEW, *q1 = MP_NEW;
+
/* --- If there is no modulus, calculate it --- */
if (!rp->n) {
/* --- If there is no modulus, calculate it --- */
if (!rp->n) {
/* --- If one is missing, use simple division to recover the other --- */
if (rp->p || rp->q) {
/* --- If one is missing, use simple division to recover the other --- */
if (rp->p || rp->q) {
if (rp->p)
mp_div(&rp->q, &r, rp->n, rp->p);
else
if (rp->p)
mp_div(&rp->q, &r, rp->n, rp->p);
else
else if (!rp->e || !rp->d)
return (-1);
else {
else if (!rp->e || !rp->d)
return (-1);
else {
- mp *t;
- size_t s;
- mp a; mpw aw;
- mp *m1;
- mpmont mm;
- int i;
- mp *z = MP_NEW;
/* --- Work out the appropriate exponent --- *
*
/* --- Work out the appropriate exponent --- *
*
- t = mp_mul(MP_NEW, rp->e, rp->d);
+ t = mp_mul(t, rp->e, rp->d);
t = mp_sub(t, t, MP_ONE);
t = mp_odd(t, t, &s);
/* --- Set up for the exponentiation --- */
mpmont_create(&mm, rp->n);
t = mp_sub(t, t, MP_ONE);
t = mp_odd(t, t, &s);
/* --- Set up for the exponentiation --- */
mpmont_create(&mm, rp->n);
- m1 = mp_sub(MP_NEW, rp->n, mm.r);
+ m1 = mp_sub(m1, rp->n, mm.r);
/* --- Now for the main loop --- *
*
/* --- Now for the main loop --- *
*
- mp *zz = mp_sqr(MP_NEW, z);
zz = mpmont_reduce(&mm, zz, zz);
if (MP_EQ(zz, mm.r)) {
mp_drop(zz);
zz = mpmont_reduce(&mm, zz, zz);
if (MP_EQ(zz, mm.r)) {
mp_drop(zz);
/* --- If %$e$% or %$d$% is missing, recalculate it --- */
if (!rp->e || !rp->d) {
/* --- If %$e$% or %$d$% is missing, recalculate it --- */
if (!rp->e || !rp->d) {
- mp *phi;
- mp *g = MP_NEW;
- mp *p1, *q1;
/* --- Compute %$\varphi(n)$% --- */
/* --- Compute %$\varphi(n)$% --- */
- phi = mp_sub(MP_NEW, rp->n, rp->p);
+ phi = mp_sub(phi, rp->n, rp->p);
phi = mp_sub(phi, phi, rp->q);
phi = mp_add(phi, phi, MP_ONE);
phi = mp_sub(phi, phi, rp->q);
phi = mp_add(phi, phi, MP_ONE);
- p1 = mp_sub(MP_NEW, rp->p, MP_ONE);
- q1 = mp_sub(MP_NEW, rp->q, MP_ONE);
+ p1 = mp_sub(p1, rp->p, MP_ONE);
+ q1 = mp_sub(q1, rp->q, MP_ONE);
mp_gcd(&g, 0, 0, p1, q1);
mp_div(&phi, 0, phi, g);
mp_gcd(&g, 0, 0, p1, q1);
mp_div(&phi, 0, phi, g);
- mp_drop(p1);
- mp_drop(q1);
+ mp_drop(p1); p1 = MP_NEW;
+ mp_drop(q1); q1 = MP_NEW;
/* --- Recover the other exponent --- */
/* --- Recover the other exponent --- */
/* --- Compute %$d \bmod (p - 1)$% and %$d \bmod (q - 1)$% --- */
if (!rp->dp) {
/* --- Compute %$d \bmod (p - 1)$% and %$d \bmod (q - 1)$% --- */
if (!rp->dp) {
- mp *p1 = mp_sub(MP_NEW, rp->p, MP_ONE);
+ p1 = mp_sub(p1, rp->p, MP_ONE);
mp_div(0, &rp->dp, rp->d, p1);
mp_drop(p1);
}
if (!rp->dq) {
mp_div(0, &rp->dp, rp->d, p1);
mp_drop(p1);
}
if (!rp->dq) {
- mp *q1 = mp_sub(MP_NEW, rp->q, MP_ONE);
+ q1 = mp_sub(q1, rp->q, MP_ONE);
mp_div(0, &rp->dq, rp->d, q1);
mp_drop(q1);
}
mp_div(0, &rp->dq, rp->d, q1);
mp_drop(q1);
}