greentic_secrets_spec/
key_provider.rs

1use crate::{Scope, SecretsResult};
2#[cfg(not(feature = "std"))]
3use alloc::sync::Arc;
4#[cfg(feature = "std")]
5use std::sync::Arc;
6
7/// Trait implemented by key providers responsible for wrapping and unwrapping DEKs.
8pub trait KeyProvider: Send + Sync {
9    fn wrap_dek(&self, scope: &Scope, dek: &[u8]) -> SecretsResult<Vec<u8>>;
10    fn unwrap_dek(&self, scope: &Scope, wrapped: &[u8]) -> SecretsResult<Vec<u8>>;
11}
12
13impl<T> KeyProvider for Arc<T>
14where
15    T: KeyProvider + ?Sized,
16{
17    fn wrap_dek(&self, scope: &Scope, dek: &[u8]) -> SecretsResult<Vec<u8>> {
18        (**self).wrap_dek(scope, dek)
19    }
20
21    fn unwrap_dek(&self, scope: &Scope, wrapped: &[u8]) -> SecretsResult<Vec<u8>> {
22        (**self).unwrap_dek(scope, wrapped)
23    }
24}
25
26impl<T> KeyProvider for Box<T>
27where
28    T: KeyProvider + ?Sized,
29{
30    fn wrap_dek(&self, scope: &Scope, dek: &[u8]) -> SecretsResult<Vec<u8>> {
31        (**self).wrap_dek(scope, dek)
32    }
33
34    fn unwrap_dek(&self, scope: &Scope, wrapped: &[u8]) -> SecretsResult<Vec<u8>> {
35        (**self).unwrap_dek(scope, wrapped)
36    }
37}