mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-25 18:55:24 +00:00
futility: Compute / verify root key hash
Ryu will store a hash of the GBB root key in a struct inside its boot
block. Add a vb2_ryu_root_key_hash struct for that.
If 'futility gbb_utility' is used to set the root key, also look for a
root key hash struct and fill it in. No error if not found, because
this needs to work on other platforms where the struct is not present.
This way, we don't need to change the signing scripts.
Added a --roothash option which can be used to check if the root key
hash is found, and if so, whether it's empty, valid, or invalid.
BUG=chromium:511405
BRANCH=ryu
TEST=manual
Take any existing image.bin.
cp image.bin image.orig
gbb_utility --roothash image.bin
- ryu root hash not found
Extract the root key
gbb_utility -k rootkey.bin image.bin
- exported root_key to file: rootkey.bin
Now, append a blank ryu root hash struct to it
echo '0000000: 5274 4b79 4861 7368 0100 0000 3000 0000' | xxd -r >> image.bin
echo '0000000: 0000 0000 0000 0000 0000 0000 0000 0000' | xxd -r >> image.bin
echo '0000000: 0000 0000 0000 0000 0000 0000 0000 0000' | xxd -r >> image.bin
Nothing is set yet
gbb_utility --roothash image.bin
- ryu root hash is unset
Setting the root key also sets the root hash
gbb_utility -s -k rootkey.bin image.bin
- import root_key from rootkey.bin: success
- calculate ryu root hash: success
successfully saved new image to: image.bin
See, it verifies
gbb_utility --roothash image.bin
- ryu root hash verified
Now, append a bad ryu root hash struct to it
cp image.orig image.bin
echo '0000000: 5274 4b79 4861 7368 0100 0000 3000 0000' | xxd -r >> image.bin
echo '0000000: 0001 0000 0000 0000 0000 0000 0000 0000' | xxd -r >> image.bin
echo '0000000: 0000 0000 0000 0000 0000 0000 0000 0000' | xxd -r >> image.bin
See, it fails
gbb_utility --roothash image.bin
- ryu root hash does not verify
Make sure the library doesn't contain the magic string
strings `which futility` | grep RtKyHash
(should be no output)
Change-Id: Ib46f93cac0f2b532bada4b187ae48efcf4926702
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/286237
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
This commit is contained in:
committed by
ChromeOS Commit Bot
parent
a0206634ba
commit
14f122601f
@@ -305,4 +305,40 @@ struct vb2_gbb_header {
|
||||
/* The GBB is used outside of vboot_reference, so this size is important. */
|
||||
#define EXPECTED_VB2_GBB_HEADER_SIZE 128
|
||||
|
||||
/*
|
||||
* Root key hash for Ryu devices only. Contains the hash of the root key.
|
||||
* This will be embedded somewhere inside the RO part of the firmware, so that
|
||||
* it can verify the GBB contains only the official root key.
|
||||
*/
|
||||
|
||||
#define RYU_ROOT_KEY_HASH_MAGIC "RtKyHash"
|
||||
#define RYU_ROOT_KEY_HASH_MAGIC_INVCASE "rTkYhASH"
|
||||
#define RYU_ROOT_KEY_HASH_MAGIC_SIZE 8
|
||||
|
||||
#define RYU_ROOT_KEY_HASH_VERSION_MAJOR 1
|
||||
#define RYU_ROOT_KEY_HASH_VERSION_MINOR 0
|
||||
|
||||
struct vb2_ryu_root_key_hash {
|
||||
/* Magic number (RYU_ROOT_KEY_HASH_MAGIC) */
|
||||
uint8_t magic[RYU_ROOT_KEY_HASH_MAGIC_SIZE];
|
||||
|
||||
/* Version of this struct */
|
||||
uint16_t header_version_major;
|
||||
uint16_t header_version_minor;
|
||||
|
||||
/*
|
||||
* Length of this struct, in bytes, including any variable length data
|
||||
* which follows (there is none, yet).
|
||||
*/
|
||||
uint32_t struct_size;
|
||||
|
||||
/*
|
||||
* SHA-256 hash digest of the entire root key section from the GBB. If
|
||||
* all 0 bytes, all root keys will be treated as if matching.
|
||||
*/
|
||||
uint8_t root_key_hash_digest[32];
|
||||
};
|
||||
|
||||
#define EXPECTED_VB2_RYU_ROOT_KEY_HASH_SIZE 48
|
||||
|
||||
#endif /* VBOOT_REFERENCE_VBOOT_2STRUCT_H_ */
|
||||
|
||||
Reference in New Issue
Block a user