chiark / gitweb /
rsa1: rsapriv_apply: Initialise st mpz's early
[secnet.git] / rsa.c
diff --git a/rsa.c b/rsa.c
index 57ea2424f6273eb1c4003be191fcda18ea5bd73e..b6bad7b03fb62b6727df3f90ec2935737a237342 100644 (file)
--- a/rsa.c
+++ b/rsa.c
@@ -349,11 +349,18 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
     cstring_t filename;
     item_t *i;
     long length;
-    uint8_t *b, *c;
+    uint8_t *b=0, *c=0;
     int cipher_type;
     MP_INT e,d,iqmp,tmp,tmp2,tmp3;
     bool_t valid;
 
+    mpz_init(&e);
+    mpz_init(&d);
+    mpz_init(&iqmp);
+    mpz_init(&tmp);
+    mpz_init(&tmp2);
+    mpz_init(&tmp3);
+
     NEW(st);
     st->cl.description="rsapriv";
     st->cl.type=CL_SIGPRIVKEY;
@@ -367,6 +374,13 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
     st->ops.dispose=0; /* xxx */
     st->loc=loc;
 
+    mpz_init(&st->n);
+    mpz_init(&st->q);
+    mpz_init(&st->p);
+    mpz_init(&st->dp);
+    mpz_init(&st->dq);
+    mpz_init(&st->w);
+
     /* Argument is filename pointing to SSH1 private key file */
     i=list_elem(args,0);
     if (i) {
@@ -419,7 +433,6 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
     if (fread(b,length,1,f) != 1) {
        LDFATAL_FILE("rsa-private","error reading modulus\n");
     }
-    mpz_init(&st->n);
     read_mpbin(&st->n,b,length);
     FREE(b);
     length=(keyfile_get_short(loc,f)+7)/8;
@@ -430,7 +443,6 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
     if (fread(b,length,1,f)!=1) {
        LDFATAL_FILE("rsa-private","error reading e\n");
     }
-    mpz_init(&e);
     read_mpbin(&e,b,length);
     FREE(b);
     
@@ -463,7 +475,6 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
        LDFATAL_FILE("rsa-private",
                           "error reading decryption key\n");
     }
-    mpz_init(&d);
     read_mpbin(&d,b,length);
     FREE(b);
     /* Read iqmp (inverse of q mod p) */
@@ -477,7 +488,6 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
        LDFATAL_FILE("rsa-private",
                           "error reading decryption key\n");
     }
-    mpz_init(&iqmp);
     read_mpbin(&iqmp,b,length);
     FREE(b);
     /* Read q (the smaller of the two primes) */
@@ -491,7 +501,6 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
        LDFATAL_FILE("rsa-private",
                           "error reading q value\n");
     }
-    mpz_init(&st->q);
     read_mpbin(&st->q,b,length);
     FREE(b);
     /* Read p (the larger of the two primes) */
@@ -505,7 +514,6 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
        LDFATAL_FILE("rsa-private",
                           "error reading p value\n");
     }
-    mpz_init(&st->p);
     read_mpbin(&st->p,b,length);
     FREE(b);
     
@@ -519,9 +527,6 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
      */
     valid=False;
     i=list_elem(args,1);
-    mpz_init(&tmp);
-    mpz_init(&tmp2);
-    mpz_init(&tmp3);
     if (i && i->type==t_bool && i->data.bool==False) {
        Message(M_INFO,"rsa-private (%s:%d): skipping RSA key validity "
                "check\n",loc.file,loc.line);
@@ -565,9 +570,6 @@ static list_t *rsapriv_apply(closure_t *self, struct cloc loc, dict_t *context,
      *   dq == d mod (q-1)      similarly mod q
      *   w == iqmp * q          so that w == 0 mod q, and w == 1 mod p
      */
-    mpz_init(&st->dp);
-    mpz_init(&st->dq);
-    mpz_init(&st->w);
     mpz_sub_ui(&tmp, &st->p, 1);
     mpz_mod(&st->dp, &d, &tmp);
     mpz_sub_ui(&tmp, &st->q, 1);