1use ytls_traits::SecretStore;
4
5#[cfg(feature = "zeroize")]
6use zeroize::{Zeroize, ZeroizeOnDrop};
7
8#[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}