예제 #1
0
        public void PPSerializationTest()
        {
            int             paramIndex = 4;
            ProofParameters original   = new ProofParameters(StaticHelperClass.ParameterArray[paramIndex]);

            DLRepOfGroupElement [] witnesses = new DLRepOfGroupElement[10];
            GroupElement[]         bases     = new GroupElement[5] {
                original.Generators[0],
                original.Generators[1],
                original.Generators[2],
                original.Generators[3],
                original.Generators[4]
            };
            for (int i = 0; i < 10; ++i)
            {
                FieldZqElement[] exponents = StaticHelperClass.GenerateRandomExponents(5, paramIndex);
                witnesses[i] = new DLRepOfGroupElement(bases, exponents, original.Group);
            }
            original.setProverParameters(witnesses);

            string          serializedParams = CryptoSerializer.Serialize <ProofParameters>(original);
            ProofParameters deserialized     = CryptoSerializer.Deserialize <ProofParameters>(serializedParams);

            Assert.AreEqual(original.ProverParameters, deserialized.ProverParameters, "ProverParameters field improperly deserialized");
            StaticHelperClass.AssertArraysAreEqual(original.Generators, deserialized.Generators, "Generators.");
            StaticHelperClass.AssertArraysAreEqual(original.PublicValues, deserialized.PublicValues, "Public Values.");
            StaticHelperClass.AssertArraysAreEqual(original.Witnesses, deserialized.Witnesses, "Witnesses");
            Assert.AreEqual(original.Group.G, deserialized.Group.G, "Group.group.g");
        }
 public static void AssertProofParametersAreEqual(ProofParameters A, ProofParameters B, string msg)
 {
     Assert.AreEqual(A.ProverParameters, B.ProverParameters, msg + " Prover parameters");
     Assert.AreEqual(A.GetType(), B.GetType(), msg + " different classes");
     Assert.AreEqual(A.Group.GroupName, B.Group.GroupName, msg + " Groups");
     Assert.AreEqual(A.Group.Q, B.Group.Q, msg + " Q");
     StaticHelperClass.AssertArraysAreEqual(A.Generators, B.Generators, msg + " Generators");
     StaticHelperClass.AssertArraysAreEqual <GroupElement>(A.PublicValues, B.PublicValues, msg + " Public values");
     StaticHelperClass.AssertArraysAreEqual <DLRepOfGroupElement>(A.Witnesses, B.Witnesses, msg + " Witnesses");
 }
예제 #3
0
        public void PPVerifyFailsTest()
        {
            CryptoParameters crypto = new CryptoParameters(null, null);
            ProofParameters  pp     = new ProofParameters(crypto);

            Assert.IsFalse(pp.Verify());
            pp.setProverParameters(null);
            Assert.IsFalse(pp.Verify());
            pp.setVerifierParameters(null);
            Assert.IsFalse(pp.Verify());

            pp.setVerifierParameters(new GroupElement[0]);
            Assert.IsTrue(pp.Verify());

            pp.setProverParameters(new DLRepOfGroupElement[0]);
            Assert.IsTrue(pp.Verify());
        }