1use crate::signatures::{FunctionCode, Pubkey};
2
3pub mod bao1;
4pub mod bao2;
5pub mod beta;
6pub mod developer;
7
8pub const BAO1_KEY_SLOT: usize = 0;
9pub const BAO2_KEY_SLOT: usize = 1;
10pub const BETA_KEY_SLOT: usize = 2;
11pub const DEVELOPER_KEY_SLOT: usize = 3;
12
13pub const KEYSLOT_INITIAL_TAGS: [&'static [u8; 4]; 4] = [b"bao1", b"bao2", b"beta", b"dev "];
25
26#[allow(dead_code)]
29const fn pad_array<const N: usize, const M: usize>(input: &[u8; N]) -> [u8; M] {
30 let mut result = [0u8; M];
31 let mut i = 0;
32 while i < N && i < M {
33 result[i] = input[i];
34 i += 1;
35 }
36 result
37}
38
39pub const PUBKEY_HEADER: [Pubkey; 4] = [bao1::PUBKEY, bao2::PUBKEY, beta::PUBKEY, developer::PUBKEY];
41
42#[derive(Copy, Clone)]
53pub struct SecurityConfiguration {
54 pub image_ptr: *const u32,
55 pub pubkey_ptr: *const u32,
56 pub revocation_owc: usize,
57 pub function_codes: &'static [u32],
58}
59
60pub const BOOT0_SELF_CHECK: SecurityConfiguration = SecurityConfiguration {
61 image_ptr: crate::BOOT0_START as *const u32,
62 pubkey_ptr: crate::BOOT0_START as *const u32,
63 revocation_owc: crate::BOOT0_REVOCATION_OFFSET,
64 function_codes: &[FunctionCode::Boot0 as u32],
65};
66
67pub const BOOT0_TO_BOOT1: SecurityConfiguration = SecurityConfiguration {
68 image_ptr: crate::BOOT1_START as *const u32,
69 pubkey_ptr: crate::BOOT0_START as *const u32,
70 revocation_owc: crate::BOOT0_REVOCATION_OFFSET,
71 function_codes: &[FunctionCode::Boot1 as u32, FunctionCode::UpdatedBoot1 as u32],
72};
73
74pub const BOOT0_TO_ALTBOOT1: SecurityConfiguration = SecurityConfiguration {
77 image_ptr: crate::LOADER_START as *const u32,
78 pubkey_ptr: crate::BOOT0_START as *const u32,
79 revocation_owc: crate::BOOT0_REVOCATION_OFFSET,
80 function_codes: &[
81 FunctionCode::Boot1 as u32,
82 FunctionCode::UpdatedBoot1 as u32,
83 FunctionCode::Baremetal as u32,
84 ],
85};
86
87pub const BOOT1_TO_LOADER_OR_BAREMETAL: SecurityConfiguration = SecurityConfiguration {
88 image_ptr: crate::LOADER_START as *const u32,
89 pubkey_ptr: crate::BOOT1_START as *const u32,
90 revocation_owc: crate::BOOT1_REVOCATION_OFFSET,
91 function_codes: &[
92 FunctionCode::Baremetal as u32,
93 FunctionCode::UpdatedBaremetal as u32,
94 FunctionCode::Loader as u32,
95 FunctionCode::UpdatedLoader as u32,
96 ],
97};
98
99pub const LOADER_TO_KERNEL: SecurityConfiguration = SecurityConfiguration {
100 image_ptr: crate::KERNEL_START as *const u32,
101 pubkey_ptr: crate::LOADER_START as *const u32,
102 revocation_owc: crate::LOADER_REVOCATION_OFFSET,
103 function_codes: &[FunctionCode::Kernel as u32, FunctionCode::UpdatedKernel as u32],
104};
105
106pub const LOADER_TO_DETACHED_APP: SecurityConfiguration = SecurityConfiguration {
107 image_ptr: crate::offsets::dabao::APP_RRAM_START as *const u32,
108 pubkey_ptr: crate::LOADER_START as *const u32,
109 revocation_owc: crate::LOADER_REVOCATION_OFFSET,
110 function_codes: &[FunctionCode::App as u32, FunctionCode::UpdatedApp as u32],
111};
112
113pub const LOADER_TO_SWAP: SecurityConfiguration = SecurityConfiguration {
114 image_ptr: (crate::offsets::baosec::SWAP_HEADER_LEN - crate::signatures::SIGBLOCK_LEN) as *const u32,
115 pubkey_ptr: crate::LOADER_START as *const u32,
116 revocation_owc: crate::LOADER_REVOCATION_OFFSET,
117 function_codes: &[FunctionCode::Swap as u32, FunctionCode::UpdatedSwap as u32],
118};