greentic_secrets_support/
key_provider.rs

1use greentic_secrets_spec::{Scope, SecretsResult};
2use std::sync::Arc;
3
4/// Trait implemented by key providers responsible for wrapping and unwrapping DEKs.
5pub 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}