void
-dsa_sign(const struct dsa_public_key *pub,
- const struct dsa_private_key *key,
- void *random_ctx, nettle_random_func random,
- struct sha1_ctx *hash,
- struct dsa_signature *signature)
+dsa_sign_digest(const struct dsa_public_key *pub,
+ const struct dsa_private_key *key,
+ void *random_ctx, nettle_random_func random,
+ const uint8_t *digest,
+ struct dsa_signature *signature)
{
mpz_t k;
mpz_t h;
/* Compute hash */
mpz_init(h);
- _dsa_hash(h, hash);
+ nettle_mpz_set_str_256_u(h, SHA1_DIGEST_SIZE, digest);
/* Compute k^-1 (mod q) */
if (!mpz_invert(k, k, pub->q))
mpz_clear(tmp);
}
+void
+dsa_sign(const struct dsa_public_key *pub,
+ const struct dsa_private_key *key,
+ void *random_ctx, nettle_random_func random,
+ struct sha1_ctx *hash,
+ struct dsa_signature *signature)
+{
+ uint8_t digest[SHA1_DIGEST_SIZE];
+ sha1_digest(hash, sizeof(digest), digest);
+
+ dsa_sign_digest(pub, key, random_ctx, random,
+ digest, signature);
+}
+
#endif /* WITH_PUBLIC_KEY */
/* nettle, low-level cryptographics library
*
- * Copyright (C) 2002 Niels Möller
+ * Copyright (C) 2002, 2003 Niels Möller
*
* The nettle library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
#include "dsa.h"
+#include "bignum.h"
+
#include <stdlib.h>
int
-dsa_verify(const struct dsa_public_key *key,
- struct sha1_ctx *hash,
- const struct dsa_signature *signature)
+dsa_verify_digest(const struct dsa_public_key *key,
+ const uint8_t *digest,
+ const struct dsa_signature *signature)
{
mpz_t w;
mpz_t tmp;
mpz_init(tmp);
mpz_init(v);
-
- /* Compute hash */
- _dsa_hash(tmp, hash);
+
+ /* The message digest */
+ nettle_mpz_set_str_256_u(tmp, SHA1_DIGEST_SIZE, digest);
/* v = g^{w * h (mod q)} (mod p) */
-
mpz_mul(tmp, tmp, w);
mpz_fdiv_r(tmp, tmp, key->q);
return res;
}
+int
+dsa_verify(const struct dsa_public_key *key,
+ struct sha1_ctx *hash,
+ const struct dsa_signature *signature)
+{
+ uint8_t digest[SHA1_DIGEST_SIZE];
+ sha1_digest(hash, sizeof(digest), digest);
+
+ return dsa_verify_digest(key, digest, signature);
+}
+
#endif /* WITH_PUBLIC_KEY */