public void VerifyThrowsIfInvalidSignature() { var blsKeyPair = BlsKeyPair.GenerateG2(); var bbsKeyPair = blsKeyPair.GetBbsKey(1); Assert.Throws <BbsException>(() => Service.Verify(new VerifyRequest(blsKeyPair, Array.Empty <byte>(), new[] { "message_0" })), "Signature cannot be empty array"); }
public void CreateBbsKeyFromBlsSecretKey() { var secretKey = BlsKeyPair.GenerateG2(); var publicKey = secretKey.GetBbsKey(1); Assert.NotNull(publicKey); Assert.AreEqual(196, publicKey.PublicKey.Length); }
public void SignMultipleeMessages() { var keyPair = BlsKeyPair.GenerateG2(); var signature = Service.Sign(new SignRequest(keyPair, new[] { "message_1", "message_2" })); Assert.NotNull(signature); Assert.AreEqual(BbsSignatureService.SignatureSize, signature.Length); }
public void SignSingleMessageUsingApi() { var myKey = BlsKeyPair.GenerateG2(); var signature = Service.Sign(new SignRequest(myKey, new[] { "message" })); Assert.NotNull(signature); Assert.AreEqual(signature.Length, NativeMethods.bbs_signature_size()); }
public void SignAndVerifyDifferentKeys() { var keyPair = BlsKeyPair.GenerateG2(); var messages = new[] { "message_1", "message_2" }; var signature = Service.Sign(new SignRequest(keyPair, messages)); var result = Service.Verify(new VerifyRequest(keyPair, signature, messages)); Assert.True(result); }
public void GenerateBlsKeyWithoutSeed() { var blsKeyPair = BlsKeyPair.GenerateG2(); var dPublicKey = blsKeyPair.PublicKey; Assert.NotNull(blsKeyPair); Assert.NotNull(dPublicKey); Assert.NotNull(blsKeyPair.SecretKey); Assert.AreEqual(96, dPublicKey.Length); Assert.AreEqual(32, blsKeyPair.SecretKey.Length); }
public void GenerateG2KeyWithSeed() { var seed = "my seed"; var actual = BlsKeyPair.GenerateG2(seed); Assert.NotNull(actual); Assert.NotNull(actual.SecretKey); Assert.NotNull(actual.PublicKey); Assert.True(actual.IsG2()); Assert.False(actual.IsG1()); Assert.AreEqual(BlsKeyPair.SecretKeySize, actual.SecretKey.Length); Assert.AreEqual(BlsKeyPair.PublicKeyG2Size, actual.PublicKey.Length); }
public void CreateBbsKeyFromBlsPublicKey() { var blsKeypair = BlsKeyPair.GenerateG2(); var bbsKeyPair = new BlsKeyPair(blsKeypair.PublicKey.ToArray()); Assert.IsNull(bbsKeyPair.SecretKey); var publicKey = bbsKeyPair.GetBbsKey(1); Assert.NotNull(publicKey); Assert.NotNull(bbsKeyPair.PublicKey); Assert.IsNull(bbsKeyPair.SecretKey); Assert.AreEqual(196, publicKey.PublicKey.Length); Assert.AreEqual(32, blsKeypair.SecretKey.Length); }
public void BlindCommitmentSingleMessageUsingApi() { var myKey = BlsKeyPair.GenerateG2(); var publicKey = myKey.GetBbsKey(1); var commitment = Service.CreateBlindedCommitment(new CreateBlindedCommitmentRequest( publicKey: publicKey, messages: new[] { new IndexedMessage { Index = 0, Message = "message_0" } }, nonce: new byte[] { 1, 2, 3 })); Assert.NotNull(commitment); Assert.NotNull(commitment.BlindingFactor); Assert.NotNull(commitment.BlindSignContext); Assert.NotNull(commitment.Commitment); }
public async Task SignVerifiableCredential() { var keyPair = BlsKeyPair.GenerateG2(); var document = Utilities.LoadJson("Data/test_vc.json"); var signedDocument = await LdSignatures.SignAsync(document, new ProofOptions { Suite = new BbsBlsSignature2020 { KeyPair = keyPair, VerificationMethod = "did:example:alice#key-1" }, Purpose = new AssertionMethodPurpose() }); signedDocument.Should().NotBeNull(); signedDocument["proof"].Should().NotBeNull(); signedDocument["proof"]["proofValue"].Should().NotBeNull(); }
public void BlindSignSingleMessageUsingApi() { var myKey = BlsKeyPair.GenerateG2(); var publicKey = myKey.GetBbsKey(2); var messages = new[] { new IndexedMessage { Index = 0, Message = "message_0" }, new IndexedMessage { Index = 1, Message = "message_1" } }; var nonce = new byte[] { 1, 2, 3 }; var commitment = Service.CreateBlindedCommitment(new CreateBlindedCommitmentRequest(publicKey, messages, nonce)); var blindSign = Service.BlindSign(new BlindSignRequest(myKey, publicKey, commitment.Commitment.ToArray(), messages)); Assert.NotNull(blindSign); }
public void FullDemoTest() { var key = BlsKeyPair.GenerateG2(); var publicKey = key.GetBbsKey(5); var nonce = new byte[] { 1, 2, 3 }; var messages = new[] { "message_1", "message_2", "message_3", "message_4", "message_5" }; { // Sign messages var signature = Service.Sign(new SignRequest(key, messages)); Assert.NotNull(signature); Assert.AreEqual(BbsSignatureService.SignatureSize, signature.Length); // Verify messages var verifySignatureResult = Service.Verify(new VerifyRequest(key, signature, messages)); Assert.True(verifySignatureResult); // Create proof var proofMessages1 = new[] { new ProofMessage { Message = messages[0], ProofType = ProofMessageType.Revealed }, new ProofMessage { Message = messages[1], ProofType = ProofMessageType.HiddenProofSpecificBlinding }, new ProofMessage { Message = messages[2], ProofType = ProofMessageType.Revealed }, new ProofMessage { Message = messages[3], ProofType = ProofMessageType.Revealed }, new ProofMessage { Message = messages[4], ProofType = ProofMessageType.HiddenProofSpecificBlinding } }; var proofResult = Service.CreateProof(new CreateProofRequest(publicKey, proofMessages1, signature, null, nonce)); Assert.NotNull(proofResult); // Verify proof of revealed messages var verifyResult1 = Service.VerifyProof(new VerifyProofRequest(publicKey, proofResult, proofMessages1.Where(x => x.ProofType == ProofMessageType.Revealed).Select(x => x.Message).ToArray(), nonce)); Assert.IsTrue(verifyResult1); } // Create blinded commitment var blindedMessages = new[] { new IndexedMessage { Index = 0, Message = messages[0] } }; var commitment = Service.CreateBlindedCommitment(new CreateBlindedCommitmentRequest(publicKey, blindedMessages, nonce)); Assert.NotNull(commitment); // Verify blinded commitment var verifyResult = Service.VerifyBlindedCommitment(new VerifyBlindedCommitmentRequest(publicKey, commitment.BlindSignContext.ToArray(), new [] { 0u }, nonce)); Assert.IsTrue(verifyResult); // Blind sign var messagesToSign = new[] { new IndexedMessage { Index = 1, Message = messages[1] }, new IndexedMessage { Index = 2, Message = messages[2] }, new IndexedMessage { Index = 3, Message = messages[3] }, new IndexedMessage { Index = 4, Message = messages[4] } }; var blindedSignature = Service.BlindSign(new BlindSignRequest(key, publicKey, commitment.Commitment.ToArray(), messagesToSign)); Assert.NotNull(blindedSignature); Assert.AreEqual(BbsSignatureService.BlindSignatureSize, blindedSignature.Length); // Unblind signature var unblindedSignature = Service.UnblindSignature(new UnblindSignatureRequest(blindedSignature, commitment.BlindingFactor.ToArray())); Assert.NotNull(unblindedSignature); Assert.AreEqual(BbsSignatureService.SignatureSize, unblindedSignature.Length); // Verify signature var verifyUnblindedSignatureResult = Service.Verify(new VerifyRequest(key, unblindedSignature, messages)); Assert.True(verifyUnblindedSignatureResult); // Create proof var proofMessages = new[] { new ProofMessage { Message = messages[0], ProofType = ProofMessageType.Revealed }, new ProofMessage { Message = messages[1], ProofType = ProofMessageType.Revealed }, new ProofMessage { Message = messages[2], ProofType = ProofMessageType.HiddenExternalBlinding }, new ProofMessage { Message = messages[3], ProofType = ProofMessageType.HiddenExternalBlinding }, new ProofMessage { Message = messages[4], ProofType = ProofMessageType.HiddenExternalBlinding } }; var proof = Service.CreateProof(new CreateProofRequest( publicKey: publicKey, messages: proofMessages, signature: unblindedSignature, blindingFactor: commitment.BlindingFactor.ToArray(), nonce: nonce)); Assert.NotNull(proof); Assert.True(proof.Length > 0); // Verify proof var verifyProofMessages = proofMessages .Where(x => x.ProofType == ProofMessageType.Revealed) .Select(x => x.Message) .ToArray(); var verifyProofResult = Service.VerifyProof(new VerifyProofRequest(publicKey, proof, verifyProofMessages, nonce)); Assert.IsTrue(verifyProofResult); var messageCount = Service.GetTotalMessageCount(proof); Assert.AreEqual(5, messageCount); }