Index: src/platform/vboot_reference/tests/firmware_verify_benchmark.c |
diff --git a/src/platform/vboot_reference/tests/firmware_verify_benchmark.c b/src/platform/vboot_reference/tests/firmware_verify_benchmark.c |
index 278cb2961fc784a787333d1e005d7b6e05fa6143..02d0d5d40686fcd808383dd9b33b9435f9711ba5 100644 |
--- a/src/platform/vboot_reference/tests/firmware_verify_benchmark.c |
+++ b/src/platform/vboot_reference/tests/firmware_verify_benchmark.c |
@@ -17,9 +17,22 @@ |
#define FILE_NAME_SIZE 128 |
#define NUM_OPERATIONS 100 /* Number of verify operations to time. */ |
+ |
#define FIRMWARE_SIZE_SMALL 512000 |
#define FIRMWARE_SIZE_MEDIUM 1024000 |
#define FIRMWARE_SIZE_LARGE 4096000 |
+const uint64_t g_firmware_sizes_to_test[] = { |
+ FIRMWARE_SIZE_SMALL, |
+ FIRMWARE_SIZE_MEDIUM, |
+ FIRMWARE_SIZE_LARGE |
+}; |
+const char* g_firmware_size_labels[] = { |
+ "small", |
+ "medium", |
+ "large" |
+}; |
+#define NUM_SIZES_TO_TEST (sizeof(g_firmware_sizes_to_test) / \ |
+ sizeof(g_firmware_sizes_to_test[0])) |
uint8_t* GenerateTestFirmwareBlob(int algorithm, |
int firmware_len, |
@@ -69,7 +82,7 @@ uint8_t* GenerateTestFirmwareBlob(int algorithm, |
} |
int SpeedTestAlgorithm(int algorithm) { |
- int i, key_size, error_code = 0; |
+ int i, j, key_size, error_code = 0; |
ClockTimerState ct; |
double msecs; |
uint64_t len; |
@@ -83,10 +96,9 @@ int SpeedTestAlgorithm(int algorithm) { |
"sha1", "sha256", "sha512", /* RSA-4096 */ |
"sha1", "sha256", "sha512", /* RSA-8192 */ |
}; |
- /* Test for three different firmware sizes. */ |
- uint8_t* firmware_blob_small = NULL; |
- uint8_t* firmware_blob_medium = NULL; |
- uint8_t* firmware_blob_large = NULL; |
+ uint8_t* firmware_blobs[NUM_SIZES_TO_TEST]; |
+ for (i = 0; i < NUM_SIZES_TO_TEST; ++i) |
+ firmware_blobs[i] = NULL; |
key_size = siglen_map[algorithm] * 8; /* in bits. */ |
snprintf(firmware_sign_key_file, FILE_NAME_SIZE, "testkeys/key_rsa%d.pem", |
@@ -101,27 +113,20 @@ int SpeedTestAlgorithm(int algorithm) { |
} |
/* Generate test images. */ |
- firmware_blob_small = GenerateTestFirmwareBlob(algorithm, |
- FIRMWARE_SIZE_SMALL, |
- firmware_sign_key, |
- "testkeys/key_rsa8192.pem", |
- firmware_sign_key_file); |
- firmware_blob_medium = GenerateTestFirmwareBlob(algorithm, |
- FIRMWARE_SIZE_MEDIUM, |
- firmware_sign_key, |
- "testkeys/key_rsa8192.pem", |
- firmware_sign_key_file); |
- firmware_blob_large = GenerateTestFirmwareBlob(algorithm, |
- FIRMWARE_SIZE_LARGE, |
+ for (i = 0; i < NUM_SIZES_TO_TEST; ++i) { |
+ firmware_blobs[i] = GenerateTestFirmwareBlob(algorithm, |
+ g_firmware_sizes_to_test[i], |
firmware_sign_key, |
"testkeys/key_rsa8192.pem", |
firmware_sign_key_file); |
- if (!firmware_blob_small || !firmware_blob_medium || !firmware_blob_large) { |
- fprintf(stderr, "Couldn't generate test firmware images.\n"); |
- error_code = 1; |
- goto cleanup; |
+ if (!firmware_blobs[i]) { |
+ fprintf(stderr, "Couldn't generate test firmware images.\n"); |
+ error_code = 1; |
+ goto cleanup; |
+ } |
} |
+ /* Get pre-processed key used for verification. */ |
root_key_blob = BufferFromFile("testkeys/key_rsa8192.keyb", &len); |
if (!root_key_blob) { |
fprintf(stderr, "Couldn't read pre-processed rootkey.\n"); |
@@ -129,66 +134,33 @@ int SpeedTestAlgorithm(int algorithm) { |
goto cleanup; |
} |
- /* Small.*/ |
- StartTimer(&ct); |
- for (i = 0; i < NUM_OPERATIONS; ++i) { |
- if (VERIFY_FIRMWARE_SUCCESS != |
- VerifyFirmware(root_key_blob, firmware_blob_small, 0)) |
- fprintf(stderr, "Warning: Firmware Verification Failed.\n"); |
- } |
- StopTimer(&ct); |
- msecs = (float) GetDurationMsecs(&ct) / NUM_OPERATIONS; |
- fprintf(stderr, |
- "# Firmware (Small, Algo = %s):" |
- "\t%.02f ms/verification\n", |
- algo_strings[algorithm], msecs); |
- fprintf(stdout, "ms_firmware_sm_rsa%d_%s:%.02f\n", |
- key_size, |
- sha_strings[algorithm], |
- msecs); |
- |
- /* Medium. */ |
- StartTimer(&ct); |
- for (i = 0; i < NUM_OPERATIONS; ++i) { |
- if (VERIFY_FIRMWARE_SUCCESS != |
- VerifyFirmware(root_key_blob, firmware_blob_medium, 0)) |
- fprintf(stderr, "Warning: Firmware Verification Failed.\n"); |
- } |
- StopTimer(&ct); |
- msecs = (float) GetDurationMsecs(&ct) / NUM_OPERATIONS; |
- fprintf(stderr, |
- "# Firmware (Medium, Algo = %s):" |
- "\t%.02f ms/verification\n", |
- algo_strings[algorithm], msecs); |
- fprintf(stdout, "ms_firmware_med_rsa%d_%s:%.02f\n", |
- key_size, |
- sha_strings[algorithm], |
- msecs); |
- |
- |
- /* Large */ |
- StartTimer(&ct); |
- for (i = 0; i < NUM_OPERATIONS; ++i) { |
- if (VERIFY_FIRMWARE_SUCCESS != |
- VerifyFirmware(root_key_blob, firmware_blob_large, 0)) |
- fprintf(stderr, "Warning: Firmware Verification Failed.\n"); |
+ /* Now run the timing tests. */ |
+ for (i = 0; i < NUM_SIZES_TO_TEST; ++i) { |
+ StartTimer(&ct); |
+ for (j = 0; j < NUM_OPERATIONS; ++j) { |
+ if (VERIFY_FIRMWARE_SUCCESS != |
+ VerifyFirmware(root_key_blob, firmware_blobs[i], 0)) |
+ fprintf(stderr, "Warning: Firmware Verification Failed.\n"); |
+ } |
+ StopTimer(&ct); |
+ msecs = (float) GetDurationMsecs(&ct) / NUM_OPERATIONS; |
+ fprintf(stderr, |
+ "# Firmware (%s, Algo = %s):" |
+ "\t%.02f ms/verification\n", |
+ g_firmware_size_labels[i], |
+ algo_strings[algorithm], |
+ msecs); |
+ fprintf(stdout, "ms_firmware_%s_rsa%d_%s:%.02f\n", |
+ g_firmware_size_labels[i], |
+ key_size, |
+ sha_strings[algorithm], |
+ msecs); |
} |
- StopTimer(&ct); |
- msecs = (float) GetDurationMsecs(&ct) / NUM_OPERATIONS; |
- fprintf(stderr, |
- "# Firmware (Large, Algorithm = %s):" |
- "\t%.02f ms/verification\n", |
- algo_strings[algorithm], msecs); |
- fprintf(stdout, "ms_firmware_large_rsa%d_%s:%.02f\n", |
- key_size, |
- sha_strings[algorithm], |
- msecs); |
cleanup: |
+ for (i = 0; i < NUM_SIZES_TO_TEST; i++) |
+ Free(firmware_blobs[i]); |
Free(root_key_blob); |
- Free(firmware_blob_large); |
- Free(firmware_blob_medium); |
- Free(firmware_blob_small); |
return error_code; |
} |