diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2021-09-16 15:50:55 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2021-09-16 15:50:55 +0900 |
commit | 267fd275bb2842af48c966103444835557ea2f18 (patch) | |
tree | 7969080f3fcdaab42da726ab84021b0fb699bd63 | |
parent | 117f5c3f8028efc18a0b20d854b6b2b8babcb1d6 (diff) | |
download | libgcrypt-267fd275bb2842af48c966103444835557ea2f18.tar.gz |
experiment: Supply CTX to internal implementation.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
-rw-r--r-- | cipher/pubkey.c | 34 | ||||
-rw-r--r-- | src/gcrypt-int.h | 5 | ||||
-rw-r--r-- | src/visibility.c | 6 |
3 files changed, 28 insertions, 17 deletions
diff --git a/cipher/pubkey.c b/cipher/pubkey.c index fcc9fb29..cb19fbbd 100644 --- a/cipher/pubkey.c +++ b/cipher/pubkey.c @@ -440,7 +440,7 @@ _gcry_pk_sign (gcry_sexp_t *r_sig, gcry_sexp_t s_hash, gcry_sexp_t s_skey) gcry_err_code_t _gcry_pk_sign_md (gcry_sexp_t *r_sig, const char *tmpl, gcry_md_hd_t hd_orig, - gcry_sexp_t s_skey) + gcry_sexp_t s_skey, gcry_ctx_t ctx) { gcry_err_code_t rc; gcry_pk_spec_t *spec; @@ -463,13 +463,19 @@ _gcry_pk_sign_md (gcry_sexp_t *r_sig, const char *tmpl, gcry_md_hd_t hd_orig, if (!digest) { _gcry_md_close (hd); - return GPG_ERR_DIGEST_ALGO; + return GPG_ERR_NOT_IMPLEMENTED; } - rc = _gcry_sexp_build (&s_hash, NULL, tmpl, - _gcry_md_algo_name (algo), - (int) _gcry_md_get_algo_dlen (algo), - digest); + if (!ctx) + rc = _gcry_sexp_build (&s_hash, NULL, tmpl, + _gcry_md_algo_name (algo), + (int) _gcry_md_get_algo_dlen (algo), + digest); + else + { + _gcry_md_close (hd); + return GPG_ERR_DIGEST_ALGO; + } _gcry_md_close (hd); if (rc) @@ -522,7 +528,7 @@ _gcry_pk_verify (gcry_sexp_t s_sig, gcry_sexp_t s_hash, gcry_sexp_t s_pkey) gcry_err_code_t _gcry_pk_verify_md (gcry_sexp_t s_sig, const char *tmpl, gcry_md_hd_t hd_orig, - gcry_sexp_t s_pkey) + gcry_sexp_t s_pkey, gcry_ctx_t ctx) { gcry_err_code_t rc; gcry_pk_spec_t *spec; @@ -546,10 +552,16 @@ _gcry_pk_verify_md (gcry_sexp_t s_sig, const char *tmpl, gcry_md_hd_t hd_orig, return GPG_ERR_DIGEST_ALGO; } - rc = _gcry_sexp_build (&s_hash, NULL, tmpl, - _gcry_md_algo_name (algo), - (int) _gcry_md_get_algo_dlen (algo), - digest); + if (!ctx) + rc = _gcry_sexp_build (&s_hash, NULL, tmpl, + _gcry_md_algo_name (algo), + (int) _gcry_md_get_algo_dlen (algo), + digest); + else + { + _gcry_md_close (hd); + return GPG_ERR_NOT_IMPLEMENTED; + } _gcry_md_close (hd); if (rc) diff --git a/src/gcrypt-int.h b/src/gcrypt-int.h index 6829a427..1307bd76 100644 --- a/src/gcrypt-int.h +++ b/src/gcrypt-int.h @@ -114,9 +114,10 @@ gpg_error_t _gcry_ecc_mul_point (int algo, unsigned char *result, const unsigned char *scalar, const unsigned char *point); gcry_err_code_t _gcry_pk_sign_md (gcry_sexp_t *r_sig, const char *tmpl, - gcry_md_hd_t hd, gcry_sexp_t s_skey); + gcry_md_hd_t hd, gcry_sexp_t s_skey, gcry_ctx_t ctx); gcry_err_code_t _gcry_pk_verify_md (gcry_sexp_t s_sig, const char *tmpl, - gcry_md_hd_t hd, gcry_sexp_t s_pkey); + gcry_md_hd_t hd, gcry_sexp_t s_pkey, + gcry_ctx_t ctx); gcry_error_t _gcry_pkey_vopen (gcry_pkey_hd_t *h, int algo, unsigned int flags, va_list arg_ptr); diff --git a/src/visibility.c b/src/visibility.c index 3f0514f7..7223cab5 100644 --- a/src/visibility.c +++ b/src/visibility.c @@ -1031,8 +1031,7 @@ gcry_error_t gcry_pk_hash_sign (gcry_sexp_t *result, const char *data_tmpl, gcry_sexp_t skey, gcry_md_hd_t hd, gcry_ctx_t ctx) { - (void)ctx; - return gpg_error (_gcry_pk_sign_md (result, data_tmpl, hd, skey)); + return gpg_error (_gcry_pk_sign_md (result, data_tmpl, hd, skey, ctx)); } gcry_error_t @@ -1047,8 +1046,7 @@ gcry_error_t gcry_pk_hash_verify (gcry_sexp_t sigval, const char *data_tmpl, gcry_sexp_t pkey, gcry_md_hd_t hd, gcry_ctx_t ctx) { - (void)ctx; - return gpg_error (_gcry_pk_verify_md (sigval, data_tmpl, hd, pkey)); + return gpg_error (_gcry_pk_verify_md (sigval, data_tmpl, hd, pkey, ctx)); } gcry_error_t |