public async Task EncryptAndDecrypt_UsingBrainKeys() { Func <TokenContext, Task <string> > tokenCallback = (c) => { var virgilCrypto = new VirgilCrypto(); var signer = new VirgilAccessTokenSigner(); var apiKey = virgilCrypto.ImportPrivateKey( Bytes.FromString(AppSettings.Get.ApiKey, StringEncoding.BASE64)); var generator = new JwtGenerator(AppSettings.Get.AppId, apiKey, AppSettings.Get.ApiKeyId, TimeSpan.FromDays(1), signer); var jwt = generator.GenerateToken("BRAINKEY_CLIENT"); return(Task.FromResult(jwt.ToString())); }; var brainKey = BrainKey.Initialize(tokenCallback); var keyPair1 = await brainKey.GenerateKeyPair("some password"); await Task.Delay(TimeSpan.FromSeconds(2)); var keyPair2 = await brainKey.GenerateKeyPair("some password"); await Task.Delay(TimeSpan.FromSeconds(2)); var crypto = new VirgilCrypto(); var plaindata = GetRandom.Bytes(128); var chipherdata = crypto.SignThenEncrypt(plaindata, keyPair1.PrivateKey, keyPair2.PublicKey); var originaldata = crypto.DecryptThenVerify(chipherdata, keyPair2.PrivateKey, keyPair1.PublicKey); originaldata.Should().BeEquivalentTo(plaindata); }
public void DecryptThenVerifyForMultipleRecipients_Should_BeEqualToTestData() { var testData = compatibilityData["sign_then_encrypt_multiple_recipients"]; var privateKeysBase64 = testData["private_keys"].ToObject <string[]>(); var privateKeys = ((string[])privateKeysBase64).Select(x => cryptoSHA256.ImportPrivateKey(Bytes.FromString(x, StringEncoding.BASE64))); var publicKeys = privateKeys.Select(x => cryptoSHA256.ExtractPublicKey(x)).ToArray(); var signerPublicKey = publicKeys.First(); var data = Bytes.FromString((string)testData["original_data"], StringEncoding.BASE64); var cipherData = Bytes.FromString((string)testData["cipher_data"], StringEncoding.BASE64); foreach (var privateKey in privateKeys) { Assert.IsTrue(cryptoSHA256.DecryptThenVerify(cipherData, privateKey, signerPublicKey).SequenceEqual(data)); } }
public void SignAndEncryptData_PublicAndPrivateKeysGiven_ShouldDecryptAndVerifyDataSuccessfully() { var crypto = new VirgilCrypto(); var alice = crypto.GenerateKeys(); var bob = crypto.GenerateKeys(); var originalData = Encoding.UTF8.GetBytes(IntegrationHelper.RandomText); var cipherData = crypto.SignThenEncrypt(originalData, alice.PrivateKey, bob.PublicKey); var decryptedData = crypto.DecryptThenVerify(cipherData, bob.PrivateKey, alice.PublicKey); decryptedData.ShouldAllBeEquivalentTo(originalData); }
public void DecryptThenVerify_Should_BeEqualToTestData() { var crypto = new VirgilCrypto() { UseSHA256Fingerprints = true }; var testData = compatibilityData["sign_then_encrypt_single_recipient"]; var privateKey = crypto.ImportPrivateKey(Bytes.FromString(testData["private_key"], StringEncoding.BASE64)); var publicKey = crypto.ExtractPublicKey(privateKey); var data = Bytes.FromString(testData["original_data"], StringEncoding.BASE64); var cipherData = Bytes.FromString(testData["cipher_data"], StringEncoding.BASE64); Assert.AreEqual(crypto.DecryptThenVerify(cipherData, privateKey, publicKey), data); }