Example #1
0
        static void TestFr()
        {
            Console.WriteLine("TestFr");
            Fr x = new Fr();

            assert("x.isZero", x.IsZero());
            x.Clear();
            assert("0", x.GetStr(10) == "0");
            assert("0.IzZero", x.IsZero());
            assert("!0.IzOne", !x.IsOne());
            x.SetInt(1);
            assert("1", x.GetStr(10) == "1");
            assert("!1.IzZero", !x.IsZero());
            assert("1.IzOne", x.IsOne());
            x.SetInt(3);
            assert("3", x.GetStr(10) == "3");
            assert("!3.IzZero", !x.IsZero());
            assert("!3.IzOne", !x.IsOne());
            x.SetInt(-5);
            x = -x;
            assert("5", x.GetStr(10) == "5");
            x.SetInt(4);
            x = x * x;
            assert("16", x.GetStr(10) == "16");
            assert("10", x.GetStr(16) == "10");
            Fr y;

            y = x;
            assert("x == y", x.Equals(y));
            x.SetInt(123);
            assert("123", x.GetStr(10) == "123");
            assert("7b", x.GetStr(16) == "7b");
            assert("y != x", !x.Equals(y));
            Console.WriteLine("exception test");
            try {
                x.SetStr("1234567891234x", 10);
                Console.WriteLine("x = {0}", x);
            } catch (Exception e) {
                Console.WriteLine("OK ; expected exception: {0}", e);
            }
            x.SetStr("1234567891234", 10);
            assert("1234567891234", x.GetStr(10) == "1234567891234");
            {
                byte[] buf = x.Serialize();
                y.Deserialize(buf);
                assert("x == y", x.Equals(y));
            }
        }
Example #2
0
        static void TestSS_G2()
        {
            const int n = 5;
            const int k = 3; // can't change because the following loop

            G2[] cVec = new G2[k];
            // init polynomial coefficient
            for (int i = 0; i < k; i++)
            {
                Fr x = new Fr();
                x.SetByCSPRNG();
                cVec[i].SetHashOf(x.GetStr(16));
            }

            Fr[] xVec = new Fr[n];
            G2[] yVec = new G2[n];
            // share cVec[0] with yVec[0], ..., yVec[n-1]
            for (int i = 0; i < n; i++)
            {
                xVec[i].SetHashOf(i.ToString());
                MCL.Share(ref yVec[i], cVec, xVec[i]);
            }
            // recover cVec[0] from xVecSubset and yVecSubset
            Fr[] xVecSubset = new Fr[k];
            G2[] yVecSubset = new G2[k];
            for (int i0 = 0; i0 < n; i0++)
            {
                xVecSubset[0] = xVec[i0];
                yVecSubset[0] = yVec[i0];
                for (int i1 = i0 + 1; i1 < n; i1++)
                {
                    xVecSubset[1] = xVec[i1];
                    yVecSubset[1] = yVec[i1];
                    for (int i2 = i1 + 1; i2 < n; i2++)
                    {
                        xVecSubset[2] = xVec[i2];
                        yVecSubset[2] = yVec[i2];
                        G2 s = new G2();
                        MCL.Recover(ref s, xVecSubset, yVecSubset);
                        assert("Recover", s.Equals(cVec[0]));
                    }
                }
            }
        }