From fb9e39dcc9796a03585388f8b2b265dd80aaba5b Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Thu, 4 Jun 2020 18:16:27 +0900 Subject: [PATCH] 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 --- agent/sexp-secret.c | 4 ++-- g10/export.c | 2 +- g10/keygen.c | 17 ++++------------- g10/main.h | 3 +++ 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,