/* Copyright (c) 2010 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. * * Tests for checking firmware rollback-prevention logic. */ #include #include #include "cryptolib.h" #include "file_keys.h" #include "firmware_image.h" #include "utility.h" #include "rollback_index.h" #include "test_common.h" const char* kRootKeyPublicFile = "testkeys/key_rsa8192.keyb"; uint8_t kValidFirmwareData[1] = { 'F' }; uint8_t kCorruptFirmwareData[1] = { 'X' }; /* Tests that check for correctness of the VerifyFirmwareDriver_f() logic * and rollback prevention. */ void VerifyFirmwareDriverTest(void) { uint8_t* verification_blobA = NULL; uint8_t* verification_blobB = NULL; uint64_t len; uint8_t* root_key_pub = BufferFromFile(kRootKeyPublicFile, &len); /* Initialize rollback index state. */ g_firmware_key_version = 1; g_firmware_version = 1; verification_blobA = GenerateRollbackTestVerificationBlob(1, 1); verification_blobB = GenerateRollbackTestVerificationBlob(1, 1); TEST_EQ(VerifyFirmwareDriver_f(root_key_pub, verification_blobA, kValidFirmwareData, verification_blobB, kValidFirmwareData), BOOT_FIRMWARE_A_CONTINUE, "Firmware A (Valid with current version), " "Firmware B (Valid with current version)"); TEST_EQ(VerifyFirmwareDriver_f(root_key_pub, verification_blobA, kCorruptFirmwareData, verification_blobB, kValidFirmwareData), BOOT_FIRMWARE_B_CONTINUE, "Firmware A (Corrupt with current version), " "Firmware B (Valid with current version)"); TEST_EQ(VerifyFirmwareDriver_f(root_key_pub, verification_blobA, kValidFirmwareData, verification_blobB, kCorruptFirmwareData), BOOT_FIRMWARE_A_CONTINUE, "Firmware A (Valid with current version), " "Firmware B (Corrupt with current version)"); TEST_EQ(VerifyFirmwareDriver_f(root_key_pub, verification_blobA, kCorruptFirmwareData, verification_blobB, kCorruptFirmwareData), BOOT_FIRMWARE_RECOVERY_CONTINUE, "Firmware A (Corrupt with current version), " "Firmware B (Corrupt with current version"); g_firmware_key_version = 2; g_firmware_version = 2; TEST_EQ(VerifyFirmwareDriver_f(root_key_pub, verification_blobA, kValidFirmwareData, verification_blobB, kValidFirmwareData), BOOT_FIRMWARE_RECOVERY_CONTINUE, "Firmware A (Valid with old version), " "Old Firmware B (Valid with old version)"); Free(root_key_pub); Free(verification_blobA); Free(verification_blobB); } int main(int argc, char* argv[]) { int error_code = 0; VerifyFirmwareDriverTest(); if (!gTestSuccess) error_code = 255; return error_code; }