Index: src/platform/vboot_reference/vboot_firmware/include/kernel_image_fw.h |
diff --git a/src/platform/vboot_reference/vboot_firmware/include/kernel_image_fw.h b/src/platform/vboot_reference/vboot_firmware/include/kernel_image_fw.h |
index 17458e6edfe5770f40d53a42d29e3975eb843850..03bcf858e2112681a2e29ff69f848594efa092f9 100644 |
--- a/src/platform/vboot_reference/vboot_firmware/include/kernel_image_fw.h |
+++ b/src/platform/vboot_reference/vboot_firmware/include/kernel_image_fw.h |
@@ -49,15 +49,12 @@ typedef struct KernelImage { |
uint64_t bootloader_offset; /* Offset of bootloader in kernel_data. */ |
uint64_t bootloader_size; /* Size of bootloader in bytes. */ |
uint64_t padded_header_size; /* start of kernel_data in disk partition */ |
+ uint8_t* kernel_signature; /* Signature on [kernel_data] below. |
+ * NOTE: This is only considered valid |
+ * if preamble_signature successfully verifies. */ |
/* end of preamble */ |
- |
- uint8_t* preamble_signature; /* Signature on the kernel preamble. */ |
- |
- /* The kernel signature comes first as it may allow us to parallelize |
- * the kernel data fetch and RSA public key operation. |
- */ |
- uint8_t* kernel_signature; /* Signature on the concatenation of |
- * the kernel preamble and [kernel_data]. */ |
+ uint8_t* preamble_signature; /* signature on preamble, (includes |
+ [kernel_signature]) */ |
uint8_t* kernel_data; /* Actual kernel data. */ |
} KernelImage; |
@@ -74,8 +71,9 @@ typedef struct KernelImage { |
extern char* kVerifyKernelErrors[VERIFY_KERNEL_MAX]; |
-/* Returns the length of the verified boot kernel preamble. */ |
-uint64_t GetKernelPreambleLen(void); |
+/* Returns the length of the verified boot kernel preamble based on |
+ * kernel signing algorithm [algorithm]. */ |
+uint64_t GetKernelPreambleLen(int algorithm); |
/* Returns the length of the Kernel Verified Boot header excluding |
* [kernel_data]. |
@@ -111,16 +109,15 @@ int VerifyKernelPreamble(RSAPublicKey* kernel_sign_key, |
int algorithm, |
uint64_t* kernel_len); |
-/* Checks the signature on the kernel data at location [kernel_data_start]. |
- * The length of the actual kernel data is kernel_len and it is assumed to |
- * be prepended with the signature whose size depends on the signature_algorithm |
- * [algorithm]. |
+/* Checks [kernel_signature] on the kernel data at location [kernel_data]. The |
+ * signature is assumed to be generated using algorithm [algorithm]. |
+ * The length of the kernel data is [kernel_len]. |
* |
* Return 0 on success, error code on failure. |
*/ |
int VerifyKernelData(RSAPublicKey* kernel_sign_key, |
- const uint8_t* kernel_config_start, |
- const uint8_t* kernel_data_start, |
+ const uint8_t* kernel_signature, |
+ const uint8_t* kernel_data, |
uint64_t kernel_len, |
int algorithm); |
@@ -128,8 +125,7 @@ int VerifyKernelData(RSAPublicKey* kernel_sign_key, |
* using the firmware public key [firmware_key_blob]. If [dev_mode] is 1 |
* (active), then key header verification is skipped. |
* |
- * Fills in a pointer to preamble blob within [kernel_header_blob] in |
- * [preamble_blob], pointer to expected kernel data signature |
+ * Fills in a pointer to expected kernel data signature |
* within [kernel_header_blob] in [expected_kernel_signature]. |
* |
* The signing key to use for kernel data verification is returned in |
@@ -142,7 +138,6 @@ int VerifyKernelData(RSAPublicKey* kernel_sign_key, |
int VerifyKernelHeader(const uint8_t* firmware_key_blob, |
const uint8_t* kernel_header_blob, |
const int dev_mode, |
- const uint8_t** preamble_blob, |
const uint8_t** expected_kernel_signature, |
RSAPublicKey** kernel_sign_key, |
int* kernel_sign_algorithm, |