aboutsummaryrefslogtreecommitdiffstats
path: root/g10/sign.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2021-12-10 06:39:32 +0000
committerNIIBE Yutaka <[email protected]>2021-12-10 06:43:28 +0000
commit61ac580a2075564bc775b6764a239dad5e336251 (patch)
treefaccf5e0dea7b9c4a7dc7b9c29e4f6e564280d7e /g10/sign.c
parentgpg: Fix function prototype to match declaration. (diff)
downloadgnupg-61ac580a2075564bc775b6764a239dad5e336251.tar.gz
gnupg-61ac580a2075564bc775b6764a239dad5e336251.zip
gpg: Emit compatible Ed25519 signature.
* g10/pkglue.c (sexp_extract_param_sos_nlz): New. * g10/pkglue.h: Add the declaration. * g10/sign.c (do_sign): Use sexp_extract_param_sos_nlz for Ed25519. -- Ed25519 signature in GnuPG 2.2 has no leading zeros. GnuPG-bug-id: 5331 Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'g10/sign.c')
-rw-r--r--g10/sign.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/g10/sign.c b/g10/sign.c
index ea3de620b..98cfcb2e3 100644
--- a/g10/sign.c
+++ b/g10/sign.c
@@ -506,6 +506,13 @@ do_sign (ctrl_t ctrl, PKT_public_key *pksk, PKT_signature *sig,
else if (pksk->pubkey_algo == GCRY_PK_RSA
|| pksk->pubkey_algo == GCRY_PK_RSA_S)
sig->data[0] = get_mpi_from_sexp (s_sigval, "s", GCRYMPI_FMT_USG);
+ else if (pksk->pubkey_algo == PUBKEY_ALGO_EDDSA
+ && openpgp_oid_is_ed25519 (pksk->pkey[0]))
+ {
+ err = sexp_extract_param_sos_nlz (s_sigval, "r", &sig->data[0]);
+ if (!err)
+ err = sexp_extract_param_sos_nlz (s_sigval, "s", &sig->data[1]);
+ }
else if (pksk->pubkey_algo == PUBKEY_ALGO_ECDSA
|| pksk->pubkey_algo == PUBKEY_ALGO_EDDSA)
{