ytls_keys/
key_store.rs

1//! keystore
2
3use ytls_traits::SecretStore;
4
5#[cfg(feature = "zeroize")]
6use zeroize::{Zeroize, ZeroizeOnDrop};
7
8/// KeyStore Application
9#[cfg_attr(feature = "zeroize", derive(Zeroize, ZeroizeOnDrop))]
10pub struct KeyStoreAp {
11    application_server_key: [u8; 32],
12    application_client_key: [u8; 32],
13    application_server_iv: [u8; 12],
14    application_client_iv: [u8; 12],
15}
16
17impl Default for KeyStoreAp {
18    fn default() -> Self {
19        Self {
20            application_server_key: [0; 32],
21            application_client_key: [0; 32],
22            application_server_iv: [0; 12],
23            application_client_iv: [0; 12],
24        }
25    }
26}
27
28impl SecretStore for KeyStoreAp {
29    fn store_ap_client_key(&mut self, k: &[u8]) -> () {
30        assert_eq!(k.len(), 32);
31        self.application_client_key.copy_from_slice(k);
32    }
33    fn store_ap_client_iv(&mut self, n: &[u8]) -> () {
34        assert_eq!(n.len(), 12);
35        self.application_client_iv.copy_from_slice(n);
36    }
37    fn store_ap_server_key(&mut self, k: &[u8]) -> () {
38        assert_eq!(k.len(), 32);
39        self.application_server_key.copy_from_slice(k);
40    }
41    fn store_ap_server_iv(&mut self, n: &[u8]) -> () {
42        assert_eq!(n.len(), 12);
43        self.application_server_iv.copy_from_slice(n);
44    }
45    fn load_ap_client_key(&self) -> &[u8] {
46        &self.application_client_key
47    }
48    fn load_ap_client_iv(&self) -> &[u8] {
49        &self.application_client_iv
50    }
51    fn load_ap_server_key(&self) -> &[u8] {
52        &self.application_server_key
53    }
54    fn load_ap_server_iv(&self) -> &[u8] {
55        &self.application_server_iv
56    }
57}