summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2021-09-16 15:50:55 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2021-09-16 15:50:55 +0900
commit267fd275bb2842af48c966103444835557ea2f18 (patch)
tree7969080f3fcdaab42da726ab84021b0fb699bd63
parent117f5c3f8028efc18a0b20d854b6b2b8babcb1d6 (diff)
downloadlibgcrypt-267fd275bb2842af48c966103444835557ea2f18.tar.gz
experiment: Supply CTX to internal implementation.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
-rw-r--r--cipher/pubkey.c34
-rw-r--r--src/gcrypt-int.h5
-rw-r--r--src/visibility.c6
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