| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVICES_BLOCK_DRIVERS_BLOCK_VERITY_SUPERBLOCK_H_ |
| #define SRC_DEVICES_BLOCK_DRIVERS_BLOCK_VERITY_SUPERBLOCK_H_ |
| |
| #include <stdint.h> |
| |
| #include "src/devices/block/drivers/block-verity/constants.h" |
| |
| namespace block_verity { |
| |
| // This is the packed, on-disk structure of a block-verity superblock. Integral |
| // fields larger than one byte should be serialized in little-endian form. |
| struct __PACKED Superblock { |
| uint8_t magic[16]; // expected to be kBlockVerityMagic, which is "block-verity-v1\0" |
| uint64_t block_count; // number of virtual blocks in the device |
| uint32_t block_size; // size of each virtual block, in bytes. |
| uint32_t hash_function; // expected to be kSHA256HashTag, which is 1 |
| uint8_t integrity_root_hash[32]; // SHA256 hash of root integrity block |
| uint8_t pad[4032]; |
| }; |
| static_assert(sizeof(Superblock) == kBlockSize, "sizeof(Superblock) != kBlockSize"); |
| |
| } // namespace block_verity |
| |
| #endif // SRC_DEVICES_BLOCK_DRIVERS_BLOCK_VERITY_SUPERBLOCK_H_ |