ADDED: Encrypted client connections in library(sockets) via new option tls/1.

Use tls(true) to negotiate an encrypted network connection via TLS.
This commit is contained in:
Markus Triska
2020-06-07 18:12:29 +02:00
parent d5e76da475
commit 7b30daf88d
6 changed files with 70 additions and 7 deletions

View File

@@ -49,6 +49,8 @@ use openssl::ec::{EcGroup, EcPoint};
use openssl::bn::{BigNum, BigNumContext};
use openssl::nid::Nid;
use native_tls::TlsConnector;
pub fn get_key() -> KeyEvent {
let key;
enable_raw_mode().expect("failed to enable raw mode");
@@ -4517,7 +4519,30 @@ impl MachineState {
Ok(tcp_stream) => {
let socket_addr = clause_name!(socket_addr, indices.atom_tbl.clone());
let mut stream = Stream::from_tcp_stream(socket_addr, tcp_stream);
let mut stream =
{ let tls = match self.store(self.deref(self[temp_v!(8)])) {
Addr::Con(h) if self.heap.atom_at(h) => {
if let HeapCellValue::Atom(ref atom, _) = &self.heap[h] {
atom.as_str()
} else {
unreachable!()
}
}
_ => {
unreachable!()
}
};
match tls {
"false" => { Stream::from_tcp_stream(socket_addr, tcp_stream) }
"true" => { let connector = TlsConnector::new().unwrap();
let stream = connector.connect(socket_atom.as_str(), tcp_stream).unwrap();
Stream::from_tls_stream(socket_addr, stream)
}
_ => { unreachable!() }
}
};
stream.options = options;
if let Some(ref alias) = &stream.options.alias {