aboutsummaryrefslogtreecommitdiffstats
path: root/agent/divert-scd.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-02-22 13:09:02 +0000
committerWerner Koch <[email protected]>2019-02-25 07:24:52 +0000
commita12c3a566e2e4b10bc02976a2819070877ee895c (patch)
tree3807393cbd1f18aee8dd196c3b7a3a3e94fbce15 /agent/divert-scd.c
parentgpgscm: Build well even if NDEBUG defined. (diff)
downloadgnupg-a12c3a566e2e4b10bc02976a2819070877ee895c.tar.gz
gnupg-a12c3a566e2e4b10bc02976a2819070877ee895c.zip
agent: Fix for suggested Libgcrypt use.
* agent/divert-scd.c (divert_pkdecrypt): Skip a flags parameter. -- The libgcrypt docs say that a "flags" parameter should always be used in the input of pkdecrypt. Thus we should allow that parameter also when parsing an s-expression to figure out the algorithm for use with scdaemon. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'agent/divert-scd.c')
-rw-r--r--agent/divert-scd.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/agent/divert-scd.c b/agent/divert-scd.c
index b9781547d..02fe5295a 100644
--- a/agent/divert-scd.c
+++ b/agent/divert-scd.c
@@ -498,6 +498,7 @@ divert_pkdecrypt (ctrl_t ctrl, const char *desc_text,
char *kid;
const unsigned char *s;
size_t n;
+ int depth;
const unsigned char *ciphertext;
size_t ciphertextlen;
char *plaintext;
@@ -506,7 +507,6 @@ divert_pkdecrypt (ctrl_t ctrl, const char *desc_text,
(void)desc_text;
*r_padding = -1;
-
s = cipher;
if (*s != '(')
return gpg_error (GPG_ERR_INV_SEXP);
@@ -522,6 +522,21 @@ divert_pkdecrypt (ctrl_t ctrl, const char *desc_text,
n = snext (&s);
if (!n)
return gpg_error (GPG_ERR_INV_SEXP);
+
+ /* First check whether we have a flags parameter and skip it. */
+ if (smatch (&s, n, "flags"))
+ {
+ depth = 1;
+ if (sskip (&s, &depth) || depth)
+ return gpg_error (GPG_ERR_INV_SEXP);
+ if (*s != '(')
+ return gpg_error (GPG_ERR_INV_SEXP);
+ s++;
+ n = snext (&s);
+ if (!n)
+ return gpg_error (GPG_ERR_INV_SEXP);
+ }
+
if (smatch (&s, n, "rsa"))
{
if (*s != '(')