public ECFieldElement fromBigInteger(BigInteger x) { return new SecP224R1FieldElement(x); }
public ECFieldElement fromBigInteger(BigInteger x) { return new SecP224R1FieldElement(x); }
public ECPoint lookup(int index) { int[] x = Nat224.create(), y = Nat224.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 SecP224R1FieldElement(x), new SecP224R1FieldElement(y), false); } };
public ECFieldElement addOne() { int[] z = Nat224.create(); SecP224R1Field.addOne(x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement subtract(ECFieldElement b) { int[] z = Nat224.create(); SecP224R1Field.subtract(x, ((SecP224R1FieldElement)b).x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement square() { int[] z = Nat224.create(); SecP224R1Field.square(x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement subtract(ECFieldElement b) { int[] z = Nat224.create(); SecP224R1Field.subtract(x, ((SecP224R1FieldElement)b).x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement add(ECFieldElement b) { int[] z = Nat224.create(); SecP224R1Field.add(x, ((SecP224R1FieldElement)b).x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement multiply(ECFieldElement b) { int[] z = Nat224.create(); SecP224R1Field.multiply(x, ((SecP224R1FieldElement)b).x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement negate() { int[] z = Nat224.create(); SecP224R1Field.negate(x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement negate() { int[] z = Nat224.create(); SecP224R1Field.negate(x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement square() { int[] z = Nat224.create(); SecP224R1Field.square(x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement invert() { // return new SecP224R1FieldElement(toBigInteger().modInverse(Q)); int[] z = Nat224.create(); Mod.invert(SecP224R1Field.P, x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement addOne() { int[] z = Nat224.create(); SecP224R1Field.addOne(x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement invert() { // return new SecP224R1FieldElement(toBigInteger().modInverse(Q)); int[] z = Nat224.create(); Mod.invert(SecP224R1Field.P, x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement add(ECFieldElement b) { int[] z = Nat224.create(); SecP224R1Field.add(x, ((SecP224R1FieldElement)b).x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement multiply(ECFieldElement b) { int[] z = Nat224.create(); SecP224R1Field.multiply(x, ((SecP224R1FieldElement)b).x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement divide(ECFieldElement b) { // return multiply(b.invert()); int[] z = Nat224.create(); Mod.invert(SecP224R1Field.P, ((SecP224R1FieldElement)b).x, z); SecP224R1Field.multiply(z, x, z); return new SecP224R1FieldElement(z); }
public ECFieldElement divide(ECFieldElement b) { // return multiply(b.invert()); int[] z = Nat224.create(); Mod.invert(SecP224R1Field.P, ((SecP224R1FieldElement)b).x, z); SecP224R1Field.multiply(z, x, z); return new SecP224R1FieldElement(z); }
/** * return a sqrt root - the routine verifies that the calculation returns the right value - if * none exists it returns null. */ public ECFieldElement sqrt() { int[] c = this.x; if (Nat224.isZero(c) || Nat224.isOne(c)) { return this; } int[] nc = Nat224.create(); SecP224R1Field.negate(c, nc); int[] r = Mod.random(SecP224R1Field.P); int[] t = Nat224.create(); if (!isSquare(c)) { return null; } while (!trySqrt(nc, r, t)) { SecP224R1Field.addOne(r, r); } SecP224R1Field.square(t, r); return Nat224.eq(c, r) ? new SecP224R1FieldElement(t) : null; }