/* -*-c-*-
*
- * $Id: key-data.c,v 1.4 2000/07/16 19:51:58 mdw Exp $
+ * $Id: key-data.c,v 1.5 2004/03/28 01:58:47 mdw Exp $
*
* Encoding and decoding of key data
*
/*----- 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.
*
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
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;
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: {