/* -*-c-*-
*
- * $Id: key.h,v 1.4 2000/02/12 18:21:02 mdw Exp $
+ * $Id: key.h,v 1.6 2000/06/17 11:27:43 mdw Exp $
*
* Simple key management
*
/*----- Revision history --------------------------------------------------*
*
* $Log: key.h,v $
+ * Revision 1.6 2000/06/17 11:27:43 mdw
+ * Add key fetching interface.
+ *
+ * Revision 1.5 2000/02/12 18:55:40 mdw
+ * Make it all compile properly.
+ *
* Revision 1.4 2000/02/12 18:21:02 mdw
* Overhaul of key management (again).
*
typedef struct { hash_iter i; time_t t; } key_iter;
typedef struct { sym_iter i; } key_attriter;
+/* --- Key fetching --- */
+
+typedef struct key_fetchdef {
+ char *name; /* Name of item */
+ size_t off; /* Offset into target structure */
+ unsigned e; /* Flags for the item */
+ const struct key_fetchdef *kf; /* Substructure pointer */
+} key_fetchdef;
+
/* --- File opening options --- */
enum {
KERR_EXPIRED = -8, /* Key has already expired */
KERR_BADFLAGS = -9, /* Error in flags string */
KERR_BADPASS = -10, /* Error decrypting locked key */
- KERR_BADTYPE = -11, /* Key has incorrect type */
+ KERR_WRONGTYPE = -11, /* Key has incorrect type */
KERR_NOTFOUND = -12, /* Key couldn't be found */
KERR_MAX /* Largest possible error */
};
extern key *key_next(key_iter */*i*/);
+/*----- Fetching key data conveniently ------------------------------------*/
+
+/* --- @key_fetchinit@ --- *
+ *
+ * Arguments: @const key_fetchdef *kf@ = pointer to base definition
+ * @key_packstruct *kps@ = pointer to destination packing def
+ * @void *p@ = pointer to destination block
+ *
+ * Returns: Pointer to packing definition.
+ *
+ * Use: Initializes a packing definition (@key_packdef@ structure).
+ * If @kps@ is null on entry, an appropriately sized block is
+ * allocated automatically. Otherwise it must be large enough.
+ */
+
+extern key_packdef *key_fetchinit(const key_fetchdef */*kf*/,
+ key_packstruct */*kp*/, void */*p*/);
+
+/* --- @key_fetch@ --- *
+ *
+ * Arguments: @key_packdef *kp@ = pointer to packing structure
+ * @key *k@ = key file containing desired key
+ *
+ * Returns: Error code, or zero.
+ *
+ * Use: Fetches an unpacked key from a packed one.
+ */
+
+extern int key_fetch(key_packdef */*kp*/, key */*k*/);
+
+/* --- @key_fetchbyname@ --- *
+ *
+ * Arguments: @key_packdef *kp@ = pointer to packing structure
+ * @key_file *kf@ = key file containing desired key
+ * @const char *tag@ = user's tag describing the key
+ *
+ * Returns: Error code, or zero.
+ *
+ * Use: Fetches a named key from a key file and unpacks it
+ * conveniently.
+ */
+
+extern int key_fetchbyname(key_packdef */*kp*/,
+ key_file */*kf*/, const char */*tag*/);
+
+/* --- @key_fetchdone@ --- *
+ *
+ * Arguments: @key_packdef *kp@ = pointer to packing structure
+ *
+ * Returns: ---
+ *
+ * Use: Frees a packing structure. If the structure was allocated by
+ * @key_fetchinit@ then it is freed.
+ */
+
+extern void key_fetchdone(key_packdef */*kp*/);
+
/*----- Other functions ---------------------------------------------------*/
/* --- @key_moan@ --- *