protected ECFieldElement doubleProductFromSquares(ECFieldElement a, ECFieldElement b, ECFieldElement aSquared, ECFieldElement bSquared) { /* * NOTE: If squaring in the field is faster than multiplication, then this is a quicker * way to calculate 2.A.B, if A^2 and B^2 are already known. */ return a.add(b).square().subtract(aSquared).subtract(bSquared); }
protected ECFieldElement doubleProductFromSquares(ECFieldElement a, ECFieldElement b, ECFieldElement aSquared, ECFieldElement bSquared) { /* * NOTE: If squaring in the field is faster than multiplication, then this is a quicker * way to calculate 2.A.B, if A^2 and B^2 are already known. */ return a.add(b).square().subtract(aSquared).subtract(bSquared); }
protected ECFieldElement doubleProductFromSquares(ECFieldElement a, ECFieldElement b, ECFieldElement aSquared, ECFieldElement bSquared) { /* * NOTE: If squaring in the field is faster than multiplication, then this is a quicker * way to calculate 2.A.B, if A^2 and B^2 are already known. */ return a.add(b).square().subtract(aSquared).subtract(bSquared); }
protected ECFieldElement doubleProductFromSquares(ECFieldElement a, ECFieldElement b, ECFieldElement aSquared, ECFieldElement bSquared) { /* * NOTE: If squaring in the field is faster than multiplication, then this is a quicker * way to calculate 2.A.B, if A^2 and B^2 are already known. */ return a.add(b).square().subtract(aSquared).subtract(bSquared); }
public ECFieldElement multiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) { return multiply(b).subtract(x.multiply(y)); }
public ECFieldElement multiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) { return multiply(b).subtract(x.multiply(y)); }
public ECFieldElement squareMinusProduct(ECFieldElement x, ECFieldElement y) { return square().subtract(x.multiply(y)); }
public ECFieldElement squareMinusProduct(ECFieldElement x, ECFieldElement y) { return square().subtract(x.multiply(y)); }
protected ECPoint.Fp twiceJacobianModified(boolean calculateW) { ECFieldElement X1 = this.x, Y1 = this.y, Z1 = this.zs[0], W1 = getJacobianModifiedW(); ECFieldElement X1Squared = X1.square(); ECFieldElement M = three(X1Squared).add(W1); ECFieldElement _2Y1 = two(Y1); ECFieldElement _2Y1Squared = _2Y1.multiply(Y1); ECFieldElement S = two(X1.multiply(_2Y1Squared)); ECFieldElement X3 = M.square().subtract(two(S)); ECFieldElement _4T = _2Y1Squared.square(); ECFieldElement _8T = two(_4T); ECFieldElement Y3 = M.multiply(S.subtract(X3)).subtract(_8T); ECFieldElement W3 = calculateW ? two(_8T.multiply(W1)) : null; ECFieldElement Z3 = Z1.isOne() ? _2Y1 : _2Y1.multiply(Z1); return new ECPoint.Fp(this.getCurve(), X3, Y3, new ECFieldElement[]{ Z3, W3 }, this.withCompression); } }
protected ECPoint.Fp twiceJacobianModified(boolean calculateW) { ECFieldElement X1 = this.x, Y1 = this.y, Z1 = this.zs[0], W1 = getJacobianModifiedW(); ECFieldElement X1Squared = X1.square(); ECFieldElement M = three(X1Squared).add(W1); ECFieldElement _2Y1 = two(Y1); ECFieldElement _2Y1Squared = _2Y1.multiply(Y1); ECFieldElement S = two(X1.multiply(_2Y1Squared)); ECFieldElement X3 = M.square().subtract(two(S)); ECFieldElement _4T = _2Y1Squared.square(); ECFieldElement _8T = two(_4T); ECFieldElement Y3 = M.multiply(S.subtract(X3)).subtract(_8T); ECFieldElement W3 = calculateW ? two(_8T.multiply(W1)) : null; ECFieldElement Z3 = Z1.isOne() ? _2Y1 : _2Y1.multiply(Z1); return new ECPoint.Fp(this.getCurve(), X3, Y3, new ECFieldElement[]{ Z3, W3 }, this.withCompression); } }
ECFieldElement dx = X2.subtract(X1), dy = Y2.subtract(Y1); ECFieldElement X3 = gamma.square().subtract(X1).subtract(X2); ECFieldElement Y3 = gamma.multiply(X1.subtract(X3)).subtract(Y1); ECFieldElement u = u1.subtract(u2); ECFieldElement v1 = Z1IsOne ? X2 : X2.multiply(Z1); ECFieldElement v2 = Z2IsOne ? X1 : X1.multiply(Z2); ECFieldElement v = v1.subtract(v2); ECFieldElement vCubed = vSquared.multiply(v); ECFieldElement vSquaredV2 = vSquared.multiply(v2); ECFieldElement A = u.square().multiply(w).subtract(vCubed).subtract(two(vSquaredV2)); ECFieldElement Y3 = vSquaredV2.subtract(A).multiplyMinusProduct(u, u2, vCubed); ECFieldElement Z3 = vCubed.multiply(w); ECFieldElement dx = X1.subtract(X2), dy = Y1.subtract(Y2); if (dx.isZero()) ECFieldElement A1 = W1.subtract(W2).multiply(Y1); X3 = dy.square().subtract(W1).subtract(W2); Y3 = W1.subtract(X3).multiply(dy).subtract(A1); Z3 = dx; ECFieldElement H = U1.subtract(U2); ECFieldElement R = S1.subtract(S2);
ECFieldElement dx = X2.subtract(X1), dy = Y2.subtract(Y1); ECFieldElement X3 = gamma.square().subtract(X1).subtract(X2); ECFieldElement Y3 = gamma.multiply(X1.subtract(X3)).subtract(Y1); ECFieldElement u = u1.subtract(u2); ECFieldElement v1 = Z1IsOne ? X2 : X2.multiply(Z1); ECFieldElement v2 = Z2IsOne ? X1 : X1.multiply(Z2); ECFieldElement v = v1.subtract(v2); ECFieldElement vCubed = vSquared.multiply(v); ECFieldElement vSquaredV2 = vSquared.multiply(v2); ECFieldElement A = u.square().multiply(w).subtract(vCubed).subtract(two(vSquaredV2)); ECFieldElement Y3 = vSquaredV2.subtract(A).multiplyMinusProduct(u, u2, vCubed); ECFieldElement Z3 = vCubed.multiply(w); ECFieldElement dx = X1.subtract(X2), dy = Y1.subtract(Y2); if (dx.isZero()) ECFieldElement A1 = W1.subtract(W2).multiply(Y1); X3 = dy.square().subtract(W1).subtract(W2); Y3 = W1.subtract(X3).multiply(dy).subtract(A1); Z3 = dx; ECFieldElement H = U1.subtract(U2); ECFieldElement R = S1.subtract(S2);
ECFieldElement X2 = b.x, Y2 = b.y; ECFieldElement dx = X2.subtract(X1), dy = Y2.subtract(Y1); ECFieldElement d = X.multiply(two(X1).add(X2)).subtract(Y); if (d.isZero()) ECFieldElement I = D.invert(); ECFieldElement L1 = d.multiply(I).multiply(dy); ECFieldElement L2 = two(Y1).multiply(X).multiply(dx).multiply(I).subtract(L1); ECFieldElement X4 = (L2.subtract(L1)).multiply(L1.add(L2)).add(X2); ECFieldElement Y4 = (X1.subtract(X4)).multiply(L2).subtract(Y1);
ECFieldElement X2 = b.x, Y2 = b.y; ECFieldElement dx = X2.subtract(X1), dy = Y2.subtract(Y1); ECFieldElement d = X.multiply(two(X1).add(X2)).subtract(Y); if (d.isZero()) ECFieldElement I = D.invert(); ECFieldElement L1 = d.multiply(I).multiply(dy); ECFieldElement L2 = two(Y1).multiply(X).multiply(dx).multiply(I).subtract(L1); ECFieldElement X4 = (L2.subtract(L1)).multiply(L1.add(L2)).add(X2); ECFieldElement Y4 = (X1.subtract(X4)).multiply(L2).subtract(Y1);
ECFieldElement Y = Z.square(); ECFieldElement d = three(X1).multiply(X).subtract(Y); if (d.isZero()) ECFieldElement I = D.invert(); ECFieldElement L1 = d.multiply(I).multiply(Z); ECFieldElement L2 = X.square().multiply(I).subtract(L1); ECFieldElement X4 = (L2.subtract(L1)).multiply(L1.add(L2)).add(X1); ECFieldElement Y4 = (X1.subtract(X4)).multiply(L2).subtract(Y1); return new ECPoint.Fp(curve, X4, Y4, this.withCompression);
ECFieldElement Y = Z.square(); ECFieldElement d = three(X1).multiply(X).subtract(Y); if (d.isZero()) ECFieldElement I = D.invert(); ECFieldElement L1 = d.multiply(I).multiply(Z); ECFieldElement L2 = X.square().multiply(I).subtract(L1); ECFieldElement X4 = (L2.subtract(L1)).multiply(L1.add(L2)).add(X1); ECFieldElement Y4 = (X1.subtract(X4)).multiply(L2).subtract(Y1); return new ECPoint.Fp(curve, X4, Y4, this.withCompression);
ECFieldElement X3 = gamma.square().subtract(two(X1)); ECFieldElement Y3 = gamma.multiply(X1.subtract(X3)).subtract(Y1); ECFieldElement B = X1.multiply(t); ECFieldElement _4B = four(B); ECFieldElement h = w.square().subtract(two(_4B)); ECFieldElement Y3 = _4B.subtract(h).multiply(w).subtract(two(_2t.square())); ECFieldElement _4sSquared = Z1IsOne ? two(_2t) : _2s.square(); ECFieldElement Z3 = two(_4sSquared).multiply(s); M = three(X1.add(Z1Squared).multiply(X1.subtract(Z1Squared))); S = four(Y1Squared.multiply(X1)); if (a4Neg.bitLength() < a4.bitLength()) M = M.subtract(Z1Pow4.multiply(a4Neg)); ECFieldElement X3 = M.square().subtract(two(S)); ECFieldElement Y3 = S.subtract(X3).multiply(M).subtract(eight(T));
ECFieldElement X3 = gamma.square().subtract(two(X1)); ECFieldElement Y3 = gamma.multiply(X1.subtract(X3)).subtract(Y1); ECFieldElement B = X1.multiply(t); ECFieldElement _4B = four(B); ECFieldElement h = w.square().subtract(two(_4B)); ECFieldElement Y3 = _4B.subtract(h).multiply(w).subtract(two(_2t.square())); ECFieldElement _4sSquared = Z1IsOne ? two(_2t) : _2s.square(); ECFieldElement Z3 = two(_4sSquared).multiply(s); M = three(X1.add(Z1Squared).multiply(X1.subtract(Z1Squared))); S = four(Y1Squared.multiply(X1)); if (a4Neg.bitLength() < a4.bitLength()) M = M.subtract(Z1Pow4.multiply(a4Neg)); ECFieldElement X3 = M.square().subtract(two(S)); ECFieldElement Y3 = S.subtract(X3).multiply(M).subtract(eight(T));