9个版本
0.1.8 | 2021年1月15日 |
---|---|
0.1.7 | 2019年6月2日 |
0.1.4 | 2019年3月30日 |
在网络编程中排名第1138位
每月下载量30次
21KB
231 行
PSK客户端
这是对由openssl crate提供的PSK功能的一个简单包装。欢迎对使其更通用、可用和有信息量的(就错误而言)的PR。
功能
PSK客户端有一个功能,即openssl-vendored
,它只是简单地启用openssl crate的vendored功能,更多详细信息,请参阅openssl-rs文档。
用法
use psk_client::{PskClient, error::PskClientError};
fn main() -> Result<(), PskClientError> {
let client = PskClient::builder("127.0.0.1:4433")
.reset_ciphers()
.cipher("PSK-AES128-CBC-SHA")
.cipher("PSK-AES256-CBC-SHA")
.identity("Client_identity")
.key("4836525835726d466c743469426c55356e377375436254566d51476937724932")
.build()?;
let mut connection = client.connect()?;
if let Err(msg) = connection.write_all(b"Hello, World!") {
eprintln!("Error writing to client: {}", msg);
}
Ok(())
}
密钥也可以从文件(或实现Read
的任何东西)中获取,如下所示
use psk_client::{PskClient, error::PskClientError};
use std::fs::File;
fn main() -> Result<(), PskClientError> {
let key_file = File::open("/some/path/to/psk.key").unwrap();
let client = PskClient::builder("127.0.0.1:4433")
.identity("Client_identity")
.key_from(key_file)?
.build()?;
let mut connection = client.connect()?;
if let Err(msg) = connection.write_all(b"Hello, World!") {
eprintln!("Error writing to client: {}", msg);
}
Ok(())
}
默认加密
默认情况下,客户端将使用以下加密,这可以通过在PskClientBuilder
上调用reset_ciphers()
来清除。您可以通过在PskClientBuilder
上调用cipher("<cipher>")
来提供自己的加密,无论是在清除预定义的加密之后,还是在它们之上,如第一个示例所示。
RSA-PSK-AES256-GCM-SHA384
DHE-PSK-AES256-GCM-SHA384
RSA-PSK-CHACHA20-POLY1305
DHE-PSK-CHACHA20-POLY1305
DHE-PSK-AES256-CCM8
DHE-PSK-AES256-CCM
PSK-AES256-GCM-SHA384
PSK-CHACHA20-POLY1305
PSK-AES256-CCM8
PSK-AES256-CCM
RSA-PSK-AES128-GCM-SHA256
DHE-PSK-AES128-GCM-SHA256
依赖项
~2-3MB
~72K SLoC