Hi Trevor, On Wed, 2021-04-21 at 09:44 -0400, Trevor Gamblin wrote: > Backport and combine multiple commits from 3.7.2 to address this CVE. >
I have taken the 3.7.2 upgrade for hardknott since the release notes mention it's a bug fix release. https://github.com/gnutls/nettle/commit/7a5f86321f4c67d7219aa87ea4e2ddca677d7378#diff-7ee66c4f1536ac84dc5bbff1b8312e2eef24b974b3e48a5c5c2bcfdf2eb8f3ce Thanks, Anuj > Signed-off-by: Trevor Gamblin <trevor.gamb...@windriver.com> > --- > .../nettle/nettle/CVE-2021-20305.patch | 516 ++++++++++++++++++ > meta/recipes-support/nettle/nettle_3.7.1.bb | 1 + > 2 files changed, 517 insertions(+) > create mode 100644 meta/recipes-support/nettle/nettle/CVE-2021- > 20305.patch > > diff --git a/meta/recipes-support/nettle/nettle/CVE-2021-20305.patch > b/meta/recipes-support/nettle/nettle/CVE-2021-20305.patch > new file mode 100644 > index 0000000000..b1065c705a > --- /dev/null > +++ b/meta/recipes-support/nettle/nettle/CVE-2021-20305.patch > @@ -0,0 +1,516 @@ > +From 80e3d99afb5820d9b4ed807136ba32d57c4229a6 Mon Sep 17 00:00:00 2001 > +From: Trevor Gamblin <trevor.gamb...@windriver.com> > +Date: Wed, 21 Apr 2021 09:15:34 -0400 > +Subject: [PATCH] CVE-2021-20305 > + > +Backport the following fixes from nettle 3.7.2: > + > + > https://git.lysator.liu.se/nettle/nettle/-/commit/a63893791280d441c713293491da97c79c0950fe > + > https://git.lysator.liu.se/nettle/nettle/-/commit/971bed6ab4b27014eb23085e8176917e1a096fd5 > + > https://git.lysator.liu.se/nettle/nettle/-/commit/74ee0e82b6891e090f20723750faeb19064e31b2 > + > https://git.lysator.liu.se/nettle/nettle/-/commit/51f643eee00e2caa65c8a2f5857f49acdf3ef1ce > + > https://git.lysator.liu.se/nettle/nettle/-/commit/401c8d53d8a8cf1e79980e62bda3f946f8e07c14 > + > https://git.lysator.liu.se/nettle/nettle/-/commit/ae3801a0e5cce276c270973214385c86048d5f7b > + > https://git.lysator.liu.se/nettle/nettle/-/commit/63f222c60b03470c0005aa9bc4296fbf585f68b9 > + > +CVE: CVE-2021-20305 > +Upstream-Status: Backport > + > +Signed-off-by: Trevor Gamblin <trevor.gamb...@windriver.com> > +--- > + ChangeLog | 40 > ++++++++++++++++++++++++++++++++++- > + curve25519-eh-to-x.c | 6 +----- > + curve448-eh-to-x.c | 5 +---- > + ecc-ecdsa-sign.c | 3 +-- > + ecc-ecdsa-verify.c | 4 ++-- > + ecc-eh-to-a.c | 12 ++--------- > + ecc-gostdsa-verify.c | 6 +++--- > + ecc-internal.h | 15 +++++++++++++ > + ecc-j-to-a.c | 15 +++---------- > + ecc-mod-arith.c | 24 +++++++++++++++++++++ > + ecc-mul-m.c | 6 ++---- > + eddsa-hash.c | 10 ++++++--- > + eddsa-verify.c | 9 ++------ > + gostdsa-vko.c | 2 +- > + testsuite/ecdsa-sign-test.c | 26 +++++++++++++++++++++++ > + testsuite/ecdsa-verify-test.c | 40 > +++++++++++++++++++++++++++++++++++ > + 16 files changed, 169 insertions(+), 54 deletions(-) > + > +diff --git a/ChangeLog b/ChangeLog > +index fd138d82..9ab52fab 100644 > +--- a/ChangeLog > ++++ b/ChangeLog > +@@ -1,3 +1,18 @@ > ++2021-03-13 Niels Möller <ni...@lysator.liu.se> > ++ > ++ * eddsa-verify.c (equal_h): Use ecc_mod_mul_canonical. > ++ > ++2021-03-11 Niels Möller <ni...@lysator.liu.se> > ++ > ++ * ecc-mod-arith.c (ecc_mod_mul_canonical, > ecc_mod_sqr_canonical): > ++ New functions. > ++ * ecc-internal.h: Declare and document new functions. > ++ * curve448-eh-to-x.c (curve448_eh_to_x): Use > ecc_mod_sqr_canonical. > ++ * curve25519-eh-to-x.c (curve25519_eh_to_x): Use > ecc_mod_mul_canonical. > ++ * ecc-eh-to-a.c (ecc_eh_to_a): Likewise. > ++ * ecc-j-to-a.c (ecc_j_to_a): Likewise. > ++ * ecc-mul-m.c (ecc_mul_m): Likewise. > ++ > + 2021-02-17 Niels Möller <ni...@lysator.liu.se> > + > + * Released Nettle-3.7.1. > +@@ -316,11 +331,34 @@ > + > + 2020-11-02 Niels Möller <ni...@lysator.liu.se> > + > ++ * gostdsa-vko.c (gostdsa_vko): Use ecc_mod_mul_canonical to > ++ compute the scalar used for ecc multiplication. > ++ > ++ * 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. > ++ > ++ * ecc-ecdsa-sign.c (ecc_ecdsa_sign): Ensure s output is reduced > to > ++ canonical range. > ++ > ++ * ecc-ecdsa-verify.c (ecc_ecdsa_verify): Use > ecc_mod_mul_canonical > ++ to compute the scalars used for ecc multiplication. > ++ * testsuite/ecdsa-verify-test.c (test_main): Add test case that > ++ triggers an assert on 64-bit platforms, without above fix. > ++ * testsuite/ecdsa-sign-test.c (test_main): Test case generating > ++ the same signature. > ++ > ++2021-03-13 Niels Möller <ni...@lysator.liu.se> > ++ > + * ecc-curve25519.c (ecc_mod_pow_252m3): Reduce scratch need. > + (ecc_curve25519_inv): Likewise. > + (ecc_curve25519_sqrt): Likewise. > + > +-2020-11-01 Niels Möller <ni...@lysator.liu.se> > ++ * eddsa-verify.c (equal_h): Use ecc_mod_mul_canonical. > ++ > ++2021-03-11 Niels Möller <ni...@lysator.liu.se> > + > + * ecc-mod-arith.c (ecc_mod_mul, ecc_mod_sqr): Separate argument > + for scratch area, reducing required size of result area. Update > +diff --git a/curve25519-eh-to-x.c b/curve25519-eh-to-x.c > +index f0f1920d..d90defda 100644 > +--- a/curve25519-eh-to-x.c > ++++ b/curve25519-eh-to-x.c > +@@ -53,7 +53,6 @@ curve25519_eh_to_x (mp_limb_t *xp, const mp_limb_t > *p, > + #define tp (scratch + 2*ecc->p.size) > + > + const struct ecc_curve *ecc = &_nettle_curve25519; > +- mp_limb_t cy; > + > + /* If u = U/W and v = V/W are the coordinates of the point on the > + Edwards curve we get the curve25519 x coordinate as > +@@ -69,10 +68,7 @@ curve25519_eh_to_x (mp_limb_t *xp, const mp_limb_t > *p, > + ecc->p.invert (&ecc->p, t1, t0, tp); > + > + ecc_mod_add (&ecc->p, t0, wp, vp); > +- ecc_mod_mul (&ecc->p, t0, t0, t1, tp); > +- > +- cy = mpn_sub_n (xp, t0, ecc->p.m, ecc->p.size); > +- cnd_copy (cy, xp, t0, ecc->p.size); > ++ ecc_mod_mul_canonical (&ecc->p, xp, t0, t1, tp); > + #undef vp > + #undef wp > + #undef t0 > +diff --git a/curve448-eh-to-x.c b/curve448-eh-to-x.c > +index 8f3f8c45..3b9bf3ec 100644 > +--- a/curve448-eh-to-x.c > ++++ b/curve448-eh-to-x.c > +@@ -52,7 +52,6 @@ curve448_eh_to_x (mp_limb_t *xp, const mp_limb_t *p, > mp_limb_t *scratch) > + #define tp (scratch + ecc->p.size) > + > + const struct ecc_curve *ecc = &_nettle_curve448; > +- mp_limb_t cy; > + > + /* If u = U/W and v = V/W are the coordinates of the point on > + edwards448 we get the curve448 x coordinate as > +@@ -62,10 +61,8 @@ curve448_eh_to_x (mp_limb_t *xp, const mp_limb_t > *p, mp_limb_t *scratch) > + /* Needs a total of 5*size storage. */ > + ecc->p.invert (&ecc->p, t0, up, tp); > + ecc_mod_mul (&ecc->p, t0, t0, vp, tp); > +- ecc_mod_sqr (&ecc->p, t0, t0, tp); > ++ ecc_mod_sqr_canonical (&ecc->p, xp, t0, tp); > + > +- cy = mpn_sub_n (xp, t0, ecc->p.m, ecc->p.size); > +- cnd_copy (cy, xp, t0, ecc->p.size); > + #undef up > + #undef vp > + #undef t0 > +diff --git a/ecc-ecdsa-sign.c b/ecc-ecdsa-sign.c > +index f323196e..4adee1d1 100644 > +--- a/ecc-ecdsa-sign.c > ++++ b/ecc-ecdsa-sign.c > +@@ -91,9 +91,8 @@ ecc_ecdsa_sign (const struct ecc_curve *ecc, > + > + ecc_mod_mul (&ecc->q, tp, zp, rp, tp); > + ecc_mod_add (&ecc->q, hp, hp, tp); > +- ecc_mod_mul (&ecc->q, tp, hp, kinv, tp); > ++ ecc_mod_mul_canonical (&ecc->q, sp, hp, kinv, tp); > + > +- mpn_copyi (sp, tp, ecc->p.size); > + #undef P > + #undef hp > + #undef kinv > +diff --git a/ecc-ecdsa-verify.c b/ecc-ecdsa-verify.c > +index 1b2dcca7..f3b112b0 100644 > +--- a/ecc-ecdsa-verify.c > ++++ b/ecc-ecdsa-verify.c > +@@ -102,10 +102,10 @@ ecc_ecdsa_verify (const struct ecc_curve *ecc, > + > + /* u1 = h / s, P1 = u1 * G */ > + ecc_hash (&ecc->q, hp, length, digest); > +- ecc_mod_mul (&ecc->q, u1, hp, sinv, u1); > ++ ecc_mod_mul_canonical (&ecc->q, u1, hp, sinv, u1); > + > + /* u2 = r / s, P2 = u2 * Y */ > +- ecc_mod_mul (&ecc->q, u2, rp, sinv, u2); > ++ ecc_mod_mul_canonical (&ecc->q, u2, rp, sinv, u2); > + > + /* Total storage: 5*ecc->p.size + ecc->mul_itch */ > + ecc->mul (ecc, P2, u2, pp, u2 + ecc->p.size); > +diff --git a/ecc-eh-to-a.c b/ecc-eh-to-a.c > +index 24f6d0c0..5e3571c1 100644 > +--- a/ecc-eh-to-a.c > ++++ b/ecc-eh-to-a.c > +@@ -49,23 +49,15 @@ ecc_eh_to_a (const struct ecc_curve *ecc, > + #define izp scratch > + #define tp (scratch + ecc->p.size) > + > +- > + #define xp p > + #define yp (p + ecc->p.size) > + #define zp (p + 2*ecc->p.size) > + > +- mp_limb_t cy; > +- > + assert(op == 0); > + > + /* Needs size + scratch for the invert call. */ > + ecc->p.invert (&ecc->p, izp, zp, tp); > + > +- ecc_mod_mul (&ecc->p, tp, xp, izp, tp); > +- cy = mpn_sub_n (r, tp, ecc->p.m, ecc->p.size); > +- cnd_copy (cy, r, tp, ecc->p.size); > +- > +- ecc_mod_mul (&ecc->p, tp, yp, izp, tp); > +- cy = mpn_sub_n (r + ecc->p.size, tp, ecc->p.m, ecc->p.size); > +- cnd_copy (cy, r + ecc->p.size, tp, ecc->p.size); > ++ ecc_mod_mul_canonical (&ecc->p, r, xp, izp, tp); > ++ ecc_mod_mul_canonical (&ecc->p, r + ecc->p.size, yp, izp, tp); > + } > +diff --git a/ecc-gostdsa-verify.c b/ecc-gostdsa-verify.c > +index c0613f4f..fcdd4644 100644 > +--- a/ecc-gostdsa-verify.c > ++++ b/ecc-gostdsa-verify.c > +@@ -102,11 +102,11 @@ ecc_gostdsa_verify (const struct ecc_curve *ecc, > + ecc->q.invert (&ecc->q, vp, hp, vp + ecc->p.size); > + > + /* z1 = s / h, P1 = z1 * G */ > +- ecc_mod_mul (&ecc->q, z1, sp, vp, z1); > ++ ecc_mod_mul_canonical (&ecc->q, z1, sp, vp, z1); > + > + /* z2 = - r / h, P2 = z2 * Y */ > +- ecc_mod_mul (&ecc->q, z2, rp, vp, z2); > +- mpn_sub_n (z2, ecc->q.m, z2, ecc->p.size); > ++ mpn_sub_n (hp, ecc->q.m, rp, ecc->p.size); > ++ ecc_mod_mul_canonical (&ecc->q, z2, hp, vp, z2); > + > + /* Total storage: 5*ecc->p.size + ecc->mul_itch */ > + ecc->mul (ecc, P2, z2, pp, z2 + ecc->p.size); > +diff --git a/ecc-internal.h b/ecc-internal.h > +index 55c9be27..acfcb4d7 100644 > +--- a/ecc-internal.h > ++++ b/ecc-internal.h > +@@ -49,6 +49,8 @@ > + #define ecc_mod_submul_1 _nettle_ecc_mod_submul_1 > + #define ecc_mod_mul _nettle_ecc_mod_mul > + #define ecc_mod_sqr _nettle_ecc_mod_sqr > ++#define ecc_mod_mul_canonical _nettle_ecc_mod_mul_canonical > ++#define ecc_mod_sqr_canonical _nettle_ecc_mod_sqr_canonical > + #define ecc_mod_pow_2k _nettle_ecc_mod_pow_2k > + #define ecc_mod_pow_2k_mul _nettle_ecc_mod_pow_2k_mul > + #define ecc_mod_random _nettle_ecc_mod_random > +@@ -264,6 +266,19 @@ void > + ecc_mod_sqr (const struct ecc_modulo *m, mp_limb_t *rp, > + const mp_limb_t *ap, mp_limb_t *tp); > + > ++/* These mul and sqr functions produce a canonical result, 0 <= R < > M. > ++ Requirements on input and output areas are similar to the above > ++ functions, except that it is *not* allowed to pass rp = rp + > ++ m->size. > ++ */ > ++void > ++ecc_mod_mul_canonical (const struct ecc_modulo *m, mp_limb_t *rp, > ++ const mp_limb_t *ap, const mp_limb_t *bp, > mp_limb_t *tp); > ++ > ++void > ++ecc_mod_sqr_canonical (const struct ecc_modulo *m, mp_limb_t *rp, > ++ const mp_limb_t *ap, mp_limb_t *tp); > ++ > + /* R <-- X^{2^k} mod M. Needs 2*ecc->size limbs of scratch space, > same > + overlap requirements as mul and sqr above. */ > + void > +diff --git a/ecc-j-to-a.c b/ecc-j-to-a.c > +index 2d55b3a5..ac134b51 100644 > +--- a/ecc-j-to-a.c > ++++ b/ecc-j-to-a.c > +@@ -49,8 +49,6 @@ ecc_j_to_a (const struct ecc_curve *ecc, > + #define iz3p (scratch + 2*ecc->p.size) > + #define tp scratch > + > +- mp_limb_t cy; > +- > + ecc->p.invert (&ecc->p, izp, p+2*ecc->p.size, izp + ecc->p.size); > + ecc_mod_sqr (&ecc->p, iz2p, izp, iz2p); > + > +@@ -63,17 +61,13 @@ ecc_j_to_a (const struct ecc_curve *ecc, > + } > + > + /* r_x <-- x / z^2 */ > +- ecc_mod_mul (&ecc->p, iz3p, iz2p, p, iz3p); > +- /* ecc_mod (and ecc_mod_mul) may return a value up to 2p - 1, so > +- do a conditional subtraction. */ > +- cy = mpn_sub_n (r, iz3p, ecc->p.m, ecc->p.size); > +- cnd_copy (cy, r, iz3p, ecc->p.size); > +- > ++ ecc_mod_mul_canonical (&ecc->p, r, iz2p, p, iz3p); > + if (op) > + { > + /* Skip y coordinate */ > + if (op > 1) > + { > ++ mp_limb_t cy; > + /* Also reduce the x coordinate mod ecc->q. It should > + already be < 2*ecc->q, so one subtraction should > + suffice. */ > +@@ -83,10 +77,7 @@ ecc_j_to_a (const struct ecc_curve *ecc, > + return; > + } > + ecc_mod_mul (&ecc->p, iz3p, iz2p, izp, iz3p); > +- ecc_mod_mul (&ecc->p, tp, iz3p, p + ecc->p.size, tp); > +- /* And a similar subtraction. */ > +- cy = mpn_sub_n (r + ecc->p.size, tp, ecc->p.m, ecc->p.size); > +- cnd_copy (cy, r + ecc->p.size, tp, ecc->p.size); > ++ ecc_mod_mul_canonical (&ecc->p, r + ecc->p.size, iz3p, p + ecc- > >p.size, tp); > + > + #undef izp > + #undef iz2p > +diff --git a/ecc-mod-arith.c b/ecc-mod-arith.c > +index 551f2c14..b3021d94 100644 > +--- a/ecc-mod-arith.c > ++++ b/ecc-mod-arith.c > +@@ -125,6 +125,30 @@ ecc_mod_sqr (const struct ecc_modulo *m, > mp_limb_t *rp, > + m->reduce (m, rp, tp); > + } > + > ++void > ++ecc_mod_mul_canonical (const struct ecc_modulo *m, mp_limb_t *rp, > ++ const mp_limb_t *ap, const mp_limb_t *bp, > mp_limb_t *tp) > ++{ > ++ mp_limb_t cy; > ++ mpn_mul_n (tp, ap, bp, m->size); > ++ m->reduce (m, tp + m->size, tp); > ++ > ++ cy = mpn_sub_n (rp, tp + m->size, m->m, m->size); > ++ cnd_copy (cy, rp, tp + m->size, m->size); > ++} > ++ > ++void > ++ecc_mod_sqr_canonical (const struct ecc_modulo *m, mp_limb_t *rp, > ++ const mp_limb_t *ap, mp_limb_t *tp) > ++{ > ++ mp_limb_t cy; > ++ mpn_sqr (tp, ap, m->size); > ++ m->reduce (m, tp + m->size, tp); > ++ > ++ cy = mpn_sub_n (rp, tp + m->size, m->m, m->size); > ++ cnd_copy (cy, rp, tp + m->size, m->size); > ++} > ++ > + void > + ecc_mod_pow_2k (const struct ecc_modulo *m, > + mp_limb_t *rp, const mp_limb_t *xp, > +diff --git a/ecc-mul-m.c b/ecc-mul-m.c > +index a3355751..f0ceb924 100644 > +--- a/ecc-mul-m.c > ++++ b/ecc-mul-m.c > +@@ -48,7 +48,7 @@ ecc_mul_m (const struct ecc_modulo *m, > + mp_limb_t *scratch) > + { > + unsigned i; > +- mp_limb_t cy, swap; > ++ mp_limb_t swap; > + > + #define x2 (scratch) > + #define z2 (scratch + m->size) > +@@ -162,7 +162,5 @@ ecc_mul_m (const struct ecc_modulo *m, > + } > + assert (m->invert_itch <= 7 * m->size); > + m->invert (m, x3, z2, z3 + m->size); > +- ecc_mod_mul (m, z3, x2, x3, z3); > +- cy = mpn_sub_n (qx, z3, m->m, m->size); > +- cnd_copy (cy, qx, z3, m->size); > ++ ecc_mod_mul_canonical (m, qx, x2, x3, z3); > + } > +diff --git a/eddsa-hash.c b/eddsa-hash.c > +index 95e0dd70..6ebbe977 100644 > +--- a/eddsa-hash.c > ++++ b/eddsa-hash.c > +@@ -44,13 +44,14 @@ > + #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); > + } > +diff --git a/eddsa-verify.c b/eddsa-verify.c > +index de68f240..10d075ee 100644 > +--- a/eddsa-verify.c > ++++ b/eddsa-verify.c > +@@ -53,13 +53,8 @@ equal_h (const struct ecc_modulo *p, > + #define t0 scratch > + #define t1 (scratch + p->size) > + > +- ecc_mod_mul (p, t0, x1, z2, t0); > +- if (mpn_cmp (t0, p->m, p->size) >= 0) > +- mpn_sub_n (t0, t0, p->m, p->size); > +- > +- ecc_mod_mul (p, t1, x2, z1, t1); > +- if (mpn_cmp (t1, p->m, p->size) >= 0) > +- mpn_sub_n (t1, t1, p->m, p->size); > ++ ecc_mod_mul_canonical (p, t0, x1, z2, t0); > ++ ecc_mod_mul_canonical (p, t1, x2, z1, t1); > + > + return mpn_cmp (t0, t1, p->size) == 0; > + > +diff --git a/gostdsa-vko.c b/gostdsa-vko.c > +index a02d59a9..3dc42a1e 100644 > +--- a/gostdsa-vko.c > ++++ b/gostdsa-vko.c > +@@ -87,7 +87,7 @@ gostdsa_vko (const struct ecc_scalar *priv, > + if (mpn_zero_p (UKM, size)) > + UKM[0] = 1; > + > +- ecc_mod_mul (&ecc->q, TEMP, priv->p, UKM, TEMP); /* TEMP = UKM * > priv */ > ++ ecc_mod_mul_canonical (&ecc->q, TEMP, priv->p, UKM, TEMP); /* TEMP > = UKM * priv */ > + ecc->mul (ecc, XYZ, TEMP, pub->p, scratch + 4*size); /* XYZ = UKM * > priv * pub */ > + ecc->h_to_a (ecc, 0, TEMP, XYZ, scratch + 5*size); /* TEMP = XYZ */ > + mpn_get_base256_le (out, bsize, TEMP, size); > +diff --git a/testsuite/ecdsa-sign-test.c b/testsuite/ecdsa-sign-test.c > +index b240a31b..ed7e22bc 100644 > +--- a/testsuite/ecdsa-sign-test.c > ++++ b/testsuite/ecdsa-sign-test.c > +@@ -58,6 +58,32 @@ test_ecdsa (const struct ecc_curve *ecc, > + void > + test_main (void) > + { > ++ /* Producing the signature for corresponding test in > ++ ecdsa-verify-test.c, with special u1 and u2. */ > ++ test_ecdsa (&_nettle_secp_224r1, > ++ "99b5b787484def12894ca507058b3bf5" > ++ "43d72d82fa7721d2e805e5e6", > ++ "2", > ++ SHEX("cdb887ac805a3b42e22d224c85482053" > ++ "16c755d4a736bb2032c92553"), > ++ "706a46dc76dcb76798e60e6d89474788" > ++ "d16dc18032d268fd1a704fa6", /* r */ > ++ "3a41e1423b1853e8aa89747b1f987364" > ++ "44705d6d6d8371ea1f578f2e"); /* s */ > ++ > ++ /* Producing the signature for corresponding test in > ++ ecdsa-verify-test.c, with special u1 and u2. */ > ++ test_ecdsa (&_nettle_secp_224r1, > ++ "99b5b787484def12894ca507058b3bf5" > ++ "43d72d82fa7721d2e805e5e6", > ++ "2", > ++ SHEX("cdb887ac805a3b42e22d224c85482053" > ++ "16c755d4a736bb2032c92553"), > ++ "706a46dc76dcb76798e60e6d89474788" > ++ "d16dc18032d268fd1a704fa6", /* r */ > ++ "3a41e1423b1853e8aa89747b1f987364" > ++ "44705d6d6d8371ea1f578f2e"); /* s */ > ++ > + /* Test cases for the smaller groups, verified with a > + proof-of-concept implementation done for Yubico AB. */ > + test_ecdsa (&_nettle_secp_192r1, > +diff --git a/testsuite/ecdsa-verify-test.c b/testsuite/ecdsa-verify- > test.c > +index 3ceac0eb..edcd32ea 100644 > +--- a/testsuite/ecdsa-verify-test.c > ++++ b/testsuite/ecdsa-verify-test.c > +@@ -81,6 +81,46 @@ test_ecdsa (const struct ecc_curve *ecc, > + void > + test_main (void) > + { > ++ /* Corresponds to nonce k = 2 and private key z = > ++ 0x99b5b787484def12894ca507058b3bf543d72d82fa7721d2e805e5e6. z > and > ++ hash are chosen so that intermediate scalars in the verify > ++ equations are u1 = 0x6b245680e700, u2 = > ++ 259da6542d4ba7d21ad916c3bd57f811. These values require canonical > ++ reduction of the scalars. Bug caused by missing canonical > ++ reduction reported by Guido Vranken. */ > ++ test_ecdsa (&_nettle_secp_224r1, > ++ "9e7e6cc6b1bdfa8ee039b66ad85e5490" > ++ "7be706a900a3cba1c8fdd014", /* x */ > ++ "74855db3f7c1b4097ae095745fc915e3" > ++ "8a79d2a1de28f282eafb22ba", /* y */ > ++ > ++ SHEX("cdb887ac805a3b42e22d224c85482053" > ++ "16c755d4a736bb2032c92553"), > ++ "706a46dc76dcb76798e60e6d89474788" > ++ "d16dc18032d268fd1a704fa6", /* r */ > ++ "3a41e1423b1853e8aa89747b1f987364" > ++ "44705d6d6d8371ea1f578f2e"); /* s */ > ++ > ++ /* Corresponds to nonce k = 2 and private key z = > ++ 0x99b5b787484def12894ca507058b3bf543d72d82fa7721d2e805e5e6. z > and > ++ hash are chosen so that intermediate scalars in the verify > ++ equations are u1 = 0x6b245680e700, u2 = > ++ 259da6542d4ba7d21ad916c3bd57f811. These values require canonical > ++ reduction of the scalars. Bug caused by missing canonical > ++ reduction reported by Guido Vranken. */ > ++ test_ecdsa (&_nettle_secp_224r1, > ++ "9e7e6cc6b1bdfa8ee039b66ad85e5490" > ++ "7be706a900a3cba1c8fdd014", /* x */ > ++ "74855db3f7c1b4097ae095745fc915e3" > ++ "8a79d2a1de28f282eafb22ba", /* y */ > ++ > ++ SHEX("cdb887ac805a3b42e22d224c85482053" > ++ "16c755d4a736bb2032c92553"), > ++ "706a46dc76dcb76798e60e6d89474788" > ++ "d16dc18032d268fd1a704fa6", /* r */ > ++ "3a41e1423b1853e8aa89747b1f987364" > ++ "44705d6d6d8371ea1f578f2e"); /* s */ > ++ > + /* Test case provided by Guido Vranken, from oss-fuzz */ > + test_ecdsa (&_nettle_secp_192r1, > + "14683086 f1734c6d e68743a6 48181b54 a74d4c5b 383eb6a8", > /* x */ > +-- > +2.30.2 > + > diff --git a/meta/recipes-support/nettle/nettle_3.7.1.bb > b/meta/recipes-support/nettle/nettle_3.7.1.bb > index 3bbcf17c7a..0e2bd2a7e1 100644 > --- a/meta/recipes-support/nettle/nettle_3.7.1.bb > +++ b/meta/recipes-support/nettle/nettle_3.7.1.bb > @@ -18,6 +18,7 @@ SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \ > file://Add-target-to-only-build-tests-not-run-them.patch \ > file://run-ptest \ > > file://check-header-files-of-openssl-only-if-enable_.patch \ > + file://CVE-2021-20305.patch \ > " > > SRC_URI_append_class-target = "\ > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#150761): https://lists.openembedded.org/g/openembedded-core/message/150761 Mute This Topic: https://lists.openembedded.org/mt/82260195/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-