public static void HalfTrace(ulong[] x, ulong[] z) { ulong[] tt = Nat576.CreateExt64(); Nat576.Copy64(x, z); for (int i = 1; i < 571; i += 2) { ImplSquare(z, tt); Reduce(tt, z); ImplSquare(z, tt); Reduce(tt, z); AddTo(x, z); } }
public override ECLookupTable CreateCacheSafeLookupTable(ECPoint[] points, int off, int len) { ulong[] table = new ulong[len * SECT571K1_FE_LONGS * 2]; { int pos = 0; for (int i = 0; i < len; ++i) { ECPoint p = points[off + i]; Nat576.Copy64(((SecT571FieldElement)p.RawXCoord).x, 0, table, pos); pos += SECT571K1_FE_LONGS; Nat576.Copy64(((SecT571FieldElement)p.RawYCoord).x, 0, table, pos); pos += SECT571K1_FE_LONGS; } } return(new SecT571K1LookupTable(this, table, len)); }