/* -*-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
*
/*----- 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).
*
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;
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);
static void alg_rsa(keyopts *k)
{
- rsa_param rp;
+ rsa_priv rp;
key_data *kd;
/* --- Sanity checking --- */
{
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");
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)
sz = (k->qbits + 7) >> 3;
p = sub_alloc(sz);
- rand_getgood(RAND_GLOBAL, p, sz);
+ rand_get(RAND_GLOBAL, p, sz);
/* --- Allocate the parameters --- */
/* --- 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);
* 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$% --- */
static void alg_bbs(keyopts *k)
{
- bbs_param bp;
+ bbs_priv bp;
key_data *kd;
/* --- Sanity checking --- */
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 --- */
/* --- 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 --- */