cratestack_cose/keys/
static_resolver.rs1use cratestack_core::CratestackError;
4
5use super::traits::CoseVerifierResolver;
6use super::verify_key::CoseVerifyKey;
7use crate::alg::CoseAlg;
8
9#[derive(Debug, Clone, Default)]
17pub struct StaticVerifierResolver {
18 keys: Vec<CoseVerifyKey>,
19}
20
21impl StaticVerifierResolver {
22 pub fn new() -> Self {
24 Self::default()
25 }
26
27 pub fn with_key(mut self, key: CoseVerifyKey) -> Self {
31 self.keys.push(key);
32 self
33 }
34}
35
36#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
37#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
38impl CoseVerifierResolver for StaticVerifierResolver {
39 async fn resolve(
40 &self,
41 kid: &[u8],
42 alg: CoseAlg,
43 ) -> Result<Vec<CoseVerifyKey>, CratestackError> {
44 Ok(self
45 .keys
46 .iter()
47 .filter(|key| key.kid().as_slice() == kid && key.supports(alg))
48 .cloned()
49 .collect())
50 }
51}