public async void TestSignAndVerifyUsingBIP39Key() { var vlt = await TestUtil.InitVaultWithOrgToken(); var vault = await vlt.CreateVault(new provide.Model.Vault.Vault { Name = "test vault" }); var orgName = "test org"; var hdWallet = await vlt.CreateVaultKey(vault.Id.ToString(), new Key { Type = "asymmetric", Usage = "sign/verify", Spec = "BIP39", Name = $"{orgName} BIP39 keypair", Description = $"{orgName} BIP39 keypair" }); var message = "02a285b1a277f7602dc115a3bf627a8b7603a4a1be9a72b3ab0284878afe443d"; // secp256k1 signing requests must send 32-byte `message` (ie hash the data first...) var hdWalletReqOptions = new Dictionary <string, object> { { "coin", 60 }, // ETH }; // sign and assert var signReq = new SignMessageRequest { Message = message, Options = new Dictionary <string, object> { { "hdwallet", hdWalletReqOptions } } }; var signedMessage = await vlt.SignMessage(vault.Id.ToString(), hdWallet.Id.ToString(), signReq); Assert.NotNull(signedMessage.Signature); Assert.NotEmpty(signedMessage.Signature); // verify and assert var verificationReq = new SignatureVerificationRequest { Message = message, Signature = signedMessage.Signature, Options = new Dictionary <string, object> { { "hdwallet", hdWalletReqOptions } } }; var verifiedMessage = await vlt.VerifySignature(vault.Id.ToString(), hdWallet.Id.ToString(), verificationReq); Assert.True(verifiedMessage.Verified); }
public async Task <bool> Verify(Guid vaultId, Guid keyId, string message, string signature) { if (_logger.IsDebug) { _logger.Debug($"Verifying a message with the key {keyId} from the vault {vaultId}"); } SignatureVerificationRequest request = new SignatureVerificationRequest(); request.Message = message; request.Signature = signature; SignatureVerificationResponse response = await _vaultService.VerifySignature( vaultId.ToString(), keyId.ToString(), request); return(response.Verified); }
public async void TestSignAndVerifyMessage() { var message = "02a285b1a277f7602dc115a3bf627a8b7603a4a1be9a72b3ab0284878afe443d"; // secp256k1 signing requests must send 32-byte `message` (ie hash the data first...) var token = await TestUtil.CreateIdentForTestUser(); var vlt = Vault.InitVault(token); provide.Model.Vault.Vault vault = await vlt.CreateVault( new provide.Model.Vault.Vault { Name = "TestVault" } ); var generatedKey = await vlt.CreateVaultKey( vault.Id.ToString(), new Key { Type = "asymmetric", Usage = "sign/verify", Spec = "secp256k1", Name = "TestKey", Description = "Key used to test signing" } ); // sign and assert var signReq = new SignMessageRequest { Message = message, Options = new Dictionary <string, object>() }; var signedMessage = await vlt.SignMessage(vault.Id.ToString(), generatedKey.Id.ToString(), signReq); Assert.NotNull(signedMessage.Signature); Assert.NotEmpty(signedMessage.Signature); // verify and assert var verificationReq = new SignatureVerificationRequest { Message = message, Signature = signedMessage.Signature, Options = new Dictionary <string, object>() }; var verifiedMessage = await vlt.VerifySignature(vault.Id.ToString(), generatedKey.Id.ToString(), verificationReq); Assert.True(verifiedMessage.Verified); }
// VerifySignature verifies that a message was previously signed with a given key public async Task <SignatureVerificationResponse> VerifySignature(string vaultID, string keyID, SignatureVerificationRequest verificationReq) { var uri = $"vaults/{vaultID}/keys/{keyID}/verify"; return(await this.Post <SignatureVerificationResponse>(uri, verificationReq)); }