Skip to main content

mega_security_rs/
session.rs

1use rand::RngCore;
2use rsa::{RsaPrivateKey, RsaPublicKey, Pkcs1v15Encrypt};
3
4use crate::SESSION_ID_LENGTH_BYTES;
5
6#[derive(Debug, Default, Clone, PartialEq)]
7pub struct SessionId(Vec<u8>);
8
9impl SessionId {
10    pub fn from_encrypted(enc: SessionIdEncrypted, rsa_priv: &RsaPrivateKey) -> Self {
11        let token = rsa_priv.decrypt(Pkcs1v15Encrypt, &enc.0).expect("failed to encrypt");
12        Self(token.to_vec())
13    }
14}
15
16#[derive(Debug, Default, Clone)]
17pub struct SessionIdEncrypted(Vec<u8>);
18
19impl SessionIdEncrypted {
20    pub fn new(rsa_public: &RsaPublicKey) -> (Self, SessionId) {
21        let mut rng = rand::thread_rng();
22
23        let mut token = [0u8; SESSION_ID_LENGTH_BYTES];
24        rng.fill_bytes(&mut token);
25
26        let enc_token = rsa_public.encrypt(&mut rng, Pkcs1v15Encrypt, &token).expect("failed to encrypt");
27
28        (Self(enc_token.to_vec()), SessionId(token.to_vec()))
29    }
30    
31}