Пример #1
0
        public static void secp256k1_ge_set_all_gej_var(Ge[] r, GeJ[] a, int len, EventHandler <Callback> cb)
        {
            var a1   = new Fe[len];
            var len1 = 0;

            for (var index = 0; index < len; ++index)
            {
                if (!a[index].Infinity)
                {
                    a1[len1++] = a[index].Z.Clone();
                }
            }
            var r1 = new Fe[len1];

            Field.InvAllVar(r1, a1, len1);
            var num = 0;

            for (var index = 0; index < len; ++index)
            {
                r[index].Infinity = a[index].Infinity;
                if (!a[index].Infinity)
                {
                    Group.secp256k1_ge_set_gej_zinv(r[index], a[index], r1[num++]);
                }
            }
        }
Пример #2
0
        public static void secp256k1_ge_set_table_gej_var(Ge[] r, GeJ[] a, Fe[] zr, int len)
        {
            var index = len - 1;
            var fe    = new Fe();

            if (len <= 0)
            {
                return;
            }
            Field.Inv(fe, a[index].Z);
            Group.secp256k1_ge_set_gej_zinv(r[index], a[index], fe);
            while (index > 0)
            {
                Field.Mul(fe, fe, zr[index]);
                --index;
                Group.secp256k1_ge_set_gej_zinv(r[index], a[index], fe);
            }
        }
Пример #3
0
        private static void secp256k1_ecmult_odd_multiples_table(int n, GeJ[] prej, Fe[] zr, GeJ a)
        {
            var r1 = new GeJ();

            Group.secp256k1_gej_double_var(r1, a, (Fe)null);
            var b = new Ge();

            b.X        = r1.X.Clone();
            b.Y        = r1.Y.Clone();
            b.Infinity = false;
            var r2 = new Ge();

            Group.secp256k1_ge_set_gej_zinv(r2, a, r1.Z);
            prej[0].X        = r2.X.Clone();
            prej[0].Y        = r2.Y.Clone();
            prej[0].Z        = a.Z.Clone();
            prej[0].Infinity = false;
            zr[0]            = r1.Z.Clone();
            for (var index = 1; index < n; ++index)
            {
                Group.secp256k1_gej_add_ge_var(prej[index], prej[index - 1], b, zr[index]);
            }
            Field.Mul(prej[n - 1].Z, prej[n - 1].Z, r1.Z);
        }