components/appid/
checker_sha.rs1use core::mem::MaybeUninit;
8use kernel::component::Component;
9use kernel::hil::digest;
10
11#[macro_export]
12macro_rules! app_checker_sha256_component_static {
13 () => {{
14 let buffer = kernel::static_buf!([u8; 32]);
15 let checker =
16 kernel::static_buf!(capsules_system::process_checker::basic::AppCheckerSha256);
17
18 (checker, buffer)
19 };};
20}
21
22pub type AppCheckerSha256ComponentType = capsules_system::process_checker::basic::AppCheckerSha256;
23
24pub struct AppCheckerSha256Component<S: 'static + digest::Digest<'static, 32>> {
25 sha: &'static S,
26}
27
28impl<S: 'static + digest::Digest<'static, 32>> AppCheckerSha256Component<S> {
29 pub fn new(sha: &'static S) -> Self {
30 Self { sha }
31 }
32}
33
34impl<
35 S: kernel::hil::digest::Sha256
36 + 'static
37 + digest::Digest<'static, 32>
38 + kernel::hil::digest::DigestDataVerify<'static, 32>,
39 > Component for AppCheckerSha256Component<S>
40{
41 type StaticInput = (
42 &'static mut MaybeUninit<capsules_system::process_checker::basic::AppCheckerSha256>,
43 &'static mut MaybeUninit<[u8; 32]>,
44 );
45
46 type Output = &'static capsules_system::process_checker::basic::AppCheckerSha256;
47
48 fn finalize(self, s: Self::StaticInput) -> Self::Output {
49 let buffer = s.1.write([0; 32]);
50
51 let checker = s.0.write(
52 capsules_system::process_checker::basic::AppCheckerSha256::new(self.sha, buffer),
53 );
54
55 digest::Digest::set_client(self.sha, checker);
56
57 checker
58 }
59}