X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/380a6fdc5b794ad57e32e480022ab3af6f8de37d..c65df27983057ec76ed0e72bb370f9a5ae7dad28:/key-data.c diff --git a/key-data.c b/key-data.c index 294fe34..7cbc6fd 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.6 2004/04/08 01:36:15 mdw Exp $ * * Encoding and decoding of key data * @@ -27,21 +27,6 @@ * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: key-data.c,v $ - * 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. - * - * Revision 1.2 2000/02/12 18:21:02 mdw - * Overhaul of key management (again). - * - * Revision 1.1 1999/12/22 15:47:48 mdw - * Major key-management revision. - * - */ - /*----- Header files ------------------------------------------------------*/ #include @@ -114,6 +99,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 +214,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 +257,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 +308,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: {