greentic_secrets_spec/
key_provider.rs1use crate::{Scope, SecretsResult};
2#[cfg(not(feature = "std"))]
3use alloc::sync::Arc;
4#[cfg(feature = "std")]
5use std::sync::Arc;
6
7pub 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}