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);
        }
Example #2
0
        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);
        }
Example #4
0
        // 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));
        }