1use crate::{SSKRError, MIN_SECRET_LEN, MAX_SECRET_LEN};
2
3#[derive(Clone, Debug, Eq, PartialEq)]
5pub struct Secret(Vec<u8>);
6
7impl Secret {
8 pub fn new<T>(data: T) -> Result<Self, SSKRError>
19 where
20 T: AsRef<[u8]>,
21 {
22 let data = data.as_ref();
23 let len = data.len();
24 if len < MIN_SECRET_LEN {
25 return Err(SSKRError::SecretTooShort);
26 }
27 if len > MAX_SECRET_LEN {
28 return Err(SSKRError::SecretTooLong);
29 }
30 if len & 1 != 0 {
31 return Err(SSKRError::SecretLengthNotEven);
32 }
33 Ok(Self(data.to_vec()))
34 }
35
36 pub fn len(&self) -> usize {
38 self.0.len()
39 }
40
41 pub fn is_empty(&self) -> bool {
43 self.len() == 0
44 }
45
46 pub fn data(&self) -> &[u8] {
48 &self.0
49 }
50}
51
52impl AsRef<[u8]> for Secret {
53 fn as_ref(&self) -> &[u8] {
55 &self.0
56 }
57}