public SecP128R1FieldElement() { this.x = Nat128.create(); }
public static int[] fromBigInteger(BigInteger x) { if (x.signum() < 0 || x.bitLength() > 128) { throw new IllegalArgumentException(); } int[] z = create(); int i = 0; while (x.signum() != 0) { z[i++] = x.intValue(); x = x.shiftRight(32); } return z; }
public ECPoint lookup(int index) { int[] x = Nat128.create(), y = Nat128.create(); int pos = 0; for (int i = 0; i < len; ++i) { int MASK = ((i ^ index) - 1) >> 31; for (int j = 0; j < FE_INTS; ++j) { x[j] ^= table[pos + j] & MASK; y[j] ^= table[pos + FE_INTS + j] & MASK; } pos += (FE_INTS * 2); } return createRawPoint(new SecP128R1FieldElement(x), new SecP128R1FieldElement(y), false); } };
public ECFieldElement add(ECFieldElement b) { int[] z = Nat128.create(); SecP128R1Field.add(x, ((SecP128R1FieldElement)b).x, z); return new SecP128R1FieldElement(z); }
public ECFieldElement multiply(ECFieldElement b) { int[] z = Nat128.create(); SecP128R1Field.multiply(x, ((SecP128R1FieldElement)b).x, z); return new SecP128R1FieldElement(z); }
public ECFieldElement square() { int[] z = Nat128.create(); SecP128R1Field.square(x, z); return new SecP128R1FieldElement(z); }
public ECFieldElement invert() { // return new SecP128R1FieldElement(toBigInteger().modInverse(Q)); int[] z = Nat128.create(); Mod.invert(SecP128R1Field.P, x, z); return new SecP128R1FieldElement(z); }
public ECFieldElement addOne() { int[] z = Nat128.create(); SecP128R1Field.addOne(x, z); return new SecP128R1FieldElement(z); }
public ECFieldElement negate() { int[] z = Nat128.create(); SecP128R1Field.negate(x, z); return new SecP128R1FieldElement(z); }
public ECFieldElement subtract(ECFieldElement b) { int[] z = Nat128.create(); SecP128R1Field.subtract(x, ((SecP128R1FieldElement)b).x, z); return new SecP128R1FieldElement(z); }
public ECFieldElement divide(ECFieldElement b) { // return multiply(b.invert()); int[] z = Nat128.create(); Mod.invert(SecP128R1Field.P, ((SecP128R1FieldElement)b).x, z); SecP128R1Field.multiply(z, x, z); return new SecP128R1FieldElement(z); }