X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/8b810a45dec25017a6256e4ef134236444a00921..f5f35081384158156cd62ef93e51c1afce1b9aa9:/dsa.h diff --git a/dsa.h b/dsa.h index 1958d50..ba3bad8 100644 --- a/dsa.h +++ b/dsa.h @@ -1,6 +1,6 @@ /* -*-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 * @@ -30,13 +30,19 @@ /*----- 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" { @@ -53,7 +59,7 @@ /*----- Header files ------------------------------------------------------*/ -#ifndef MP_H +#ifndef CATACOMB_MP_H # include "mp.h" #endif @@ -62,15 +68,18 @@ 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 */ @@ -110,9 +119,8 @@ typedef struct dsa_sig { * 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). @@ -126,20 +134,22 @@ typedef struct dsa_sig { * 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: --- @@ -147,8 +157,8 @@ extern int dsa_seed(dsa_param */*dp*/, unsigned /*l*/, * 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@ --- * @@ -179,22 +189,22 @@ extern void dsa_sign(dsa_param */*dp*/, mp */*a*/, /* --- @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 @@ -207,7 +217,7 @@ extern int dsa_vrfy(const dsa_param */*dp*/, const mp */*y*/, * 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*/);