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

Unified Diff: src/platform/vboot_reference/tests/test_common.c

Issue 1280002: Move test utility functions to a common place. (Closed)
Patch Set: . Created 10 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
Index: src/platform/vboot_reference/tests/test_common.c
diff --git a/src/platform/vboot_reference/tests/test_common.c b/src/platform/vboot_reference/tests/test_common.c
index 4a92f7d898c0ec25a2565e31631388cc0db44d48..5cc0805d2bb495908e95b556151f9aaeb5b70b55 100644
--- a/src/platform/vboot_reference/tests/test_common.c
+++ b/src/platform/vboot_reference/tests/test_common.c
@@ -9,9 +9,13 @@
#include <stdio.h>
+#include "file_keys.h"
+#include "rsa_utility.h"
+#include "utility.h"
+
/* ANSI Color coding sequences. */
#define COL_GREEN "\e[1;32m"
-#define COL_RED "\e[0;31m]"
+#define COL_RED "\e[0;31m"
#define COL_STOP "\e[m"
/* Global test success flag. */
@@ -28,3 +32,184 @@ int TEST_EQ(int result, int expected_result, char* testname) {
return 0;
}
}
+
+FirmwareImage* GenerateTestFirmwareImage(int algorithm,
+ const uint8_t* firmware_sign_key,
+ int firmware_key_version,
+ int firmware_version,
+ int firmware_len,
+ const char* root_key_file,
+ const char* firmware_key_file) {
+ FirmwareImage* image = FirmwareImageNew();
+
+ Memcpy(image->magic, FIRMWARE_MAGIC, FIRMWARE_MAGIC_SIZE);
+ 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 = GetFirmwareHeaderLen(image);
+
+ /* Calculate SHA-512 digest on header and populate header_checksum. */
+ CalculateFirmwareHeaderChecksum(image, image->header_checksum);
+
+ /* Populate firmware and preamble with dummy data. */
+ image->firmware_version = firmware_version;
+ image->firmware_len = firmware_len;
+ image->preamble_signature = image->firmware_signature = NULL;
+ Memset(image->preamble, 'P', FIRMWARE_PREAMBLE_SIZE);
+ image->firmware_data = Malloc(image->firmware_len);
+ Memset(image->firmware_data, 'F', image->firmware_len);
+
+ /* Generate and populate signatures. */
+ if (!AddFirmwareKeySignature(image, root_key_file)) {
+ fprintf(stderr, "Couldn't create key signature.\n");
+ FirmwareImageFree(image);
+ return NULL;
+ }
+
+ if (!AddFirmwareSignature(image, firmware_key_file)) {
+ fprintf(stderr, "Couldn't create firmware and preamble signature.\n");
+ FirmwareImageFree(image);
+ return NULL;
+ }
+ return image;
+}
+
+uint8_t* GenerateTestFirmwareBlob(int algorithm,
+ const uint8_t* firmware_sign_key,
+ int firmware_key_version,
+ int firmware_version,
+ int firmware_len,
+ const char* root_key_file,
+ const char* firmware_key_file) {
+ FirmwareImage* image = NULL;
+ uint8_t* firmware_blob = NULL;
+ uint64_t firmware_blob_len = 0;
+
+ image = GenerateTestFirmwareImage(algorithm,
+ firmware_sign_key,
+ firmware_key_version,
+ firmware_version,
+ firmware_len,
+ root_key_file,
+ firmware_key_file);
+ firmware_blob = GetFirmwareBlob(image, &firmware_blob_len);
+ FirmwareImageFree(image);
+ return firmware_blob;
+}
+
+uint8_t* GenerateRollbackTestImage(int firmware_key_version,
+ int firmware_version,
+ int is_corrupt) {
+ FirmwareImage* image = NULL;
+ uint64_t len;
+ uint8_t* firmware_blob = NULL;
+ uint8_t* firmware_sign_key = NULL;
+
+ firmware_sign_key = BufferFromFile("testkeys/key_rsa1024.keyb",
+ &len);
+ if (!firmware_sign_key)
+ return NULL;
+ image = GenerateTestFirmwareImage(0, /* RSA1024/SHA1 */
+ firmware_sign_key,
+ firmware_key_version,
+ firmware_version,
+ 1, /* Firmware length. */
+ "testkeys/key_rsa8192.pem",
+ "testkeys/key_rsa1024.pem");
+ if (!image)
+ return NULL;
+ if (is_corrupt) {
+ /* Invalidate image. */
+ Memset(image->firmware_data, 'X', image->firmware_len);
+ }
+
+ firmware_blob = GetFirmwareBlob(image, &len);
+ FirmwareImageFree(image);
+ return firmware_blob;
+}
+
+
+KernelImage* GenerateTestKernelImage(int firmware_sign_algorithm,
+ int kernel_sign_algorithm,
+ const uint8_t* kernel_sign_key,
+ int kernel_key_version,
+ int kernel_version,
+ int kernel_len,
+ const char* firmware_key_file,
+ const char* kernel_key_file) {
+ KernelImage* image = KernelImageNew();
+
+ Memcpy(image->magic, KERNEL_MAGIC, KERNEL_MAGIC_SIZE);
+ image->header_version = 1;
+ image->firmware_sign_algorithm = firmware_sign_algorithm;
+ image->kernel_sign_algorithm = kernel_sign_algorithm;
+ image->kernel_key_version = kernel_key_version;
+ image->kernel_sign_key = (uint8_t*) Malloc(
+ RSAProcessedKeySize(image->kernel_sign_algorithm));
+ Memcpy(image->kernel_sign_key, kernel_sign_key,
+ RSAProcessedKeySize(image->kernel_sign_algorithm));
+
+ /* Update correct header length. */
+ image->header_len = GetKernelHeaderLen(image);
+
+ /* Calculate SHA-512 digest on header and populate header_checksum. */
+ CalculateKernelHeaderChecksum(image, image->header_checksum);
+
+ /* Populate kernel options and data with dummy data. */
+ image->kernel_version = kernel_version;
+ image->options.version[0] = 1;
+ image->options.version[1] = 0;
+ Memset(image->options.cmd_line, 0, sizeof(image->options.cmd_line));
+ image->options.kernel_len = kernel_len;
+ image->options.kernel_load_addr = 0;
+ image->options.kernel_entry_addr = 0;
+ image->kernel_key_signature = image->kernel_signature = NULL;
+ image->kernel_data = Malloc(kernel_len);
+ Memset(image->kernel_data, 'F', kernel_len);
+
+ /* Generate and populate signatures. */
+ if (!AddKernelKeySignature(image, firmware_key_file)) {
+ fprintf(stderr, "Couldn't create key signature.\n");
+ KernelImageFree(image);
+ return NULL;
+ }
+
+ if (!AddKernelSignature(image, kernel_key_file)) {
+ fprintf(stderr, "Couldn't create kernel option and kernel signature.\n");
+ KernelImageFree(image);
+ return NULL;
+ }
+
+ return image;
+}
+
+uint8_t* GenerateTestKernelBlob(int firmware_sign_algorithm,
+ int kernel_sign_algorithm,
+ const uint8_t* kernel_sign_key,
+ int kernel_key_version,
+ int kernel_version,
+ int kernel_len,
+ const char* firmware_key_file,
+ const char* kernel_key_file) {
+ KernelImage* image = NULL;
+ uint8_t* kernel_blob = NULL;
+ uint64_t kernel_blob_len = 0;
+
+ image = GenerateTestKernelImage(firmware_sign_algorithm,
+ kernel_sign_algorithm,
+ kernel_sign_key,
+ kernel_key_version,
+ kernel_version,
+ kernel_len,
+ firmware_key_file,
+ kernel_key_file);
+
+ kernel_blob = GetKernelBlob(image, &kernel_blob_len);
+ KernelImageFree(image);
+ return kernel_blob;
+}
« no previous file with comments | « src/platform/vboot_reference/tests/test_common.h ('k') | src/platform/vboot_reference/tests/verify_firmware_fuzz_driver.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698