From 550119a53a15ffdf44dc016637ada9b7d96d32c5 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Wed, 19 Oct 2016 17:17:28 -0600 Subject: [PATCH] Modified the ICryptographyProvider interface to require getters for the cipher engine and mode using their enum types --- .../Security/AeadCryptographyProviderTests.cs | 32 +++++++++++++++++++ mRemoteV1/Security/ICryptographyProvider.cs | 4 ++- .../AeadCryptographyProvider.cs | 18 ++++++++++- .../LegacyRijndaelCryptographyProvider.cs | 5 +-- 4 files changed, 55 insertions(+), 4 deletions(-) diff --git a/mRemoteNGTests/Security/AeadCryptographyProviderTests.cs b/mRemoteNGTests/Security/AeadCryptographyProviderTests.cs index b707fa8c..6cf10853 100644 --- a/mRemoteNGTests/Security/AeadCryptographyProviderTests.cs +++ b/mRemoteNGTests/Security/AeadCryptographyProviderTests.cs @@ -81,5 +81,37 @@ namespace mRemoteNGTests.Security ActualValueDelegate decryptMethod = () => _cryptographyProvider.Decrypt(cipherText, "wrongKey".ConvertToSecureString()); Assert.That(decryptMethod, Throws.TypeOf()); } + + [TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))] + public void GetCipherEngine(BlockCipherEngines engine, BlockCipherModes mode) + { + var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(engine, mode); + Assert.That(cryptoProvider.CipherEngine, Is.EqualTo(engine)); + } + + [TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))] + public void GetCipherMode(BlockCipherEngines engine, BlockCipherModes mode) + { + var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(engine, mode); + Assert.That(cryptoProvider.CipherMode, Is.EqualTo(mode)); + } + + + private class TestCaseSources + { + public static IEnumerable AllEngineAndModeCombos + { + get + { + foreach (var engine in Enum.GetValues(typeof(BlockCipherEngines))) + { + foreach (var mode in Enum.GetValues(typeof(BlockCipherModes))) + { + yield return new TestCaseData(engine, mode); + } + } + } + } + } } } \ No newline at end of file diff --git a/mRemoteV1/Security/ICryptographyProvider.cs b/mRemoteV1/Security/ICryptographyProvider.cs index 54eb8d19..6dfa3b6c 100644 --- a/mRemoteV1/Security/ICryptographyProvider.cs +++ b/mRemoteV1/Security/ICryptographyProvider.cs @@ -6,7 +6,9 @@ namespace mRemoteNG.Security { int BlockSizeInBytes { get; } - string CipherEngine { get; } + BlockCipherEngines CipherEngine { get; } + + BlockCipherModes CipherMode { get; } string Encrypt(string plainText, SecureString encryptionKey); diff --git a/mRemoteV1/Security/SymmetricEncryption/AeadCryptographyProvider.cs b/mRemoteV1/Security/SymmetricEncryption/AeadCryptographyProvider.cs index abccacf5..9e08c65f 100644 --- a/mRemoteV1/Security/SymmetricEncryption/AeadCryptographyProvider.cs +++ b/mRemoteV1/Security/SymmetricEncryption/AeadCryptographyProvider.cs @@ -38,7 +38,23 @@ namespace mRemoteNG.Security.SymmetricEncryption public int BlockSizeInBytes => _aeadBlockCipher.GetBlockSize(); - public string CipherEngine => _aeadBlockCipher.AlgorithmName; + public BlockCipherEngines CipherEngine + { + get + { + var cipherEngine = _aeadBlockCipher.AlgorithmName.Split('/')[0]; + return (BlockCipherEngines)Enum.Parse(typeof(BlockCipherEngines), cipherEngine); + } + } + + public BlockCipherModes CipherMode + { + get + { + var cipherMode = _aeadBlockCipher.AlgorithmName.Split('/')[1]; + return (BlockCipherModes)Enum.Parse(typeof(BlockCipherModes), cipherMode); + } + } public AeadCryptographyProvider() { diff --git a/mRemoteV1/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs b/mRemoteV1/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs index 8ebd4034..dee1203d 100644 --- a/mRemoteV1/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs +++ b/mRemoteV1/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs @@ -13,11 +13,12 @@ namespace mRemoteNG.Security.SymmetricEncryption { public int BlockSizeInBytes { get; } - public string CipherEngine { get; } + public BlockCipherEngines CipherEngine { get; } + + public BlockCipherModes CipherMode { get; } public LegacyRijndaelCryptographyProvider() { - CipherEngine = "Rijndael"; BlockSizeInBytes = 16; }