Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Unified Diff: dm-bht_unittest.cc

Issue 6695038: verity: do all hashing in dm-bht.c (Closed) Base URL: http://git.chromium.org/git/dm-verity.git@master
Patch Set: Fix per review. Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « dm-bht.c ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dm-bht_unittest.cc
diff --git a/dm-bht_unittest.cc b/dm-bht_unittest.cc
index bf8c74c442e82418d36f4b3d1aa4c1bf6f289e6a..96323b4527e705efcd56d6c2438249df7a0637d3 100644
--- a/dm-bht_unittest.cc
+++ b/dm-bht_unittest.cc
@@ -107,9 +107,7 @@ class MemoryBhtTest : public ::testing::Test {
const char *digest_algorithm) {
NewBht(depth, total_blocks, digest_algorithm);
- u8 data[PAGE_SIZE];
- // Store all the block hashes of blocks of 0.
- memset(reinterpret_cast<void *>(data), 0, sizeof(data));
+ u8 data[PAGE_SIZE] = { 0 };
unsigned int blocks = total_blocks;
do {
EXPECT_EQ(dm_bht_store_block(bht_.get(), blocks - 1, data), 0);
@@ -151,16 +149,8 @@ TEST_F(MemoryBhtTest, CreateThenVerifyOk) {
// Set the root hash for a 0-filled image
static const char kRootDigest[] =
"45d65d6f9e5a962f4d80b5f1bd7a918152251c27bdad8c5f52b590c129833372";
- // This should match what dm_bht_store_block computed earlier.
- static const char kZeroDigest[] =
- "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7";
- u8 digest[(sizeof(kZeroDigest) - 1) >> 1];
- // TODO(wad) write a test for hex_to_bin and bin_to_hex
- unsigned int digest_size = strlen(kZeroDigest) >> 1;
-
- dm_bht_hex_to_bin(digest,
- reinterpret_cast<const u8 *>(kZeroDigest),
- digest_size);
+ // A page of all zeros
+ static const char kZeroPage[PAGE_SIZE] = { 0 };
SetupBht(2, total_blocks, "sha256");
dm_bht_set_root_hexdigest(bht_.get(),
@@ -168,7 +158,7 @@ TEST_F(MemoryBhtTest, CreateThenVerifyOk) {
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, digest, digest_size));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, kZeroPage));
}
EXPECT_EQ(0, dm_bht_destroy(bht_.get()));
@@ -179,16 +169,8 @@ TEST_F(MemoryBhtTest, CreateThenVerifyMultipleLevels) {
// Set the root hash for a 0-filled image
static const char kRootDigest[] =
"c86619624d3456f711dbb94d4ad79a4b029f6fd3b5a4a90b155c856bf5b3409b";
- // This should match what dm_bht_store_block computed earlier.
- static const char kZeroDigest[] =
- "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7";
- u8 digest[(sizeof(kZeroDigest) - 1) >> 1];
- // TODO(wad) write a test for hex_to_bin and bin_to_hex
- unsigned int digest_size = strlen(kZeroDigest) >> 1;
-
- dm_bht_hex_to_bin(digest,
- reinterpret_cast<const u8 *>(kZeroDigest),
- digest_size);
+ // A page of all zeros
+ static const char kZeroPage[PAGE_SIZE] = { 0 };
SetupBht(4, total_blocks, "sha256");
dm_bht_set_root_hexdigest(bht_.get(),
@@ -196,7 +178,7 @@ TEST_F(MemoryBhtTest, CreateThenVerifyMultipleLevels) {
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, digest, digest_size));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, kZeroPage));
}
EXPECT_EQ(0, dm_bht_destroy(bht_.get()));
@@ -207,16 +189,8 @@ TEST_F(MemoryBhtTest, CreateThenVerifyOddCount) {
// Set the root hash for a 0-filled image
static const char kRootDigest[] =
"c78d187c430465bd7831fe4908247b6ab5107e3a826d933b71e85aa9a932e03c";
- // This should match what dm_bht_store_block computed earlier.
- static const char kZeroDigest[] =
- "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7";
- u8 digest[(sizeof(kZeroDigest) - 1) >> 1];
- // TODO(wad) write a test for hex_to_bin and bin_to_hex
- unsigned int digest_size = strlen(kZeroDigest) >> 1;
-
- dm_bht_hex_to_bin(digest,
- reinterpret_cast<const u8 *>(kZeroDigest),
- digest_size);
+ // A page of all zeros
+ static const char kZeroPage[PAGE_SIZE] = { 0 };
SetupBht(4, total_blocks, "sha256");
dm_bht_set_root_hexdigest(bht_.get(),
@@ -224,15 +198,17 @@ TEST_F(MemoryBhtTest, CreateThenVerifyOddCount) {
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) {
DLOG(INFO) << "verifying block: " << blocks;
- EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, digest, digest_size));
+ EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, kZeroPage));
}
EXPECT_EQ(0, dm_bht_destroy(bht_.get()));
}
-TEST_F(MemoryBhtTest, CreateThenVerifyBad) {
+TEST_F(MemoryBhtTest, CreateThenVerifyBadHashBlock) {
static const unsigned int total_blocks = 16384;
SetupBht(2, total_blocks, "sha256");
+ // A page of all zeros
+ static const char kZeroPage[PAGE_SIZE] = { 0 };
// Set the root hash for a 0-filled image
static const char kRootDigest[] =
"45d65d6f9e5a962f4d80b5f1bd7a918152251c27bdad8c5f52b590c129833372";
@@ -241,43 +217,51 @@ TEST_F(MemoryBhtTest, CreateThenVerifyBad) {
// TODO(wad) add tests for partial tree validity/verification
- // Corrupt one block value
+ // Corrupt one has hblock
static const unsigned int kBadBlock = 256;
u8 data[PAGE_SIZE];
memset(reinterpret_cast<void *>(data), 'A', sizeof(data));
EXPECT_EQ(dm_bht_store_block(bht_.get(), kBadBlock, data), 0);
- // This should match what dm_bht_store_block computed earlier.
- static const char kZeroDigest[] =
- "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7";
- u8 digest[(sizeof(kZeroDigest) - 1) >> 1];
- // TODO(wad) write a test for hex_to_bin and bin_to_hex
- unsigned int digest_size = strlen(kZeroDigest) >> 1;
- dm_bht_hex_to_bin(digest,
- reinterpret_cast<const u8 *>(kZeroDigest),
- digest_size);
-
// Attempt to verify both the bad block and all the neighbors.
- EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + 1, digest, digest_size),
- 0);
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + 1, kZeroPage), 0);
- EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + 2, digest, digest_size),
- 0);
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + 2, kZeroPage), 0);
EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + (bht_->node_count / 2),
- digest, digest_size),
+ kZeroPage),
0);
- EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock, digest, digest_size), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock, kZeroPage), 0);
// Verify that the prior entry is untouched and still safe
- EXPECT_EQ(dm_bht_verify_block(bht_.get(), kBadBlock - 1, digest, digest_size),
- 0);
+ EXPECT_EQ(dm_bht_verify_block(bht_.get(), kBadBlock - 1, kZeroPage), 0);
// Same for the next entry
EXPECT_EQ(dm_bht_verify_block(bht_.get(), kBadBlock + bht_->node_count,
- digest, digest_size),
+ kZeroPage),
0);
EXPECT_EQ(0, dm_bht_destroy(bht_.get()));
}
+
+TEST_F(MemoryBhtTest, CreateThenVerifyBadDataBlock) {
+ static const unsigned int total_blocks = 384;
+ SetupBht(2, total_blocks, "sha256");
+ // Set the root hash for a 0-filled image
+ static const char kRootDigest[] =
+ "45d65d6f9e5a962f4d80b5f1bd7a918152251c27bdad8c5f52b590c129833372";
+ dm_bht_set_root_hexdigest(bht_.get(),
+ reinterpret_cast<const u8 *>(kRootDigest));
+ // A corrupt page
+ static const u8 kBadPage[PAGE_SIZE] = { 'A' };
+
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 0, kBadPage), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 127, kBadPage), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 128, kBadPage), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 255, kBadPage), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 256, kBadPage), 0);
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 383, kBadPage), 0);
+
+ EXPECT_EQ(0, dm_bht_destroy(bht_.get()));
+}
« no previous file with comments | « dm-bht.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698