aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2020-06-01 02:39:00 +0000
committerNIIBE Yutaka <[email protected]>2020-06-01 02:39:00 +0000
commit3d3f99d76aa53312ba60526864127e7dee5c63c8 (patch)
treeb4be9fb9872050650e4ad35df319d1e02574c507
parentecc-sos: SOS as Strange Octet String. (diff)
downloadgnupg-3d3f99d76aa53312ba60526864127e7dee5c63c8.tar.gz
gnupg-3d3f99d76aa53312ba60526864127e7dee5c63c8.zip
Revert "ecc-sos: Add special leading zero octet removal."
This reverts commit 1c4291c3951dc73db1511f6198555c2a7642bf12.
-rw-r--r--agent/cvt-openpgp.c50
1 files changed, 9 insertions, 41 deletions
diff --git a/agent/cvt-openpgp.c b/agent/cvt-openpgp.c
index cc1c6a2da..cb6c900bd 100644
--- a/agent/cvt-openpgp.c
+++ b/agent/cvt-openpgp.c
@@ -1247,7 +1247,7 @@ extract_private_key (gcry_sexp_t s_key, int req_private_key_data,
gpg_error_t err;
gcry_sexp_t list, l2;
char *name;
- const char *algoname, *format;
+ const char *algoname, *format, *elems;
int npkey, nskey;
gcry_sexp_t curve = NULL;
gcry_sexp_t flags = NULL;
@@ -1292,7 +1292,7 @@ extract_private_key (gcry_sexp_t s_key, int req_private_key_data,
if (!strcmp (name, "rsa"))
{
algoname = "rsa";
- format = "ned?p?q?u?";
+ format = elems = "ned?p?q?u?";
npkey = 2;
nskey = 6;
err = gcry_sexp_extract_param (list, NULL, format,
@@ -1302,7 +1302,7 @@ extract_private_key (gcry_sexp_t s_key, int req_private_key_data,
else if (!strcmp (name, "elg"))
{
algoname = "elg";
- format = "pgyx?";
+ format = elems = "pgyx?";
npkey = 3;
nskey = 4;
err = gcry_sexp_extract_param (list, NULL, format,
@@ -1312,7 +1312,7 @@ extract_private_key (gcry_sexp_t s_key, int req_private_key_data,
else if (!strcmp (name, "dsa"))
{
algoname = "dsa";
- format = "pqgyx?";
+ format = elems = "pqgyx?";
npkey = 4;
nskey = 5;
err = gcry_sexp_extract_param (list, NULL, format,
@@ -1322,46 +1322,14 @@ extract_private_key (gcry_sexp_t s_key, int req_private_key_data,
else if (!strcmp (name, "ecc") || !strcmp (name, "ecdsa"))
{
algoname = "ecc";
- format = "qd?";
+ format = "/qd?";
+ elems = "qd?";
npkey = 1;
nskey = 2;
curve = gcry_sexp_find_token (list, "curve", 0);
flags = gcry_sexp_find_token (list, "flags", 0);
- l2 = gcry_sexp_find_token (list, "q", 0);
- if (l2)
- {
- err = 0;
-
- array[0] = gcry_sexp_nth_mpi (l2, 1, GCRYMPI_FMT_OPAQUE);
- gcry_sexp_release (l2);
-
- array[1] = NULL;
- l2 = gcry_sexp_find_token (list, "d", 0);
- if (l2)
- {
- size_t n;
- char *p = gcry_sexp_nth_buffer (l2, 1, &n);
-
- if (p)
- {
- const char *p1 = p;
-
- /* Remove leading zero octet, if any. */
- if ((n & 1) && !*p)
- {
- n--;
- p1++;
- }
-
- array[1] = gcry_mpi_set_opaque_copy (NULL, p1, n*8);
- xfree (p);
- }
-
- gcry_sexp_release (l2);
- }
- }
- else
- err = gpg_error (GPG_ERR_NO_OBJ);
+ err = gcry_sexp_extract_param (list, NULL, format,
+ array+0, array+1, NULL);
}
else
{
@@ -1379,7 +1347,7 @@ extract_private_key (gcry_sexp_t s_key, int req_private_key_data,
{
*r_algoname = algoname;
if (r_elems)
- *r_elems = format;
+ *r_elems = elems;
*r_npkey = npkey;
if (r_nskey)
*r_nskey = nskey;