summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2021-02-02 10:16:13 +0900
committerWerner Koch <wk@gnupg.org>2021-02-04 12:44:07 +0100
commit1d312bc65846916c120506ae237235c8fbbea897 (patch)
tree60cd489de0456a9f5939956e1c7604e41aea4407
parent16e855d49ca26432218a7be7416f193de1c31878 (diff)
downloadlibgcrypt-1d312bc65846916c120506ae237235c8fbbea897.tar.gz
ecc: Add checking key for ECDSA.
* cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_verify): Validate public key. * cipher/ecc-gost.c (_gcry_ecc_gost_verify): Likewise. -- GnuPG-bug-id: 5282 Reported-by: Guido Vranken <guidovranken@gmail.com> Signed-off-by: NIIBE Yutaka <gniibe@fsij.org> Backported-from-master: 598d0f3e0294a487e01b88cc714a8cd0a47329bb
-rw-r--r--cipher/ecc-ecdsa.c6
-rw-r--r--cipher/ecc-gost.c6
2 files changed, 12 insertions, 0 deletions
diff --git a/cipher/ecc-ecdsa.c b/cipher/ecc-ecdsa.c
index 56846f44..82b609e5 100644
--- a/cipher/ecc-ecdsa.c
+++ b/cipher/ecc-ecdsa.c
@@ -199,6 +199,12 @@ _gcry_ecc_ecdsa_verify (gcry_mpi_t input, ECC_public_key *pkey,
ctx = _gcry_mpi_ec_p_internal_new (pkey->E.model, pkey->E.dialect, 0,
pkey->E.p, pkey->E.a, pkey->E.b);
+ if (!_gcry_mpi_ec_curve_point (&pkey->Q, ctx))
+ {
+ err = GPG_ERR_BROKEN_PUBKEY;
+ goto leave;
+ }
+
/* h = s^(-1) (mod n) */
mpi_invm (h, s, pkey->E.n);
/* h1 = hash * s^(-1) (mod n) */
diff --git a/cipher/ecc-gost.c b/cipher/ecc-gost.c
index 0362a6c7..a68750fa 100644
--- a/cipher/ecc-gost.c
+++ b/cipher/ecc-gost.c
@@ -168,6 +168,12 @@ _gcry_ecc_gost_verify (gcry_mpi_t input, ECC_public_key *pkey,
ctx = _gcry_mpi_ec_p_internal_new (pkey->E.model, pkey->E.dialect, 0,
pkey->E.p, pkey->E.a, pkey->E.b);
+ if (!_gcry_mpi_ec_curve_point (&pkey->Q, ctx))
+ {
+ err = GPG_ERR_BROKEN_PUBKEY;
+ goto leave;
+ }
+
mpi_mod (e, input, pkey->E.n); /* e = hash mod n */
if (!mpi_cmp_ui (e, 0))
mpi_set_ui (e, 1);