Generate, store and retreive elliptic curve keys.
[u/mdw/catacomb] / key-data.c
index 2a57cf2..494e9c8 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-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
  *
@@ -30,6 +30,9 @@
 /*----- 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.
  *
@@ -117,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
@@ -199,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;
@@ -287,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: {