diff options
author | Werner Koch <wk@gnupg.org> | 2013-09-07 10:06:46 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2013-09-19 16:43:33 +0200 |
commit | eca9e2e50ddd4c9020fe1d4a9a3c77d20ebb90f6 (patch) | |
tree | b2213a92e408c942ac77ad3e5c4995f4d06cdd0a /cipher/dsa.c | |
parent | d399faf5db71d429bfd6fa4a9cfc82e2a55055f0 (diff) | |
download | libgcrypt-eca9e2e50ddd4c9020fe1d4a9a3c77d20ebb90f6.tar.gz |
pk: Move s-expr creation for sign and encrypt to the modules.
* cipher/pubkey.c (pubkey_encrypt): Fold into gcry_pk_encrypt.
(pubkey_decrypt): Fold into gcry_pk_decrypt.
(pubkey_sign): Fold into gcry_pk_sign.
(pubkey_verify): Fold into gcry_pk_verify.
(octet_string_from_mpi): Make it a wrapper and factor code out to ...
* mpi/mpicoder.c (_gcry_mpi_to_octet_string): New function.
* src/cipher.h (PUBKEY_FLAG_FIXEDLEN): New.
* cipher/pubkey.c (sexp_data_to_mpi): Set flag for some encodings.
(gcry_pk_encrypt): Simply by moving the s-expr generation to the modules.
(gcry_pk_sign): Ditto.
* cipher/dsa.c (dsa_sign): Create s-expr.
* cipher/elgamal.c (elg_encrypt, elg_sign): Ditto.
* cipher/rsa.c (rsa_encrypt, rsa_sign): Ditto.
* cipher/ecc.c (ecc_sign, ecc_encrypt_raw): Ditto.
(ecdsa_names): Add "eddsa".
* tests/t-ed25519.c (one_test): Expect "eddsa" token.
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'cipher/dsa.c')
-rw-r--r-- | cipher/dsa.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/cipher/dsa.c b/cipher/dsa.c index ca9a4f68..13a4fc26 100644 --- a/cipher/dsa.c +++ b/cipher/dsa.c @@ -974,11 +974,12 @@ dsa_check_secret_key (int algo, gcry_mpi_t *skey) static gcry_err_code_t -dsa_sign (int algo, gcry_mpi_t *resarr, gcry_mpi_t data, gcry_mpi_t *skey, +dsa_sign (int algo, gcry_sexp_t *r_result, gcry_mpi_t data, gcry_mpi_t *skey, int flags, int hashalgo) { gcry_err_code_t rc; DSA_secret_key sk; + gcry_mpi_t r, s; (void)algo; (void)flags; @@ -995,9 +996,15 @@ dsa_sign (int algo, gcry_mpi_t *resarr, gcry_mpi_t data, gcry_mpi_t *skey, sk.g = skey[2]; sk.y = skey[3]; sk.x = skey[4]; - resarr[0] = mpi_alloc (mpi_get_nlimbs (sk.p)); - resarr[1] = mpi_alloc (mpi_get_nlimbs (sk.p)); - rc = sign (resarr[0], resarr[1], data, &sk, flags, hashalgo); + r = mpi_alloc (mpi_get_nlimbs (sk.p)); + s = mpi_alloc (mpi_get_nlimbs (sk.p)); + rc = sign (r, s, data, &sk, flags, hashalgo); + if (!rc) + rc = gcry_err_code (gcry_sexp_build (r_result, NULL, + "(sig-val(dsa(r%M)(s%M)))", + r, s)); + mpi_free (r); + mpi_free (s); } return rc; } |