use super::*;
macro_rules! tls_options {
($curves:expr) => {
OperaTlsConfig::builder()
.curves($curves)
.permute_extensions(true)
.pre_shared_key(true)
.enable_ech_grease(true)
.build()
.into()
};
}
pub const CURVES: &str = join!(":", "X25519MLKEM768", "X25519", "P-256", "P-384");
pub const CIPHER_LIST: &str = join!(
":",
"TLS_AES_128_GCM_SHA256",
"TLS_AES_256_GCM_SHA384",
"TLS_CHACHA20_POLY1305_SHA256",
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
"TLS_RSA_WITH_AES_128_GCM_SHA256",
"TLS_RSA_WITH_AES_256_GCM_SHA384",
"TLS_RSA_WITH_AES_128_CBC_SHA",
"TLS_RSA_WITH_AES_256_CBC_SHA"
);
pub const SIGALGS_LIST: &str = join!(
":",
"ecdsa_secp256r1_sha256",
"rsa_pss_rsae_sha256",
"rsa_pkcs1_sha256",
"ecdsa_secp384r1_sha384",
"rsa_pss_rsae_sha384",
"rsa_pkcs1_sha384",
"rsa_pss_rsae_sha512",
"rsa_pkcs1_sha512"
);
pub const CERT_COMPRESSION_ALGORITHM: &[CertificateCompressionAlgorithm] =
&[CertificateCompressionAlgorithm::BROTLI];
#[derive(TypedBuilder)]
pub struct OperaTlsConfig {
#[builder(default = CURVES)]
curves: &'static str,
#[builder(default = SIGALGS_LIST)]
sigalgs_list: &'static str,
#[builder(default = CIPHER_LIST)]
cipher_list: &'static str,
#[builder(default = AlpsProtocol::HTTP2, setter(into))]
alps_protos: AlpsProtocol,
#[builder(default = false)]
alps_use_new_codepoint: bool,
#[builder(default = false, setter(into))]
enable_ech_grease: bool,
#[builder(default = false, setter(into))]
permute_extensions: bool,
#[builder(default = false, setter(into))]
pre_shared_key: bool,
}
impl From<OperaTlsConfig> for TlsOptions {
fn from(val: OperaTlsConfig) -> Self {
TlsOptions::builder()
.grease_enabled(true)
.enable_ocsp_stapling(true)
.enable_signed_cert_timestamps(true)
.curves_list(val.curves)
.sigalgs_list(val.sigalgs_list)
.cipher_list(val.cipher_list)
.min_tls_version(TlsVersion::TLS_1_2)
.max_tls_version(TlsVersion::TLS_1_3)
.permute_extensions(val.permute_extensions)
.pre_shared_key(val.pre_shared_key)
.enable_ech_grease(val.enable_ech_grease)
.alps_protocols([val.alps_protos])
.alps_use_new_codepoint(val.alps_use_new_codepoint)
.aes_hw_override(true)
.certificate_compression_algorithms(CERT_COMPRESSION_ALGORITHM)
.build()
}
}