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);
|
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);
|
return decrypt(encryption_key, ciphertext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
src/crypto.h
12
src/crypto.h
@ -14,8 +14,8 @@ public:
|
|||||||
kDecrypt
|
kDecrypt
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual std::vector<unsigned char> encrypt(std::vector<unsigned char>& plaintext) = 0;
|
virtual std::vector<unsigned char> encrypt(const std::vector<unsigned char>& plaintext) = 0;
|
||||||
virtual std::vector<unsigned char> decrypt(std::vector<unsigned char>& ciphertext) = 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>>
|
virtual std::pair<std::vector<unsigned char>, std::vector<unsigned char>>
|
||||||
encrypt_all(std::vector<unsigned char>& plaintext) = 0;
|
encrypt_all(std::vector<unsigned char>& plaintext) = 0;
|
||||||
@ -52,8 +52,8 @@ public:
|
|||||||
AES256_CBC(const std::vector<unsigned char>& key);
|
AES256_CBC(const std::vector<unsigned char>& key);
|
||||||
AES256_CBC(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> encrypt(const std::vector<unsigned char>& plaintext) override;
|
||||||
std::vector<unsigned char> decrypt(std::vector<unsigned char>& ciphertext) 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,
|
std::vector<unsigned char> encrypt(const std::vector<unsigned char>& key, const std::vector<unsigned char>& iv,
|
||||||
const std::vector<unsigned char>& input);
|
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,
|
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);
|
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,
|
std::vector<unsigned char> decrypt(const std::vector<unsigned char>& key,
|
||||||
const std::vector<unsigned char>& ciphertext);
|
const std::vector<unsigned char>& ciphertext);
|
||||||
|
|
||||||
|
@ -3,16 +3,6 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "crypto.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:
|
/* test command:
|
||||||
echo "ditemi perche' se la mucca fa mu il merlo non fa me" |
|
echo "ditemi perche' se la mucca fa mu il merlo non fa me" |
|
||||||
scripts/aes256.sh -k 0123456789ABCDEF0123456789ABCDEF -i 0123456789ABCDEF |
|
scripts/aes256.sh -k 0123456789ABCDEF0123456789ABCDEF -i 0123456789ABCDEF |
|
||||||
@ -55,11 +45,24 @@ TEST(CryptoTest, encrypt2){
|
|||||||
temp.insert(temp.end(), test1_enc.begin(), test1_enc.end());
|
temp.insert(temp.end(), test1_enc.begin(), test1_enc.end());
|
||||||
|
|
||||||
EXPECT_EQ(temp.size(), output.size());
|
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);
|
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){
|
TEST(CryptoTest, decrypt1){
|
||||||
const std::vector<unsigned char> plaintext(test1_str.begin(), test1_str.end());
|
const std::vector<unsigned char> plaintext(test1_str.begin(), test1_str.end());
|
||||||
size_t output_len = test1_enc.size();
|
size_t output_len = test1_enc.size();
|
||||||
@ -85,8 +88,26 @@ TEST(CryptoTest, decrypt2){
|
|||||||
auto output = a.decrypt(key, input);
|
auto output = a.decrypt(key, input);
|
||||||
|
|
||||||
EXPECT_EQ(plaintext, output);
|
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);
|
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