You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.6 KiB
144 lines
4.6 KiB
// Copyright 2018 The Chromium OS 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 <libdevmapper.h>
|
|
|
|
#include <base/files/file_util.h>
|
|
#include <base/memory/ptr_util.h>
|
|
#include <base/strings/string_number_conversions.h>
|
|
#include <base/strings/string_split.h>
|
|
#include <brillo/blkdev_utils/device_mapper_fake.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
namespace brillo {
|
|
|
|
TEST(DevmapperTableTest, CreateTableFromSecureBlobTest) {
|
|
SecureBlob crypt_table_str("0 100 crypt");
|
|
|
|
DevmapperTable dm_table =
|
|
DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
|
|
EXPECT_EQ(DevmapperTable(0, 0, "", SecureBlob()).ToSecureBlob(),
|
|
dm_table.ToSecureBlob());
|
|
}
|
|
|
|
TEST(DevmapperTableTest, CryptCreateParametersTest) {
|
|
base::FilePath device("/some/random/filepath");
|
|
|
|
SecureBlob secret;
|
|
SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
|
|
|
|
SecureBlob crypt_parameters = DevmapperTable::CryptCreateParameters(
|
|
"aes-cbc-essiv:sha256", secret, 0, device, 0, true);
|
|
|
|
DevmapperTable crypt_table(0, 100, "crypt", crypt_parameters);
|
|
|
|
SecureBlob crypt_table_str(
|
|
"0 100 crypt aes-cbc-essiv:sha256 "
|
|
"0123456789ABCDEF 0 /some/random/filepath 0 1 "
|
|
"allow_discards");
|
|
|
|
EXPECT_EQ(crypt_table.ToSecureBlob().to_string(),
|
|
crypt_table_str.to_string());
|
|
}
|
|
|
|
TEST(DevmapperTableTest, CryptCreateTableFromSecureBlobTest) {
|
|
base::FilePath device("/some/random/filepath");
|
|
|
|
SecureBlob secret;
|
|
SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
|
|
|
|
SecureBlob crypt_parameters = DevmapperTable::CryptCreateParameters(
|
|
"aes-cbc-essiv:sha256", secret, 0, device, 0, true);
|
|
|
|
DevmapperTable crypt_table(0, 100, "crypt", crypt_parameters);
|
|
|
|
SecureBlob crypt_table_str(
|
|
"0 100 crypt aes-cbc-essiv:sha256 "
|
|
"0123456789ABCDEF 0 /some/random/filepath 0 1 "
|
|
"allow_discards");
|
|
|
|
DevmapperTable parsed_blob_table =
|
|
DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
|
|
|
|
EXPECT_EQ(crypt_table.ToSecureBlob(), parsed_blob_table.ToSecureBlob());
|
|
}
|
|
|
|
TEST(DevmapperTableTest, CryptGetKeyTest) {
|
|
SecureBlob secret;
|
|
SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
|
|
SecureBlob crypt_table_str(
|
|
"0 100 crypt aes-cbc-essiv:sha256 "
|
|
"0123456789ABCDEF 0 /some/random/filepath 0 1 "
|
|
"allow_discards");
|
|
|
|
DevmapperTable dm_table =
|
|
DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
|
|
|
|
EXPECT_EQ(secret, dm_table.CryptGetKey());
|
|
}
|
|
|
|
TEST(DevmapperTableTest, MalformedCryptTableTest) {
|
|
SecureBlob secret;
|
|
SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
|
|
// Pass malformed crypt table string.
|
|
SecureBlob crypt_table_str(
|
|
"0 100 crypt ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
|
|
|
|
DevmapperTable dm_table =
|
|
DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
|
|
|
|
EXPECT_EQ(SecureBlob(), dm_table.CryptGetKey());
|
|
}
|
|
|
|
TEST(DevmapperTableTest, GetterTest) {
|
|
SecureBlob verity_table(
|
|
"0 40 verity payload=/dev/loop6 hashtree=/dev/loop6 "
|
|
"hashstart=40 alg=sha256 root_hexdigest="
|
|
"01234567 "
|
|
"salt=89ABCDEF "
|
|
"error_behavior=eio");
|
|
|
|
DevmapperTable dm_table =
|
|
DevmapperTable::CreateTableFromSecureBlob(verity_table);
|
|
|
|
EXPECT_EQ(dm_table.GetStart(), 0);
|
|
EXPECT_EQ(dm_table.GetSize(), 40);
|
|
EXPECT_EQ(dm_table.GetType(), "verity");
|
|
EXPECT_EQ(dm_table.GetParameters(),
|
|
SecureBlob("payload=/dev/loop6 hashtree=/dev/loop6 "
|
|
"hashstart=40 alg=sha256 root_hexdigest=01234567 "
|
|
"salt=89ABCDEF error_behavior=eio"));
|
|
}
|
|
|
|
TEST(DevmapperTest, FakeTaskConformance) {
|
|
SecureBlob secret;
|
|
SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
|
|
SecureBlob crypt_table_str(
|
|
"0 100 crypt aes-cbc-essiv:sha256 "
|
|
"0123456789ABCDEF 0 /some/random/filepath 0 1 "
|
|
"allow_discards");
|
|
|
|
DevmapperTable dm_table =
|
|
DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
|
|
|
|
EXPECT_EQ(secret, dm_table.CryptGetKey());
|
|
DeviceMapper dm(base::Bind(&fake::CreateDevmapperTask));
|
|
|
|
// Add device.
|
|
EXPECT_TRUE(dm.Setup("abcd", dm_table));
|
|
EXPECT_FALSE(dm.Setup("abcd", dm_table));
|
|
DevmapperTable table = dm.GetTable("abcd");
|
|
// Expect tables to be the same.
|
|
EXPECT_EQ(table.ToSecureBlob(), dm_table.ToSecureBlob());
|
|
// Expect key to match.
|
|
EXPECT_EQ(table.CryptGetKey(), secret);
|
|
EXPECT_TRUE(dm.Remove("abcd"));
|
|
EXPECT_FALSE(dm.Remove("abcd"));
|
|
}
|
|
|
|
} // namespace brillo
|