Add some crypto tests
This commit is contained in:
parent
da85377dba
commit
f7801f40ef
@ -129,10 +129,10 @@ size_t AES256_CBC::process_all(Cipher::Mode mode, EvpCipherCtx& ctx,
|
||||
}
|
||||
|
||||
|
||||
std::vector<unsigned char> AES256_CBC::encrypt(std::vector<unsigned char>& plaintext) {
|
||||
std::vector<unsigned char> AES256_CBC::encrypt(const std::vector<unsigned char>& plaintext) {
|
||||
return encrypt(encryption_key, utils::generate_random(kIvSize), plaintext);
|
||||
}
|
||||
std::vector<unsigned char> AES256_CBC::decrypt(std::vector<unsigned char>& ciphertext) {
|
||||
std::vector<unsigned char> AES256_CBC::decrypt(const std::vector<unsigned char>& ciphertext) {
|
||||
return decrypt(encryption_key, ciphertext);
|
||||
}
|
||||
|
||||
|
12
src/crypto.h
12
src/crypto.h
@ -14,8 +14,8 @@ public:
|
||||
kDecrypt
|
||||
};
|
||||
|
||||
virtual std::vector<unsigned char> encrypt(std::vector<unsigned char>& plaintext) = 0;
|
||||
virtual std::vector<unsigned char> decrypt(std::vector<unsigned char>& ciphertext) = 0;
|
||||
virtual std::vector<unsigned char> encrypt(const std::vector<unsigned char>& plaintext) = 0;
|
||||
virtual std::vector<unsigned char> decrypt(const std::vector<unsigned char>& ciphertext) = 0;
|
||||
/*
|
||||
virtual std::pair<std::vector<unsigned char>, std::vector<unsigned char>>
|
||||
encrypt_all(std::vector<unsigned char>& plaintext) = 0;
|
||||
@ -52,8 +52,8 @@ public:
|
||||
AES256_CBC(const std::vector<unsigned char>& key);
|
||||
AES256_CBC(std::vector<unsigned char>&& key);
|
||||
|
||||
std::vector<unsigned char> encrypt(std::vector<unsigned char>& plaintext) override;
|
||||
std::vector<unsigned char> decrypt(std::vector<unsigned char>& ciphertext) override;
|
||||
std::vector<unsigned char> encrypt(const std::vector<unsigned char>& plaintext) override;
|
||||
std::vector<unsigned char> decrypt(const std::vector<unsigned char>& ciphertext) override;
|
||||
|
||||
std::vector<unsigned char> encrypt(const std::vector<unsigned char>& key, const std::vector<unsigned char>& iv,
|
||||
const std::vector<unsigned char>& input);
|
||||
@ -71,10 +71,6 @@ public:
|
||||
int decrypt(const std::vector<unsigned char>& key, const std::vector<unsigned char>& iv,
|
||||
const std::vector<unsigned char>& input, std::vector<unsigned char>& output);
|
||||
|
||||
|
||||
std::pair<std::vector<unsigned char>, std::vector<unsigned char>>
|
||||
encrypt(std::vector<unsigned char> plaintext);
|
||||
|
||||
std::vector<unsigned char> decrypt(const std::vector<unsigned char>& key,
|
||||
const std::vector<unsigned char>& ciphertext);
|
||||
|
||||
|
@ -3,16 +3,6 @@
|
||||
#include "utils.h"
|
||||
#include "crypto.h"
|
||||
|
||||
typedef std::basic_string<unsigned char> ustring;
|
||||
|
||||
|
||||
std::vector<std::byte> string_to_bytes(const std::string& str){
|
||||
std::vector<std::byte> out;
|
||||
transform(str.begin(), str.end(), std::back_inserter(out), [](auto c){return static_cast<std::byte>(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<unsigned char>(temp.begin() + 50, temp.end()),
|
||||
std::vector<unsigned char>(output.begin() + 50, output.end()));
|
||||
EXPECT_EQ(temp, output);
|
||||
}
|
||||
|
||||
TEST(CryptoTest, encrypt3){
|
||||
const std::vector<unsigned char> plaintext(test1_str.begin(), test1_str.end());
|
||||
//size_t output_len = plaintext.size() + 16;
|
||||
//std::vector<unsigned char> output(output_len);
|
||||
const std::vector<unsigned char> key(test1_key.begin(), test1_key.end());
|
||||
const std::vector<unsigned char> 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<unsigned char> 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<unsigned char> plaintext(test1_str.begin(), test1_str.end());
|
||||
size_t output_len = test1_enc.size();
|
||||
const std::vector<unsigned char> key(test1_key.begin(), test1_key.end());
|
||||
const std::vector<unsigned char> iv(test1_iv.begin(), test1_iv.end());
|
||||
// constructs encrypted input (iv + encrypted_data)
|
||||
auto input = std::vector<unsigned char>(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<unsigned char> 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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user