qemu_rv32_virt_tutorial/
checker_credentials_not_required.rs

1// Licensed under the Apache License, Version 2.0 or the MIT License.
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3// Copyright Tock Contributors 2025.
4
5//! Credential checker wrapper that does not require valid credentials.
6
7use kernel::process_checker::{AppCredentialsPolicy, AppCredentialsPolicyClient};
8use kernel::ErrorCode;
9use tock_tbf::types::TbfFooterV2Credentials;
10
11/// Wrapper struct that changes the return value from
12/// `require_credentials()` but otherwise just passes through calls and
13/// callbacks.
14pub struct AppCheckerCredentialsNotRequired<
15    'a,
16    C: kernel::process_checker::AppCredentialsPolicy<'static>,
17> {
18    checker: &'a C,
19}
20
21impl<'a, C: kernel::process_checker::AppCredentialsPolicy<'static>>
22    AppCheckerCredentialsNotRequired<'a, C>
23{
24    pub fn new(checker: &'a C) -> AppCheckerCredentialsNotRequired<'a, C> {
25        Self { checker }
26    }
27}
28
29impl<C: kernel::process_checker::AppCredentialsPolicy<'static>> AppCredentialsPolicy<'static>
30    for AppCheckerCredentialsNotRequired<'_, C>
31{
32    fn require_credentials(&self) -> bool {
33        false
34    }
35
36    fn check_credentials(
37        &self,
38        credentials: TbfFooterV2Credentials,
39        binary: &'static [u8],
40    ) -> Result<(), (ErrorCode, TbfFooterV2Credentials, &'static [u8])> {
41        self.checker.check_credentials(credentials, binary)
42    }
43
44    fn set_client(&self, client: &'static dyn AppCredentialsPolicyClient<'static>) {
45        self.checker.set_client(client);
46    }
47}