Index: gft_verify_keys.sh |
diff --git a/gft_verify_keys.sh b/gft_verify_keys.sh |
index 3bdc5b052b52b114f491a279c2ad082095b5138a..6c6caa007c319d9c57c00170ee54dec5b99da50f 100755 |
--- a/gft_verify_keys.sh |
+++ b/gft_verify_keys.sh |
@@ -9,11 +9,16 @@ |
# booting. |
# |
+alert() { |
+ echo "$*" 1>&2 |
+} |
+ |
if [ "$#" != "2" ]; then |
- echo "ERROR: Usage: $0 kernel_device main_firmware" 1>&2 |
+ alert "ERROR: Usage: $0 kernel_device main_firmware" |
exit 1 |
fi |
+DEVKEYS="/usr/share/vboot/devkeys" |
TMPDIR="$(mktemp -d)" |
KERN_DEV="$(readlink -f "$1")" |
FIRMWARE_IMAGE="$(readlink -f "$2")" |
@@ -26,8 +31,8 @@ invoke() { |
shift |
eval "$@" >_stdout 2>_stderr || result=$? |
if [ "$result" != 0 ]; then |
- echo "ERROR: Failed to $message" 1>&2 |
- echo "Command detail: $@" 1>&2 |
+ alert "ERROR: Failed to $message" |
+ alert "Command detail: $@" |
cat _stdout _stderr 1>&2 |
RETURN=1 |
fi |
@@ -55,9 +60,22 @@ verify_keys() { |
invoke "dump kernel" dd if="$1" bs=1M count=64 of=hd_kern.blob |
invoke "extract firmware" dump_fmap -x "$2" |
invoke "get keys from firmware" \ |
- gbb_utility -g --rootkey rootkey.vbpubk "$GBB" |
+ gbb_utility -g --rootkey rootkey.vbpubk \ |
+ --recoverykey recoverykey.vbpubk "$GBB" |
invoke "unpack rootkey" \ |
vbutil_key --unpack rootkey.vbpubk |
+ invoke "unpack recovery key" \ |
+ vbutil_key --unpack recoverykey.vbpubk |
+ |
+ # check if rootkey is developer key. 130 is the magic number for DEV key |
+ local key |
+ local rootkey_hash="$(od "rootkey.vbpubk" | |
+ head -130 | |
+ md5sum | |
+ sed 's/ .*$//' 2>/dev/null || true)" |
+ if [ "$rootkey_hash" = "a13642246ef93daaf75bd791446fec9b" ]; then |
+ alert "ERROR: YOU ARE TRYING TO FINALIZE WITH DEV ROOTKEY." |
+ fi |
# Verify firmware A/B with root key |
invoke "verify VBLOCK_A with FW_MAIN_A" \ |
@@ -83,6 +101,23 @@ verify_keys() { |
vbutil_kernel --verify $kern --signpubkey $key |
done |
done |
+ |
+ if [ "$RETURN" != "0" ]; then |
+ # Error encountered. Let's try if we can provide more information. |
+ key="recoverykey.vbpubk" |
+ vbutil_kernel --verify "$kern" --signpubkey "$key" >/dev/null 2>&1 && |
+ alert "ERROR: YOU ARE USING A RECOVERY KEY SIGNED IMAGE." || |
+ true |
+ for key in recovery_key.vbpubk kernel_subkey.vbpubk; do |
+ if [ -f "$DEVKEYS/$key" ]; then |
+ vbutil_kernel --verify "$kern" \ |
+ --signpubkey "$DEVKEYS/$key" >/dev/null 2>&1 && |
+ alert "ERROR: YOU ARE FINALIZING WITH DEV-SIGNED IMAGE ($key)." || |
+ true |
+ fi |
+ done |
+ fi |
+ |
return $RETURN |
} |