added encryption test

+ added openssl elliptic diffie-hellman test to server module
This commit is contained in:
michael-bailey 2021-08-03 17:51:03 +01:00
parent 029e00144b
commit 127d88cf86
2 changed files with 62 additions and 0 deletions

61
server/src/encryption.rs Normal file
View File

@ -0,0 +1,61 @@
#[cfg(test)]
use std::borrow::Borrow;
use openssl::ec::*;
// use std::ops::Deref;
use openssl::nid::Nid;
use openssl::ec::EcKey;
use openssl::pkey::PKey;
use openssl::sha::sha256;
use openssl::derive::Deriver;
use openssl::bn::BigNumContext;
use openssl::symm::{Cipher, Crypter, Mode};
#[test]
pub fn test_aes() {
let ec_group1 = EcGroup::from_curve_name(Nid::SECP256K1).unwrap();
let ec_group2 = EcGroup::from_curve_name(Nid::SECP256K1).unwrap();
let eckey1 = EcKey::generate(ec_group1.as_ref()).unwrap();
let eckey2 = EcKey::generate(ec_group2.as_ref()).unwrap();
let pkey1 = PKey::from_ec_key(eckey1).unwrap();
let pkey2 = PKey::from_ec_key(eckey2).unwrap();
let pem1 = pkey1.public_key_to_pem().unwrap();
let pem2 = pkey2.public_key_to_pem().unwrap();
let pub1 = PKey::public_key_from_pem(&pem1).unwrap();
let pub2 = PKey::public_key_from_pem(&pem2).unwrap();
let mut deriver1 = Deriver::new(pkey1.as_ref()).expect("deriver1 failed");
let mut deriver2 = Deriver::new(pkey2.as_ref()).expect("deriver2 failed");
deriver1.set_peer(pub2.as_ref()).unwrap();
deriver2.set_peer(pub1.as_ref()).unwrap();
let shared1 = deriver1.derive_to_vec().unwrap();
let shared2 = deriver2.derive_to_vec().unwrap();
println!("shared1: {:?}", &shared1);
println!("shared2: {:?}", &shared2);
assert_eq!(shared1, shared2);
let plaintext = b"This is a message";
let key = sha256(&shared1);
let iv = b"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
let encrypter = Crypter::new(Cipher::aes_256_gcm(), Mode::Encrypt, &key, Some(iv));
let mut ciphertext = vec![0u8; 1024];
let cipherlen = encrypter.unwrap().update(plaintext, ciphertext.as_mut_slice()).unwrap();
let decrypter = Crypter::new(Cipher::aes_256_gcm(), Mode::Decrypt, &key, Some(iv));
let mut decrypted = vec![0u8; 1024];
decrypter.unwrap().update(&ciphertext[..cipherlen], decrypted.as_mut_slice()).unwrap();
println!("plaintext: {:?}", plaintext);
println!("ciphertext: {:?}", &ciphertext[0..plaintext.len()]);
println!("decryptedtext: {:?}", &decrypted[0..plaintext.len()]);
}

View File

@ -3,6 +3,7 @@ pub mod client_manager;
pub mod messages;
pub mod network_manager;
pub mod server;
pub mod encryption;
use std::io;