示例#1
0
        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);
        }
示例#2
0
        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));
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }