| Index: build_kernel_image.sh
|
| diff --git a/build_kernel_image.sh b/build_kernel_image.sh
|
| index d0c3599feaf5ad9c7e4da29f3daad325c2d2ed0f..e7e771160c32825a8655069e4e0a15a976b9da36 100755
|
| --- a/build_kernel_image.sh
|
| +++ b/build_kernel_image.sh
|
| @@ -22,7 +22,7 @@ DEFINE_string working_dir "/tmp/vmlinuz.working" \
|
| DEFINE_boolean keep_work ${FLAGS_FALSE} \
|
| "Keep temporary files (*.keyblock, *.vbpubk). (Default: false)"
|
| DEFINE_string keys_dir "${SRC_ROOT}/platform/vboot_reference/tests/testkeys" \
|
| - "Directory with the signing keys. (Defaults to test keys)"
|
| + "Directory with the RSA signing keys. (Defaults to test keys)"
|
| # Note, to enable verified boot, the caller would pass:
|
| # --boot_args='dm="... /dev/sd%D%P /dev/sd%D%P ..." \
|
| # --root=/dev/dm-0
|
| @@ -65,41 +65,64 @@ ${FLAGS_boot_args}
|
| EOF
|
| WORK="${FLAGS_working_dir}/config.txt"
|
|
|
| -# Wrap the public keys with VbPublicKey headers.
|
| +
|
| +# FIX: The .vbprivk files are not encrypted, so we shouldn't just leave them
|
| +# lying around as a general thing.
|
| +
|
| +# Wrap the kernel data keypair, used for the kernel body
|
| vbutil_key \
|
| - --pack \
|
| - --in "${FLAGS_keys_dir}/key_rsa2048.keyb" \
|
| + --pack "${FLAGS_working_dir}/kernel_data_key.vbpubk" \
|
| + --key "${FLAGS_keys_dir}/key_rsa2048.keyb" \
|
| --version 1 \
|
| - --algorithm 4 \
|
| - --out "${FLAGS_working_dir}/key_alg4.vbpubk"
|
| -WORK="${WORK} ${FLAGS_working_dir}/key_alg4.vbpubk"
|
| + --algorithm 4
|
| +WORK="${WORK} ${FLAGS_working_dir}/kernel_data_key.vbpubk"
|
| +
|
| +vbutil_key \
|
| + --pack "${FLAGS_working_dir}/kernel_data_key.vbprivk" \
|
| + --key "${FLAGS_keys_dir}/key_rsa2048.pem" \
|
| + --algorithm 4
|
| +WORK="${WORK} ${FLAGS_working_dir}/kernel_data_key.vbprivk"
|
| +
|
|
|
| +# Wrap the kernel subkey pair, used for the kernel's keyblock
|
| vbutil_key \
|
| - --pack \
|
| - --in "${FLAGS_keys_dir}/key_rsa4096.keyb" \
|
| + --pack "${FLAGS_working_dir}/kernel_subkey.vbpubk" \
|
| + --key "${FLAGS_keys_dir}/key_rsa4096.keyb" \
|
| --version 1 \
|
| - --algorithm 8 \
|
| - --out "${FLAGS_working_dir}/key_alg8.vbpubk"
|
| -WORK="${WORK} ${FLAGS_working_dir}/key_alg8.vbpubk"
|
| + --algorithm 8
|
| +WORK="${WORK} ${FLAGS_working_dir}/kernel_subkey.vbpubk"
|
|
|
| +vbutil_key \
|
| + --pack "${FLAGS_working_dir}/kernel_subkey.vbprivk" \
|
| + --key "${FLAGS_keys_dir}/key_rsa4096.pem" \
|
| + --algorithm 8
|
| +WORK="${WORK} ${FLAGS_working_dir}/kernel_subkey.vbprivk"
|
| +
|
| +
|
| +# Create the kernel keyblock, containing the kernel data key
|
| vbutil_keyblock \
|
| - --pack "${FLAGS_working_dir}/data4_sign8.keyblock" \
|
| - --datapubkey "${FLAGS_working_dir}/key_alg4.vbpubk" \
|
| - --signprivate "${FLAGS_keys_dir}/key_rsa4096.pem" \
|
| - --algorithm 8 \
|
| + --pack "${FLAGS_working_dir}/kernel.keyblock" \
|
| + --datapubkey "${FLAGS_working_dir}/kernel_data_key.vbpubk" \
|
| + --signprivate "${FLAGS_working_dir}/kernel_subkey.vbprivk" \
|
| --flags 15
|
| -WORK="${WORK} ${FLAGS_working_dir}/data4_sign8.keyblock"
|
| +WORK="${WORK} ${FLAGS_working_dir}/kernel.keyblock"
|
|
|
| # Verify the keyblock.
|
| vbutil_keyblock \
|
| - --unpack "${FLAGS_working_dir}/data4_sign8.keyblock" \
|
| - --signpubkey "${FLAGS_working_dir}/key_alg8.vbpubk"
|
| + --unpack "${FLAGS_working_dir}/kernel.keyblock" \
|
| + --signpubkey "${FLAGS_working_dir}/kernel_subkey.vbpubk"
|
| +
|
| +# TODO: We should sign the kernel blob using the recovery root key and recovery
|
| +# kernel data key instead (to create the recovery image), and then re-sign it
|
| +# this way for the install image. But we'll want to keep the install vblock
|
| +# separate, so we can just copy that part over separately when we install it
|
| +# instead of the whole kernel blob.
|
|
|
| -# Sign the kernel:
|
| +# Create and sign the kernel blob
|
| vbutil_kernel \
|
| --pack "${FLAGS_to}" \
|
| - --keyblock "${FLAGS_working_dir}/data4_sign8.keyblock" \
|
| - --signprivate "${FLAGS_keys_dir}/key_rsa2048.pem" \
|
| + --keyblock "${FLAGS_working_dir}/kernel.keyblock" \
|
| + --signprivate "${FLAGS_working_dir}/kernel_data_key.vbprivk" \
|
| --version 1 \
|
| --config "${FLAGS_working_dir}/config.txt" \
|
| --bootloader /lib64/bootstub/bootstub.efi \
|
| @@ -108,7 +131,7 @@ vbutil_kernel \
|
| # And verify it.
|
| vbutil_kernel \
|
| --verify "${FLAGS_to}" \
|
| - --signpubkey "${FLAGS_working_dir}/key_alg8.vbpubk"
|
| + --signpubkey "${FLAGS_working_dir}/kernel_subkey.vbpubk"
|
|
|
| else
|
| # FIXME: For now, ARM just uses the unsigned kernel by itself.
|
|
|