| // Copyright 2021 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. |
| |
| use zerocopy::{ |
| byteorder::network_endian::{U32, U64}, |
| AsBytes, FromBytes, FromZeros, NoCell, |
| }; |
| |
| // Supported minimum platform AVB version. |
| const MIN_AVB_VERSION_MAJOR: u32 = 1; |
| const MIN_AVB_VERSION_MINOR: u32 = 0; |
| |
| // AVB version of this library. |
| const AVB_VERSION_MAJOR: u32 = 1; |
| const AVB_VERSION_MINOR: u32 = 2; |
| const AVB_VERSION_SUB: u32 = 0; |
| |
| const ALGORITHM: u32 = 5; // SHA256 |
| |
| fn get_release_string() -> String { |
| format!("avbtool {}.{}.{}", AVB_VERSION_MAJOR, AVB_VERSION_MINOR, AVB_VERSION_SUB) |
| } |
| |
| #[derive(AsBytes, FromZeros, FromBytes, NoCell, Debug, PartialEq)] |
| #[repr(C, packed)] |
| #[allow(missing_docs)] |
| pub struct Header { |
| magic: [u8; 4], |
| pub min_avb_version_major: U32, |
| pub min_avb_version_minor: U32, |
| pub auth_data_size: U64, |
| pub aux_data_size: U64, |
| pub alg: U32, |
| pub hash_offset: U64, |
| pub hash_size: U64, |
| pub signature_offset: U64, |
| pub signature_size: U64, |
| pub public_key_offset: U64, |
| pub public_key_size: U64, |
| pub public_key_metadata_offset: U64, |
| pub public_key_metadata_size: U64, |
| pub descriptors_offset: U64, |
| pub descriptors_size: U64, |
| pub rollback_index: U64, |
| pub flags: U32, |
| pub rollback_index_location: U32, |
| release_string: [u8; 47], |
| pad: [u8; 81], |
| } |
| |
| impl Default for Header { |
| fn default() -> Header { |
| let release_string: String = get_release_string(); |
| let mut release_string_bytes = [0u8; 47]; |
| release_string_bytes[0..release_string.len()].copy_from_slice(release_string.as_bytes()); |
| |
| Header { |
| magic: *b"AVB0", |
| min_avb_version_major: U32::new(MIN_AVB_VERSION_MAJOR), |
| min_avb_version_minor: U32::new(MIN_AVB_VERSION_MINOR), |
| auth_data_size: U64::new(0), |
| aux_data_size: U64::new(0), |
| alg: U32::new(ALGORITHM), |
| hash_offset: U64::new(0), |
| hash_size: U64::new(0), |
| signature_offset: U64::new(0), |
| signature_size: U64::new(0), |
| public_key_offset: U64::new(0), |
| public_key_size: U64::new(0), |
| public_key_metadata_offset: U64::new(0), |
| public_key_metadata_size: U64::new(0), |
| descriptors_offset: U64::new(0), |
| descriptors_size: U64::new(0), |
| rollback_index: U64::new(0), |
| flags: U32::new(0), |
| rollback_index_location: U32::new(0), |
| release_string: release_string_bytes, |
| pad: [0u8; 81], |
| } |
| } |
| } |