diff options
author | Werner Koch <wk@gnupg.org> | 2013-10-11 22:37:41 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2013-10-11 22:37:58 +0200 |
commit | a951c061523e1c13f1358c9760fc3a9d787ab2d4 (patch) | |
tree | 5ea15233dbeffa041c129920c6ab5fa93b40b75e /cipher/rsa.c | |
parent | 07950c865a901afc48acb46f0695040cadfd5068 (diff) | |
download | libgcrypt-a951c061523e1c13f1358c9760fc3a9d787ab2d4.tar.gz |
pubkey: Move sexp parsing of remaining fucntions to the modules.
* cipher/pubkey.c (release_mpi_array): Remove.
(pubkey_check_secret_key): Remove.
(sexp_elements_extract): Remove.
(sexp_elements_extract_ecc): Remove.
(sexp_to_key): Remove.
(get_hash_algo): Remove.
(gcry_pk_testkey): Revamp.
(gcry_pk_get_curve): Revamp.
* cipher/rsa.c (rsa_check_secret_key): Revamp.
* cipher/elgamal.c (elg_check_secret_key): Revamp.
* cipher/dsa.c (dsa_check_secret_key): Revamp.
* cipher/ecc.c (ecc_check_secret_key): Revamp.
* cipher/ecc-curves.c: Include cipher.h and pubkey-internal.h
(_gcry_ecc_get_curve): Revamp.
* cipher/pubkey-util.c (_gcry_pk_util_extract_mpis): Set passed and
used parameters on error to NULL.
--
That is the final part of the changes modulo introduced regressions.
pubkey.c is now actually maintainable code.
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'cipher/rsa.c')
-rw-r--r-- | cipher/rsa.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/cipher/rsa.c b/cipher/rsa.c index 428185bf..fc6bbe5b 100644 --- a/cipher/rsa.c +++ b/cipher/rsa.c @@ -836,27 +836,31 @@ rsa_generate (const gcry_sexp_t genparms, gcry_sexp_t *r_skey) static gcry_err_code_t -rsa_check_secret_key (int algo, gcry_mpi_t *skey) +rsa_check_secret_key (gcry_sexp_t keyparms) { - gcry_err_code_t err = GPG_ERR_NO_ERROR; - RSA_secret_key sk; - - (void)algo; + gcry_err_code_t rc; + RSA_secret_key sk = {NULL, NULL, NULL, NULL, NULL, NULL}; - sk.n = skey[0]; - sk.e = skey[1]; - sk.d = skey[2]; - sk.p = skey[3]; - sk.q = skey[4]; - sk.u = skey[5]; + /* To check the key we need the optional parameters. */ + rc = _gcry_pk_util_extract_mpis (keyparms, "nedpqu", + &sk.n, &sk.e, &sk.d, &sk.p, &sk.q, &sk.u, + NULL); + if (rc) + goto leave; - if (!sk.p || !sk.q || !sk.u) - err = GPG_ERR_NO_OBJ; /* To check the key we need the optional - parameters. */ - else if (!check_secret_key (&sk)) - err = GPG_ERR_BAD_SECKEY; + if (!check_secret_key (&sk)) + rc = GPG_ERR_BAD_SECKEY; - return err; + leave: + gcry_mpi_release (sk.n); + gcry_mpi_release (sk.e); + gcry_mpi_release (sk.d); + gcry_mpi_release (sk.p); + gcry_mpi_release (sk.q); + gcry_mpi_release (sk.u); + if (DBG_CIPHER) + log_debug ("rsa_testkey => %s\n", gpg_strerror (rc)); + return rc; } @@ -887,7 +891,7 @@ rsa_encrypt (gcry_sexp_t *r_ciph, gcry_sexp_t s_data, gcry_sexp_t keyparms) /* Extract the key. */ rc = _gcry_pk_util_extract_mpis (keyparms, "ne", &pk.n, &pk.e, NULL); if (rc) - return rc; + goto leave; if (DBG_CIPHER) { log_mpidump ("rsa_encrypt n", pk.n); @@ -968,7 +972,7 @@ rsa_decrypt (gcry_sexp_t *r_plain, gcry_sexp_t s_data, gcry_sexp_t keyparms) &sk.n, &sk.e, &sk.d, &sk.p, &sk.q, &sk.u, NULL); if (rc) - return rc; + goto leave; if (DBG_CIPHER) { log_printmpi ("rsa_decrypt n", sk.n); @@ -1112,7 +1116,7 @@ rsa_sign (gcry_sexp_t *r_sig, gcry_sexp_t s_data, gcry_sexp_t keyparms) &sk.n, &sk.e, &sk.d, &sk.p, &sk.q, &sk.u, NULL); if (rc) - return rc; + goto leave; if (DBG_CIPHER) { log_printmpi ("rsa_sign n", sk.n); @@ -1205,7 +1209,7 @@ rsa_verify (gcry_sexp_t s_sig, gcry_sexp_t s_data, gcry_sexp_t keyparms) /* Extract the key. */ rc = _gcry_pk_util_extract_mpis (keyparms, "ne", &pk.n, &pk.e, NULL); if (rc) - return rc; + goto leave; if (DBG_CIPHER) { log_printmpi ("rsa_verify n", pk.n); |