public virtual ECPoint Lookup(int index) { uint[] x = Nat.Create(SECP521R1_FE_INTS), y = Nat.Create(SECP521R1_FE_INTS); int pos = 0; for (int i = 0; i < m_size; ++i) { uint MASK = (uint)(((i ^ index) - 1) >> 31); for (int j = 0; j < SECP521R1_FE_INTS; ++j) { x[j] ^= m_table[pos + j] & MASK; y[j] ^= m_table[pos + SECP521R1_FE_INTS + j] & MASK; } pos += (SECP521R1_FE_INTS * 2); } return(m_outer.CreateRawPoint(new SecP521R1FieldElement(x), new SecP521R1FieldElement(y), false)); }
private ECPoint CreatePoint(uint[] x, uint[] y) { return(m_outer.CreateRawPoint(new SecP521R1FieldElement(x), new SecP521R1FieldElement(y), SECP521R1_AFFINE_ZS, false)); }