public static void multiplyAddToExt(long[] x, long[] y, long[] zz) { long[] tt = Nat192.createExt64(); implMultiply(x, y, tt); addExt(zz, tt, zz); }
public SecT163FieldElement(BigInteger x) { if (x == null || x.signum() < 0 || x.bitLength() > 163) { throw new IllegalArgumentException("x value invalid for SecT163FieldElement"); } this.x = SecT163Field.fromBigInteger(x); }
public static void squareN(long[] x, int n, long[] z) { // assert n > 0; long[] tt = Nat192.createExt64(); implSquare(x, tt); reduce(tt, z); while (--n > 0) { implSquare(z, tt); reduce(tt, z); } }
public static void squareAddToExt(long[] x, long[] zz) { long[] tt = Nat192.createExt64(); implSquare(x, tt); addExt(zz, tt, zz); }
long[] t1 = Nat192.create64(); square(x, t0); squareN(t0, 1, t1); multiply(t0, t1, t0); squareN(t1, 1, t1); multiply(t0, t1, t0); squareN(t0, 3, t1); multiply(t0, t1, t0); squareN(t1, 3, t1); multiply(t0, t1, t0); squareN(t0, 9, t1); multiply(t0, t1, t0); squareN(t1, 9, t1); multiply(t0, t1, t0); squareN(t0, 27, t1); multiply(t0, t1, t0); squareN(t1, 27, t1); multiply(t0, t1, t0); squareN(t0, 81, t1); multiply(t0, t1, z);
public static void multiply(long[] x, long[] y, long[] z) { long[] tt = Nat192.createExt64(); implMultiply(x, y, tt); reduce(tt, z); }
public ECFieldElement multiply(ECFieldElement b) { long[] z = Nat192.create64(); SecT163Field.multiply(x, ((SecT163FieldElement)b).x, z); return new SecT163FieldElement(z); }
public ECFieldElement addOne() { long[] z = Nat192.create64(); SecT163Field.addOne(x, z); return new SecT163FieldElement(z); }
public ECFieldElement invert() { long[] z = Nat192.create64(); SecT163Field.invert(x, z); return new SecT163FieldElement(z); }
public ECFieldElement add(ECFieldElement b) { long[] z = Nat192.create64(); SecT163Field.add(x, ((SecT163FieldElement)b).x, z); return new SecT163FieldElement(z); }
public static void square(long[] x, long[] z) { long[] tt = Nat192.createExt64(); implSquare(x, tt); reduce(tt, z); }
public static void sqrt(long[] x, long[] z) { long[] odd = Nat192.create64(); long u0, u1; u0 = Interleave.unshuffle(x[0]); u1 = Interleave.unshuffle(x[1]); long e0 = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); odd[0] = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); u0 = Interleave.unshuffle(x[2]); long e1 = (u0 & 0x00000000FFFFFFFFL); odd[1] = (u0 >>> 32); multiply(odd, ROOT_Z, z); z[0] ^= e0; z[1] ^= e1; }