diff options
author | NIIBE Yutaka <[email protected]> | 2013-02-28 02:17:47 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2013-02-28 02:17:47 +0000 |
commit | ef1983d58b913306e9bf02a7189e530123839c59 (patch) | |
tree | 2ab0c7c692bb25c425f6436df13f7fe13126c67f /agent/call-scd.c | |
parent | Use has_leading_keyword in the assuan callbacks. (diff) | |
download | gnupg-ef1983d58b913306e9bf02a7189e530123839c59.tar.gz gnupg-ef1983d58b913306e9bf02a7189e530123839c59.zip |
agent: pksign result conversion to sexp to upper layer.
* agent/agent.h (divert_pksign): Add R_SIGLEN argument.
* agent/divert-scd.c (divert_pksign): Return length at R_SIGLEN.
* agent/call-scd.c (agent_card_pksign): Move composition of
S-expression to...
* agent/pksign.c (agent_pksign_do): ... here.
--
Composing S-expression would be better to be done by SCDaemon.
Diffstat (limited to 'agent/call-scd.c')
-rw-r--r-- | agent/call-scd.c | 31 |
1 files changed, 4 insertions, 27 deletions
diff --git a/agent/call-scd.c b/agent/call-scd.c index f4ea20bd3..a334b15a1 100644 --- a/agent/call-scd.c +++ b/agent/call-scd.c @@ -825,10 +825,6 @@ agent_card_pksign (ctrl_t ctrl, char *p, line[ASSUAN_LINELENGTH]; membuf_t data; struct inq_needpin_s inqparm; - size_t len; - unsigned char *sigbuf; - size_t sigbuflen; - int prepend_nul; *r_buf = NULL; rc = start_scd (ctrl); @@ -868,32 +864,13 @@ agent_card_pksign (ctrl_t ctrl, if (rc) { + size_t len; + xfree (get_membuf (&data, &len)); return unlock_scd (ctrl, rc); } - sigbuf = get_membuf (&data, &sigbuflen); - - /* Create an S-expression from it which is formatted like this: - "(7:sig-val(3:rsa(1:sSIGBUFLEN:SIGBUF)))". We better make sure - that this won't be interpreted as a negative number. */ - prepend_nul = (sigbuflen && (*sigbuf & 0x80)); - - *r_buflen = 21 + 11 + prepend_nul + sigbuflen + 4; - p = xtrymalloc (*r_buflen); - *r_buf = (unsigned char*)p; - if (!p) - return unlock_scd (ctrl, out_of_core ()); - p = stpcpy (p, "(7:sig-val(3:rsa(1:s" ); - sprintf (p, "%u:", (unsigned int)sigbuflen + prepend_nul); - p += strlen (p); - if (prepend_nul) - *p++ = 0; - memcpy (p, sigbuf, sigbuflen); - p += sigbuflen; - strcpy (p, ")))"); - xfree (sigbuf); - - assert (gcry_sexp_canon_len (*r_buf, *r_buflen, NULL, NULL)); + + *r_buf = get_membuf (&data, r_buflen); return unlock_scd (ctrl, 0); } |