mega_security_rs/
session.rs1use 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}