greentic_secrets_support/
key_provider.rs1use greentic_secrets_spec::{Scope, SecretsResult};
2use std::sync::Arc;
3
4pub trait KeyProvider: Send + Sync {
6 fn wrap_dek(&self, scope: &Scope, dek: &[u8]) -> SecretsResult<Vec<u8>>;
7 fn unwrap_dek(&self, scope: &Scope, wrapped: &[u8]) -> SecretsResult<Vec<u8>>;
8}
9
10impl<T> KeyProvider for Arc<T>
11where
12 T: KeyProvider + ?Sized,
13{
14 fn wrap_dek(&self, scope: &Scope, dek: &[u8]) -> SecretsResult<Vec<u8>> {
15 (**self).wrap_dek(scope, dek)
16 }
17
18 fn unwrap_dek(&self, scope: &Scope, wrapped: &[u8]) -> SecretsResult<Vec<u8>> {
19 (**self).unwrap_dek(scope, wrapped)
20 }
21}
22
23impl<T> KeyProvider for Box<T>
24where
25 T: KeyProvider + ?Sized,
26{
27 fn wrap_dek(&self, scope: &Scope, dek: &[u8]) -> SecretsResult<Vec<u8>> {
28 (**self).wrap_dek(scope, dek)
29 }
30
31 fn unwrap_dek(&self, scope: &Scope, wrapped: &[u8]) -> SecretsResult<Vec<u8>> {
32 (**self).unwrap_dek(scope, wrapped)
33 }
34}