diff --git a/agent/ChangeLog b/agent/ChangeLog index fd0f7105c..e0b8b8d10 100644 --- a/agent/ChangeLog +++ b/agent/ChangeLog @@ -1,6 +1,12 @@ +2010-06-21 Werner Koch + + * protect-tool.c (export_p12_file, import_p12_cert_cb) + (import_p12_file, sexp_to_kparms, store_private_key): Remove + unused code. + 2010-06-18 Werner Koch - * protect-tool.c (store_private_key, rsa_key_check): + * protect-tool.c (store_private_key, rsa_key_check): Remove. * command.c (cmd_export_key): New. diff --git a/agent/protect-tool.c b/agent/protect-tool.c index f3fe1a8d8..be0bfd2e2 100644 --- a/agent/protect-tool.c +++ b/agent/protect-tool.c @@ -62,7 +62,6 @@ enum cmd_and_opt_values oS2Kcalibration, oCanonical, - oP12Charset, oStore, oForce, oHaveCert, @@ -96,13 +95,10 @@ static int opt_have_cert; static const char *opt_passphrase; static char *opt_prompt; static int opt_status_msg; -static const char *opt_p12_charset; static const char *opt_agent_program; static char *get_passphrase (int promptno); static void release_passphrase (char *pw); -static int store_private_key (const unsigned char *grip, - const void *buffer, size_t length, int force); static ARGPARSE_OPTS opts[] = { @@ -122,8 +118,6 @@ static ARGPARSE_OPTS opts[] = { ARGPARSE_s_n (oCanonical, "canonical", "write output in canonical format"), ARGPARSE_s_s (oPassphrase, "passphrase", "|STRING|use passphrase STRING"), - ARGPARSE_s_s (oP12Charset,"p12-charset", - "|NAME|set charset for a new PKCS#12 passphrase to NAME"), ARGPARSE_s_n (oHaveCert, "have-cert", "certificate to export provided on STDIN"), ARGPARSE_s_n (oStore, "store", @@ -545,385 +539,6 @@ show_keygrip (const char *fname) -#if 0 -/* 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; - - (void)opaque; - - 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) -{ - char *buf; - unsigned char *result; - size_t buflen, resultlen, buf_off; - int i; - int rc; - gcry_mpi_t *kparms; - struct rsa_secret_key_s sk; - gcry_sexp_t s_key; - unsigned char *key; - unsigned char grip[20]; - char *pw; - - /* fixme: we should release some stuff on error */ - - buf = read_file (fname, &buflen); - if (!buf) - return; - - /* GnuPG 2.0.4 accidently created binary P12 files with the string - "The passphrase is %s encoded.\n\n" prepended to the ASN.1 data. - We fix that here. */ - if (buflen > 29 && !memcmp (buf, "The passphrase is ", 18)) - { - for (buf_off=18; buf_off < buflen && buf[buf_off] != '\n'; buf_off++) - ; - buf_off++; - if (buf_off < buflen && buf[buf_off] == '\n') - buf_off++; - } - else - buf_off = 0; - - kparms = p12_parse ((unsigned char*)buf+buf_off, buflen-buf_off, - (pw=get_passphrase (2)), - import_p12_cert_cb, NULL); - release_passphrase (pw); - xfree (buf); - if (!kparms) - { - log_error ("error parsing or decrypting the PKCS-12 file\n"); - return; - } - for (i=0; kparms[i]; i++) - ; - if (i != 8) - { - log_error ("invalid structure of private key\n"); - return; - } - - -/* print_mpi (" n", kparms[0]); */ -/* print_mpi (" e", kparms[1]); */ -/* print_mpi (" d", kparms[2]); */ -/* print_mpi (" p", kparms[3]); */ -/* print_mpi (" q", kparms[4]); */ -/* print_mpi ("dmp1", kparms[5]); */ -/* print_mpi ("dmq1", kparms[6]); */ -/* print_mpi (" u", kparms[7]); */ - - sk.n = kparms[0]; - sk.e = kparms[1]; - sk.d = kparms[2]; - sk.q = kparms[3]; - sk.p = kparms[4]; - sk.u = kparms[7]; - if (rsa_key_check (&sk)) - return; -/* print_mpi (" n", sk.n); */ -/* print_mpi (" e", sk.e); */ -/* print_mpi (" d", sk.d); */ -/* print_mpi (" p", sk.p); */ -/* print_mpi (" q", sk.q); */ -/* print_mpi (" u", sk.u); */ - - /* Create an S-expresion from the parameters. */ - rc = gcry_sexp_build (&s_key, NULL, - "(private-key(rsa(n%m)(e%m)(d%m)(p%m)(q%m)(u%m)))", - sk.n, sk.e, sk.d, sk.p, sk.q, sk.u, NULL); - for (i=0; i < 8; i++) - gcry_mpi_release (kparms[i]); - gcry_free (kparms); - if (rc) - { - log_error ("failed to created S-expression from key: %s\n", - gpg_strerror (rc)); - return; - } - - /* Compute the keygrip. */ - if (!gcry_pk_get_keygrip (s_key, grip)) - { - log_error ("can't calculate keygrip\n"); - return; - } - log_info ("keygrip: "); - for (i=0; i < 20; i++) - log_printf ("%02X", grip[i]); - log_printf ("\n"); - - /* Convert to canonical encoding. */ - buflen = gcry_sexp_sprint (s_key, GCRYSEXP_FMT_CANON, NULL, 0); - assert (buflen); - key = gcry_xmalloc_secure (buflen); - buflen = gcry_sexp_sprint (s_key, GCRYSEXP_FMT_CANON, key, buflen); - assert (buflen); - gcry_sexp_release (s_key); - - pw = get_passphrase (4); - rc = agent_protect (key, pw, &result, &resultlen); - release_passphrase (pw); - xfree (key); - if (rc) - { - log_error ("protecting the key failed: %s\n", gpg_strerror (rc)); - return; - } - - if (opt_armor) - { - char *p = make_advanced (result, resultlen); - xfree (result); - if (!p) - return; - result = (unsigned char*)p; - resultlen = strlen (p); - } - - if (opt_store) - store_private_key (grip, result, resultlen, opt_force); - else - fwrite (result, resultlen, 1, stdout); - - xfree (result); -} -#endif - - - -#if 0 -static gcry_mpi_t * -sexp_to_kparms (gcry_sexp_t sexp) -{ - gcry_sexp_t list, l2; - const char *name; - const char *s; - size_t n; - int i, idx; - const char *elems; - gcry_mpi_t *array; - - list = gcry_sexp_find_token (sexp, "private-key", 0 ); - if(!list) - return NULL; - l2 = gcry_sexp_cadr (list); - gcry_sexp_release (list); - list = l2; - name = gcry_sexp_nth_data (list, 0, &n); - if(!name || n != 3 || memcmp (name, "rsa", 3)) - { - gcry_sexp_release (list); - return NULL; - } - - /* Parameter names used with RSA. */ - elems = "nedpqu"; - array = xcalloc (strlen(elems) + 1, sizeof *array); - for (idx=0, s=elems; *s; s++, idx++ ) - { - l2 = gcry_sexp_find_token (list, s, 1); - if (!l2) - { - for (i=0; i