Skip to content

Commit fb6e70a

Browse files
committed
dangerous_extract_secrets(): test ConnectionTrafficSecrets variant
1 parent 2d5c80e commit fb6e70a

File tree

2 files changed

+74
-3
lines changed

2 files changed

+74
-3
lines changed

rustls/src/crypto/aws_lc_rs/tls12.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,11 @@ impl Tls12AeadAlgorithm for GcmAlgorithm {
183183
write_iv: &[u8],
184184
explicit: &[u8],
185185
) -> Result<ConnectionTrafficSecrets, UnsupportedOperationError> {
186-
Ok(ConnectionTrafficSecrets::Aes128Gcm {
187-
key,
188-
iv: gcm_iv(write_iv, explicit),
186+
let iv = gcm_iv(write_iv, explicit);
187+
Ok(match self.0.key_len() {
188+
16 => ConnectionTrafficSecrets::Aes128Gcm { key, iv },
189+
32 => ConnectionTrafficSecrets::Aes256Gcm { key, iv },
190+
_ => unreachable!(),
189191
})
190192
}
191193
}

rustls/tests/api.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5418,6 +5418,75 @@ fn test_secret_extraction_enabled() {
54185418
}
54195419
}
54205420

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+
54215490
/// Test that secrets cannot be extracted unless explicitly enabled, and until
54225491
/// the handshake is done.
54235492
#[cfg(feature = "tls12")]

0 commit comments

Comments
 (0)