public void GivenEncryptingData_WhenDecryptingData_FromImportedKey_ThenDataIsDecrypted()
        {
            var currentUser = WindowsIdentity.GetCurrent()
                              .Name;

            var target             = new RSAEncryption("target", currentUser);
            var signatureContainer = new RSAEncryption("signatureContainer", currentUser);
            var signaturePublicKey = signatureContainer.ExportKey(false);
            var targetPublicKey    = target.ExportKey(false);

            HybridEncryption hybridEncryption = HybridEncryption.CreateEncryption(targetPublicKey, "signatureContainer");
            HybridDecryption hybridDecryption = HybridDecryption.CreateDecryption("target", signaturePublicKey);

            RandomNumberGenerator random = new RNGCryptoServiceProvider();

            var data       = new byte[512];
            var sessionKey = new byte[32];
            var iv         = new byte[16];

            random.GetBytes(sessionKey);
            random.GetBytes(iv);
            random.GetBytes(data);

            (EncryptionSettings key, byte[] encryptedData)encryptedResult = hybridEncryption.EncryptData(sessionKey, data, iv);

            var keyBlob = encryptedResult.key.ExportToBlob();

            var keyFromBlob = EncryptionSettings.FromBlob(keyBlob);

            var decryptedData = hybridDecryption.DecryptData(keyFromBlob, encryptedResult.encryptedData);

            Assert.That(decryptedData, Is.EqualTo(data));
        }
        public void ThenEncryptedFileCanBeDecryptedWithKey()
        {
            var encryptedFile = $"{Guid.NewGuid()}";

            Program.Main(new[] { "encrypt",
                                 $"-{WellKnownCommandArguments.IMPORT_KEY}", _keyFile,
                                 $"-{WellKnownCommandArguments.SIGNATURE_CONTAINER}", _signatureContainerName,
                                 $"-{WellKnownCommandArguments.FILE_PATH}", "appsettings.json",
                                 $"-{WellKnownCommandArguments.ENCRYPTED_FILE_OUT}", encryptedFile });

            var expectedFile = File.ReadAllBytes("appsettings.json");

            var encryptedKey = EncryptionSettings.FromBlob(File.ReadAllBytes("decryptionkey"));

            var encryptedData = File.ReadAllBytes(encryptedFile);

            IHybridDecryption hybridDecryption = HybridDecryption.CreateDecryption(_containerName, File.ReadAllText(_signaturekeyFile));

            var decryptedFile = hybridDecryption.DecryptData(encryptedKey, encryptedData);

            Assert.That(expectedFile, Is.EqualTo(decryptedFile));
        }