public ECFieldElement fromBigInteger(BigInteger x) { return new SecT193FieldElement(x); }
public ECFieldElement subtract(ECFieldElement b) { // Addition and subtraction are the same in F2m return add(b); }
public ECFieldElement divide(ECFieldElement b) { return multiply(b.invert()); }
public ECFieldElement multiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) { return multiplyPlusProduct(b, x, y); }
public ECFieldElement squareMinusProduct(ECFieldElement x, ECFieldElement y) { return squarePlusProduct(x, y); }
public ECFieldElement fromBigInteger(BigInteger x) { return new SecT193FieldElement(x); }
public ECPoint lookup(int index) { long[] x = Nat256.create64(), y = Nat256.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 SecT193FieldElement(x), new SecT193FieldElement(y), false); } };
public ECPoint lookup(int index) { long[] x = Nat256.create64(), y = Nat256.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 SecT193FieldElement(x), new SecT193FieldElement(y), false); } };
public ECFieldElement multiply(ECFieldElement b) { long[] z = Nat256.create64(); SecT193Field.multiply(x, ((SecT193FieldElement)b).x, z); return new SecT193FieldElement(z); }
public ECFieldElement squarePow(int pow) { if (pow < 1) { return this; } long[] z = Nat256.create64(); SecT193Field.squareN(x, pow, z); return new SecT193FieldElement(z); }
public ECFieldElement sqrt() { long[] z = Nat256.create64(); SecT193Field.sqrt(x, z); return new SecT193FieldElement(z); }
public ECFieldElement addOne() { long[] z = Nat256.create64(); SecT193Field.addOne(x, z); return new SecT193FieldElement(z); }
public ECFieldElement invert() { long[] z = Nat256.create64(); SecT193Field.invert(x, z); return new SecT193FieldElement(z); }
public ECFieldElement add(ECFieldElement b) { long[] z = Nat256.create64(); SecT193Field.add(x, ((SecT193FieldElement)b).x, z); return new SecT193FieldElement(z); }
public ECFieldElement square() { long[] z = Nat256.create64(); SecT193Field.square(x, z); return new SecT193FieldElement(z); }
return createRawPoint(new SecT193FieldElement(x), new SecT193FieldElement(y), false);
return createRawPoint(new SecT193FieldElement(x), new SecT193FieldElement(y), false);
public ECFieldElement squarePlusProduct(ECFieldElement x, ECFieldElement y) { long[] ax = this.x; long[] xx = ((SecT193FieldElement)x).x, yx = ((SecT193FieldElement)y).x; long[] tt = Nat256.createExt64(); SecT193Field.squareAddToExt(ax, tt); SecT193Field.multiplyAddToExt(xx, yx, tt); long[] z = Nat256.create64(); SecT193Field.reduce(tt, z); return new SecT193FieldElement(z); }
public ECFieldElement multiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) { long[] ax = this.x, bx = ((SecT193FieldElement)b).x; long[] xx = ((SecT193FieldElement)x).x, yx = ((SecT193FieldElement)y).x; long[] tt = Nat256.createExt64(); SecT193Field.multiplyAddToExt(ax, bx, tt); SecT193Field.multiplyAddToExt(xx, yx, tt); long[] z = Nat256.create64(); SecT193Field.reduce(tt, z); return new SecT193FieldElement(z); }