in quic/s2n-quic-crypto/src/tests.rs [20:211]
fn round_trip() {
check!()
.with_generator((
gen_crypto(),
gen(),
gen_unique_bytes(0..20),
gen_unique_bytes(0..20),
))
.for_each(|(crypto, packet_number, header, payload)| {
let packet_number = *packet_number;
match crypto {
CryptoTest::Initial {
ref server_keys,
ref client_keys,
} => {
let (server_key, server_header_key) = server_keys;
let (client_key, client_header_key) = client_keys;
assert!(check_round_trip(
server_key,
client_key,
server_header_key,
client_header_key,
packet_number,
header,
payload
)
.is_ok());
assert!(check_round_trip(
client_key,
server_key,
client_header_key,
server_header_key,
packet_number,
header,
payload
)
.is_ok());
}
CryptoTest::Handshake {
ref server_keys,
ref client_keys,
} => {
let (server_key, server_header_key) = server_keys;
let (client_key, client_header_key) = client_keys;
assert!(check_round_trip(
server_key,
client_key,
server_header_key,
client_header_key,
packet_number,
header,
payload
)
.is_ok());
assert!(check_round_trip(
client_key,
server_key,
client_header_key,
server_header_key,
packet_number,
header,
payload
)
.is_ok());
let server_key = server_key.update();
assert!(check_round_trip(
&server_key,
client_key,
server_header_key,
client_header_key,
packet_number,
header,
payload
)
.is_err());
assert!(check_round_trip(
client_key,
&server_key,
client_header_key,
server_header_key,
packet_number,
header,
payload
)
.is_err());
let client_key = client_key.update();
assert!(check_round_trip(
&server_key,
&client_key,
server_header_key,
client_header_key,
packet_number,
header,
payload
)
.is_ok());
assert!(check_round_trip(
&client_key,
&server_key,
client_header_key,
server_header_key,
packet_number,
header,
payload
)
.is_ok());
}
CryptoTest::OneRtt {
ref server_keys,
ref client_keys,
} => {
let (server_key, server_header_key) = server_keys;
let (client_key, client_header_key) = client_keys;
assert!(check_round_trip(
server_key,
client_key,
server_header_key,
client_header_key,
packet_number,
header,
payload
)
.is_ok());
assert!(check_round_trip(
client_key,
server_key,
client_header_key,
server_header_key,
packet_number,
header,
payload
)
.is_ok());
let server_key = server_key.update();
assert!(check_round_trip(
&server_key,
client_key,
server_header_key,
client_header_key,
packet_number,
header,
payload
)
.is_err());
assert!(check_round_trip(
client_key,
&server_key,
client_header_key,
server_header_key,
packet_number,
header,
payload
)
.is_err());
let client_key = client_key.update();
assert!(check_round_trip(
&server_key,
&client_key,
server_header_key,
client_header_key,
packet_number,
header,
payload
)
.is_ok());
assert!(check_round_trip(
&client_key,
&server_key,
client_header_key,
server_header_key,
packet_number,
header,
payload
)
.is_ok());
}
CryptoTest::ZeroRtt { ref keys } => {
let (key, header_key) = keys;
assert!(check_round_trip(
key,
key,
header_key,
header_key,
packet_number,
header,
payload
)
.is_ok());
}
}
});
}