diff options
Diffstat (limited to 'agent/divert-scd.c')
-rw-r--r-- | agent/divert-scd.c | 32 |
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; } |