X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/380a6fdc5b794ad57e32e480022ab3af6f8de37d..59919ae4b1721ca271c3d3e5955c09d322573821:/key-data.c diff --git a/key-data.c b/key-data.c index 294fe34..494e9c8 100644 --- a/key-data.c +++ b/key-data.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: key-data.c,v 1.3 2000/06/17 11:26:03 mdw Exp $ + * $Id: key-data.c,v 1.5 2004/03/28 01:58:47 mdw Exp $ * * Encoding and decoding of key data * @@ -30,6 +30,12 @@ /*----- Revision history --------------------------------------------------* * * $Log: key-data.c,v $ + * Revision 1.5 2004/03/28 01:58:47 mdw + * Generate, store and retreive elliptic curve keys. + * + * Revision 1.4 2000/07/16 19:51:58 mdw + * Shut stupid compiler up. + * * Revision 1.3 2000/06/17 11:26:03 mdw * key_structfind: track minor data structure change, and cope if the * subkey isn't available. @@ -114,6 +120,39 @@ void key_mp(key_data *k, mp *m) k->u.m = MP_COPY(m); } +/* --- @key_string@ --- * + * + * Arguments: @key_data *k@ = pointer to key data block + * @const char *p@ = pointer to the value to set + * + * Returns: --- + * + * Use: Sets a plain string in a key block. + */ + +void key_string(key_data *k, const char *p) +{ + k->e = (k->e & ~KF_ENCMASK) | KENC_STRING; + k->u.p = xstrdup(p); +} + +/* --- @key_ec@ --- * + * + * Arguments: @key_data *k@ = pointer to key data block + * @const ec *e@ = pointer to the value to set + * + * Returns: --- + * + * Use: Sets an elliptic curve point in a key block. + */ + +void key_ec(key_data *k, const ec *e) +{ + k->e = (k->e & ~KF_ENCMASK) | KENC_EC; + EC_CREATE(&k->u.e); + EC_COPY(&k->u.e, e); +} + /* --- @key_structure@ --- * * * Arguments: @key_data *k@ = pointer to key data block @@ -196,6 +235,12 @@ void key_destroy(key_data *k) case KENC_MP: mp_drop(k->u.m); break; + case KENC_STRING: + xfree(k->u.p); + break; + case KENC_EC: + EC_DESTROY(&k->u.e); + break; case KENC_STRUCT: { sym_iter i; key_struct *ks; @@ -233,7 +278,7 @@ int key_do(key_data *k, const key_filter *kf, dstr *d, else { sym_iter i; key_struct *ks; - size_t n; + size_t n = 0; int rc; if (d) @@ -284,6 +329,19 @@ int key_copy(key_data *kd, key_data *k, const key_filter *kf) kd->u.m = MP_COPY(k->u.m); break; + /* --- Strings --- */ + + case KENC_STRING: + kd->u.p = xstrdup(k->u.p); + break; + + /* --- Elliptic curve points --- */ + + case KENC_EC: + EC_CREATE(&kd->u.e); + EC_COPY(&kd->u.e, &k->u.e); + break; + /* --- Structured key data --- */ case KENC_STRUCT: {