Use new PKCS#1 padding functions rather than rolling by hand.
authormdw <mdw>
Sat, 1 Jul 2000 11:27:22 +0000 (11:27 +0000)
committermdw <mdw>
Sat, 1 Jul 2000 11:27:22 +0000 (11:27 +0000)
dsig.c

diff --git a/dsig.c b/dsig.c
index 9818367..32b5ea5 100644 (file)
--- a/dsig.c
+++ b/dsig.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: dsig.c,v 1.1 2000/06/17 10:54:29 mdw Exp $
+ * $Id: dsig.c,v 1.2 2000/07/01 11:27:22 mdw Exp $
  *
  * Verify signatures on distribuitions of files
  *
@@ -30,6 +30,9 @@
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: dsig.c,v $
+ * Revision 1.2  2000/07/01 11:27:22  mdw
+ * Use new PKCS#1 padding functions rather than rolling by hand.
+ *
  * Revision 1.1  2000/06/17 10:54:29  mdw
  * Program to generate and verify signatures on multiple files.
  *
@@ -60,6 +63,7 @@
 #include "key-data.h"
 #include "md5.h"
 #include "noise.h"
+#include "pkcs1.h"
 #include "rmd160.h"
 #include "rsa.h"
 #include "sha.h"
@@ -115,11 +119,10 @@ static int dsaverify(key *k, const void *m, size_t msz,
 static int rsasign(key *k, const void *m, size_t msz, dstr *d)
 {
   rsa_priv rp;
+  rsa_privctx rpc;
+  pkcs1 pk = { 0, 0, 0 };
   key_packstruct ks[RSA_PRIVFETCHSZ];
   key_packdef *kp;
-  octet *p;
-  size_t sz;
-  mp *x;
   int e;
 
   kp = key_fetchinit(rsa_privfetch, ks, &rp);
@@ -127,22 +130,10 @@ static int rsasign(key *k, const void *m, size_t msz, dstr *d)
     key_fetchdone(kp);
     return (e);
   }
-  sz = mp_octets(rp.n);
-  if (sz < msz + 11)
-    die(EXIT_FAILURE, "key too small (help!)");
-  DENSURE(d, sz);
-  p = d->buf + d->len;
-  memcpy(p + sz - msz, m, msz);
-  p[0] = 0;
-  p[1] = 1;
-  memset(p + 2, 0xff, sz - msz - 3);
-  p[sz - msz - 1] = 0;
-  memcpy(p + sz - msz, m, msz);
-  x = mp_loadb(MP_NEW, p, sz);
-  x = rsa_decrypt(&rp, x, x, &rand_global);
-  mp_storeb(x, p, sz);
-  d->len += sz;
-  mp_drop(x);
+  rsa_privcreate(&rpc, &rp, &rand_global);
+  if (rsa_sign(&rpc, m, msz, d, pkcs1_sigencode, &pk) < 0)
+    die(EXIT_FAILURE, "internal error in rsasign (key too small?)");
+  rsa_privdestroy(&rpc);
   key_fetchdone(kp);
   return (0);
 }
@@ -151,41 +142,26 @@ static int rsaverify(key *k, const void *m, size_t msz,
                     const void *s, size_t ssz)
 {
   rsa_pub rp;
+  rsa_pubctx rpc;
+  pkcs1 pk = { 0, 0, 0 };
   key_packstruct ks[RSA_PUBFETCHSZ];
   key_packdef *kp;
-  octet *p;
-  size_t sz;
-  mp *x;
-  mpmont mm;
   int ok = 0;
+  dstr d = DSTR_INIT;
   int e;
-  int i;
 
   kp = key_fetchinit(rsa_pubfetch, ks, &rp);
   if ((e = key_fetch(kp, k)) != 0) {
     key_fetchdone(kp);
     return (e);
   }
-  x = mp_loadb(MP_NEW, s, ssz);
-  mpmont_create(&mm, rp.n);
-  x = mpmont_exp(&mm, x, x, rp.e);
-  mpmont_destroy(&mm);
-  sz = mp_octets(rp.n);
-  p = xmalloc(sz);
-  mp_storeb(x, p, sz);
-  mp_drop(x);
+  rsa_pubcreate(&rpc, &rp);
+  if (rsa_verify(&rpc, s, ssz, &d, pkcs1_sigdecode, &pk) > 0 &&
+      msz == d.len && memcmp(d.buf, m, msz) == 0)
+    ok = 1;
+  dstr_destroy(&d);
+  rsa_pubdestroy(&rpc);
   key_fetchdone(kp);
-  if (msz + 11 >= sz || p[0] != 0 || p[1] != 1 || p[sz - msz - 1] != 0)
-    goto done;
-  for (i = 2; i < sz - msz - 1; i++) {
-    if (p[i] != 0xff)
-      goto done;
-  }
-  if (memcmp(m, p + sz - msz, msz) != 0)
-    goto done;
-  ok = 1;
-done:
-  free(p);
   return (ok);
 }