@@ -5418,6 +5418,75 @@ fn test_secret_extraction_enabled() {
5418
5418
}
5419
5419
}
5420
5420
5421
+ #[ test]
5422
+ fn test_secret_extract_produces_correct_variant ( ) {
5423
+ fn check ( suite : SupportedCipherSuite , f : impl Fn ( ConnectionTrafficSecrets ) -> bool ) {
5424
+ let kt = KeyType :: Rsa ;
5425
+
5426
+ let provider: Arc < CryptoProvider > = CryptoProvider {
5427
+ cipher_suites : vec ! [ suite] ,
5428
+ ..provider:: default_provider ( )
5429
+ }
5430
+ . into ( ) ;
5431
+
5432
+ let mut server_config = finish_server_config (
5433
+ kt,
5434
+ ServerConfig :: builder_with_provider ( provider. clone ( ) )
5435
+ . with_safe_default_protocol_versions ( )
5436
+ . unwrap ( ) ,
5437
+ ) ;
5438
+
5439
+ server_config. enable_secret_extraction = true ;
5440
+ let server_config = Arc :: new ( server_config) ;
5441
+
5442
+ let mut client_config = finish_client_config (
5443
+ kt,
5444
+ ClientConfig :: builder_with_provider ( provider)
5445
+ . with_safe_default_protocol_versions ( )
5446
+ . unwrap ( ) ,
5447
+ ) ;
5448
+ client_config. enable_secret_extraction = true ;
5449
+
5450
+ let ( mut client, mut server) =
5451
+ make_pair_for_arc_configs ( & Arc :: new ( client_config) , & server_config) ;
5452
+
5453
+ do_handshake ( & mut client, & mut server) ;
5454
+
5455
+ let client_secrets = client
5456
+ . dangerous_extract_secrets ( )
5457
+ . unwrap ( ) ;
5458
+ let server_secrets = server
5459
+ . dangerous_extract_secrets ( )
5460
+ . unwrap ( ) ;
5461
+
5462
+ assert ! ( f( client_secrets. tx. 1 ) ) ;
5463
+ assert ! ( f( client_secrets. rx. 1 ) ) ;
5464
+ assert ! ( f( server_secrets. tx. 1 ) ) ;
5465
+ assert ! ( f( server_secrets. rx. 1 ) ) ;
5466
+ }
5467
+
5468
+ check ( cipher_suite:: TLS13_AES_128_GCM_SHA256 , |sec| {
5469
+ matches ! ( sec, ConnectionTrafficSecrets :: Aes128Gcm { .. } )
5470
+ } ) ;
5471
+ check ( cipher_suite:: TLS13_AES_256_GCM_SHA384 , |sec| {
5472
+ matches ! ( sec, ConnectionTrafficSecrets :: Aes256Gcm { .. } )
5473
+ } ) ;
5474
+ check ( cipher_suite:: TLS13_CHACHA20_POLY1305_SHA256 , |sec| {
5475
+ matches ! ( sec, ConnectionTrafficSecrets :: Chacha20Poly1305 { .. } )
5476
+ } ) ;
5477
+
5478
+ check ( cipher_suite:: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 , |sec| {
5479
+ matches ! ( sec, ConnectionTrafficSecrets :: Aes128Gcm { .. } )
5480
+ } ) ;
5481
+ check ( cipher_suite:: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 , |sec| {
5482
+ matches ! ( sec, ConnectionTrafficSecrets :: Aes256Gcm { .. } )
5483
+ } ) ;
5484
+ check (
5485
+ cipher_suite:: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 ,
5486
+ |sec| matches ! ( sec, ConnectionTrafficSecrets :: Chacha20Poly1305 { .. } ) ,
5487
+ ) ;
5488
+ }
5489
+
5421
5490
/// Test that secrets cannot be extracted unless explicitly enabled, and until
5422
5491
/// the handshake is done.
5423
5492
#[ cfg( feature = "tls12" ) ]
0 commit comments