summaryrefslogtreecommitdiffstats
path: root/agent
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2014-04-28 03:36:16 +0200
committerNIIBE Yutaka <gniibe@fsij.org>2014-04-28 03:36:16 +0200
commit21dab64030c95a909767bf6d8f99e8476f9df8a2 (patch)
tree78338ccea643a67aadb268d96980e4e917ef5360 /agent
parentgpg: Pass --homedir to gpg-agent. (diff)
downloadgnupg2-21dab64030c95a909767bf6d8f99e8476f9df8a2.tar.xz
gnupg2-21dab64030c95a909767bf6d8f99e8476f9df8a2.zip
ECC Fixes.
* agent/cvt-openpgp.c (get_keygrip, convert_secret_key) (convert_transfer_key): Follow newer (>= 1.6) libgcrypt API, which does not distinguish the detail. (do_unprotect, convert_from_openpgp_main): Don't call map_pk_openpgp_to_gcry, as it's the value of libgcrypt API already and not the value defined by OpenPGP. (convert_to_openpgp): It's "ecc". * agent/gpg-agent.c (map_pk_openpgp_to_gcry): Remove. * g10/call-agent.c (agent_pkdecrypt): Fix off-by-one error. * g10/pubkey-enc.c (get_it): Fix swapping the fields error.
Diffstat (limited to 'agent')
-rw-r--r--agent/cvt-openpgp.c37
-rw-r--r--agent/gpg-agent.c9
2 files changed, 8 insertions, 38 deletions
diff --git a/agent/cvt-openpgp.c b/agent/cvt-openpgp.c
index 4c34130bb..ef34463d8 100644
--- a/agent/cvt-openpgp.c
+++ b/agent/cvt-openpgp.c
@@ -68,21 +68,17 @@ get_keygrip (int pubkey_algo, gcry_mpi_t *pkey, unsigned char *grip)
break;
case GCRY_PK_ELG:
- case GCRY_PK_ELG_E:
err = gcry_sexp_build (&s_pkey, NULL,
"(public-key(elg(p%m)(g%m)(y%m)))",
pkey[0], pkey[1], pkey[2]);
break;
case GCRY_PK_RSA:
- case GCRY_PK_RSA_E:
- case GCRY_PK_RSA_S:
err = gcry_sexp_build (&s_pkey, NULL,
"(public-key(rsa(n%m)(e%m)))", pkey[0], pkey[1]);
break;
- case GCRY_PK_ECDSA:
- case GCRY_PK_ECDH:
+ case GCRY_PK_ECC:
err = gcry_sexp_build (&s_pkey, NULL,
"(public-key(ecc(p%m)(a%m)(b%m)(g%m)(n%m)(q%m)))",
pkey[0], pkey[1], pkey[2], pkey[3], pkey[4],
@@ -138,14 +134,10 @@ convert_secret_key (gcry_sexp_t *r_key, int pubkey_algo, gcry_mpi_t *skey)
skey[5]);
break;
- case GCRY_PK_ECDSA:
- case GCRY_PK_ECDH:
- /* Although our code would work with "ecc" we explicitly use
- "ecdh" or "ecdsa" to implicitly set the key capabilities. */
+ case GCRY_PK_ECC:
err = gcry_sexp_build (&s_skey, NULL,
- "(private-key(%s(p%m)(a%m)(b%m)(g%m)(n%m)(q%m)"
+ "(private-key(ecc(p%m)(a%m)(b%m)(g%m)(n%m)(q%m)"
"(d%m)))",
- pubkey_algo == GCRY_PK_ECDSA?"ecdsa":"ecdh",
skey[0], skey[1], skey[2], skey[3], skey[4],
skey[5], skey[6]);
break;
@@ -186,7 +178,6 @@ convert_transfer_key (gcry_sexp_t *r_key, int pubkey_algo, gcry_mpi_t *skey,
break;
case GCRY_PK_ELG:
- case GCRY_PK_ELG_E:
err = gcry_sexp_build
(&s_skey, NULL,
"(protected-private-key(elg(p%m)(g%m)(y%m)"
@@ -196,8 +187,6 @@ convert_transfer_key (gcry_sexp_t *r_key, int pubkey_algo, gcry_mpi_t *skey,
case GCRY_PK_RSA:
- case GCRY_PK_RSA_E:
- case GCRY_PK_RSA_S:
err = gcry_sexp_build
(&s_skey, NULL,
"(protected-private-key(rsa(n%m)(e%m)",
@@ -205,15 +194,11 @@ convert_transfer_key (gcry_sexp_t *r_key, int pubkey_algo, gcry_mpi_t *skey,
skey[0], skey[1], transfer_key );
break;
- case GCRY_PK_ECDSA:
- case GCRY_PK_ECDH:
- /* Although our code would work with "ecc" we explicitly use
- "ecdh" or "ecdsa" to implicitly set the key capabilities. */
+ case GCRY_PK_ECC:
err = gcry_sexp_build
(&s_skey, NULL,
- "(protected-private-key(%s(p%m)(a%m)(b%m)(g%m)(n%m)(q%m)"
+ "(protected-private-key(ecc(p%m)(a%m)(b%m)(g%m)(n%m)(q%m)"
"(protected openpgp-native%S)))",
- pubkey_algo == GCRY_PK_ECDSA?"ecdsa":"ecdh",
skey[0], skey[1], skey[2], skey[3], skey[4], skey[5], transfer_key);
break;
@@ -359,10 +344,6 @@ do_unprotect (const char *passphrase,
*r_key = NULL;
- /* Unfortunately, the OpenPGP PK algorithm numbers need to be
- re-mapped for Libgcrypt. */
- pubkey_algo = map_pk_openpgp_to_gcry (pubkey_algo);
-
err = prepare_unprotect (pubkey_algo, skey, skeysize, s2k_mode,
&npkey, &nskey, &skeylen);
if (err)
@@ -864,14 +845,12 @@ convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp,
if (unattended && !from_native)
{
- int pubkey_g_algo = map_pk_openpgp_to_gcry (pubkey_algo);
-
- err = prepare_unprotect (pubkey_g_algo, skey, DIM(skey), s2k_mode,
+ err = prepare_unprotect (pubkey_algo, skey, DIM(skey), s2k_mode,
NULL, NULL, NULL);
if (err)
goto leave;
- err = convert_transfer_key (&s_skey, pubkey_g_algo, skey, s_pgp);
+ err = convert_transfer_key (&s_skey, pubkey_algo, skey, s_pgp);
if (err)
goto leave;
}
@@ -1195,7 +1174,7 @@ convert_to_openpgp (ctrl_t ctrl, gcry_sexp_t s_key, const char *passphrase,
else if (!strcmp (name, "ecc"))
{
/* FIXME: We need to use the curve parameter. */
- algoname = "?"; /* Decide later by checking the usage. */
+ algoname = "ecc"; /* Decide later by checking the usage. */
npkey = 6;
nskey = 7;
err = gcry_sexp_extract_param (list, NULL, "pabgnqd",
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index 8078cba25..5319e4917 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -2546,12 +2546,3 @@ check_for_running_agent (int silent, int mode)
assuan_release (ctx);
return 0;
}
-
-/* TODO: it is also in misc, which is not linked with the agent */
-/* FIXME: The agent should not know about openpgp internals - weel
- except for some stuff in cvt-openpgp. */
-int
-map_pk_openpgp_to_gcry (int algo)
-{
- return (algo==PUBKEY_ALGO_ECDSA ? GCRY_PK_ECDSA : (algo==PUBKEY_ALGO_ECDH ? GCRY_PK_ECDH : algo));
-}