Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/bouncycastle/math/ec/ECPoint.java')
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/ECPoint.java24
1 files changed, 21 insertions, 3 deletions
diff --git a/core/src/main/java/org/bouncycastle/math/ec/ECPoint.java b/core/src/main/java/org/bouncycastle/math/ec/ECPoint.java
index 9cd51b6e..6b4ceae9 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/ECPoint.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/ECPoint.java
@@ -1562,9 +1562,27 @@ public abstract class ECPoint
if (b.bitLength() < (curve.getFieldSize() >> 1))
{
ECFieldElement t1 = L1.add(X1).square();
- ECFieldElement t2 = aZ1Sq.square();
- ECFieldElement t3 = curve.getB().multiply(Z1Sq.square());
- L3 = t1.add(T).add(Z1Sq).multiply(t1).add(t2.add(t3)).add(X3).add(a.addOne().multiply(Z3));
+ ECFieldElement t4;
+ if (b.isOne())
+ {
+ t4 = aZ1Sq.add(Z1Sq).square();
+ }
+ else
+ {
+ // TODO t2/t3 can be calculated with one square if we pre-compute sqrt(b)
+ ECFieldElement t2 = aZ1Sq.square();
+ ECFieldElement t3 = b.multiply(Z1Sq.square());
+ t4 = t2.add(t3);
+ }
+ L3 = t1.add(T).add(Z1Sq).multiply(t1).add(t4).add(X3);
+ if (a.isZero())
+ {
+ L3 = L3.add(Z3);
+ }
+ else if (!a.isOne())
+ {
+ L3 = L3.add(a.addOne().multiply(Z3));
+ }
}
else
{