2016-02-11 16:39:42 +01:00
|
|
|
#include <gtest/gtest.h>
|
|
|
|
#include <cryfs/config/crypto/CryConfigEncryptorFactory.h>
|
|
|
|
#include <cpp-utils/crypto/symmetric/ciphers.h>
|
|
|
|
#include <cpp-utils/data/DataFixture.h>
|
2018-10-22 04:31:08 +02:00
|
|
|
#include "../../testutils/FakeCryKeyProvider.h"
|
2015-11-12 02:10:02 +01:00
|
|
|
|
|
|
|
using cpputils::AES256_GCM;
|
|
|
|
using cpputils::Data;
|
|
|
|
using cpputils::DataFixture;
|
|
|
|
using boost::none;
|
|
|
|
using std::ostream;
|
|
|
|
using namespace cryfs;
|
|
|
|
|
|
|
|
// This is needed for google test
|
|
|
|
namespace boost {
|
|
|
|
inline ostream &operator<<(ostream &stream, const CryConfigEncryptor::Decrypted &) {
|
|
|
|
return stream << "CryConfigEncryptor::Decrypted()";
|
|
|
|
}
|
|
|
|
}
|
2016-02-13 20:42:28 +01:00
|
|
|
#include <cpp-utils/pointer/unique_ref_boost_optional_gtest_workaround.h>
|
2015-11-12 02:10:02 +01:00
|
|
|
|
|
|
|
class CryConfigEncryptorFactoryTest: public ::testing::Test {
|
|
|
|
public:
|
|
|
|
};
|
|
|
|
|
|
|
|
TEST_F(CryConfigEncryptorFactoryTest, EncryptAndDecrypt_SameEncryptor) {
|
2018-10-22 04:31:08 +02:00
|
|
|
FakeCryKeyProvider keyProvider;
|
|
|
|
auto encryptor = CryConfigEncryptorFactory::deriveNewKey(&keyProvider);
|
2015-11-12 02:10:02 +01:00
|
|
|
Data encrypted = encryptor->encrypt(DataFixture::generate(400), AES256_GCM::NAME);
|
|
|
|
auto decrypted = encryptor->decrypt(encrypted).value();
|
|
|
|
EXPECT_EQ(DataFixture::generate(400), decrypted.data);
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_F(CryConfigEncryptorFactoryTest, EncryptAndDecrypt_NewEncryptor) {
|
2018-10-22 04:31:08 +02:00
|
|
|
FakeCryKeyProvider keyProvider1(1);
|
|
|
|
auto encryptor = CryConfigEncryptorFactory::deriveNewKey(&keyProvider1);
|
2015-11-12 02:10:02 +01:00
|
|
|
Data encrypted = encryptor->encrypt(DataFixture::generate(400), AES256_GCM::NAME);
|
|
|
|
|
2018-10-22 04:31:08 +02:00
|
|
|
FakeCryKeyProvider keyProvider2(1);
|
|
|
|
auto loadedEncryptor = CryConfigEncryptorFactory::loadExistingKey(encrypted, &keyProvider2).value();
|
2015-11-12 02:10:02 +01:00
|
|
|
auto decrypted = loadedEncryptor->decrypt(encrypted).value();
|
|
|
|
EXPECT_EQ(DataFixture::generate(400), decrypted.data);
|
|
|
|
}
|
|
|
|
|
2018-10-22 04:31:08 +02:00
|
|
|
TEST_F(CryConfigEncryptorFactoryTest, DoesntDecryptWithWrongKey) {
|
|
|
|
FakeCryKeyProvider keyProvider1(1);
|
|
|
|
auto encryptor = CryConfigEncryptorFactory::deriveNewKey(&keyProvider1);
|
2015-11-12 02:10:02 +01:00
|
|
|
Data encrypted = encryptor->encrypt(DataFixture::generate(400), AES256_GCM::NAME);
|
|
|
|
|
2018-10-22 04:31:08 +02:00
|
|
|
FakeCryKeyProvider keyProvider2(2);
|
|
|
|
auto loadedEncryptor = CryConfigEncryptorFactory::loadExistingKey(encrypted, &keyProvider2).value();
|
2015-11-12 02:10:02 +01:00
|
|
|
auto decrypted = loadedEncryptor->decrypt(encrypted);
|
|
|
|
EXPECT_EQ(none, decrypted);
|
|
|
|
}
|
|
|
|
|
2018-10-22 04:31:08 +02:00
|
|
|
TEST_F(CryConfigEncryptorFactoryTest, DoesntDecryptWithWrongKey_EmptyData) {
|
|
|
|
FakeCryKeyProvider keyProvider1(1);
|
|
|
|
auto encryptor = CryConfigEncryptorFactory::deriveNewKey(&keyProvider1);
|
2015-11-12 02:10:02 +01:00
|
|
|
Data encrypted = encryptor->encrypt(Data(0), AES256_GCM::NAME);
|
|
|
|
|
2018-10-22 04:31:08 +02:00
|
|
|
FakeCryKeyProvider keyProvider2(2);
|
|
|
|
auto loadedEncryptor = CryConfigEncryptorFactory::loadExistingKey(encrypted, &keyProvider2).value();
|
2015-11-12 02:10:02 +01:00
|
|
|
auto decrypted = loadedEncryptor->decrypt(encrypted);
|
|
|
|
EXPECT_EQ(none, decrypted);
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_F(CryConfigEncryptorFactoryTest, DoesntDecryptInvalidData) {
|
2018-10-22 04:31:08 +02:00
|
|
|
FakeCryKeyProvider keyProvider;
|
|
|
|
auto loadedEncryptor = CryConfigEncryptorFactory::loadExistingKey(Data(0), &keyProvider);
|
2015-11-12 02:10:02 +01:00
|
|
|
EXPECT_EQ(none, loadedEncryptor);
|
2018-10-22 04:31:08 +02:00
|
|
|
}
|