public virtual ECPoint Lookup(int index)
            {
                ulong[] x   = Nat576.Create64(), y = Nat576.Create64();
                int     pos = 0;

                for (int i = 0; i < m_size; ++i)
                {
                    ulong MASK = (ulong)(long)(((i ^ index) - 1) >> 31);

                    for (int j = 0; j < SECT571R1_FE_LONGS; ++j)
                    {
                        x[j] ^= m_table[pos + j] & MASK;
                        y[j] ^= m_table[pos + SECT571R1_FE_LONGS + j] & MASK;
                    }

                    pos += (SECT571R1_FE_LONGS * 2);
                }

                return(m_outer.CreateRawPoint(new SecT571FieldElement(x), new SecT571FieldElement(y), false));
            }
Beispiel #2
0
 private ECPoint CreatePoint(ulong[] x, ulong[] y)
 {
     return(m_outer.CreateRawPoint(new SecT571FieldElement(x), new SecT571FieldElement(y), SECT571R1_AFFINE_ZS, false));
 }