예제 #1
0
        public void TestComputeSignatureShareNullPrivateKey()
        {
            var signatureService = new MultiSignature(_sepSecp256K1);

            byte[] challenge        = Digests.Sha3("dummy challenge".ToHexEncodedByteArray());
            byte[] privateKey       = null;
            byte[] commitmentSecret = signatureService.ComputeCommitmentSecret();

            var exception = Assert.Throws <ArgumentNullException>(() =>
                                                                  signatureService.ComputeSignatureShare(challenge, privateKey, commitmentSecret));

            Console.WriteLine(exception.Message);
            Assert.IsTrue(exception.Message.StartsWith("[privateKey] cannot be Null."));
        }
예제 #2
0
        public void TestComputeSignatureShareEmptyCommitmentSecret()
        {
            var signatureService = new MultiSignature(_sepSecp256K1);

            byte[] commitmentSecret = new byte[0];
            byte[] challenge        = Digests.Sha3("dummy challenge".ToHexEncodedByteArray());
            byte[] privateKey       = new Participant("Alice").PrivateKey;

            var exception = Assert.Throws <ArgumentOutOfRangeException>(() =>
                                                                        signatureService.ComputeSignatureShare(challenge, privateKey, commitmentSecret));

            Console.WriteLine(exception.Message);
            Assert.IsTrue(exception.Message.StartsWith("[commitmentSecret] cannot be less than or equal to 0."));
        }
예제 #3
0
        public void TestComputeSignatureShareNullChallenge()
        {
            var signatureService = new MultiSignature(_sepSecp256K1);

            byte[] challenge        = null;
            byte[] privateKey       = new Participant("Alice").PrivateKey;
            byte[] commitmentSecret = signatureService.ComputeCommitmentSecret();

            var exception = Assert.Throws <ArgumentNullException>(() =>
                                                                  signatureService.ComputeSignatureShare(challenge, privateKey, commitmentSecret));

            Console.WriteLine(exception.Message);
            Assert.IsTrue(exception.Message.StartsWith("[challenge] cannot be Null."));
        }
예제 #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));
        }