diff options
author | Werner Koch <[email protected]> | 2002-03-06 14:16:37 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2002-03-06 14:16:37 +0000 |
commit | 4e637f22851869020929ad541012e23d859fa1a9 (patch) | |
tree | 0d1f66624c4de4f1679c7e14a96e3b387848c4d6 /agent/genkey.c | |
parent | * assuan-client.c (_assuan_read_from_server): Detect END. (diff) | |
download | gnupg-4e637f22851869020929ad541012e23d859fa1a9.tar.gz gnupg-4e637f22851869020929ad541012e23d859fa1a9.zip |
sm/
* gpgsm.c: New command --learn-card
* call-agent.c (learn_cb,gpgsm_agent_learn): New.
* gpgsm.c (main): Print error messages for non-implemented commands.
agent/
* learncard.c: New.
* divert-scd.c (ask_for_card): The serial number is binary so
convert it to hex here.
* findkey.c (agent_write_private_key): New.
* genkey.c (store_key): And use it here.
scd/
* pkdecrypt.c (agent_pkdecrypt): Changed the way the diversion is done.
* divert-scd.c (divert_pkdecrypt): Changed interface and
implemented it.
Diffstat (limited to '')
-rw-r--r-- | agent/genkey.c | 59 |
1 files changed, 3 insertions, 56 deletions
diff --git a/agent/genkey.c b/agent/genkey.c index 1aca33b83..ae46c4694 100644 --- a/agent/genkey.c +++ b/agent/genkey.c @@ -25,8 +25,6 @@ #include <string.h> #include <ctype.h> #include <assert.h> -#include <unistd.h> -#include <sys/stat.h> #include "agent.h" @@ -34,65 +32,32 @@ static int store_key (GCRY_SEXP private, const char *passphrase) { - int i; - char *fname; - FILE *fp; + int rc; char *buf; size_t len; unsigned char grip[20]; - char hexgrip[40+4+1]; if ( !gcry_pk_get_keygrip (private, grip) ) { log_error ("can't calculate keygrip\n"); return seterr (General_Error); } - for (i=0; i < 20; i++) - sprintf (hexgrip+2*i, "%02X", grip[i]); - strcpy (hexgrip+40, ".key"); - - fname = make_filename (opt.homedir, "private-keys-v1.d", hexgrip, NULL); - if (!access (fname, F_OK)) - { - log_error ("secret key file `%s' already exists - very strange\n", - fname); - xfree (fname); - return seterr (General_Error); - } - fp = fopen (fname, "wbx"); /* FIXME: the x is a GNU extension - let - configure check whether this actually - works */ - if (!fp) - { - log_error ("can't create `%s': %s\n", fname, strerror (errno)); - xfree (fname); - return seterr (File_Create_Error); - } len = gcry_sexp_sprint (private, GCRYSEXP_FMT_CANON, NULL, 0); assert (len); buf = gcry_malloc_secure (len); if (!buf) - { - fclose (fp); - remove (fname); - xfree (fname); return seterr (Out_Of_Core); - } len = gcry_sexp_sprint (private, GCRYSEXP_FMT_CANON, buf, len); assert (len); if (passphrase) { unsigned char *p; - int rc; rc = agent_protect (buf, passphrase, &p, &len); if (rc) { - fclose (fp); - remove (fname); - xfree (fname); xfree (buf); return rc; } @@ -100,27 +65,9 @@ store_key (GCRY_SEXP private, const char *passphrase) buf = p; } - if (fwrite (buf, len, 1, fp) != 1) - { - log_error ("error writing `%s': %s\n", fname, strerror (errno)); - fclose (fp); - remove (fname); - xfree (fname); - xfree (buf); - return seterr (File_Create_Error); - } - if ( fclose (fp) ) - { - log_error ("error closing `%s': %s\n", fname, strerror (errno)); - remove (fname); - xfree (fname); - xfree (buf); - return seterr (File_Create_Error); - } - - xfree (fname); + rc = agent_write_private_key (grip, buf, len, 0); xfree (buf); - return 0; + return rc; } |