steam_crypto/
session_key.rs1use rand::RngCore;
4
5#[derive(Clone)]
7pub struct SessionKey {
8 key: [u8; 32],
10}
11
12impl SessionKey {
13 pub fn generate() -> Self {
15 let mut key = [0u8; 32];
16 rand::rng().fill_bytes(&mut key);
17 Self { key }
18 }
19
20 pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
22 if bytes.len() != 32 {
23 return None;
24 }
25 let mut key = [0u8; 32];
26 key.copy_from_slice(bytes);
27 Some(Self { key })
28 }
29
30 pub fn as_bytes(&self) -> &[u8; 32] {
32 &self.key
33 }
34
35 pub fn aes_key(&self) -> &[u8] {
37 &self.key[..16]
38 }
39
40 pub fn hmac_key(&self) -> &[u8] {
42 &self.key[16..]
43 }
44}
45
46impl std::fmt::Debug for SessionKey {
47 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48 write!(f, "SessionKey([REDACTED])")
49 }
50}