aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2020-06-04 09:16:27 +0000
committerNIIBE Yutaka <[email protected]>2020-06-04 09:16:27 +0000
commitfb9e39dcc9796a03585388f8b2b265dd80aaba5b (patch)
tree1fbd4fadfb03dee449b6bf041b904b3a7a33d68b
parentecc-sos: Apply SOS also to ECDSA. (diff)
downloadgnupg-fb9e39dcc9796a03585388f8b2b265dd80aaba5b.tar.gz
gnupg-fb9e39dcc9796a03585388f8b2b265dd80aaba5b.zip
ecc-sos,gpg: Use sexp_extract_param_sos to get MPI.
* g10/export.c (sexp_extract_param_sos): Expose. * g10/keygen.c (ecckey_from_sexp): Use it. Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--agent/sexp-secret.c4
-rw-r--r--g10/export.c2
-rw-r--r--g10/keygen.c17
-rw-r--r--g10/main.h3
4 files changed, 10 insertions, 16 deletions
diff --git a/agent/sexp-secret.c b/agent/sexp-secret.c
index bf6bacaaf..80bcb33b2 100644
--- a/agent/sexp-secret.c
+++ b/agent/sexp-secret.c
@@ -63,7 +63,7 @@ fixup_when_ecc_private_key (unsigned char *buf, size_t *buflen_p)
s += n;
s0 = (unsigned char *)s;
n = snext (&s);
- n0 = s - s0;
+ n0 = s - s0;
if (!n)
return gpg_error (GPG_ERR_INV_SEXP);
@@ -78,7 +78,7 @@ fixup_when_ecc_private_key (unsigned char *buf, size_t *buflen_p)
buflen--;
numsize = snprintf (s0, s-s0+1, "%u:", (unsigned int)n);
memmove (s0+numsize, s+1, buflen - (s - buf));
- memset (s0+numsize+buflen - (s - buf), 0, (n0 - numsize) + 1);
+ memset (s0+numsize+buflen - (s - buf), 0, (n0 - numsize) + 1);
buflen -= (n0 - numsize);
s = s0+numsize+n;
*buflen_p = buflen;
diff --git a/g10/export.c b/g10/export.c
index ba3521f2f..6930f9722 100644
--- a/g10/export.c
+++ b/g10/export.c
@@ -627,7 +627,7 @@ canon_pk_algo (enum gcry_pk_algos algo)
}
-static gpg_error_t
+gpg_error_t
sexp_extract_param_sos (gcry_sexp_t sexp, const char *param, gcry_mpi_t *r_sos)
{
gpg_error_t err;
diff --git a/g10/keygen.c b/g10/keygen.c
index 63e2f9cff..1f3d09994 100644
--- a/g10/keygen.c
+++ b/g10/keygen.c
@@ -1329,19 +1329,10 @@ ecckey_from_sexp (gcry_mpi_t *array, gcry_sexp_t sexp, int algo)
if (err)
goto leave;
- l2 = gcry_sexp_find_token (list, "q", 0);
- if (!l2)
- {
- err = gpg_error (GPG_ERR_NO_OBJ);
- goto leave;
- }
- array[1] = gcry_sexp_nth_mpi (l2, 1, GCRYMPI_FMT_OPAQUE);
- gcry_sexp_release (l2);
- if (!array[1])
- {
- err = gpg_error (GPG_ERR_INV_OBJ);
- goto leave;
- }
+ err = sexp_extract_param_sos (list, "q", &array[1])
+ if (err)
+ goto leave;
+
gcry_sexp_release (list);
if (algo == PUBKEY_ALGO_ECDH)
diff --git a/g10/main.h b/g10/main.h
index dedd60e73..b4663df1b 100644
--- a/g10/main.h
+++ b/g10/main.h
@@ -415,6 +415,9 @@ void pop_export_filters (void);
int exact_subkey_match_p (KEYDB_SEARCH_DESC *desc, kbnode_t node);
+gpg_error_t sexp_extract_param_sos (gcry_sexp_t sexp, const char *param,
+ gcry_mpi_t *r_sos);
+
int export_pubkeys (ctrl_t ctrl, strlist_t users, unsigned int options,
export_stats_t stats);
int export_seckeys (ctrl_t ctrl, strlist_t users, unsigned int options,