示例#1
0
        public void TestAggregateCommitmentsEmptyCommitments()
        {
            var  signatureService = new MultiSignature(_sepSecp256K1);
            long bitmap           = 3;
            var  commitments      = new List <byte[]>();

            var exception = Assert.Throws <ArgumentOutOfRangeException>(() => signatureService.AggregateCommitments(commitments, bitmap));

            Console.WriteLine(exception.Message);
            Assert.IsTrue(exception.Message.StartsWith("[commitments] cannot be less than or equal to 0."));
        }
示例#2
0
        public void TestAggregateCommitmentsNullCommitments()
        {
            var           signatureService = new MultiSignature(_sepSecp256K1);
            long          bitmap           = 3;
            List <byte[]> commitments      = null;

            var exception =
                // ReSharper disable once ExpressionIsAlwaysNull
                Assert.Throws <ArgumentNullException>(() => signatureService.AggregateCommitments(commitments, bitmap));

            Console.WriteLine(exception.Message);
            Assert.IsTrue(exception.Message.StartsWith("[commitments] cannot be Null."));
        }
示例#3
0
        public void TestAggregatedCommitment()
        {
            var  signatureService = new MultiSignature(_sepSecp256K1);
            long bitmap           = 0b111;
            var  commitments      = new List <byte[]>
            {
                "02181b4df800671642e3df9a953a29a4f571acc1bf0714ed5ae714a9804d97079f".ToByteArray(),
                "02e8196913323fbb7a34d9455b778e877e1d1fa0205b5949504e55a2d999931366".ToByteArray(),
                "02ef67409f09053060e79d8ad5b1fe60690b5eaa35b67f071ca111a0a7edeb6b38".ToByteArray()
            };


            Assert.AreEqual("02534d4371d6ea9f8b856a632e4e31d784eec9120b3252080702d872c696012289",
                            signatureService.AggregateCommitments(commitments, bitmap).ToHexString());
        }
示例#4
0
        public void TestVerifySignatureShareOk()
        {
            var signatureService  = new MultiSignature(_sepSecp256K1);
            var signers           = new List <byte[]>();
            var commitmentSecrets = new List <byte[]>();
            var commitments       = new List <byte[]>();

            var alice = new Participant("Alice");
            var bob   = new Participant("Bob");
            var carol = new Participant("Carol");

            long bitmap  = 0;
            var  message = "The quick brown fox jumps over the lazy dog.".ToHexEncodedByteArray();

            signers.Add(alice.PublicKey);
            signers.Add(bob.PublicKey);
            signers.Add(carol.PublicKey);

            for (var i = 0; i < signers.Count; i++)
            {
                bitmap = (bitmap << 1) | 1;
                commitmentSecrets.Add(signatureService.ComputeCommitmentSecret());
                commitments.Add(signatureService.ComputeCommitment(commitmentSecrets[i]));
            }

            var aggregatedCommitment = signatureService.AggregateCommitments(commitments, bitmap);
            var challenge            =
                signatureService.ComputeChallenge(signers, alice.PublicKey, aggregatedCommitment, message, bitmap);
            var signature = signatureService.ComputeSignatureShare(challenge, alice.PrivateKey, commitmentSecrets[0]);

            Assert.IsTrue(signatureService.VerifySignatureShare(
                              signers,
                              alice.PublicKey,
                              signature,
                              aggregatedCommitment,
                              commitments[0],
                              message,
                              bitmap));
        }
示例#5
0
        public void TestComputeChallengeEmptyPublicKeys()
        {
            var           signatureService = new MultiSignature(_sepSecp256K1);
            long          bitmap           = 0b111;
            List <byte[]> publicKeys       = new List <byte[]>();

            var keyPair     = new Participant("Alice");
            var publicKey   = keyPair.PublicKey;
            var commitments = new List <byte[]>
            {
                "02181b4df800671642e3df9a953a29a4f571acc1bf0714ed5ae714a9804d97079f".ToByteArray(),
                "02e8196913323fbb7a34d9455b778e877e1d1fa0205b5949504e55a2d999931366".ToByteArray(),
                "02ef67409f09053060e79d8ad5b1fe60690b5eaa35b67f071ca111a0a7edeb6b38".ToByteArray()
            };

            var aggregatedCommitment = signatureService.AggregateCommitments(commitments, bitmap);

            var exception = Assert.Throws <ArgumentOutOfRangeException>(() =>
                                                                        signatureService.ComputeChallenge(publicKeys, publicKey, aggregatedCommitment, "hello".ToHexEncodedByteArray(), bitmap));

            Console.WriteLine(exception.Message);
            Assert.IsTrue(exception.Message.StartsWith("[signers] cannot be less than or equal to 0."));
        }