diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-09-12 09:10:30 +0400 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-09-12 09:10:30 +0400 |
commit | 17183de6da3770b187b5e588ea55a6bb0cf0253b (patch) | |
tree | 80c4583d4256ddf1efc44cda534f92f62fd6c8c1 /core/src/main/java/org/bouncycastle/asn1 | |
parent | ac21f62e490d66c4314ea36c3e63993d8b9dbfb5 (diff) |
Provide some extra methods on ECFieldElement to avoid full conversion to
BigInteger for common, simple tests
Diffstat (limited to 'core/src/main/java/org/bouncycastle/asn1')
-rw-r--r-- | core/src/main/java/org/bouncycastle/asn1/ua/DSTU4145PointEncoder.java | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/core/src/main/java/org/bouncycastle/asn1/ua/DSTU4145PointEncoder.java b/core/src/main/java/org/bouncycastle/asn1/ua/DSTU4145PointEncoder.java index 0227d2ad..41b50d04 100644 --- a/core/src/main/java/org/bouncycastle/asn1/ua/DSTU4145PointEncoder.java +++ b/core/src/main/java/org/bouncycastle/asn1/ua/DSTU4145PointEncoder.java @@ -38,26 +38,23 @@ public abstract class DSTU4145PointEncoder * @return the solution for <code>z<sup>2</sup> + z = beta</code> or * <code>null</code> if no solution exists. */ - private static ECFieldElement solveQuadradicEquation(ECFieldElement beta) + private static ECFieldElement solveQuadraticEquation(ECCurve curve, ECFieldElement beta) { - ECFieldElement.F2m b = (ECFieldElement.F2m)beta; - ECFieldElement zeroElement = new ECFieldElement.F2m( - b.getM(), b.getK1(), b.getK2(), b.getK3(), ECConstants.ZERO); - - if (beta.toBigInteger().equals(ECConstants.ZERO)) + if (beta.isZero()) { - return zeroElement; + return beta; } + ECFieldElement zeroElement = curve.fromBigInteger(ECConstants.ZERO); + ECFieldElement z = null; - ECFieldElement gamma = zeroElement; + ECFieldElement gamma = null; Random rand = new Random(); - int m = b.getM(); + int m = beta.getFieldSize(); do { - ECFieldElement t = new ECFieldElement.F2m(b.getM(), b.getK1(), - b.getK2(), b.getK3(), new BigInteger(m, rand)); + ECFieldElement t = curve.fromBigInteger(new BigInteger(m, rand)); z = zeroElement; ECFieldElement w = beta; for (int i = 1; i <= m - 1; i++) @@ -66,13 +63,13 @@ public abstract class DSTU4145PointEncoder z = z.square().add(w2.multiply(t)); w = w2.add(beta); } - if (!w.toBigInteger().equals(ECConstants.ZERO)) + if (!w.isZero()) { return null; } gamma = z.square().add(z); } - while (gamma.toBigInteger().equals(ECConstants.ZERO)); + while (gamma.isZero()); return z; } @@ -94,7 +91,7 @@ public abstract class DSTU4145PointEncoder int byteCount = converter.getByteLength(Q.getX()); byte[] bytes = converter.integerToBytes(Q.getX().toBigInteger(), byteCount); - if (!(Q.getX().toBigInteger().equals(ECConstants.ZERO))) + if (!Q.getX().isZero()) { ECFieldElement y = Q.getY().multiply(Q.getX().invert()); if (trace(y).equals(ECConstants.ONE)) @@ -129,13 +126,12 @@ public abstract class DSTU4145PointEncoder bytes = Arrays.clone(bytes); bytes[bytes.length - 1] ^= 0x01; } - ECCurve.F2m c = (ECCurve.F2m)curve; ECFieldElement xp = curve.fromBigInteger(new BigInteger(1, bytes)); ECFieldElement yp = null; - if (xp.toBigInteger().equals(ECConstants.ZERO)) + if (xp.isZero()) { yp = (ECFieldElement.F2m)curve.getB(); - for (int i = 0; i < c.getM() - 1; i++) + for (int i = 0; i < curve.getFieldSize() - 1; i++) { yp = yp.square(); } @@ -144,7 +140,7 @@ public abstract class DSTU4145PointEncoder { ECFieldElement beta = xp.add(curve.getA()).add( curve.getB().multiply(xp.square().invert())); - ECFieldElement z = solveQuadradicEquation(beta); + ECFieldElement z = solveQuadraticEquation(curve, beta); if (z == null) { throw new RuntimeException("Invalid point compression"); |