| Index: src/platform/vboot_reference/tests/firmware_image_tests.c
|
| diff --git a/src/platform/vboot_reference/tests/firmware_image_tests.c b/src/platform/vboot_reference/tests/firmware_image_tests.c
|
| index ff7b509cd56b32d5fbe77f21a82a8af8a568c25e..8bb16c6d49cb7de0b6b1d268afe887b64a67b36c 100644
|
| --- a/src/platform/vboot_reference/tests/firmware_image_tests.c
|
| +++ b/src/platform/vboot_reference/tests/firmware_image_tests.c
|
| @@ -31,8 +31,8 @@ int TEST_EQ(int result, int expected_result, char* testname) {
|
| }
|
|
|
| FirmwareImage* GenerateTestFirmwareImage(int algorithm,
|
| - uint8_t* sign_key,
|
| - int key_version,
|
| + uint8_t* firmware_sign_key,
|
| + int firmware_key_version,
|
| int firmware_version,
|
| int firmware_len) {
|
| FirmwareImage* image = FirmwareImageNew();
|
| @@ -40,29 +40,30 @@ FirmwareImage* GenerateTestFirmwareImage(int algorithm,
|
| DigestContext ctx;
|
|
|
| Memcpy(image->magic, FIRMWARE_MAGIC, FIRMWARE_MAGIC_SIZE);
|
| - image->sign_algorithm = algorithm;
|
| - image->sign_key = (uint8_t*) Malloc(
|
| - RSAProcessedKeySize(image->sign_algorithm));
|
| - Memcpy(image->sign_key, sign_key, RSAProcessedKeySize(image->sign_algorithm));
|
| - image->key_version = key_version;
|
| + image->firmware_sign_algorithm = algorithm;
|
| + image->firmware_sign_key = (uint8_t*) Malloc(
|
| + RSAProcessedKeySize(image->firmware_sign_algorithm));
|
| + Memcpy(image->firmware_sign_key, firmware_sign_key,
|
| + RSAProcessedKeySize(image->firmware_sign_algorithm));
|
| + image->firmware_key_version = firmware_key_version;
|
|
|
| /* Update correct header length. */
|
| image->header_len = (sizeof(image->header_len) +
|
| - sizeof(image->sign_algorithm) +
|
| - RSAProcessedKeySize(image->sign_algorithm) +
|
| - sizeof(image->key_version) +
|
| + sizeof(image->firmware_sign_algorithm) +
|
| + RSAProcessedKeySize(image->firmware_sign_algorithm) +
|
| + sizeof(image->firmware_key_version) +
|
| sizeof(image->header_checksum));
|
|
|
| /* Calculate SHA-512 digest on header and populate header_checksum. */
|
| DigestInit(&ctx, ROOT_SIGNATURE_ALGORITHM);
|
| DigestUpdate(&ctx, (uint8_t*) &image->header_len,
|
| sizeof(image->header_len));
|
| - DigestUpdate(&ctx, (uint8_t*) &image->sign_algorithm,
|
| - sizeof(image->sign_algorithm));
|
| - DigestUpdate(&ctx, image->sign_key,
|
| - RSAProcessedKeySize(image->sign_algorithm));
|
| - DigestUpdate(&ctx, (uint8_t*) &image->key_version,
|
| - sizeof(image->key_version));
|
| + DigestUpdate(&ctx, (uint8_t*) &image->firmware_sign_algorithm,
|
| + sizeof(image->firmware_sign_algorithm));
|
| + DigestUpdate(&ctx, image->firmware_sign_key,
|
| + RSAProcessedKeySize(image->firmware_sign_algorithm));
|
| + DigestUpdate(&ctx, (uint8_t*) &image->firmware_key_version,
|
| + sizeof(image->firmware_key_version));
|
| header_checksum = DigestFinal(&ctx);
|
| Memcpy(image->header_checksum, header_checksum, SHA512_DIGEST_SIZE);
|
| Free(header_checksum);
|
| @@ -144,8 +145,8 @@ int VerifyFirmwareImageTamperTest(FirmwareImage* image,
|
|
|
|
|
| fprintf(stderr, "[[Tampering with root key signature...]]\n");
|
| - image->key_signature[0] = 0xFF;
|
| - image->key_signature[1] = 0x00;
|
| + image->firmware_key_signature[0] = 0xFF;
|
| + image->firmware_key_signature[1] = 0x00;
|
| if (!TEST_EQ(VerifyFirmwareImage(root_key, image, DEV_MODE_ENABLED),
|
| VERIFY_FIRMWARE_SUCCESS,
|
| "FirmwareImage Root Signature Tamper Verification (Dev Mode)"))
|
| @@ -160,13 +161,13 @@ int VerifyFirmwareImageTamperTest(FirmwareImage* image,
|
|
|
| int main(int argc, char* argv[]) {
|
| uint32_t len;
|
| - uint8_t* sign_key_buf = NULL;
|
| + uint8_t* firmware_sign_key_buf = NULL;
|
| uint8_t* root_key_blob = NULL;
|
| uint8_t* firmware_blob = NULL;
|
| + int firmware_blob_len = 0;
|
| FirmwareImage* image = NULL;
|
| RSAPublicKey* root_key = NULL;
|
| int error_code = 1;
|
| - char* tmp_firmwareblob_file = ".tmpFirmwareBlob";
|
|
|
| if(argc != 6) {
|
| fprintf(stderr, "Usage: %s <algorithm> <root key> <processed root pubkey>"
|
| @@ -177,11 +178,11 @@ int main(int argc, char* argv[]) {
|
| /* Read verification keys and create a test image. */
|
| root_key = RSAPublicKeyFromFile(argv[3]);
|
| root_key_blob = BufferFromFile(argv[3], &len);
|
| - sign_key_buf = BufferFromFile(argv[5], &len);
|
| - image = GenerateTestFirmwareImage(atoi(argv[1]), sign_key_buf, 1,
|
| + firmware_sign_key_buf = BufferFromFile(argv[5], &len);
|
| + image = GenerateTestFirmwareImage(atoi(argv[1]), firmware_sign_key_buf, 1,
|
| 1, 1000);
|
|
|
| - if (!root_key || !sign_key_buf || !image) {
|
| + if (!root_key || !firmware_sign_key_buf || !image) {
|
| error_code = 1;
|
| goto failure;
|
| }
|
| @@ -193,25 +194,13 @@ int main(int argc, char* argv[]) {
|
| goto failure;
|
| }
|
|
|
| - if (!AddFirmwareSignature(image, argv[4], image->sign_algorithm)) {
|
| + if (!AddFirmwareSignature(image, argv[4])) {
|
| fprintf(stderr, "Couldn't create firmware and preamble signature.\n");
|
| error_code = 1;
|
| goto failure;
|
| }
|
|
|
| -
|
| - /* Generate a firmware binary blob from image.
|
| - *
|
| - * TODO(gauravsh): There should be a function to directly generate a binary
|
| - * blob buffer from a FirmwareImage instead of indirectly writing to a file
|
| - * and reading it into a buffer.
|
| - */
|
| - if (!WriteFirmwareImage(tmp_firmwareblob_file, image)) {
|
| - fprintf(stderr, "Couldn't create a temporary firmware blob file.\n");
|
| - error_code = 1;
|
| - goto failure;
|
| - }
|
| - firmware_blob = BufferFromFile(tmp_firmwareblob_file, &len);
|
| + firmware_blob = GetFirmwareBlob(image, &firmware_blob_len);
|
|
|
| /* Test Firmware blob verify operations. */
|
| if (!VerifyFirmwareTest(firmware_blob, root_key_blob))
|
| @@ -226,7 +215,7 @@ int main(int argc, char* argv[]) {
|
| failure:
|
| Free(firmware_blob);
|
| Free(image);
|
| - Free(sign_key_buf);
|
| + Free(firmware_sign_key_buf);
|
| Free(root_key_blob);
|
| Free(root_key);
|
|
|
|
|