1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use rsa::RsaPublicKey;
use crate::secure::{
crypto::{CryptoStore, EncryptType, KeyEncryptType},
SecureHandshakeHeader,
};
use super::SecureHandshakeError;
pub fn to_handshake_packet(
crypto: &CryptoStore,
key: &RsaPublicKey,
) -> Result<Vec<u8>, SecureHandshakeError> {
let encrypted_key = crypto.encrypt_key(key)?;
let handshake_header = SecureHandshakeHeader {
key_encrypt_type: KeyEncryptType::RsaOaepSha1Mgf1Sha1 as u32,
encrypt_type: EncryptType::AesCfb128 as u32,
};
let header_data = bincode::serialize(&handshake_header)?;
Ok([
(encrypted_key.len() as u32).to_le_bytes().into(),
header_data,
encrypted_key,
]
.concat())
}