@@ -25,7 +25,7 @@ use s2n_tls::{
2525 connection:: Connection ,
2626 error:: Error ,
2727} ;
28- use std:: sync:: Arc ;
28+ use std:: { sync:: Arc , time :: SystemTime } ;
2929
3030pub struct MyCallbackHandler {
3131 done : Arc < AtomicBool > ,
@@ -75,6 +75,31 @@ impl ConnectionFuture for MyConnectionFuture {
7575 }
7676}
7777
78+ pub static TICKET_KEY : [ u8 ; 16 ] = [ 0 ; 16 ] ;
79+ pub static TICKET_KEY_NAME : & [ u8 ] = "keyname" . as_bytes ( ) ;
80+
81+ struct ResumptionConfig ;
82+
83+ impl ResumptionConfig {
84+ fn build ( ) -> Result < s2n_tls:: config:: Config , s2n_tls:: error:: Error > {
85+ let mut config_builder = s2n_tls:: config:: Builder :: new ( ) ;
86+ config_builder
87+ . enable_session_tickets ( true ) ?
88+ . add_session_ticket_key ( TICKET_KEY_NAME , & TICKET_KEY , SystemTime :: now ( ) ) ?
89+ . load_pem ( CERT_PEM . as_bytes ( ) , KEY_PEM . as_bytes ( ) ) ?
90+ . set_security_policy ( & s2n_tls:: security:: DEFAULT_TLS13 ) ?
91+ . enable_quic ( ) ?
92+ . set_application_protocol_preference ( [ b"h3" ] ) ?;
93+ config_builder. build ( )
94+ }
95+ }
96+
97+ impl crate :: ConfigLoader for ResumptionConfig {
98+ fn load ( & mut self , _cx : crate :: ConnectionContext ) -> s2n_tls:: config:: Config {
99+ Self :: build ( ) . expect ( "Config builder failed" )
100+ }
101+ }
102+
78103#[ cfg( any( test, all( s2n_quic_unstable, feature = "unstable_private_key" ) ) ) ]
79104impl PrivateKeyCallback for MyCallbackHandler {
80105 fn handle_operation (
@@ -203,6 +228,10 @@ fn s2n_server_with_client_auth() -> Result<server::Server, Error> {
203228 . build ( )
204229}
205230
231+ fn s2n_server_with_resumption ( ) -> server:: Server < ResumptionConfig > {
232+ server:: Server :: from_loader ( ResumptionConfig )
233+ }
234+
206235fn s2n_server_with_client_auth_verifier_rejects_client_certs ( ) -> Result < server:: Server , Error > {
207236 server:: Builder :: default ( )
208237 . with_empty_trust_store ( ) ?
@@ -288,6 +317,24 @@ fn s2n_client_s2n_server_test() {
288317 run ( & mut server_endpoint, & mut client_endpoint, None ) ;
289318}
290319
320+ #[ test]
321+ #[ cfg_attr( miri, ignore) ]
322+ fn s2n_client_s2n_server_resumption_test ( ) {
323+ let mut client_endpoint = s2n_client ( ) ;
324+ let mut server_endpoint = s2n_server_with_resumption ( ) ;
325+
326+ run ( & mut server_endpoint, & mut client_endpoint, None ) ;
327+ }
328+
329+ #[ test]
330+ #[ cfg_attr( miri, ignore) ]
331+ fn rustls_client_s2n_server_resumption_test ( ) {
332+ let mut client_endpoint = rustls_client ( ) ;
333+ let mut server_endpoint = s2n_server_with_resumption ( ) ;
334+
335+ run ( & mut server_endpoint, & mut client_endpoint, None ) ;
336+ }
337+
291338#[ test]
292339#[ cfg_attr( miri, ignore) ]
293340fn rustls_client_s2n_server_test ( ) {
0 commit comments