Index: build_image |
diff --git a/build_image b/build_image |
index 4cbc1dc87c1992db9da2793b1a50b78bcf02d4c6..ea96df66bfe5e93b308365c0df35a9bf3e4d8064 100755 |
--- a/build_image |
+++ b/build_image |
@@ -487,21 +487,40 @@ EOF |
# FIXME: We need to specify the real keys and certs here! |
SIG_DIR="${SRC_ROOT}/platform/vboot_reference/tests/testkeys" |
+ |
+ # Wrap the public keys with VbPublicKey headers |
+ vbutil_key --pack \ |
+ --in "${SIG_DIR}/key_rsa2048.keyb" \ |
+ --version 1 --algorithm 4 \ |
+ --out "${OUTPUT_DIR}/key_alg4.vbpubk" |
+ |
+ vbutil_key --pack \ |
+ --in "${SIG_DIR}/key_rsa4096.keyb" \ |
+ --version 1 --algorithm 8 \ |
+ --out "${OUTPUT_DIR}/key_alg8.vbpubk" |
+ |
+ vbutil_keyblock --pack "${OUTPUT_DIR}/data4_sign8.keyblock" \ |
+ --datapubkey "${OUTPUT_DIR}/key_alg4.vbpubk" \ |
+ --signprivate "${SIG_DIR}/key_rsa4096.pem" \ |
+ --algorithm 8 --flags 3 |
+ |
+ # Verify the keyblock |
+ vbutil_keyblock --unpack "${OUTPUT_DIR}/data4_sign8.keyblock" \ |
+ --signpubkey "${OUTPUT_DIR}/key_alg8.vbpubk" |
+ |
+ # Sign the kernel: |
+ vbutil_kernel --pack "${OUTPUT_DIR}/vmlinuz.image" \ |
+ --keyblock "${OUTPUT_DIR}/data4_sign8.keyblock" \ |
+ --signprivate "${SIG_DIR}/key_rsa2048.pem" \ |
+ --version 1 \ |
+ --config "${OUTPUT_DIR}/config.txt" \ |
+ --bootloader /lib64/bootstub/bootstub.efi \ |
+ --vmlinuz "${ROOT_FS_DIR}/boot/vmlinuz" |
- # Create the kernel partition image. |
- kernel_utility --generate \ |
- --firmware_key "${SIG_DIR}/key_rsa4096.pem" \ |
- --kernel_key "${SIG_DIR}/key_rsa1024.pem" \ |
- --kernel_key_pub "${SIG_DIR}/key_rsa1024.keyb" \ |
- --firmware_sign_algorithm 8 \ |
- --kernel_sign_algorithm 2 \ |
- --kernel_key_version 1 \ |
- --kernel_version 1 \ |
- --config "${OUTPUT_DIR}/config.txt" \ |
- --bootloader /lib64/bootstub/bootstub.efi \ |
- --vmlinuz "${ROOT_FS_DIR}/boot/vmlinuz" \ |
- --out "${OUTPUT_DIR}/vmlinuz.image" |
- |
+ # And verify it |
+ vbutil_kernel --verify "${OUTPUT_DIR}/vmlinuz.image" \ |
+ --signpubkey "${OUTPUT_DIR}/key_alg8.vbpubk" |
+ |
else |
# FIXME: For now, ARM just uses the unsigned kernel by itself. |
cp -f "${ROOT_FS_DIR}/boot/vmlinuz" "${OUTPUT_DIR}/vmlinuz.image" |
@@ -547,13 +566,6 @@ ${SCRIPTS_DIR}/build_gpt.sh \ |
"${OUTPUT_DIR}" \ |
"${OUTPUT_IMG}" |
-# Clean up temporary files. |
-rm -f "${ROOT_FS_IMG}" "${STATEFUL_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \ |
- "${ESP_IMG}" |
-rmdir "${ROOT_FS_DIR}" "${STATEFUL_DIR}" "${ESP_DIR}" |
- |
-OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" |
- |
# Create a recovery image based on the chromium os base image |
[ "$FLAGS_recovery" -eq "$FLAGS_TRUE" ] && create_mod_image "recovery" |
trap - EXIT |
@@ -562,8 +574,19 @@ trap - EXIT |
[ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ] && create_mod_image "dev" |
trap - EXIT |
-# be quiet again |
-set +x |
+# FIXME: only signing things for x86 right now. |
+if [[ "$ARCH" = "x86" ]]; then |
+ # Verify the final image |
+ load_kernel2_test "${PRISTINE_IMAGE_NAME}" "${OUTPUT_DIR}/key_alg8.vbpubk" |
Randall Spangler
2010/06/16 22:50:45
renamed to load_kernel_test, after my latest cl.
|
+fi |
+ |
+# Clean up temporary files. |
+rm -f "${ROOT_FS_IMG}" "${STATEFUL_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \ |
+ "${ESP_IMG}" "${OUTPUT_DIR}/data4_sign8.keyblock" \ |
+ "${OUTPUT_DIR}/key_alg4.vbpubk" "${OUTPUT_DIR}/key_alg8.vbpubk" |
+rmdir "${ROOT_FS_DIR}" "${STATEFUL_DIR}" "${ESP_DIR}" |
+ |
+OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" |
echo "Done. Image created in ${OUTPUT_DIR}" |
echo "Chromium OS image created as $PRISTINE_IMAGE_NAME" |