components/
signature_verify_in_memory_keys.rs1use core::mem::MaybeUninit;
8use kernel::component::Component;
9use kernel::deferred_call::DeferredCallClient;
10
11#[macro_export]
12macro_rules! signature_verify_in_memory_keys_component_static {
13 ($S:ty, $NUM_KEYS:expr, $KL:expr, $HL:expr, $SL:expr $(,)?) => {{
14 let verifier = kernel::static_buf!(
15 capsules_extra::signature_verify_in_memory_keys::SignatureVerifyInMemoryKeys<
16 'static,
17 $S,
18 $NUM_KEYS,
19 $KL,
20 $HL,
21 $SL,
22 >
23 );
24
25 verifier
26 };};
27}
28
29pub type SignatureVerifyInMemoryKeysComponentType<
30 S,
31 const NUM_KEYS: usize,
32 const KL: usize,
33 const HL: usize,
34 const SL: usize,
35> = capsules_extra::signature_verify_in_memory_keys::SignatureVerifyInMemoryKeys<
36 'static,
37 S,
38 NUM_KEYS,
39 KL,
40 HL,
41 SL,
42>;
43
44pub struct SignatureVerifyInMemoryKeysComponent<
45 S: kernel::hil::public_key_crypto::signature::SignatureVerify<'static, HL, SL>
46 + kernel::hil::public_key_crypto::keys::SetKeyBySlice<'static, KL>
47 + 'static,
48 const NUM_KEYS: usize,
49 const KL: usize,
50 const HL: usize,
51 const SL: usize,
52> {
53 verifier: &'static S,
54 keys: &'static mut [&'static mut [u8; KL]],
55}
56
57impl<
58 S: kernel::hil::public_key_crypto::signature::SignatureVerify<'static, HL, SL>
59 + kernel::hil::public_key_crypto::keys::SetKeyBySlice<'static, KL>
60 + 'static,
61 const NUM_KEYS: usize,
62 const KL: usize,
63 const HL: usize,
64 const SL: usize,
65 > SignatureVerifyInMemoryKeysComponent<S, NUM_KEYS, KL, HL, SL>
66{
67 pub fn new(verifier: &'static S, keys: &'static mut [&'static mut [u8; KL]]) -> Self {
68 Self { verifier, keys }
69 }
70}
71
72impl<
73 S: kernel::hil::public_key_crypto::signature::SignatureVerify<'static, HL, SL>
74 + kernel::hil::public_key_crypto::keys::SetKeyBySlice<'static, KL>
75 + 'static,
76 const NUM_KEYS: usize,
77 const KL: usize,
78 const HL: usize,
79 const SL: usize,
80 > Component for SignatureVerifyInMemoryKeysComponent<S, NUM_KEYS, KL, HL, SL>
81{
82 type StaticInput = &'static mut MaybeUninit<
83 capsules_extra::signature_verify_in_memory_keys::SignatureVerifyInMemoryKeys<
84 'static,
85 S,
86 NUM_KEYS,
87 KL,
88 HL,
89 SL,
90 >,
91 >;
92
93 type Output =
94 &'static capsules_extra::signature_verify_in_memory_keys::SignatureVerifyInMemoryKeys<
95 'static,
96 S,
97 NUM_KEYS,
98 KL,
99 HL,
100 SL,
101 >;
102
103 fn finalize(self, s: Self::StaticInput) -> Self::Output {
104 let verifier_multiple_keys = s.write(
105 capsules_extra::signature_verify_in_memory_keys::SignatureVerifyInMemoryKeys::new(
106 self.verifier,
107 ),
108 );
109 self.verifier.set_client(verifier_multiple_keys);
110
111 for (i, k) in self.keys.iter_mut().enumerate() {
112 let _ = verifier_multiple_keys.init_key(i, k);
113 }
114 verifier_multiple_keys.register();
115 verifier_multiple_keys
116 }
117}