summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2015-01-29 14:37:25 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-01-31 05:42:54 +0000
commit62d482ecddf5735076a085859cf40fcfa24671ee (patch)
tree1ec6e692b3ee2b3dd19f07a5ba088964c9b2559b /tests
parent2559338dbdacbcbd3ae426337403196135bbc7e8 (diff)
downloadvboot-62d482ecddf5735076a085859cf40fcfa24671ee.tar.gz
add vb2api_get_pcr_digest
this api allows firmware to get the digest indicating boot mode status. BUG=chromium:451609 TEST=VBOOT2=1 make run2tests BRANCH=tot Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Change-Id: Idca7bc5f6aed947689ad7cf219805aad35047c7d Reviewed-on: https://chromium-review.googlesource.com/244542
Diffstat (limited to 'tests')
-rw-r--r--tests/vb2_api_tests.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/vb2_api_tests.c b/tests/vb2_api_tests.c
index a68b6c56..2978c3fd 100644
--- a/tests/vb2_api_tests.c
+++ b/tests/vb2_api_tests.c
@@ -26,6 +26,12 @@ const char mock_body[320] = "Mock body";
const int mock_body_size = sizeof(mock_body);
const int mock_algorithm = VB2_ALG_RSA2048_SHA256;
const int mock_hash_alg = VB2_HASH_SHA256;
+static const uint8_t mock_hwid_digest[VB2_GBB_HWID_DIGEST_SIZE] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+};
/* Mocked function data */
@@ -59,6 +65,9 @@ static void reset_common_data(enum reset_type t)
retval_vb2_check_dev_switch = VB2_SUCCESS;
retval_vb2_check_tpm_clear = VB2_SUCCESS;
retval_vb2_select_fw_slot = VB2_SUCCESS;
+
+ memcpy(sd->gbb_hwid_digest, mock_hwid_digest,
+ sizeof(sd->gbb_hwid_digest));
};
/* Mocked functions */
@@ -166,11 +175,52 @@ static void phase2_tests(void)
VB2_RECOVERY_FW_SLOT, " recovery reason");
}
+static void get_pcr_digest_tests(void)
+{
+ uint8_t digest[VB2_PCR_DIGEST_RECOMMENDED_SIZE];
+ uint8_t digest_org[VB2_PCR_DIGEST_RECOMMENDED_SIZE];
+ uint32_t digest_size;
+
+ reset_common_data(FOR_MISC);
+ memset(digest_org, 0, sizeof(digest_org));
+
+ digest_size = sizeof(digest);
+ memset(digest, 0, sizeof(digest));
+ TEST_SUCC(vb2api_get_pcr_digest(
+ &cc, BOOT_MODE_PCR, digest, &digest_size),
+ "BOOT_MODE_PCR");
+ TEST_EQ(digest_size, VB2_SHA1_DIGEST_SIZE, "BOOT_MODE_PCR digest size");
+ TEST_TRUE(memcmp(digest, digest_org, digest_size),
+ "BOOT_MODE_PCR digest");
+
+ digest_size = sizeof(digest);
+ memset(digest, 0, sizeof(digest));
+ TEST_SUCC(vb2api_get_pcr_digest(
+ &cc, HWID_DIGEST_PCR, digest, &digest_size),
+ "HWID_DIGEST_PCR");
+ TEST_EQ(digest_size, VB2_GBB_HWID_DIGEST_SIZE,
+ "HWID_DIGEST_PCR digest size");
+ TEST_FALSE(memcmp(digest, mock_hwid_digest, digest_size),
+ "HWID_DIGEST_PCR digest");
+
+ digest_size = 1;
+ TEST_EQ(vb2api_get_pcr_digest(&cc, BOOT_MODE_PCR, digest, &digest_size),
+ VB2_ERROR_API_PCR_DIGEST_BUF,
+ "BOOT_MODE_PCR buffer too small");
+
+ TEST_EQ(vb2api_get_pcr_digest(
+ &cc, HWID_DIGEST_PCR + 1, digest, &digest_size),
+ VB2_ERROR_API_PCR_DIGEST,
+ "invalid enum vb2_pcr_digest");
+}
+
int main(int argc, char* argv[])
{
misc_tests();
phase1_tests();
phase2_tests();
+ get_pcr_digest_tests();
+
return gTestSuccess ? 0 : 255;
}