public SecT571FieldElement() { this.x = Nat576.create64(); }
public boolean equals(Object other) { if (other == this) { return true; } if (!(other instanceof SecT571FieldElement)) { return false; } SecT571FieldElement o = (SecT571FieldElement)other; return Nat576.eq64(x, o.x); }
public static long[] fromBigInteger(BigInteger x) { long[] z = Nat576.fromBigInteger64(x); reduce5(z, 0); return z; }
long[] t1 = Nat576.create64(); long[] t2 = Nat576.create64(); long[] T = Nat576.create64(); SecT571Field.square(L1.x, T); SecT571Field.addBothTo(L1Z1, Z1Sq, T); if (Nat576.isZero64(T)) long[] tt = Nat576.createExt64(); SecT571Field.multiplyAddToExt(T, L1Z1, tt);
public ECFieldElement squarePlusProduct(ECFieldElement x, ECFieldElement y) { long[] ax = this.x; long[] xx = ((SecT571FieldElement)x).x, yx = ((SecT571FieldElement)y).x; long[] tt = Nat576.createExt64(); SecT571Field.squareAddToExt(ax, tt); SecT571Field.multiplyAddToExt(xx, yx, tt); long[] z = Nat576.create64(); SecT571Field.reduce(tt, z); return new SecT571FieldElement(z); }
public static void multiply(long[] x, long[] y, long[] z) { long[] tt = Nat576.createExt64(); implMultiply(x, y, tt); reduce(tt, z); }
public BigInteger toBigInteger() { return Nat576.toBigInteger64(x); }
public boolean isZero() { return Nat576.isZero64(x); }
public boolean isOne() { return Nat576.isOne64(x); }
SecT571FieldElement L2 = (SecT571FieldElement)b.getRawYCoord(); long[] t1 = Nat576.create64(); long[] t2 = Nat576.create64(); long[] t3 = Nat576.create64(); long[] t4 = Nat576.create64(); SecT571Field.add(A, L1Sq, A); long[] tt = Nat576.createExt64(); SecT571Field.multiplyAddToExt(A, T, tt); SecT571Field.multiplyPrecompAddToExt(X1Sq, Z1SqPrecomp, tt); SecT571Field.square(B, B); if (Nat576.isZero64(B)) if (Nat576.isZero64(A)) if (Nat576.isZero64(A))
public ECFieldElement multiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) { long[] ax = this.x, bx = ((SecT571FieldElement)b).x; long[] xx = ((SecT571FieldElement)x).x, yx = ((SecT571FieldElement)y).x; long[] tt = Nat576.createExt64(); SecT571Field.multiplyAddToExt(ax, bx, tt); SecT571Field.multiplyAddToExt(xx, yx, tt); long[] z = Nat576.create64(); SecT571Field.reduce(tt, z); return new SecT571FieldElement(z); }
public static void multiplyAddToExt(long[] x, long[] y, long[] zz) { long[] tt = Nat576.createExt64(); implMultiply(x, y, tt); addExt(zz, tt, zz); }
SecT571FieldElement L2 = (SecT571FieldElement)b.getRawYCoord(), Z2 = (SecT571FieldElement)b.getZCoord(0); long[] t1 = Nat576.create64(); long[] t2 = Nat576.create64(); long[] t3 = Nat576.create64(); long[] t4 = Nat576.create64(); SecT571Field.add(U1, U2, B); if (Nat576.isZero64(B)) if (Nat576.isZero64(A)) long[] tt = Nat576.createExt64();
public static long[] fromBigInteger64(BigInteger x) { if (x.signum() < 0 || x.bitLength() > 576) { throw new IllegalArgumentException(); } long[] z = create64(); int i = 0; while (x.signum() != 0) { z[i++] = x.longValue(); x = x.shiftRight(64); } return z; }
public static void multiplyPrecomp(long[] x, long[] precomp, long[] z) { long[] tt = Nat576.createExt64(); implMultiplyPrecomp(x, precomp, tt); reduce(tt, z); }
SecT571FieldElement L2 = (SecT571FieldElement)b.getRawYCoord(), Z2 = (SecT571FieldElement)b.getZCoord(0); long[] t1 = Nat576.create64(); long[] t2 = Nat576.create64(); long[] t3 = Nat576.create64(); long[] t4 = Nat576.create64(); SecT571Field.add(U1, U2, B); if (Nat576.isZero64(B)) if (Nat576.isZero64(A)) long[] tt = Nat576.createExt64();
public ECPoint lookup(int index) { long[] x = Nat576.create64(), y = Nat576.create64(); int pos = 0; for (int i = 0; i < len; ++i) { long MASK = ((i ^ index) - 1) >> 31; for (int j = 0; j < FE_LONGS; ++j) { x[j] ^= table[pos + j] & MASK; y[j] ^= table[pos + FE_LONGS + j] & MASK; } pos += (FE_LONGS * 2); } return createRawPoint(new SecT571FieldElement(x), new SecT571FieldElement(y), false); } };