#include #include "gtest/gtest.h" #include "utils.h" #include "crypto.h" #include "test.h" using namespace horcrux; TEST(CryptoTest, encrypt1){ const std::vector plaintext(test1_str.begin(), test1_str.end()); const std::vector key(test1_key.begin(), test1_key.end()); const std::vector iv(test1_iv.begin(), test1_iv.end()); AES256_CBC a; auto output = a.encrypt(key, iv, plaintext); //remove iv from output output.erase(output.begin(), output.begin() + iv.size()); EXPECT_EQ(test1_enc, output); } TEST(CryptoTest, encrypt2){ 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; auto output = a.encrypt(key, iv, plaintext); auto temp = iv; temp.insert(temp.end(), test1_enc.begin(), test1_enc.end()); EXPECT_EQ(temp.size(), output.size()); 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()); const std::vector key(test1_key.begin(), test1_key.end()); const std::vector iv(test1_iv.begin(), test1_iv.end()); AES256_CBC a; auto output = a.decrypt(key, iv, test1_enc); EXPECT_EQ(plaintext, output); } TEST(CryptoTest, decrypt2){ 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; 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); 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); }