aboutsummaryrefslogtreecommitdiffstats
path: root/agent/divert-scd.c
diff options
context:
space:
mode:
Diffstat (limited to 'agent/divert-scd.c')
-rw-r--r--agent/divert-scd.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/agent/divert-scd.c b/agent/divert-scd.c
index 89f177e64..67c9f4640 100644
--- a/agent/divert-scd.c
+++ b/agent/divert-scd.c
@@ -318,26 +318,36 @@ divert_pksign (ctrl_t ctrl,
int rc;
char *kid;
size_t siglen;
- unsigned char *sigval;
- unsigned char *data;
- size_t ndata;
+ unsigned char *sigval = NULL;
rc = ask_for_card (ctrl, shadow_info, &kid);
if (rc)
return rc;
- rc = encode_md_for_card (digest, digestlen, algo,
- &data, &ndata);
- if (rc)
- return rc;
+ if (algo == GCRY_MD_USER_TLS_MD5SHA1)
+ {
+ rc = agent_card_pksign (ctrl, kid, getpin_cb, ctrl,
+ digest, digestlen, &sigval, &siglen);
+ }
+ else
+ {
+ unsigned char *data;
+ size_t ndata;
+
+ rc = encode_md_for_card (digest, digestlen, algo, &data, &ndata);
+ if (!rc)
+ {
+ rc = agent_card_pksign (ctrl, kid, getpin_cb, ctrl,
+ data, ndata, &sigval, &siglen);
+ xfree (data);
+ }
+ }
- rc = agent_card_pksign (ctrl, kid, getpin_cb, ctrl,
- data, ndata, &sigval, &siglen);
if (!rc)
*r_sig = sigval;
- xfree (data);
+
xfree (kid);
-
+
return rc;
}