/* -*-c-*-
*
- * $Id: key-data.c,v 1.2 2000/02/12 18:21:02 mdw Exp $
+ * $Id: key-data.c,v 1.6 2004/04/08 01:36:15 mdw Exp $
*
* Encoding and decoding of key data
*
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: key-data.c,v $
- * 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 <assert.h>
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
key_data *key_structfind(key_data *k, const char *tag)
{
key_struct *ks;
- assert(((void)"Key is not structured", k->e == KENC_STRUCT));
+ assert(((void)"Key is not structured",
+ (k->e & KF_ENCMASK) == KENC_STRUCT));
ks = sym_find(&k->u.s, tag, -1, 0, 0);
+ if (!ks)
+ return (0);
return (&ks->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;
else {
sym_iter i;
key_struct *ks;
- size_t n;
+ size_t n = 0;
int rc;
if (d)
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: {