Beispiel #1
0
        private static GroupElementP4 Select(int pos, sbyte b)
        {
            GroupElementP4 t;

            GroupElementP4 minust;
            var            bnegative = Negative(b);
            var            babs      = (byte)(b - ((-bnegative & b) << 1));

            t = new GroupElementP4
            {
                YplusX  = FieldElementOperations.Set1(),
                YminusX = FieldElementOperations.Set1(),
                XY2D    = FieldElementOperations.Set0()
            };

            var table = LookupTables.Base[pos];

            Cmov(ref t, ref table[0], Equal(babs, 1));
            Cmov(ref t, ref table[1], Equal(babs, 2));
            Cmov(ref t, ref table[2], Equal(babs, 3));
            Cmov(ref t, ref table[3], Equal(babs, 4));
            Cmov(ref t, ref table[4], Equal(babs, 5));
            Cmov(ref t, ref table[5], Equal(babs, 6));
            Cmov(ref t, ref table[6], Equal(babs, 7));
            Cmov(ref t, ref table[7], Equal(babs, 8));
            minust.YplusX  = t.YminusX;
            minust.YminusX = t.YplusX;
            minust.XY2D    = FieldElementOperations.Negate(ref t.XY2D);
            Cmov(ref t, ref minust, bnegative);

            return(t);
        }