From 82fa9679b601bfc08d92b98ef9638572e6fa22cf Mon Sep 17 00:00:00 2001 From: mdw Date: Sat, 1 Jul 2000 11:27:22 +0000 Subject: [PATCH] Use new PKCS#1 padding functions rather than rolling by hand. --- dsig.c | 64 ++++++++++++++++++++-------------------------------------------- 1 file changed, 20 insertions(+), 44 deletions(-) diff --git a/dsig.c b/dsig.c index 9818367..32b5ea5 100644 --- 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); } -- 2.11.0