summaryrefslogtreecommitdiffstats
path: root/meta/recipes-support
diff options
context:
space:
mode:
authorJagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>2018-08-22 17:11:53 +0530
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-08-29 15:23:51 +0100
commitdfe237a93b921ed7dd19222b4f6526498c2e7133 (patch)
treefa5fa8294144efc5bf498d070efc5e68de3eb351 /meta/recipes-support
parenta4ce8dbcc6fafc9bbb9f0f281a4643df265f09b9 (diff)
downloadpoky-dfe237a93b921ed7dd19222b4f6526498c2e7133.tar.gz
libgcrypt: CVE-2018-0495
ecc: Add blinding for ECDSA. * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Blind secret D with randomized nonce B. (From OE-Core rev: e05c9b1be8e852293dfc7026f0e3178c3bc5444d) Signed-off-by: Armin Kuster <akuster808@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-support')
-rw-r--r--meta/recipes-support/libgcrypt/files/CVE-2018-0495.patch76
-rw-r--r--meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb1
2 files changed, 77 insertions, 0 deletions
diff --git a/meta/recipes-support/libgcrypt/files/CVE-2018-0495.patch b/meta/recipes-support/libgcrypt/files/CVE-2018-0495.patch
new file mode 100644
index 0000000000..c16bd3abd9
--- /dev/null
+++ b/meta/recipes-support/libgcrypt/files/CVE-2018-0495.patch
@@ -0,0 +1,76 @@
1From 9010d1576e278a4274ad3f4aa15776c28f6ba965 Mon Sep 17 00:00:00 2001
2From: NIIBE Yutaka <gniibe@fsij.org>
3Date: Wed, 13 Jun 2018 15:28:58 +0900
4Subject: [PATCH] ecc: Add blinding for ECDSA.
5
6* cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Blind secret D with
7randomized nonce B.
8
9--
10
11Reported-by: Keegan Ryan <Keegan.Ryan@nccgroup.trust>
12CVE-id: CVE-2018-0495
13
14Upstream-Status: Backport [http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=9010d1576e278a4274ad3f4aa15776c28f6ba965]
15
16Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
17Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
18---
19 cipher/ecc-ecdsa.c | 20 ++++++++++++++++++--
20 1 file changed, 18 insertions(+), 2 deletions(-)
21
22diff --git a/cipher/ecc-ecdsa.c b/cipher/ecc-ecdsa.c
23index 1484830b..140e8c09 100644
24--- a/cipher/ecc-ecdsa.c
25+++ b/cipher/ecc-ecdsa.c
26@@ -50,6 +50,8 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey,
27 const void *abuf;
28 unsigned int abits, qbits;
29 mpi_ec_t ctx;
30+ gcry_mpi_t b; /* Random number needed for blinding. */
31+ gcry_mpi_t bi; /* multiplicative inverse of B. */
32
33 if (DBG_CIPHER)
34 log_mpidump ("ecdsa sign hash ", input );
35@@ -61,6 +63,15 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey,
36 if (rc)
37 return rc;
38
39+ b = mpi_snew (qbits);
40+ bi = mpi_snew (qbits);
41+ do
42+ {
43+ _gcry_mpi_randomize (b, qbits, GCRY_WEAK_RANDOM);
44+ mpi_mod (b, b, skey->E.n);
45+ }
46+ while (!mpi_invm (bi, b, skey->E.n));
47+
48 k = NULL;
49 dr = mpi_alloc (0);
50 sum = mpi_alloc (0);
51@@ -115,8 +126,11 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey,
52 }
53 while (!mpi_cmp_ui (r, 0));
54
55- mpi_mulm (dr, skey->d, r, skey->E.n); /* dr = d*r mod n */
56- mpi_addm (sum, hash, dr, skey->E.n); /* sum = hash + (d*r) mod n */
57+ mpi_mulm (dr, b, skey->d, skey->E.n);
58+ mpi_mulm (dr, dr, r, skey->E.n); /* dr = d*r mod n (blinded with b) */
59+ mpi_mulm (sum, b, hash, skey->E.n);
60+ mpi_addm (sum, sum, dr, skey->E.n); /* sum = hash + (d*r) mod n (blinded with b) */
61+ mpi_mulm (sum, bi, sum, skey->E.n); /* undo blinding by b^-1 */
62 mpi_invm (k_1, k, skey->E.n); /* k_1 = k^(-1) mod n */
63 mpi_mulm (s, k_1, sum, skey->E.n); /* s = k^(-1)*(hash+(d*r)) mod n */
64 }
65@@ -129,6 +143,8 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey,
66 }
67
68 leave:
69+ mpi_free (b);
70+ mpi_free (bi);
71 _gcry_mpi_ec_free (ctx);
72 point_free (&I);
73 mpi_free (x);
74--
752.13.3
76
diff --git a/meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb b/meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb
index b36e653a87..9d036c8fb1 100644
--- a/meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb
+++ b/meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb
@@ -20,6 +20,7 @@ SRC_URI = "${GNUPG_MIRROR}/libgcrypt/libgcrypt-${PV}.tar.bz2 \
20 file://0003-tests-bench-slope.c-workaround-ICE-failure-on-mips-w.patch \ 20 file://0003-tests-bench-slope.c-workaround-ICE-failure-on-mips-w.patch \
21 file://0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch \ 21 file://0002-libgcrypt-fix-building-error-with-O2-in-sysroot-path.patch \
22 file://0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch \ 22 file://0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch \
23 file://CVE-2018-0495.patch \
23" 24"
24SRC_URI[md5sum] = "cfb0b5c79eab07686b6898160a407139" 25SRC_URI[md5sum] = "cfb0b5c79eab07686b6898160a407139"
25SRC_URI[sha256sum] = "c8064cae7558144b13ef0eb87093412380efa16c4ee30ad12ecb54886a524c07" 26SRC_URI[sha256sum] = "c8064cae7558144b13ef0eb87093412380efa16c4ee30ad12ecb54886a524c07"