public ECFieldElement multiply(ECFieldElement b) { long[] z = Nat576.create64(); SecT571Field.multiply(x, ((SecT571FieldElement)b).x, z); return new SecT571FieldElement(z); }
SecT571Field.multiply(AU1, AU2, X3.x);
if (Z1Precomp != null) SecT571Field.multiply(Z3.x, Z1Sq, Z3.x);
multiply(t0, t1, t0); squareN(t0, 2, t1); multiply(t0, t1, t0); multiply(t0, t2, t0); multiply(t0, t1, t0); squareN(t1, 5, t1); multiply(t0, t1, t0); multiply(t0, t1, t2); multiply(t0, t1, t0); multiply(t0, t1, t0); squareN(t1, 60, t1); multiply(t0, t1, t0); multiply(t0, t1, t0); squareN(t1, 180, t1); multiply(t0, t1, t0); multiply(t0, t2, z);
SecT571Field.multiply(AU1, AU2, X3.x);
public static void sqrt(long[] x, long[] z) { long[] evn = Nat576.create64(), odd = Nat576.create64(); int pos = 0; for (int i = 0; i < 4; ++i) { long u0 = Interleave.unshuffle(x[pos++]); long u1 = Interleave.unshuffle(x[pos++]); evn[i] = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); odd[i] = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); } { long u0 = Interleave.unshuffle(x[pos]); evn[4] = (u0 & 0x00000000FFFFFFFFL); odd[4] = (u0 >>> 32); } multiply(odd, ROOT_Z, z); add(z, evn, z); }