Skip to content

Commit 6fa367b

Browse files
0x676e67icrutche
andauthored
Added used_hello_retry_request function (#148)
* merge * Added used_hello_retry_request function (#481) * revert rename after merge --------- Co-authored-by: icrutche <icrutche@gmail.com>
1 parent fb21104 commit 6fa367b

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

btls/src/ssl/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2969,6 +2969,11 @@ impl SslRef {
29692969
}
29702970
}
29712971

2972+
/// Returns whether the TLS 1.3 HelloRetryRequest was used
2973+
pub fn used_hello_retry_request(&self) -> bool {
2974+
unsafe { ffi::SSL_used_hello_retry_request(self.as_ptr()) == 1 }
2975+
}
2976+
29722977
/// Returns an `ErrorCode` value for the most recent operation on this `SslRef`.
29732978
#[corresponds(SSL_get_error)]
29742979
#[must_use]

btls/src/ssl/test/mod.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,6 +1025,51 @@ fn get_curve() {
10251025
assert!(curve_name.is_some());
10261026
}
10271027

1028+
#[test]
1029+
fn used_hello_retry_request_true() {
1030+
let mut server_builder = Server::builder();
1031+
// Configures the server to prefer it's options over the client
1032+
server_builder
1033+
.ctx()
1034+
.set_options(SslOptions::CIPHER_SERVER_PREFERENCE);
1035+
server_builder
1036+
.ctx()
1037+
.set_curves_list("P-256:X25519")
1038+
.unwrap();
1039+
let server = server_builder.build();
1040+
let mut client_builder = server.client_with_root_ca();
1041+
// configures the client to send this supported groups
1042+
client_builder
1043+
.ctx()
1044+
.set_curves_list("X25519:P-256")
1045+
.unwrap();
1046+
1047+
let client_stream = client_builder.connect();
1048+
let ssl = client_stream.ssl();
1049+
assert!(ssl.used_hello_retry_request());
1050+
}
1051+
1052+
#[test]
1053+
fn used_hello_retry_request_false() {
1054+
let mut server_builder = Server::builder();
1055+
// Server doesn't configure CIPHER_SERVER_PREFERENCE, so it will use the preference of the client
1056+
server_builder
1057+
.ctx()
1058+
.set_curves_list("P-256:X25519")
1059+
.unwrap();
1060+
let server = server_builder.build();
1061+
let mut client_builder = server.client_with_root_ca();
1062+
// configures the client to send this supported groups
1063+
client_builder
1064+
.ctx()
1065+
.set_curves_list("X25519:P-256")
1066+
.unwrap();
1067+
1068+
let client_stream = client_builder.connect();
1069+
let ssl = client_stream.ssl();
1070+
assert!(!ssl.used_hello_retry_request());
1071+
}
1072+
10281073
#[test]
10291074
fn test_get_ciphers() {
10301075
let ctx_builder = SslContext::builder(SslMethod::tls()).unwrap();

0 commit comments

Comments
 (0)