diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/vb2_api_tests.c | 50 |
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; } |