/*----- Header files ------------------------------------------------------*/
+#include <mLib/macros.h>
+
#ifndef CATACOMB_DH_H
# include "dh.h"
#endif
+#ifndef CATACOMB_GRAND_H
+# include "grand.h"
+#endif
+
#ifndef CATACOMB_KEY_H
# include "key.h"
#endif
extern mp *dsa_h2n(mp */*d*/, mp */*r*/, const void */*h*/, size_t /*hsz*/);
+/* --- @dsa_nonce@ --- *
+ *
+ * Arguments: @mp *d@ = destination integer
+ * @mp *q@ = order of the DSA group
+ * @mp *x@ = secret key
+ * @const octet *m@ = message hash
+ * @const gchash *ch@ = hash class
+ * @grand *r@ = random bit source, or null
+ *
+ * Returns: A nonce.
+ *
+ * Use: Generates a nonce for use in DSA (or another Fiat--Shamir
+ * signature scheme).
+ */
+
+extern mp *dsa_nonce(mp */*d*/, mp */*q*/, mp */*x*/, const octet */*m*/,
+ const gchash */*ch*/, grand */*r*/);
+
/* --- @dsa_mksig@ --- *
*
* Arguments: @const dsa_param *dp@ = pointer to DSA parameters
* Returns: ---
*
* Use: Computes a DSA signature of a message.
+ *
+ * This function is deprecated. It's really rather badly
+ * designed, and hard to use securely (and hard to fix). Please
+ * use @gdsa_sign@ instead.
*/
-extern void dsa_mksig(const dsa_param */*dp*/, mp */*a*/,
- mp */*m*/, mp */*k*/,
- mp **/*rr*/, mp **/*ss*/);
+extern
+#ifndef CATACOMB_DSAIMPL
+ DEPRECATED("please use `gdsa_sign' instead")
+#endif
+ void dsa_mksig(const dsa_param */*dp*/, mp */*a*/, mp */*m*/, mp */*k*/,
+ mp **/*rr*/, mp **/*ss*/);
/* --- @dsa_sign@ --- *
*
*
* Use: Signs a message, storing the results in a big-endian binary
* form.
+ *
+ * This function is deprecated. It's really rather badly
+ * designed, and hard to use securely (and hard to fix). Please
+ * use @gdsa_sign@ instead.
*/
-extern void dsa_sign(dsa_param */*dp*/, mp */*a*/,
- const void */*m*/, size_t /*msz*/,
- const void */*k*/, size_t /*ksz*/,
- void */*r*/, size_t /*rsz*/,
- void */*s*/, size_t /*ssz*/);
+extern
+#ifndef CATACOMB_DSAIMPL
+ DEPRECATED("please use `gdsa_sign' instead")
+#endif
+ void dsa_sign(dsa_param */*dp*/, mp */*a*/,
+ const void */*m*/, size_t /*msz*/,
+ const void */*k*/, size_t /*ksz*/,
+ void */*r*/, size_t /*rsz*/, void */*s*/, size_t /*ssz*/);
/* --- @dsa_vrfy@ --- *
*