blob: b6792d7dd8f2d37d6398dbf616cfc6cf80d2fdac [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include "base/macros.h"
#include "components/os_crypt/key_storage_linux.h"
#include "components/os_crypt/os_crypt.h"
#include "components/os_crypt/os_crypt_mocker_linux.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
std::unique_ptr<KeyStorageLinux> GetNullKeyStorage() {
return nullptr;
}
class OSCryptLinuxTest : public testing::Test {
public:
OSCryptLinuxTest() : key_("something") { key_ptr_ = &key_; }
~OSCryptLinuxTest() override { key_ptr_ = nullptr; }
void SetUp() override {
OSCryptMockerLinux::SetUp();
UseMockKeyStorageForTesting(nullptr, OSCryptLinuxTest::GetKey);
}
void TearDown() override { OSCryptMockerLinux::TearDown(); }
protected:
void SetEncryptionKey(const std::string& key) { key_ = key; }
// Get the key of the currently running test.
static std::string* GetKey() { return key_ptr_; }
private:
std::string key_;
// Points to the |key_| of the currently running test.
static std::string* key_ptr_;
DISALLOW_COPY_AND_ASSIGN(OSCryptLinuxTest);
};
std::string* OSCryptLinuxTest::key_ptr_;
TEST_F(OSCryptLinuxTest, VerifyV0) {
const std::string originaltext = "hello";
std::string ciphertext;
std::string decipheredtext;
SetEncryptionKey(std::string());
ciphertext = originaltext; // No encryption
ASSERT_TRUE(OSCrypt::DecryptString(ciphertext, &decipheredtext));
ASSERT_EQ(originaltext, decipheredtext);
}
TEST_F(OSCryptLinuxTest, VerifyV10) {
const std::string originaltext = "hello";
std::string ciphertext;
std::string decipheredtext;
SetEncryptionKey("peanuts");
ASSERT_TRUE(OSCrypt::EncryptString(originaltext, &ciphertext));
SetEncryptionKey("not_peanuts");
ciphertext = ciphertext.substr(3).insert(0, "v10");
ASSERT_TRUE(OSCrypt::DecryptString(ciphertext, &decipheredtext));
ASSERT_EQ(originaltext, decipheredtext);
}
TEST_F(OSCryptLinuxTest, VerifyV11) {
const std::string originaltext = "hello";
std::string ciphertext;
std::string decipheredtext;
SetEncryptionKey(std::string());
ASSERT_TRUE(OSCrypt::EncryptString(originaltext, &ciphertext));
ASSERT_EQ(ciphertext.substr(0, 3), "v11");
ASSERT_TRUE(OSCrypt::DecryptString(ciphertext, &decipheredtext));
ASSERT_EQ(originaltext, decipheredtext);
}
TEST_F(OSCryptLinuxTest, IsEncryptionAvailable) {
EXPECT_TRUE(OSCrypt::IsEncryptionAvailable());
// Restore default GetKeyStorage and GetPassword functions.
UseMockKeyStorageForTesting(nullptr, nullptr);
// Mock only GetKeyStorage function.
UseMockKeyStorageForTesting(GetNullKeyStorage, nullptr);
EXPECT_FALSE(OSCrypt::IsEncryptionAvailable());
}
} // namespace