X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/052b36d05a622a93733b735acce2de865b14627b..f41f820e4b3e230d9314cc4323abf59babdd4e67:/keyutil.c diff --git a/keyutil.c b/keyutil.c index 673f4ea..be8d5f9 100644 --- a/keyutil.c +++ b/keyutil.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: keyutil.c,v 1.5 2000/02/12 18:21:03 mdw Exp $ + * $Id: keyutil.c,v 1.7 2000/07/01 11:18:51 mdw Exp $ * * Simple key manager program * @@ -30,6 +30,13 @@ /*----- Revision history --------------------------------------------------* * * $Log: keyutil.c,v $ + * Revision 1.7 2000/07/01 11:18:51 mdw + * Use new interfaces for key manipulation. + * + * Revision 1.6 2000/06/17 11:28:22 mdw + * Use secure memory interface from MP library. `rand_getgood' is + * deprecated. + * * Revision 1.5 2000/02/12 18:21:03 mdw * Overhaul of key management (again). * @@ -340,7 +347,7 @@ static void alg_binary(keyopts *k) sz = (k->bits + 7) >> 3; p = sub_alloc(sz); m = (1 << (((k->bits - 1) & 7) + 1)) - 1; - rand_getgood(RAND_GLOBAL, p, sz); + rand_get(RAND_GLOBAL, p, sz); *p &= m; key_binary(&k->k->k, p, sz); k->k->k.e |= KCAT_SYMM | KF_BURN; @@ -364,7 +371,7 @@ static void alg_des(keyopts *k) sz = k->bits / 7; p = sub_alloc(sz); - rand_getgood(RAND_GLOBAL, p, sz); /* Too much work done here! */ + rand_get(RAND_GLOBAL, p, sz); /* Too much work done here! */ for (i = 0; i < sz; i++) { octet x = p[i] | 0x01; x = x ^ (x >> 4); @@ -381,7 +388,7 @@ static void alg_des(keyopts *k) static void alg_rsa(keyopts *k) { - rsa_param rp; + rsa_priv rp; key_data *kd; /* --- Sanity checking --- */ @@ -401,21 +408,14 @@ static void alg_rsa(keyopts *k) { grand *g = fibrand_create(rand_global.ops->word(&rand_global)); - mpmont mm; + rsa_pub rpp; mp *m = mprand_range(MP_NEW, rp.n, g, 0); mp *c; - /* --- Encrypt the plaintext --- */ - - mpmont_create(&mm, rp.n); - c = mpmont_exp(&mm, MP_NEW, m, rp.e); - mpmont_destroy(&mm); - - /* --- Decrypt the ciphertext --- */ - - c = rsa_decrypt(&rp, c, c, g); - - /* --- Check everything went OK --- */ + rpp.n = rp.n; + rpp.e = rp.e; + c = rsa_qpubop(&rpp, MP_NEW, m); + c = rsa_qprivop(&rp, c, c, g); if (MP_CMP(c, !=, m)) die(EXIT_FAILURE, "test encryption failed"); @@ -441,8 +441,7 @@ static void alg_rsa(keyopts *k) mpkey(kd, "d-mod-q", rp.dq, KCAT_PRIV | KF_BURN); dolock(k, kd, "private"); - mp_drop(rp.p); mp_drop(rp.q); mp_drop(rp.n); mp_drop(rp.q_inv); - mp_drop(rp.e); mp_drop(rp.d); mp_drop(rp.dp); mp_drop(rp.dq); + rsa_privfree(&rp); } static void alg_dsaparam(keyopts *k) @@ -467,7 +466,7 @@ static void alg_dsaparam(keyopts *k) sz = (k->qbits + 7) >> 3; p = sub_alloc(sz); - rand_getgood(RAND_GLOBAL, p, sz); + rand_get(RAND_GLOBAL, p, sz); /* --- Allocate the parameters --- */ @@ -514,8 +513,7 @@ static void alg_dsa(keyopts *k) /* --- Choose a private key --- */ - x = mprand_range(MP_NEW, q, &rand_global, 0); - mp_burn(x); + x = mprand_range(MP_NEWSEC, q, &rand_global, 0); mpmont_create(&mm, p); y = mpmont_exp(&mm, MP_NEW, g, x); @@ -576,8 +574,7 @@ static void alg_dh(keyopts *k) * Since %$g$% has order %$q$%, choose %$x < q$%. */ - x = mprand_range(MP_NEW, q, &rand_global, 0); - mp_burn(x); + x = mprand_range(MP_NEWSEC, q, &rand_global, 0); /* --- Compute the public key %$y = g^x \bmod p$% --- */ @@ -599,7 +596,7 @@ static void alg_dh(keyopts *k) static void alg_bbs(keyopts *k) { - bbs_param bp; + bbs_priv bp; key_data *kd; /* --- Sanity checking --- */ @@ -627,7 +624,7 @@ static void alg_bbs(keyopts *k) mpkey(kd, "q", bp.q, KCAT_PRIV | KF_BURN); dolock(k, kd, "private"); - mp_drop(bp.p); mp_drop(bp.q); mp_drop(bp.n); + bbs_privfree(&bp); } /* --- The algorithm tables --- */ @@ -1656,8 +1653,8 @@ int main(int argc, char *argv[]) /* --- Initialize the Catacomb random number generator --- */ - rand_init(RAND_GLOBAL); rand_noisesrc(RAND_GLOBAL, &noise_source); + rand_seed(RAND_GLOBAL, 160); /* --- Dispatch to appropriate command handler --- */