aboutsummaryrefslogtreecommitdiffstats
path: root/sm
diff options
context:
space:
mode:
Diffstat (limited to 'sm')
-rw-r--r--sm/decrypt.c2
-rw-r--r--sm/encrypt.c2
-rw-r--r--sm/gpgsm.c6
-rw-r--r--sm/gpgsm.h5
-rw-r--r--sm/server.c4
-rw-r--r--sm/sign.c2
-rw-r--r--sm/verify.c2
7 files changed, 23 insertions, 0 deletions
diff --git a/sm/decrypt.c b/sm/decrypt.c
index abc1f2602..62983fe9c 100644
--- a/sm/decrypt.c
+++ b/sm/decrypt.c
@@ -1108,6 +1108,8 @@ gpgsm_decrypt (ctrl_t ctrl, int in_fd, estream_t out_fp)
}
gnupg_ksba_set_progress_cb (b64writer, gpgsm_progress_cb, ctrl);
+ if (ctrl->input_size_hint)
+ gnupg_ksba_set_total (b64writer, ctrl->input_size_hint);
rc = ksba_cms_new (&cms);
if (rc)
diff --git a/sm/encrypt.c b/sm/encrypt.c
index b0e59f73e..6e78a0620 100644
--- a/sm/encrypt.c
+++ b/sm/encrypt.c
@@ -654,6 +654,8 @@ gpgsm_encrypt (ctrl_t ctrl, certlist_t recplist, int data_fd, estream_t out_fp)
}
gnupg_ksba_set_progress_cb (b64writer, gpgsm_progress_cb, ctrl);
+ if (ctrl->input_size_hint)
+ gnupg_ksba_set_total (b64writer, ctrl->input_size_hint);
err = ksba_cms_new (&cms);
if (err)
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index 07c3ff480..ad7652c7d 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -139,6 +139,7 @@ enum cmd_and_opt_values {
oAssumeArmor,
oAssumeBase64,
oAssumeBinary,
+ oInputSizeHint,
oBase64,
oNoArmor,
@@ -326,6 +327,7 @@ static gpgrt_opt_t opts[] = {
N_("assume input is in base-64 format")),
ARGPARSE_s_n (oAssumeBinary, "assume-binary",
N_("assume input is in binary format")),
+ ARGPARSE_s_s (oInputSizeHint, "input-size-hint", "@"),
ARGPARSE_header ("Output", N_("Options controlling the output")),
@@ -1188,6 +1190,10 @@ main ( int argc, char **argv)
ctrl.is_base64 = 0;
break;
+ case oInputSizeHint:
+ ctrl.input_size_hint = string_to_u64 (pargs.r.ret_str);
+ break;
+
case oDisableCRLChecks:
opt.no_crl_check = 1;
break;
diff --git a/sm/gpgsm.h b/sm/gpgsm.h
index 46c77803d..e1aca8bb7 100644
--- a/sm/gpgsm.h
+++ b/sm/gpgsm.h
@@ -250,6 +250,11 @@ struct server_control_s
int is_pem; /* Is in PEM format */
int is_base64; /* is in plain base-64 format */
+ /* If > 0 a hint with the expected number of input data bytes. This
+ * is not necessary an exact number but intended to be used for
+ * progress info and to decide on how to allocate buffers. */
+ uint64_t input_size_hint;
+
int create_base64; /* Create base64 encoded output */
int create_pem; /* create PEM output */
const char *pem_name; /* PEM name to use */
diff --git a/sm/server.c b/sm/server.c
index 1510590a7..b545c1bfb 100644
--- a/sm/server.c
+++ b/sm/server.c
@@ -298,6 +298,10 @@ option_handler (assuan_context_t ctx, const char *key, const char *value)
opt.request_origin = i;
}
}
+ else if (!strcmp (key, "input-size-hint"))
+ {
+ ctrl->input_size_hint = string_to_u64 (value);
+ }
else
err = gpg_error (GPG_ERR_UNKNOWN_OPTION);
diff --git a/sm/sign.c b/sm/sign.c
index 4f5e8e3a0..235dac8cb 100644
--- a/sm/sign.c
+++ b/sm/sign.c
@@ -688,6 +688,8 @@ gpgsm_sign (ctrl_t ctrl, certlist_t signerlist,
}
gnupg_ksba_set_progress_cb (b64writer, gpgsm_progress_cb, ctrl);
+ if (ctrl->input_size_hint)
+ gnupg_ksba_set_total (b64writer, ctrl->input_size_hint);
err = ksba_cms_new (&cms);
if (err)
diff --git a/sm/verify.c b/sm/verify.c
index 9125b2b06..c7f4492ce 100644
--- a/sm/verify.c
+++ b/sm/verify.c
@@ -159,6 +159,8 @@ gpgsm_verify (ctrl_t ctrl, int in_fd, int data_fd, estream_t out_fp)
}
gnupg_ksba_set_progress_cb (b64writer, gpgsm_progress_cb, ctrl);
+ if (ctrl->input_size_hint)
+ gnupg_ksba_set_total (b64writer, ctrl->input_size_hint);
rc = ksba_cms_new (&cms);
if (rc)