in bindings/rust/standard/bench/src/openssl.rs [55:138]
fn make_config(
mode: Mode,
crypto_config: CryptoConfig,
handshake_type: HandshakeType,
) -> Result<Self, Box<dyn Error>> {
let cipher_suite = match crypto_config.cipher_suite {
CipherSuite::AES_128_GCM_SHA256 => "TLS_AES_128_GCM_SHA256",
CipherSuite::AES_256_GCM_SHA384 => "TLS_AES_256_GCM_SHA384",
};
let ec_key = match crypto_config.kx_group {
KXGroup::Secp256R1 => "P-256",
KXGroup::X25519 => "X25519",
};
let ssl_method = match mode {
Mode::Client => SslMethod::tls_client(),
Mode::Server => SslMethod::tls_server(),
};
let session_ticket_storage = SessionTicketStorage::default();
let mut builder = SslContext::builder(ssl_method)?;
builder.set_min_proto_version(Some(SslVersion::TLS1_3))?;
builder.set_ciphersuites(cipher_suite)?;
builder.set_groups_list(ec_key)?;
match mode {
Mode::Client => {
builder.set_ca_file(get_cert_path(CACert, crypto_config.sig_type))?;
builder.set_verify(SslVerifyMode::FAIL_IF_NO_PEER_CERT | SslVerifyMode::PEER);
match handshake_type {
HandshakeType::MutualAuth => {
builder.set_certificate_chain_file(get_cert_path(
ClientCertChain,
crypto_config.sig_type,
))?;
builder.set_private_key_file(
get_cert_path(ClientKey, crypto_config.sig_type),
SslFiletype::PEM,
)?;
}
HandshakeType::Resumption => {
builder.set_session_cache_mode(SslSessionCacheMode::CLIENT);
// do not attempt to define the callback outside of an
// expression directly passed into the function, because
// the compiler's type inference doesn't work for this
// scenario
// https://github.com/rust-lang/rust/issues/70263
builder.set_new_session_callback({
let sts = session_ticket_storage.clone();
move |_, ticket| {
let _ = sts.stored_ticket.lock().unwrap().insert(ticket);
}
});
}
HandshakeType::ServerAuth => {}
}
}
Mode::Server => {
builder.set_certificate_chain_file(get_cert_path(
ServerCertChain,
crypto_config.sig_type,
))?;
builder.set_private_key_file(
get_cert_path(ServerKey, crypto_config.sig_type),
SslFiletype::PEM,
)?;
if handshake_type == HandshakeType::MutualAuth {
builder.set_ca_file(get_cert_path(CACert, crypto_config.sig_type))?;
builder.set_verify(SslVerifyMode::FAIL_IF_NO_PEER_CERT | SslVerifyMode::PEER);
}
if handshake_type == HandshakeType::Resumption {
builder.set_session_cache_mode(SslSessionCacheMode::CLIENT);
}
}
}
Ok(Self {
config: builder.build(),
session_ticket_storage,
})
}