/* -*-c-*-
*
- * $Id: dsa.h,v 1.1 1999/11/19 19:28:00 mdw Exp $
+ * $Id: dsa.h,v 1.3 1999/12/10 23:29:48 mdw Exp $
*
* Digital Signature Algorithm
*
/*----- Revision history --------------------------------------------------*
*
* $Log: dsa.h,v $
+ * Revision 1.3 1999/12/10 23:29:48 mdw
+ * Change header file guard names.
+ *
+ * Revision 1.2 1999/11/20 22:23:48 mdw
+ * Allow event handler to abort the search process.
+ *
* Revision 1.1 1999/11/19 19:28:00 mdw
* Implementation of the Digital Signature Algorithm.
*
*/
-#ifndef DSA_H
-#define DSA_H
+#ifndef CATACOMB_DSA_H
+#define CATACOMB_DSA_H
#ifdef __cplusplus
extern "C" {
/*----- Header files ------------------------------------------------------*/
-#ifndef MP_H
+#ifndef CATACOMB_MP_H
# include "mp.h"
#endif
enum {
DSAEV_OK, /* Everything is fine */
+ DSAEV_FINDQ, /* Search for a @q@ */
DSAEV_FAILQ, /* @q@ failed primality test */
DSAEV_PASSQ, /* @q@ passeed one iteration */
DSAEV_GOODQ, /* Found good prime @q@ */
+ DSAEV_FINDP, /* Search for a @p@ */
DSAEV_TRYP, /* Try prospective @p@ */
DSAEV_FAILP, /* @p@ failed primality test */
DSAEV_PASSP, /* @p@ passed one iteration */
DSAEV_GOODP, /* @p@ accepted as being prime */
+ DSAEV_FINDG, /* Search for a @g@ */
DSAEV_TRYH, /* Try prospective @h@ */
DSAEV_FAILH, /* @h@ failed */
DSAEV_GOODG /* @g@ accepted as a generator */
* Arguments: @dsa_param *dp@ = where to store parameters
* @unsigned l@ = bitlength of @p@ in bits
* @const void *k@ = pointer to key material
+ * @int (*proc)(int ev, mp *m, void *p)@ = event procedure
* @size_t sz@ = size of key material
- * @void (*proc)(int ev, mp *m, void *p)@ = event procedure
- * @void *p@ = argument for event procedure
*
* Returns: Zero if all went well, nonzero if key material was
* unsuitable (one of the @DSAEV@ codes).
* The event procedure is informed of various happenings during
* generation. It is passed an event code describing what
* happened, and a multiprecision number which pertains to the
- * event code.
+ * event code. It may abort the search at any time by returning
+ * a nonzero value, which is returned as the result of the
+ * function.
*/
extern int dsa_seed(dsa_param */*dp*/, unsigned /*l*/,
const void */*k*/, size_t /*sz*/,
- void (*proc)(int /*ev*/, mp */*m*/, void */*p*/),
+ int (*proc)(int /*ev*/, mp */*m*/, void */*p*/),
void */*p*/);
/* --- @dsa_mksig@ --- *
*
* Arguments: @const dsa_param *dp@ = pointer to DSA parameters
- * @const mp *a@ = secret signing key
- * @const mp *m@ = message to be signed
- * @const mp *k@ = random data
+ * @mp *a@ = secret signing key
+ * @mp *m@ = message to be signed
+ * @mp *k@ = random data
* @mp **rr, **ss@ = where to put output parameters
*
* Returns: ---
* Use: Computes a DSA signature of a message.
*/
-extern void dsa_mksig(const dsa_param */*dp*/, const mp */*a*/,
- const mp */*m*/, const mp */*k*/,
+extern void dsa_mksig(const dsa_param */*dp*/, mp */*a*/,
+ mp */*m*/, mp */*k*/,
mp **/*rr*/, mp **/*ss*/);
/* --- @dsa_sign@ --- *
/* --- @dsa_vrfy@ --- *
*
* Arguments: @const dsa_param *dp@ = pointer to DSA parameters
- * @const mp *y@ = public verification key
- * @const mp *m@ = message which was signed
- * @const mp *r, *s@ = the signature
+ * @mp *y@ = public verification key
+ * @mp *m@ = message which was signed
+ * @mp *r, *s@ = the signature
*
* Returns: Zero if the signature is a forgery, nonzero if it's valid.
*
* Use: Verifies a DSA digital signature.
*/
-extern int dsa_vrfy(const dsa_param */*dp*/, const mp */*y*/,
- const mp */*m*/, const mp */*r*/, const mp */*s*/);
+extern int dsa_vrfy(const dsa_param */*dp*/, mp */*y*/,
+ mp */*m*/, mp */*r*/, mp */*s*/);
/* --- @dsa_verify@ --- *
*
* Arguments: @const dsa_param *dp@ = pointer to DSA parameters
- * @const mp *y@ = public verification key
+ * @mp *y@ = public verification key
* @const void *m@ = pointer to message block
* @size_t msz@ = size of message block
* @const void *r@ = pointer to @r@ signature half
* Use: Verifies a DSA digital signature.
*/
-extern int dsa_verify(const dsa_param */*dp*/, const 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*/);