From f7801f40efd1da2c18b567a85991ad4d3449071f Mon Sep 17 00:00:00 2001 From: Michele Rodolfi Date: Sat, 12 Dec 2020 14:12:42 +0100 Subject: [PATCH] Add some crypto tests --- src/crypto.cpp | 4 ++-- src/crypto.h | 12 ++++------- test/crypto-test.cpp | 49 +++++++++++++++++++++++++++++++------------- 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/crypto.cpp b/src/crypto.cpp index 03675c5..13da463 100644 --- a/src/crypto.cpp +++ b/src/crypto.cpp @@ -129,10 +129,10 @@ size_t AES256_CBC::process_all(Cipher::Mode mode, EvpCipherCtx& ctx, } -std::vector AES256_CBC::encrypt(std::vector& plaintext) { +std::vector AES256_CBC::encrypt(const std::vector& plaintext) { return encrypt(encryption_key, utils::generate_random(kIvSize), plaintext); } -std::vector AES256_CBC::decrypt(std::vector& ciphertext) { +std::vector AES256_CBC::decrypt(const std::vector& ciphertext) { return decrypt(encryption_key, ciphertext); } diff --git a/src/crypto.h b/src/crypto.h index 3a29b95..cfeef66 100644 --- a/src/crypto.h +++ b/src/crypto.h @@ -14,8 +14,8 @@ public: kDecrypt }; - virtual std::vector encrypt(std::vector& plaintext) = 0; - virtual std::vector decrypt(std::vector& ciphertext) = 0; + virtual std::vector encrypt(const std::vector& plaintext) = 0; + virtual std::vector decrypt(const std::vector& ciphertext) = 0; /* virtual std::pair, std::vector> encrypt_all(std::vector& plaintext) = 0; @@ -52,8 +52,8 @@ public: AES256_CBC(const std::vector& key); AES256_CBC(std::vector&& key); - std::vector encrypt(std::vector& plaintext) override; - std::vector decrypt(std::vector& ciphertext) override; + std::vector encrypt(const std::vector& plaintext) override; + std::vector decrypt(const std::vector& ciphertext) override; std::vector encrypt(const std::vector& key, const std::vector& iv, const std::vector& input); @@ -71,10 +71,6 @@ public: int decrypt(const std::vector& key, const std::vector& iv, const std::vector& input, std::vector& output); - - std::pair, std::vector> - encrypt(std::vector plaintext); - std::vector decrypt(const std::vector& key, const std::vector& ciphertext); diff --git a/test/crypto-test.cpp b/test/crypto-test.cpp index 9f32f4e..b542706 100644 --- a/test/crypto-test.cpp +++ b/test/crypto-test.cpp @@ -3,16 +3,6 @@ #include "utils.h" #include "crypto.h" -typedef std::basic_string ustring; - - -std::vector string_to_bytes(const std::string& str){ - std::vector out; - transform(str.begin(), str.end(), std::back_inserter(out), [](auto c){return static_cast(c);}); - return out; -} - - /* test command: echo "ditemi perche' se la mucca fa mu il merlo non fa me" | scripts/aes256.sh -k 0123456789ABCDEF0123456789ABCDEF -i 0123456789ABCDEF | @@ -55,11 +45,24 @@ TEST(CryptoTest, encrypt2){ temp.insert(temp.end(), test1_enc.begin(), test1_enc.end()); EXPECT_EQ(temp.size(), output.size()); - EXPECT_EQ(std::vector(temp.begin() + 50, temp.end()), - std::vector(output.begin() + 50, output.end())); EXPECT_EQ(temp, output); } +TEST(CryptoTest, encrypt3){ + const std::vector plaintext(test1_str.begin(), test1_str.end()); + //size_t output_len = plaintext.size() + 16; + //std::vector output(output_len); + const std::vector key(test1_key.begin(), test1_key.end()); + const std::vector iv(test1_iv.begin(), test1_iv.end()); + + AES256_CBC a(key); + auto output = a.encrypt(plaintext); + auto temp = iv; + temp.insert(temp.end(), test1_enc.begin(), test1_enc.end()); + + EXPECT_EQ(temp.size(), output.size()); +} + TEST(CryptoTest, decrypt1){ const std::vector plaintext(test1_str.begin(), test1_str.end()); size_t output_len = test1_enc.size(); @@ -85,8 +88,26 @@ TEST(CryptoTest, decrypt2){ auto output = a.decrypt(key, input); EXPECT_EQ(plaintext, output); +} +TEST(CryptoTest, decrypt3){ + const std::vector plaintext(test1_str.begin(), test1_str.end()); + size_t output_len = test1_enc.size(); + const std::vector key(test1_key.begin(), test1_key.end()); + const std::vector iv(test1_iv.begin(), test1_iv.end()); + // constructs encrypted input (iv + encrypted_data) + auto input = std::vector(iv); + input.insert(input.end(),test1_enc.begin(), test1_enc.end()); + + AES256_CBC a(key); + auto output = a.decrypt(input); - AES256_CBC b(key); - output = b.decrypt(input); EXPECT_EQ(plaintext, output); } +TEST(CryptoTest, endToEnd){ + const std::vector plaintext(test1_str.begin(), test1_str.end()); + AES256_CBC a; + auto crypto = a.encrypt(plaintext); + EXPECT_GT(crypto.size(), plaintext.size()); + auto decrypted = a.decrypt(crypto); + EXPECT_EQ(plaintext, decrypted); +}