]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Similar fix for eddsa.
authorNiels Möller <nisse@lysator.liu.se>
Sat, 13 Mar 2021 15:42:21 +0000 (16:42 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Sat, 13 Mar 2021 18:20:39 +0000 (19:20 +0100)
* eddsa-hash.c (_eddsa_hash): Ensure result is canonically
reduced. Two of the three call sites need that.

ChangeLog
eddsa-hash.c

index e32660dcafbb40a6dbae5b4269385bed558c9fb4..202dc275d75ad7612e102171f6c1d90393b00faf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2021-03-13  Niels Möller  <nisse@lysator.liu.se>
 
+       * eddsa-hash.c (_eddsa_hash): Ensure result is canonically
+       reduced. Two of the three call sites need that.
+
        * ecc-gostdsa-verify.c (ecc_gostdsa_verify): Use ecc_mod_mul_canonical
        to compute the scalars used for ecc multiplication.
 
index 95e0dd70c17ad4d2973de7169e7542ca87efc423..6ebbe9773e73468e58896990d877d0a043d5af9a 100644 (file)
 #include "ecc-internal.h"
 #include "nettle-internal.h"
 
-/* Convert hash digest to integer, and reduce modulo q, to m->size
-   limbs. Needs space for 2*m->size + 1 at rp. */
+/* Convert hash digest to integer, and reduce canonically modulo q.
+   Needs space for 2*m->size + 1 at rp. */
 void
 _eddsa_hash (const struct ecc_modulo *m,
             mp_limb_t *rp, size_t digest_size, const uint8_t *digest)
 {
   mp_size_t nlimbs = (8*digest_size + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS;
+  mp_limb_t cy;
 
   mpn_set_base256_le (rp, nlimbs, digest, digest_size);
 
@@ -74,5 +75,8 @@ _eddsa_hash (const struct ecc_modulo *m,
       hi = mpn_cnd_add_n (hi, rp + m->size, rp + m->size, m->B, m->size);
       assert (hi == 0);
     }
-  m->mod (m, rp, rp);
+  m->mod (m, rp + m->size , rp);
+  /* Ensure canonical reduction. */
+  cy = mpn_sub_n (rp, rp + m->size, m->m, m->size);
+  cnd_copy (cy, rp, rp + m->size, m->size);
 }