diff --git a/GCryptLib/test/EncryptEqualsDecrypt.cpp b/GCryptLib/test/EncryptEqualsDecrypt.cpp index 9991f8d..4f7d965 100644 --- a/GCryptLib/test/EncryptEqualsDecrypt.cpp +++ b/GCryptLib/test/EncryptEqualsDecrypt.cpp @@ -1,232 +1,222 @@ -/* -#include "CppUnitTest.h" -#include "../GhettoCrypt/Cipher.h" -#include "../GhettoCrypt/Util.h" +#include +#include +#include "Catch2.h" -using namespace Microsoft::VisualStudio::CppUnitTestFramework; -using namespace GhettoCipher; +using namespace Leonetienne::GCrypt; // THESE TESTS ASSUME BLOCK_SIZE == 512 -namespace SimpleTests -{ - TEST_CLASS(EncryptEqualsDecrypt) - { - public: - - // Tests that encrypting a message of exactly BLOCK_SIZE yields the exact message back - TEST_METHOD(SingleBlock_NoPadding) - { - // Instanciate our cipher and supply a key - const Block key = PasswordToKey("1234"); - const Cipher cipher(key); +// Tests that encrypting a message of exactly BLOCK_SIZE yields the exact message back +TEST_CASE(__FILE__"/SingleBlock_NoPadding", "[Encryption/Decryption consistency]") { - // Recode the ascii-string to bits - const Flexblock cleartext_bits = - "1011110011010110000010110001111000111010111101001010100100011101" - "0101110101010010100000110100001000011000111010001001110101111111" - "1110110101100101110001010101011110001010000010111110011011010111" - "1100110100111000000011100101010100110010001110010011000010111001" - "0000010000010000011001111010011110111001000000000110101000110001" - "0110111110110110100000010100000011010001000011100100111001001011" - "1101100100000100010000001011100010010001101111100100101100010001" - "0000011110010110111010110110111110011110011010001100100111110101"; + // Instanciate our cipher and supply a key + const Block key = PasswordToKey("1234"); + const Cipher cipher(key); - // Encrypt our cleartext bits - const Flexblock ciphertext_bits = cipher.Encipher(cleartext_bits); - - // Decipher it again - const Flexblock decryptedBits = cipher.Decipher(ciphertext_bits); + // Recode the ascii-string to bits + const Flexblock cleartext_bits = + "1011110011010110000010110001111000111010111101001010100100011101" + "0101110101010010100000110100001000011000111010001001110101111111" + "1110110101100101110001010101011110001010000010111110011011010111" + "1100110100111000000011100101010100110010001110010011000010111001" + "0000010000010000011001111010011110111001000000000110101000110001" + "0110111110110110100000010100000011010001000011100100111001001011" + "1101100100000100010000001011100010010001101111100100101100010001" + "0000011110010110111010110110111110011110011010001100100111110101"; - // Assert that the decrypted text equals the plaintext - Assert::AreEqual( - cleartext_bits, - decryptedBits - ); - } - - // Tests that encrypting a message of less than BLOCK_SIZE yields the exact message plus zero-padding back - TEST_METHOD(SingleBlock_Padding) - { - // Instanciate our cipher and supply a key - const Block key = PasswordToKey("1234"); - const Cipher cipher(key); + // Encrypt our cleartext bits + const Flexblock ciphertext_bits = cipher.Encipher(cleartext_bits); - // Recode the ascii-string to bits - const Flexblock cleartext_bits = - "1011110011010110000010110001111000111010111101001010100100011101" - "0101110101010010100000110100001000011000111010001001110101111111" - "1110110101100101110001010101011110001010000010111110011011010111" - "1100110100111000000011100101010100110010001110010011000010111001" - "0000010000010000011001111010011110111001000000000110101000110001" - "0110111110110110100000010100000011010001000011100100111001001011" - "1101100100000100"; - - const Flexblock cleartext_bits_EXPECTED_RESULT = - "1011110011010110000010110001111000111010111101001010100100011101" - "0101110101010010100000110100001000011000111010001001110101111111" - "1110110101100101110001010101011110001010000010111110011011010111" - "1100110100111000000011100101010100110010001110010011000010111001" - "0000010000010000011001111010011110111001000000000110101000110001" - "0110111110110110100000010100000011010001000011100100111001001011" - "1101100100000100000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000"; + // Decipher it again + const Flexblock decryptedBits = cipher.Decipher(ciphertext_bits); - // Encrypt our cleartext bits - const Flexblock ciphertext_bits = cipher.Encipher(cleartext_bits); - - // Decipher it again - const Flexblock decryptedBits = cipher.Decipher(ciphertext_bits); - - // Assert that the decrypted text equals the plaintext - Assert::AreEqual( - cleartext_bits_EXPECTED_RESULT, - decryptedBits - ); - } - - // Tests that a decrypted ciphertext equals its plaintrext version, using a cleartext that requires A LOT of blocks - TEST_METHOD(MultiBlock_NoPadding) - { - // Instanciate our cipher and supply a key - const Block key = PasswordToKey("1234"); - const Cipher cipher(key); - - // Recode the ascii-string to bits - const Flexblock cleartext_bits = - "1011110011010110000010110001111000111010111101001010100100011101" - "0101110101010010100000110100001000011000111010001001110101111111" - "1110110101100101110001010101011110001010000010111110011011010111" - "1100110100111000000011100101010100110010001110010011000010111001" - "0000010000010000011001111010011110111001000000000110101000110001" - "0110111110110110100000010100000011010001000011100100111001001011" - "1101100100000100010000001011100010010001101111100100101100010001" - "0000011110010110111010110110111110011110011010001100100111110101" - "1000010010000000000100101011110001000101101101100000010011111011" - "1011111010110100100111100111110011100001111101111110000110001100" - "0001000111000111101110000111011011101010100010100101100111010100" - "0101111110110010110000111111011001101110101101100100100011000100" - "1000110010101001000100001001101000011111101011111100100000100101" - "1100001100111001011111001101000111011101011101000110010110110110" - "0111001010011010010000010110000110010101101100101110111100100011" - "0010111110011100010100000101100101110101101011110100100000110110" - "1001101110101001001111111000010100011100100000101000111101101111" - "0101111011110001101010111010001000111010101111001101100100100100" - "1110110111001100011010110000101000011001011100101100111101110000" - "1010101111011110000111011011011110000111010110110111111010101010" - "0111100101111001010111101000001010100000111010111100111011111001" - "0110111000000110100011011100101101010101101000010010011111100100" - "0010111000001011101110000110010011101001111010100111110111110101" - "1110111000000000101011000100101010000110110111101010011001111010" - "1101011110001110000011010111001100001100101000000101000101000010" - "0101000011011111010010110010000010101100001110011000110111110111" - "1110010101011110111001100010110101101011100111100011101010001011" - "0101110010100110101100111100010000111101111100000111000110110110" - "1001100111000000011010100000011101011000010010011010001011110000" - "1100100111111001001000011100110000011110001100000000010000001001" - "1110000000110010000010011010100011011011000000000111110000110111" - "0101110011001101010110010100011001110110000110010001100110011111"; - - // Encrypt our cleartext bits - const Flexblock ciphertext_bits = cipher.Encipher(cleartext_bits); - - // Decipher it again - const Flexblock decryptedBits = cipher.Decipher(ciphertext_bits); - - // Assert that the decrypted text equals the plaintext - Assert::AreEqual( - cleartext_bits, - decryptedBits - ); - } - - // Tests that a decrypted ciphertext equals its plaintrext version, using a cleartext that requires A LOT of blocks - TEST_METHOD(MultiBlock_Padding) - { - // Instanciate our cipher and supply a key - const Block key = PasswordToKey("1234"); - const Cipher cipher(key); - - // Recode the ascii-string to bits - const Flexblock cleartext_bits = - "1011110011010110000010110001111000111010111101001010100100011101" - "0101110101010010100000110100001000011000111010001001110101111111" - "1110110101100101110001010101011110001010000010111110011011010111" - "1100110100111000000011100101010100110010001110010011000010111001" - "0000010000010000011001111010011110111001000000000110101000110001" - "0110111110110110100000010100000011010001000011100100111001001011" - "1101100100000100010000001011100010010001101111100100101100010001" - "0000011110010110111010110110111110011110011010001100100111110101" - "1000010010000000000100101011110001000101101101100000010011111011" - "1011111010110100100111100111110011100001111101111110000110001100" - "0001000111000111101110000111011011101010100010100101100111010100" - "0101111110110010110000111111011001101110101101100100100011000100" - "1000110010101001000100001001101000011111101011111100100000100101" - "1100001100111001011111001101000111011101011101000110010110110110" - "0111001010011010010000010110000110010101101100101110111100100011" - "0010111110011100010100000101100101110101101011110100100000110110" - "1001101110101001001111111000010100011100100000101000111101101111" - "0101111011110001101010111010001000111010101111001101100100100100" - "1110110111001100011010110000101000011001011100101100111101110000" - "1010101111011110000111011011011110000111010110110111111010101010" - "0111100101111001010111101000001010100000111010111100111011111001" - "0110111000000110100011011100101101010101101000010010011111100100" - "0010111000001011101110000110010011101001111010100111110111110101" - "1110111000000000101011000100101010000110110111101010011001111010" - "1101011110001110000011010111001100001100101000000101000101000010" - "0101000011011111010010110010000010101100001110011000110111110111" - "1110010101011110111001100010110101101011100111100011101010001011" - "0101110010100110101100111100010000111101111100000111000110110110" - "1001100111000000011010100000011101011000010010011010001011110000" - "1100100111111001001000011100110000011110001100000000010000001001" - "11100000001100100000100110101000110110110000000001111100001"; - - const Flexblock cleartext_bits_EXPECTED_RESULT = - "1011110011010110000010110001111000111010111101001010100100011101" - "0101110101010010100000110100001000011000111010001001110101111111" - "1110110101100101110001010101011110001010000010111110011011010111" - "1100110100111000000011100101010100110010001110010011000010111001" - "0000010000010000011001111010011110111001000000000110101000110001" - "0110111110110110100000010100000011010001000011100100111001001011" - "1101100100000100010000001011100010010001101111100100101100010001" - "0000011110010110111010110110111110011110011010001100100111110101" - "1000010010000000000100101011110001000101101101100000010011111011" - "1011111010110100100111100111110011100001111101111110000110001100" - "0001000111000111101110000111011011101010100010100101100111010100" - "0101111110110010110000111111011001101110101101100100100011000100" - "1000110010101001000100001001101000011111101011111100100000100101" - "1100001100111001011111001101000111011101011101000110010110110110" - "0111001010011010010000010110000110010101101100101110111100100011" - "0010111110011100010100000101100101110101101011110100100000110110" - "1001101110101001001111111000010100011100100000101000111101101111" - "0101111011110001101010111010001000111010101111001101100100100100" - "1110110111001100011010110000101000011001011100101100111101110000" - "1010101111011110000111011011011110000111010110110111111010101010" - "0111100101111001010111101000001010100000111010111100111011111001" - "0110111000000110100011011100101101010101101000010010011111100100" - "0010111000001011101110000110010011101001111010100111110111110101" - "1110111000000000101011000100101010000110110111101010011001111010" - "1101011110001110000011010111001100001100101000000101000101000010" - "0101000011011111010010110010000010101100001110011000110111110111" - "1110010101011110111001100010110101101011100111100011101010001011" - "0101110010100110101100111100010000111101111100000111000110110110" - "1001100111000000011010100000011101011000010010011010001011110000" - "1100100111111001001000011100110000011110001100000000010000001001" - "1110000000110010000010011010100011011011000000000111110000100000" - "0000000000000000000000000000000000000000000000000000000000000000"; - - // Encrypt our cleartext bits - const Flexblock ciphertext_bits = cipher.Encipher(cleartext_bits); - - // Decipher it again - const Flexblock decryptedBits = cipher.Decipher(ciphertext_bits); - - // Assert that the decrypted text equals the plaintext - Assert::AreEqual( - cleartext_bits_EXPECTED_RESULT, - decryptedBits - ); - } - }; + // Assert that the decrypted text equals the plaintext + REQUIRE( + cleartext_bits == + decryptedBits + ); } -*/ + +// Tests that encrypting a message of less than BLOCK_SIZE yields the exact message plus zero-padding back +TEST_CASE(__FILE__"/SingleBlock_Padding", "[Encryption/Decryption consistency]") { + + // Instanciate our cipher and supply a key + const Block key = PasswordToKey("1234"); + const Cipher cipher(key); + + // Recode the ascii-string to bits + const Flexblock cleartext_bits = + "1011110011010110000010110001111000111010111101001010100100011101" + "0101110101010010100000110100001000011000111010001001110101111111" + "1110110101100101110001010101011110001010000010111110011011010111" + "1100110100111000000011100101010100110010001110010011000010111001" + "0000010000010000011001111010011110111001000000000110101000110001" + "0110111110110110100000010100000011010001000011100100111001001011" + "1101100100000100"; + + const Flexblock cleartext_bits_EXPECTED_RESULT = + "1011110011010110000010110001111000111010111101001010100100011101" + "0101110101010010100000110100001000011000111010001001110101111111" + "1110110101100101110001010101011110001010000010111110011011010111" + "1100110100111000000011100101010100110010001110010011000010111001" + "0000010000010000011001111010011110111001000000000110101000110001" + "0110111110110110100000010100000011010001000011100100111001001011" + "1101100100000100000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000"; + + // Encrypt our cleartext bits + const Flexblock ciphertext_bits = cipher.Encipher(cleartext_bits); + + // Decipher it again + const Flexblock decryptedBits = cipher.Decipher(ciphertext_bits); + + // Assert that the decrypted text equals the plaintext + REQUIRE( + cleartext_bits_EXPECTED_RESULT == + decryptedBits + ); +} + +// Tests that a decrypted ciphertext equals its plaintrext version, using a cleartext that requires A LOT of blocks +TEST_CASE(__FILE__"MultiBlock_NoPadding/", "[Encryption/Decryption consistency]") { + + // Instanciate our cipher and supply a key + const Block key = PasswordToKey("1234"); + const Cipher cipher(key); + + // Recode the ascii-string to bits + const Flexblock cleartext_bits = + "1011110011010110000010110001111000111010111101001010100100011101" + "0101110101010010100000110100001000011000111010001001110101111111" + "1110110101100101110001010101011110001010000010111110011011010111" + "1100110100111000000011100101010100110010001110010011000010111001" + "0000010000010000011001111010011110111001000000000110101000110001" + "0110111110110110100000010100000011010001000011100100111001001011" + "1101100100000100010000001011100010010001101111100100101100010001" + "0000011110010110111010110110111110011110011010001100100111110101" + "1000010010000000000100101011110001000101101101100000010011111011" + "1011111010110100100111100111110011100001111101111110000110001100" + "0001000111000111101110000111011011101010100010100101100111010100" + "0101111110110010110000111111011001101110101101100100100011000100" + "1000110010101001000100001001101000011111101011111100100000100101" + "1100001100111001011111001101000111011101011101000110010110110110" + "0111001010011010010000010110000110010101101100101110111100100011" + "0010111110011100010100000101100101110101101011110100100000110110" + "1001101110101001001111111000010100011100100000101000111101101111" + "0101111011110001101010111010001000111010101111001101100100100100" + "1110110111001100011010110000101000011001011100101100111101110000" + "1010101111011110000111011011011110000111010110110111111010101010" + "0111100101111001010111101000001010100000111010111100111011111001" + "0110111000000110100011011100101101010101101000010010011111100100" + "0010111000001011101110000110010011101001111010100111110111110101" + "1110111000000000101011000100101010000110110111101010011001111010" + "1101011110001110000011010111001100001100101000000101000101000010" + "0101000011011111010010110010000010101100001110011000110111110111" + "1110010101011110111001100010110101101011100111100011101010001011" + "0101110010100110101100111100010000111101111100000111000110110110" + "1001100111000000011010100000011101011000010010011010001011110000" + "1100100111111001001000011100110000011110001100000000010000001001" + "1110000000110010000010011010100011011011000000000111110000110111" + "0101110011001101010110010100011001110110000110010001100110011111"; + + // Encrypt our cleartext bits + const Flexblock ciphertext_bits = cipher.Encipher(cleartext_bits); + + // Decipher it again + const Flexblock decryptedBits = cipher.Decipher(ciphertext_bits); + + // Assert that the decrypted text equals the plaintext + REQUIRE( + cleartext_bits == + decryptedBits + ); +} + +// Tests that a decrypted ciphertext equals its plaintrext version, using a cleartext that requires A LOT of blocks +TEST_CASE(__FILE__"MultiBlock_Padding/", "[Encryption/Decryption consistency]") { + + // Instanciate our cipher and supply a key + const Block key = PasswordToKey("1234"); + const Cipher cipher(key); + + // Recode the ascii-string to bits + const Flexblock cleartext_bits = + "1011110011010110000010110001111000111010111101001010100100011101" + "0101110101010010100000110100001000011000111010001001110101111111" + "1110110101100101110001010101011110001010000010111110011011010111" + "1100110100111000000011100101010100110010001110010011000010111001" + "0000010000010000011001111010011110111001000000000110101000110001" + "0110111110110110100000010100000011010001000011100100111001001011" + "1101100100000100010000001011100010010001101111100100101100010001" + "0000011110010110111010110110111110011110011010001100100111110101" + "1000010010000000000100101011110001000101101101100000010011111011" + "1011111010110100100111100111110011100001111101111110000110001100" + "0001000111000111101110000111011011101010100010100101100111010100" + "0101111110110010110000111111011001101110101101100100100011000100" + "1000110010101001000100001001101000011111101011111100100000100101" + "1100001100111001011111001101000111011101011101000110010110110110" + "0111001010011010010000010110000110010101101100101110111100100011" + "0010111110011100010100000101100101110101101011110100100000110110" + "1001101110101001001111111000010100011100100000101000111101101111" + "0101111011110001101010111010001000111010101111001101100100100100" + "1110110111001100011010110000101000011001011100101100111101110000" + "1010101111011110000111011011011110000111010110110111111010101010" + "0111100101111001010111101000001010100000111010111100111011111001" + "0110111000000110100011011100101101010101101000010010011111100100" + "0010111000001011101110000110010011101001111010100111110111110101" + "1110111000000000101011000100101010000110110111101010011001111010" + "1101011110001110000011010111001100001100101000000101000101000010" + "0101000011011111010010110010000010101100001110011000110111110111" + "1110010101011110111001100010110101101011100111100011101010001011" + "0101110010100110101100111100010000111101111100000111000110110110" + "1001100111000000011010100000011101011000010010011010001011110000" + "1100100111111001001000011100110000011110001100000000010000001001" + "11100000001100100000100110101000110110110000000001111100001"; + + const Flexblock cleartext_bits_EXPECTED_RESULT = + "1011110011010110000010110001111000111010111101001010100100011101" + "0101110101010010100000110100001000011000111010001001110101111111" + "1110110101100101110001010101011110001010000010111110011011010111" + "1100110100111000000011100101010100110010001110010011000010111001" + "0000010000010000011001111010011110111001000000000110101000110001" + "0110111110110110100000010100000011010001000011100100111001001011" + "1101100100000100010000001011100010010001101111100100101100010001" + "0000011110010110111010110110111110011110011010001100100111110101" + "1000010010000000000100101011110001000101101101100000010011111011" + "1011111010110100100111100111110011100001111101111110000110001100" + "0001000111000111101110000111011011101010100010100101100111010100" + "0101111110110010110000111111011001101110101101100100100011000100" + "1000110010101001000100001001101000011111101011111100100000100101" + "1100001100111001011111001101000111011101011101000110010110110110" + "0111001010011010010000010110000110010101101100101110111100100011" + "0010111110011100010100000101100101110101101011110100100000110110" + "1001101110101001001111111000010100011100100000101000111101101111" + "0101111011110001101010111010001000111010101111001101100100100100" + "1110110111001100011010110000101000011001011100101100111101110000" + "1010101111011110000111011011011110000111010110110111111010101010" + "0111100101111001010111101000001010100000111010111100111011111001" + "0110111000000110100011011100101101010101101000010010011111100100" + "0010111000001011101110000110010011101001111010100111110111110101" + "1110111000000000101011000100101010000110110111101010011001111010" + "1101011110001110000011010111001100001100101000000101000101000010" + "0101000011011111010010110010000010101100001110011000110111110111" + "1110010101011110111001100010110101101011100111100011101010001011" + "0101110010100110101100111100010000111101111100000111000110110110" + "1001100111000000011010100000011101011000010010011010001011110000" + "1100100111111001001000011100110000011110001100000000010000001001" + "1110000000110010000010011010100011011011000000000111110000100000" + "0000000000000000000000000000000000000000000000000000000000000000"; + + // Encrypt our cleartext bits + const Flexblock ciphertext_bits = cipher.Encipher(cleartext_bits); + + // Decipher it again + const Flexblock decryptedBits = cipher.Decipher(ciphertext_bits); + + // Assert that the decrypted text equals the plaintext + REQUIRE( + cleartext_bits_EXPECTED_RESULT == + decryptedBits + ); +} +