From fee80dd230e7fba132d03a34f1dd1d6aae0d0281 Mon Sep 17 00:00:00 2001 From: David Hook Date: Fri, 22 Dec 2023 15:34:47 +1100 Subject: [PATCH] refactored f2m m check. --- .../org/bouncycastle/math/ec/ECCurve.java | 10 +++++----- .../math/ec/test/ECPointTest.java | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/bouncycastle/math/ec/ECCurve.java b/core/src/main/java/org/bouncycastle/math/ec/ECCurve.java index bf1decfbff..ce879c4159 100644 --- a/core/src/main/java/org/bouncycastle/math/ec/ECCurve.java +++ b/core/src/main/java/org/bouncycastle/math/ec/ECCurve.java @@ -845,6 +845,11 @@ public static BigInteger inverse(int m, int[] ks, BigInteger x) private static FiniteField buildField(int m, int k1, int k2, int k3) { + if (m > Properties.asInteger("org.bouncycastle.ec.max_f2m_field_size", 1142)) // twice 571 + { + throw new IllegalArgumentException("field size out of range: " + m); + } + int[] exponents = (k2 | k3) == 0 ? new int[]{ 0, k1, m } : new int[]{ 0, k1, k2, k3, m }; @@ -1006,11 +1011,6 @@ protected ECFieldElement solveQuadraticEquation(ECFieldElement beta) } int m = this.getFieldSize(); - - if (m > Properties.asInteger("org.bouncycastle.ec.max_f2m_field_size", 1142)) // twice 571 - { - throw new IllegalStateException("field size out of range: " + m); - } // For odd m, use the half-trace if (0 != (m & 1)) diff --git a/core/src/test/java/org/bouncycastle/math/ec/test/ECPointTest.java b/core/src/test/java/org/bouncycastle/math/ec/test/ECPointTest.java index f53c98287c..68fd639784 100644 --- a/core/src/test/java/org/bouncycastle/math/ec/test/ECPointTest.java +++ b/core/src/test/java/org/bouncycastle/math/ec/test/ECPointTest.java @@ -196,6 +196,25 @@ private void implTestAdd(ECPoint[] p, ECPoint infinity) } } + public void testLargeMInF2m() + { + int m = 2048; + int k1 = 1; + BigInteger aTpb = new BigInteger("1000", 2); + BigInteger bTpb = new BigInteger("1001", 2); + BigInteger n = new BigInteger("23"); + BigInteger h = new BigInteger("1"); + + try + { + ECCurve.F2m curve = new ECCurve.F2m(m, k1, aTpb, bTpb, n, h); + } + catch (IllegalArgumentException e) + { + assertEquals("field size out of range: 2048", e.getMessage()); + } + } + /** * Calls implTestAdd() for Fp and * F2m.