aboutsummaryrefslogtreecommitdiffstats
path: root/agent/findkey.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2020-06-05 01:35:33 +0000
committerNIIBE Yutaka <[email protected]>2020-06-05 01:35:33 +0000
commit47c1c329ed823a562185f86e98ac903605104f11 (patch)
tree76c582e259525accb38469b6c3be455f883ac99b /agent/findkey.c
parentagent: For ECC, use opaque MPI for key representation. (diff)
downloadgnupg-47c1c329ed823a562185f86e98ac903605104f11.tar.gz
gnupg-47c1c329ed823a562185f86e98ac903605104f11.zip
agent,ecc: Use of opaque MPI for ECC, fixup 'd'.
* agent/Makefile.am: Add sexp-secret.c. * agent/agent.h: New function declarations. * agent/sexp-secret.c: New. * agent/findkey.c (agent_key_from_file): Use sexp_sscan_private_key. * agent/protect-tool.c (read_and_unprotect): Fix up private part, calling fixup_when_ecc_private_key. Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'agent/findkey.c')
-rw-r--r--agent/findkey.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/agent/findkey.c b/agent/findkey.c
index 7fb938b35..af42d6ece 100644
--- a/agent/findkey.c
+++ b/agent/findkey.c
@@ -968,7 +968,7 @@ agent_key_from_file (ctrl_t ctrl, const char *cache_nonce,
{
gpg_error_t err;
unsigned char *buf;
- size_t len, buflen, erroff;
+ size_t len, erroff;
gcry_sexp_t s_skey;
nvc_t keymeta = NULL;
char *desc_text_buffer = NULL; /* Used in case we extend DESC_TEXT. */
@@ -1117,10 +1117,10 @@ agent_key_from_file (ctrl_t ctrl, const char *cache_nonce,
return err;
}
- buflen = gcry_sexp_canon_len (buf, 0, NULL, NULL);
- err = gcry_sexp_sscan (&s_skey, &erroff, (char*)buf, buflen);
- wipememory (buf, buflen);
+ err = sexp_sscan_private_key (result, &erroff, buf);
xfree (buf);
+ nvc_release (keymeta);
+ xfree (desc_text_buffer);
if (err)
{
log_error ("failed to build S-Exp (off=%u): %s\n",
@@ -1130,15 +1130,9 @@ agent_key_from_file (ctrl_t ctrl, const char *cache_nonce,
xfree (*r_passphrase);
*r_passphrase = NULL;
}
- nvc_release (keymeta);
- xfree (desc_text_buffer);
- return err;
}
- *result = s_skey;
- nvc_release (keymeta);
- xfree (desc_text_buffer);
- return 0;
+ return err;
}