aboutsummaryrefslogtreecommitdiffstats
path: root/agent/protect-tool.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2004-02-10 19:26:55 +0000
committerWerner Koch <[email protected]>2004-02-10 19:26:55 +0000
commita1dd1cc223e2da077cbbe2716c12a67d00c6947e (patch)
tree234cea56cfd55783f864223e4bd79b671bc5e0bb /agent/protect-tool.c
parentFixed a build bug (straw letter in sm/import.c) and updated the documentation. (diff)
downloadgnupg-a1dd1cc223e2da077cbbe2716c12a67d00c6947e.tar.gz
gnupg-a1dd1cc223e2da077cbbe2716c12a67d00c6947e.zip
* minip12.c (parse_bag_encrypted_data): Finished implementation.
(p12_parse): Add callback args. * protect-tool.c (import_p12_cert_cb): New. (import_p12_file): Use it.
Diffstat (limited to 'agent/protect-tool.c')
-rw-r--r--agent/protect-tool.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/agent/protect-tool.c b/agent/protect-tool.c
index d4f945a94..2d1df4d7c 100644
--- a/agent/protect-tool.c
+++ b/agent/protect-tool.c
@@ -563,6 +563,23 @@ rsa_key_check (struct rsa_secret_key_s *skey)
}
+/* A callback used by p12_parse to return a certificate. */
+static void
+import_p12_cert_cb (void *opaque, const unsigned char *cert, size_t certlen)
+{
+ struct b64state state;
+ gpg_error_t err, err2;
+
+ err = b64enc_start (&state, stdout, "CERTIFICATE");
+ if (!err)
+ err = b64enc_write (&state, cert, certlen);
+ err2 = b64enc_finish (&state);
+ if (!err)
+ err = err2;
+ if (err)
+ log_error ("error writing armored certificate: %s\n", gpg_strerror (err));
+}
+
static void
import_p12_file (const char *fname)
{
@@ -583,11 +600,12 @@ import_p12_file (const char *fname)
if (!buf)
return;
- kparms = p12_parse (buf, buflen, get_passphrase ());
+ kparms = p12_parse (buf, buflen, get_passphrase (),
+ import_p12_cert_cb, NULL);
xfree (buf);
if (!kparms)
{
- log_error ("error parsing or decrypting the PKCS-1 file\n");
+ log_error ("error parsing or decrypting the PKCS-12 file\n");
return;
}
for (i=0; kparms[i]; i++)