diff --git a/src/browser/chrome/mod.rs b/src/browser/chrome/mod.rs index b4bb188..b84397a 100644 --- a/src/browser/chrome/mod.rs +++ b/src/browser/chrome/mod.rs @@ -29,4 +29,5 @@ pub enum ChromeVersion { V106, V108, V114, + V129 } diff --git a/src/browser/chrome/ver/mod.rs b/src/browser/chrome/ver/mod.rs index d7f72fe..b14ef16 100644 --- a/src/browser/chrome/ver/mod.rs +++ b/src/browser/chrome/ver/mod.rs @@ -7,6 +7,7 @@ mod v105; mod v106; mod v108; mod v114; +mod v129; pub(super) fn get_config_from_ver(ver: ChromeVersion) -> BrowserSettings { match ver { @@ -15,5 +16,6 @@ pub(super) fn get_config_from_ver(ver: ChromeVersion) -> BrowserSettings { ChromeVersion::V106 => v106::get_settings(), ChromeVersion::V108 => v108::get_settings(), ChromeVersion::V114 => v114::get_settings(), + ChromeVersion::V129 => v129::get_settings(), } } diff --git a/src/browser/chrome/ver/v129.rs b/src/browser/chrome/ver/v129.rs new file mode 100644 index 0000000..5b5625b --- /dev/null +++ b/src/browser/chrome/ver/v129.rs @@ -0,0 +1,85 @@ +use boring::ssl::{ + CertCompressionAlgorithm, SslConnector, SslConnectorBuilder, SslMethod, SslVersion, + SslVerifyMode, +}; +use http::{ + header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, UPGRADE_INSECURE_REQUESTS, USER_AGENT}, + HeaderMap, HeaderValue, +}; +use std::sync::Arc; + +use crate::browser::{BrowserSettings, Http2Data}; + +pub(super) fn get_settings() -> BrowserSettings { + BrowserSettings { + tls_builder_func: Arc::new(create_ssl_connector), + http2: Http2Data { + initial_stream_window_size: 6291456, + initial_connection_window_size: 15728640, + max_concurrent_streams: 1000, + max_header_list_size: 262144, + header_table_size: 65536, + enable_push: Some(false), + }, + headers: create_headers(), + gzip: true, + brotli: true, + } +} + +fn create_ssl_connector() -> SslConnectorBuilder { + let mut builder = SslConnector::builder(SslMethod::tls()).unwrap(); + + builder.set_grease_enabled(true); + builder.enable_ocsp_stapling(); + builder.set_verify(SslVerifyMode::NONE); + + let cipher_list = [ + "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", + ]; + + builder.set_cipher_list(&cipher_list.join(":")).unwrap(); + + let sigalgs_list = [ + "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", + ]; + + builder.set_sigalgs_list(&sigalgs_list.join(":")).unwrap(); + + builder.set_alpn_protos(b"\x02h2\x08http/1.1").unwrap(); + + builder.add_cert_compression_alg(CertCompressionAlgorithm::Brotli).unwrap(); + + builder.enable_signed_cert_timestamps(); + + builder.set_min_proto_version(Some(SslVersion::TLS1_2)).unwrap(); + builder.set_max_proto_version(Some(SslVersion::TLS1_3)).unwrap(); + + builder +} + +fn create_headers() -> HeaderMap { + let mut headers = HeaderMap::new(); + headers +}