Pollard's rho algorithm for computing discrete logs.
[u/mdw/catacomb] / dsa.h
diff --git a/dsa.h b/dsa.h
index e8dee83..2b4949d 100644 (file)
--- a/dsa.h
+++ b/dsa.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: dsa.h,v 1.4 1999/12/22 15:52:44 mdw Exp $
+ * $Id: dsa.h,v 1.6 2000/07/01 11:20:51 mdw Exp $
  *
  * Digital Signature Algorithm
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: dsa.h,v $
+ * Revision 1.6  2000/07/01 11:20:51  mdw
+ * New functions for freeing public and private keys.
+ *
+ * Revision 1.5  2000/06/17 10:53:42  mdw
+ * Minor changes for key fetching.  Typesetting fixes.
+ *
  * Revision 1.4  1999/12/22 15:52:44  mdw
  * Reworking for new prime-search system.
  *
 
 /*----- Header files ------------------------------------------------------*/
 
+#ifndef CATACOMB_KEY_H
+#  include "key.h"
+#endif
+
 #ifndef CATACOMB_MP_H
 #  include "mp.h"
 #endif
@@ -83,6 +93,17 @@ typedef struct dsa_param {
   mp *g;                               /* Generates order-%$q$% subgroup */
 } dsa_param;
 
+typedef struct dsa_pub {
+  dsa_param dp;                                /* Shared parameters */
+  mp *y;                               /* Public key */
+} dsa_pub;
+
+typedef struct dsa_priv {
+  dsa_param dp;                                /* Shared parameters */
+  mp *x;                               /* Private key */
+  mp *y;                               /* %$y \equiv g^x \pmod{p}$% */
+} dsa_priv;
+
 /* --- DSA signature structure --- *
  *
  * This is the recommended structure for a DSA signature.  The actual signing
@@ -97,6 +118,31 @@ typedef struct dsa_sig {
   octet s[DSA_SIGLEN];                 /* 160-bit @s@ value */
 } dsa_sig;
 
+/*----- Key fetching ------------------------------------------------------*/
+
+extern const key_fetchdef dsa_paramfetch[];
+#define DSA_PARAMFETCHSZ 5
+
+extern const key_fetchdef dsa_pubfetch[];
+#define DSA_PUBFETCHSZ 6
+
+extern const key_fetchdef dsa_privfetch[];
+#define DSA_PRIVFETCHSZ 9
+
+/* --- @dsa_paramfree@, @dsa_pubfree@, @dsa_privfree@ --- *
+ *
+ * Arguments:  @dsa_param *dp@, @dsa_pub *dp@, @dsa_priv *dp@ = pointer
+ *                     to key block to free
+ *
+ * Returns:    ---
+ *
+ * Use:                Frees a DSA key block.
+ */
+
+extern void dsa_paramfree(dsa_param */*dp*/);
+extern void dsa_pubfree(dsa_pub */*dp*/);
+extern void dsa_privfree(dsa_priv */*dp*/);
+
 /*----- DSA stepper -------------------------------------------------------*/
 
 typedef struct dsa_stepctx {
@@ -221,9 +267,9 @@ extern int dsa_vrfy(const dsa_param */*dp*/, mp */*y*/,
  */
 
 extern int dsa_verify(const dsa_param */*dp*/, mp */*y*/,
-              const void */*m*/, size_t /*msz*/,
-              const void */*r*/, size_t /*rsz*/,
-              const void */*s*/, size_t /*ssz*/);
+                     const void */*m*/, size_t /*msz*/,
+                     const void */*r*/, size_t /*rsz*/,
+                     const void */*s*/, size_t /*ssz*/);
 
 /*----- That's all, folks -------------------------------------------------*/