예제 #1
0
        public override void Load(Stream stream)
        {
            byte[] encryptedData;
            using (MemoryStream memoryStream = new MemoryStream())
            {
                stream.CopyTo(memoryStream);
                encryptedData = memoryStream.ToArray();
            }

            var base64Array = Encoding.UTF8.GetString(encryptedData).Split('.');

            var sessionKeyBlob = Convert.FromBase64String(base64Array[0]);

            var encryptedConfigData = Convert.FromBase64String(base64Array[1]);

            var sessionKey = SessionKeyContainer.FromBlob(sessionKeyBlob);

            var hybridDecryption = HybridDecryption.Create(_containerName, _signatureKey);

            var data = hybridDecryption.DecryptData(sessionKey, encryptedConfigData);

            using (MemoryStream memoryStream = new MemoryStream(data))
            {
                var configurationFileParser = new JsonConfigurationFileParser();
                this.Data = configurationFileParser.Parse(memoryStream);
            }
        }
        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));
        }
예제 #3
0
        public WhenDecryptingData()
        {
            _files = Directory.EnumerateFiles(WellKnownPaths.RSA_MACHINEKEYS)
                     .ToArray();

            var currentUser = WindowsIdentity.GetCurrent()
                              .Name;

            var signatureContainer  = "signature";
            var encryptionContainer = "encryption";

            var encryptionKey = RSAEncryption.CreateSecureContainer(encryptionContainer, currentUser);
            var signingKey    = RSAEncryption.CreateSecureContainer(signatureContainer, currentUser);

            var signaturePublicKey  = signingKey.ExportKey(false);
            var encryptionPublicKey = encryptionKey.ExportKey(false);

            _hybridEncryption = HybridEncryption.Create(encryptionPublicKey, signatureContainer);
            _hybridDecryption = HybridDecryption.Create(encryptionContainer, signaturePublicKey);
        }
        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));
        }