mirror of
https://github.com/tlsnotary/tlsn.git
synced 2026-01-08 22:28:15 -05:00
build: update Rust to version 1.88.0
This commit is contained in:
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@@ -23,7 +23,7 @@ env:
|
|||||||
# 32 seems to be big enough for the foreseeable future
|
# 32 seems to be big enough for the foreseeable future
|
||||||
RAYON_NUM_THREADS: 32
|
RAYON_NUM_THREADS: 32
|
||||||
GIT_COMMIT_HASH: ${{ github.event.pull_request.head.sha || github.sha }}
|
GIT_COMMIT_HASH: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
RUST_VERSION: 1.87.0
|
RUST_VERSION: 1.88.0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
clippy:
|
clippy:
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ impl fmt::Display for ProtocolConfigError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(ref source) = self.source {
|
if let Some(ref source) = self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ impl Display for AesError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ impl fmt::Display for PrfError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(ref source) = self.source {
|
if let Some(ref source) = self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ impl std::fmt::Display for AttestationBuilderError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ impl fmt::Display for AttestationError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ impl fmt::Display for PresentationBuilderError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -227,7 +227,7 @@ impl fmt::Display for PresentationError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -437,8 +437,7 @@ mod secp256k1eth {
|
|||||||
// Based on Ethereum Yellow Paper Appendix F, only values 0 and 1 are valid.
|
// Based on Ethereum Yellow Paper Appendix F, only values 0 and 1 are valid.
|
||||||
if recid > 1 {
|
if recid > 1 {
|
||||||
return Err(SignatureError(format!(
|
return Err(SignatureError(format!(
|
||||||
"expected recovery id 0 or 1, got {:?}",
|
"expected recovery id 0 or 1, got {recid:?}"
|
||||||
recid
|
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
// `ecrecover` expects that 0 and 1 are mapped to 27 and 28.
|
// `ecrecover` expects that 0 and 1 are mapped to 27 and 28.
|
||||||
|
|||||||
@@ -283,7 +283,7 @@ impl fmt::Display for TranscriptCommitConfigBuilderError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ impl fmt::Display for EncodingProofError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ impl fmt::Display for TranscriptProofError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -546,14 +546,13 @@ impl fmt::Display for TranscriptProofBuilderError {
|
|||||||
BuilderErrorKind::Index => f.write_str("index error")?,
|
BuilderErrorKind::Index => f.write_str("index error")?,
|
||||||
BuilderErrorKind::MissingCommitment => f.write_str("commitment error")?,
|
BuilderErrorKind::MissingCommitment => f.write_str("commitment error")?,
|
||||||
BuilderErrorKind::Cover { uncovered, kinds } => f.write_str(&format!(
|
BuilderErrorKind::Cover { uncovered, kinds } => f.write_str(&format!(
|
||||||
"unable to cover the following ranges in transcript using available {:?} commitments: {uncovered}",
|
"unable to cover the following ranges in transcript using available {kinds:?} commitments: {uncovered}"
|
||||||
kinds
|
|
||||||
))?,
|
))?,
|
||||||
BuilderErrorKind::NotSupported => f.write_str("not supported")?,
|
BuilderErrorKind::NotSupported => f.write_str("not supported")?,
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -904,7 +903,7 @@ mod tests {
|
|||||||
assert_eq!(uncovered.recv, Idx(uncovered_recv_rangeset));
|
assert_eq!(uncovered.recv, Idx(uncovered_recv_rangeset));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => panic!("unexpected error kind: {:?}", kind),
|
_ => panic!("unexpected error kind: {kind:?}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,9 +85,9 @@ async fn verify_presentation(example_type: &ExampleType) -> Result<(), Box<dyn s
|
|||||||
);
|
);
|
||||||
println!("Note that the data which the Prover chose not to disclose are shown as X.\n");
|
println!("Note that the data which the Prover chose not to disclose are shown as X.\n");
|
||||||
println!("Data sent:\n");
|
println!("Data sent:\n");
|
||||||
println!("{}\n", sent);
|
println!("{sent}\n");
|
||||||
println!("Data received:\n");
|
println!("Data received:\n");
|
||||||
println!("{}\n", recv);
|
println!("{recv}\n");
|
||||||
println!("-------------------------------------------------------------------");
|
println!("-------------------------------------------------------------------");
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -243,14 +243,14 @@ async fn verifier<T: AsyncWrite + AsyncRead + Send + Sync + Unpin + 'static>(
|
|||||||
let sent_data = String::from_utf8(sent.clone()).expect("Verifier expected sent data");
|
let sent_data = String::from_utf8(sent.clone()).expect("Verifier expected sent data");
|
||||||
sent_data
|
sent_data
|
||||||
.find(SERVER_DOMAIN)
|
.find(SERVER_DOMAIN)
|
||||||
.unwrap_or_else(|| panic!("Verification failed: Expected host {}", SERVER_DOMAIN));
|
.unwrap_or_else(|| panic!("Verification failed: Expected host {SERVER_DOMAIN}"));
|
||||||
|
|
||||||
// Check received data.
|
// Check received data.
|
||||||
let received = transcript.received_unsafe().to_vec();
|
let received = transcript.received_unsafe().to_vec();
|
||||||
let response = String::from_utf8(received.clone()).expect("Verifier expected received data");
|
let response = String::from_utf8(received.clone()).expect("Verifier expected received data");
|
||||||
response
|
response
|
||||||
.find("Herman Melville")
|
.find("Herman Melville")
|
||||||
.unwrap_or_else(|| panic!("Expected valid data from {}", SERVER_DOMAIN));
|
.unwrap_or_else(|| panic!("Expected valid data from {SERVER_DOMAIN}"));
|
||||||
|
|
||||||
// Check Session info: server name.
|
// Check Session info: server name.
|
||||||
assert_eq!(server_name.as_str(), SERVER_DOMAIN);
|
assert_eq!(server_name.as_str(), SERVER_DOMAIN);
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ pub enum ExampleType {
|
|||||||
|
|
||||||
impl fmt::Display for ExampleType {
|
impl fmt::Display for ExampleType {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
write!(f, "{:?}", self)
|
write!(f, "{self:?}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_file_path(example_type: &ExampleType, content_type: &str) -> String {
|
pub fn get_file_path(example_type: &ExampleType, content_type: &str) -> String {
|
||||||
let example_type = example_type.to_string().to_ascii_lowercase();
|
let example_type = example_type.to_string().to_ascii_lowercase();
|
||||||
format!("example-{}.{}.tlsn", example_type, content_type)
|
format!("example-{example_type}.{content_type}.tlsn")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,14 +58,14 @@ impl Executor {
|
|||||||
Role::Prover => {
|
Role::Prover => {
|
||||||
let metrics = bench_prover(&provider, &config)
|
let metrics = bench_prover(&provider, &config)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| RpcError::new(format!("prover bench failed: {}", e)))?;
|
.map_err(|e| RpcError::new(format!("prover bench failed: {e}")))?;
|
||||||
|
|
||||||
Ok(CmdOutput::Bench(BenchOutput::Prover { metrics }))
|
Ok(CmdOutput::Bench(BenchOutput::Prover { metrics }))
|
||||||
}
|
}
|
||||||
Role::Verifier => {
|
Role::Verifier => {
|
||||||
bench_verifier(&provider, &config)
|
bench_verifier(&provider, &config)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| RpcError::new(format!("verifier bench failed: {}", e)))?;
|
.map_err(|e| RpcError::new(format!("verifier bench failed: {e}")))?;
|
||||||
|
|
||||||
Ok(CmdOutput::Bench(BenchOutput::Verifier))
|
Ok(CmdOutput::Bench(BenchOutput::Verifier))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,13 +142,13 @@ impl Executor {
|
|||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
while let Some(res) = handler.next().await {
|
while let Some(res) = handler.next().await {
|
||||||
if let Err(e) = res {
|
if let Err(e) = res {
|
||||||
eprintln!("chromium error: {:?}", e);
|
eprintln!("chromium error: {e:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let page = browser
|
let page = browser
|
||||||
.new_page(&format!("http://{}:{}/index.html", wasm_addr, wasm_port))
|
.new_page(&format!("http://{wasm_addr}:{wasm_port}/index.html"))
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
page.execute(EnableParams::builder().build()).await?;
|
page.execute(EnableParams::builder().build()).await?;
|
||||||
|
|||||||
@@ -342,8 +342,8 @@ struct VethPair(Veth, Veth);
|
|||||||
impl VethPair {
|
impl VethPair {
|
||||||
fn new(name: &str) -> Self {
|
fn new(name: &str) -> Self {
|
||||||
Self(
|
Self(
|
||||||
Veth::new(&format!("{}-0", name)),
|
Veth::new(&format!("{name}-0")),
|
||||||
Veth::new(&format!("{}-1", name)),
|
Veth::new(&format!("{name}-1")),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -472,8 +472,7 @@ fn validate_transcript(
|
|||||||
|
|
||||||
if cf_vd != actual_cf_vd.0.as_slice() {
|
if cf_vd != actual_cf_vd.0.as_slice() {
|
||||||
return Err(MpcTlsError::record_layer(format!(
|
return Err(MpcTlsError::record_layer(format!(
|
||||||
"client finished verify data does not match output from PRF: {:?} != {:?}",
|
"client finished verify data does not match output from PRF: {cf_vd:?} != {actual_cf_vd:?}"
|
||||||
cf_vd, actual_cf_vd
|
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -500,8 +499,7 @@ fn validate_transcript(
|
|||||||
|
|
||||||
if sf_vd != actual_sf_vd.0.as_slice() {
|
if sf_vd != actual_sf_vd.0.as_slice() {
|
||||||
return Err(MpcTlsError::record_layer(format!(
|
return Err(MpcTlsError::record_layer(format!(
|
||||||
"server finished verify data does not match output from PRF: {:?} != {:?}",
|
"server finished verify data does not match output from PRF: {sf_vd:?} != {actual_sf_vd:?}"
|
||||||
sf_vd, actual_sf_vd
|
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -532,8 +530,7 @@ fn validate_transcript(
|
|||||||
}
|
}
|
||||||
typ => {
|
typ => {
|
||||||
return Err(MpcTlsError::record_layer(format!(
|
return Err(MpcTlsError::record_layer(format!(
|
||||||
"sent unexpected record content type: {:?}",
|
"sent unexpected record content type: {typ:?}"
|
||||||
typ
|
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -561,8 +558,7 @@ fn validate_transcript(
|
|||||||
}
|
}
|
||||||
typ => {
|
typ => {
|
||||||
return Err(MpcTlsError::record_layer(format!(
|
return Err(MpcTlsError::record_layer(format!(
|
||||||
"received unexpected record content type: {:?}",
|
"received unexpected record content type: {typ:?}"
|
||||||
typ
|
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -328,8 +328,7 @@ impl NotaryClient {
|
|||||||
ErrorKind::Configuration,
|
ErrorKind::Configuration,
|
||||||
Some(
|
Some(
|
||||||
format!(
|
format!(
|
||||||
"Configuration response status is not OK: {:?}",
|
"Configuration response status is not OK: {configuration_response:?}"
|
||||||
configuration_response
|
|
||||||
)
|
)
|
||||||
.into(),
|
.into(),
|
||||||
),
|
),
|
||||||
@@ -443,8 +442,7 @@ impl NotaryClient {
|
|||||||
ErrorKind::Internal,
|
ErrorKind::Internal,
|
||||||
Some(
|
Some(
|
||||||
format!(
|
format!(
|
||||||
"Notarization response status is not SWITCHING_PROTOCOL: {:?}",
|
"Notarization response status is not SWITCHING_PROTOCOL: {notarization_response:?}"
|
||||||
notarization_response
|
|
||||||
)
|
)
|
||||||
.into(),
|
.into(),
|
||||||
),
|
),
|
||||||
@@ -508,14 +506,14 @@ fn parse_retry_after(response: &Response<Incoming>) -> Result<u64, ClientError>
|
|||||||
let value_str = value.to_str().map_err(|err| {
|
let value_str = value.to_str().map_err(|err| {
|
||||||
ClientError::new(
|
ClientError::new(
|
||||||
ErrorKind::Internal,
|
ErrorKind::Internal,
|
||||||
Some(format!("Invalid Retry-After header: {}", err).into()),
|
Some(format!("Invalid Retry-After header: {err}").into()),
|
||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let seconds: u64 = value_str.parse().map_err(|err| {
|
let seconds: u64 = value_str.parse().map_err(|err| {
|
||||||
ClientError::new(
|
ClientError::new(
|
||||||
ErrorKind::Internal,
|
ErrorKind::Internal,
|
||||||
Some(format!("Could not parse Retry-After header as number: {}", err).into()),
|
Some(format!("Could not parse Retry-After header as number: {err}").into()),
|
||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
seconds
|
seconds
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ pub async fn upgrade_protocol(
|
|||||||
.remove(&session_id)
|
.remove(&session_id)
|
||||||
.is_none()
|
.is_none()
|
||||||
{
|
{
|
||||||
let err_msg = format!("Session id {} does not exist", session_id);
|
let err_msg = format!("Session id {session_id} does not exist");
|
||||||
error!(err_msg);
|
error!(err_msg);
|
||||||
return NotaryServerError::BadProverRequest(err_msg).into_response();
|
return NotaryServerError::BadProverRequest(err_msg).into_response();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ impl Default for Quote {
|
|||||||
impl std::fmt::Debug for QuoteError {
|
impl std::fmt::Debug for QuoteError {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
QuoteError::IoError(err) => write!(f, "IoError: {:?}", err),
|
QuoteError::IoError(err) => write!(f, "IoError: {err:?}"),
|
||||||
QuoteError::IntelQuoteLibrary(err) => {
|
QuoteError::IntelQuoteLibrary(err) => {
|
||||||
write!(f, "IntelQuoteLibrary: {}", err)
|
write!(f, "IntelQuoteLibrary: {err}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ async fn test_tcp_prover<S: AsyncWrite + AsyncRead + Send + Unpin + 'static>(
|
|||||||
tokio::spawn(connection);
|
tokio::spawn(connection);
|
||||||
|
|
||||||
let request = Request::builder()
|
let request = Request::builder()
|
||||||
.uri(format!("https://{}/echo", SERVER_DOMAIN))
|
.uri(format!("https://{SERVER_DOMAIN}/echo"))
|
||||||
.method("POST")
|
.method("POST")
|
||||||
.header("Host", SERVER_DOMAIN)
|
.header("Host", SERVER_DOMAIN)
|
||||||
.header("Connection", "close")
|
.header("Connection", "close")
|
||||||
@@ -463,7 +463,7 @@ async fn test_websocket_prover() {
|
|||||||
tokio::spawn(connection);
|
tokio::spawn(connection);
|
||||||
|
|
||||||
let request = Request::builder()
|
let request = Request::builder()
|
||||||
.uri(format!("https://{}/echo", SERVER_DOMAIN))
|
.uri(format!("https://{SERVER_DOMAIN}/echo"))
|
||||||
.header("Host", SERVER_DOMAIN)
|
.header("Host", SERVER_DOMAIN)
|
||||||
.header("Connection", "close")
|
.header("Connection", "close")
|
||||||
.method("POST")
|
.method("POST")
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ impl fmt::Display for ProverError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ async fn bytes(
|
|||||||
/// parse the JSON data from the file content
|
/// parse the JSON data from the file content
|
||||||
fn get_json_value(filecontent: &str) -> Result<Json<Value>, StatusCode> {
|
fn get_json_value(filecontent: &str) -> Result<Json<Value>, StatusCode> {
|
||||||
Ok(Json(serde_json::from_str(filecontent).map_err(|e| {
|
Ok(Json(serde_json::from_str(filecontent).map_err(|e| {
|
||||||
eprintln!("Failed to parse JSON data: {}", e);
|
eprintln!("Failed to parse JSON data: {e}");
|
||||||
StatusCode::INTERNAL_SERVER_ERROR
|
StatusCode::INTERNAL_SERVER_ERROR
|
||||||
})?))
|
})?))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ async fn test_hyper_ok() {
|
|||||||
tokio::spawn(connection);
|
tokio::spawn(connection);
|
||||||
|
|
||||||
let request = Request::builder()
|
let request = Request::builder()
|
||||||
.uri(format!("https://{}/echo", SERVER_DOMAIN))
|
.uri(format!("https://{SERVER_DOMAIN}/echo"))
|
||||||
.header("Host", SERVER_DOMAIN)
|
.header("Host", SERVER_DOMAIN)
|
||||||
.header("Connection", "close")
|
.header("Connection", "close")
|
||||||
.method("POST")
|
.method("POST")
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ where
|
|||||||
times.push(duration_nanos(Instant::now().duration_since(start)));
|
times.push(duration_nanos(Instant::now().duration_since(start)));
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("{}", name);
|
println!("{name}");
|
||||||
println!("{:?}", times);
|
println!("{times:?}");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn time<F>(mut f: F) -> f64
|
fn time<F>(mut f: F) -> f64
|
||||||
@@ -231,9 +231,9 @@ static ALL_BENCHMARKS: &[BenchmarkParam] = &[
|
|||||||
impl KeyType {
|
impl KeyType {
|
||||||
fn path_for(&self, part: &str) -> String {
|
fn path_for(&self, part: &str) -> String {
|
||||||
match self {
|
match self {
|
||||||
KeyType::Rsa => format!("test-ca/rsa/{}", part),
|
KeyType::Rsa => format!("test-ca/rsa/{part}"),
|
||||||
KeyType::Ecdsa => format!("test-ca/ecdsa/{}", part),
|
KeyType::Ecdsa => format!("test-ca/ecdsa/{part}"),
|
||||||
KeyType::Ed25519 => format!("test-ca/eddsa/{}", part),
|
KeyType::Ed25519 => format!("test-ca/eddsa/{part}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -550,7 +550,7 @@ fn lookup_matching_benches(name: &str) -> Vec<&BenchmarkParam> {
|
|||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
if r.is_empty() {
|
if r.is_empty() {
|
||||||
panic!("unknown suite {:?}", name);
|
panic!("unknown suite {name:?}");
|
||||||
}
|
}
|
||||||
|
|
||||||
r
|
r
|
||||||
@@ -620,7 +620,7 @@ fn selected_tests(mut args: env::Args) {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
panic!("unsupported mode {:?}", mode);
|
panic!("unsupported mode {mode:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,8 +120,7 @@ async fn version_test(
|
|||||||
let server_config = make_server_config_with_versions(KeyType::Rsa, server_versions);
|
let server_config = make_server_config_with_versions(KeyType::Rsa, server_versions);
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"version {:?} {:?} -> {:?}",
|
"version {client_versions:?} {server_versions:?} -> {result:?}"
|
||||||
client_versions, server_versions, result
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let (mut client, mut server) = make_pair_for_configs(client_config, server_config).await;
|
let (mut client, mut server) = make_pair_for_configs(client_config, server_config).await;
|
||||||
@@ -1178,7 +1177,7 @@ async fn client_read_returns_wouldblock_when_no_data() {
|
|||||||
async fn client_returns_initial_io_state() {
|
async fn client_returns_initial_io_state() {
|
||||||
let (mut client, _) = make_pair(KeyType::Rsa).await;
|
let (mut client, _) = make_pair(KeyType::Rsa).await;
|
||||||
let io_state = client.process_new_packets().await.unwrap();
|
let io_state = client.process_new_packets().await.unwrap();
|
||||||
println!("IoState is Debug {:?}", io_state);
|
println!("IoState is Debug {io_state:?}");
|
||||||
assert_eq!(io_state.plaintext_bytes_to_read(), 0);
|
assert_eq!(io_state.plaintext_bytes_to_read(), 0);
|
||||||
assert!(!io_state.peer_has_closed());
|
assert!(!io_state.peer_has_closed());
|
||||||
assert!(io_state.tls_bytes_to_write() > 200);
|
assert!(io_state.tls_bytes_to_write() > 200);
|
||||||
@@ -1491,7 +1490,7 @@ async fn client_config_is_clone() {
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn client_connection_is_debug() {
|
async fn client_connection_is_debug() {
|
||||||
let (client, _) = make_pair(KeyType::Rsa).await;
|
let (client, _) = make_pair(KeyType::Rsa).await;
|
||||||
println!("{:?}", client);
|
println!("{client:?}");
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn do_exporter_test(client_config: ClientConfig, server_config: ServerConfig) {
|
async fn do_exporter_test(client_config: ClientConfig, server_config: ServerConfig) {
|
||||||
@@ -2537,7 +2536,7 @@ async fn test_client_mtu_reduction() {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
client.start().await.unwrap();
|
client.start().await.unwrap();
|
||||||
let writes = collect_write_lengths(&mut client);
|
let writes = collect_write_lengths(&mut client);
|
||||||
println!("writes at mtu=64: {:?}", writes);
|
println!("writes at mtu=64: {writes:?}");
|
||||||
assert!(writes.iter().all(|x| *x <= 64));
|
assert!(writes.iter().all(|x| *x <= 64));
|
||||||
assert!(writes.len() > 1);
|
assert!(writes.len() > 1);
|
||||||
}
|
}
|
||||||
@@ -2619,7 +2618,7 @@ async fn bad_client_max_fragment_sizes() {
|
|||||||
|
|
||||||
fn assert_lt(left: usize, right: usize) {
|
fn assert_lt(left: usize, right: usize) {
|
||||||
if left >= right {
|
if left >= right {
|
||||||
panic!("expected {} < {}", left, right);
|
panic!("expected {left} < {right}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2636,7 +2635,7 @@ use tls_client::internal::msgs::message::{Message, MessagePayload};
|
|||||||
async fn test_client_rejects_illegal_tls13_ccs() {
|
async fn test_client_rejects_illegal_tls13_ccs() {
|
||||||
fn corrupt_ccs(msg: &mut Message) -> Altered {
|
fn corrupt_ccs(msg: &mut Message) -> Altered {
|
||||||
if let MessagePayload::ChangeCipherSpec(_) = &mut msg.payload {
|
if let MessagePayload::ChangeCipherSpec(_) = &mut msg.payload {
|
||||||
println!("seen CCS {:?}", msg);
|
println!("seen CCS {msg:?}");
|
||||||
return Altered::Raw(vec![0x14, 0x03, 0x03, 0x00, 0x02, 0x01, 0x02]);
|
return Altered::Raw(vec![0x14, 0x03, 0x03, 0x00, 0x02, 0x01, 0x02]);
|
||||||
}
|
}
|
||||||
Altered::InPlace
|
Altered::InPlace
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ pub enum Error {
|
|||||||
fn join<T: fmt::Debug>(items: &[T]) -> String {
|
fn join<T: fmt::Debug>(items: &[T]) -> String {
|
||||||
items
|
items
|
||||||
.iter()
|
.iter()
|
||||||
.map(|x| format!("{:?}", x))
|
.map(|x| format!("{x:?}"))
|
||||||
.collect::<Vec<String>>()
|
.collect::<Vec<String>>()
|
||||||
.join(" or ")
|
.join(" or ")
|
||||||
}
|
}
|
||||||
@@ -125,11 +125,11 @@ impl fmt::Display for Error {
|
|||||||
join::<HandshakeType>(expect_types)
|
join::<HandshakeType>(expect_types)
|
||||||
),
|
),
|
||||||
Error::CorruptMessagePayload(ref typ) => {
|
Error::CorruptMessagePayload(ref typ) => {
|
||||||
write!(f, "received corrupt message of type {:?}", typ)
|
write!(f, "received corrupt message of type {typ:?}")
|
||||||
}
|
}
|
||||||
Error::PeerIncompatibleError(ref why) => write!(f, "peer is incompatible: {}", why),
|
Error::PeerIncompatibleError(ref why) => write!(f, "peer is incompatible: {why}"),
|
||||||
Error::PeerMisbehavedError(ref why) => write!(f, "peer misbehaved: {}", why),
|
Error::PeerMisbehavedError(ref why) => write!(f, "peer misbehaved: {why}"),
|
||||||
Error::AlertReceived(ref alert) => write!(f, "received fatal alert: {:?}", alert),
|
Error::AlertReceived(ref alert) => write!(f, "received fatal alert: {alert:?}"),
|
||||||
Error::InvalidCertificateEncoding => {
|
Error::InvalidCertificateEncoding => {
|
||||||
write!(f, "invalid peer certificate encoding")
|
write!(f, "invalid peer certificate encoding")
|
||||||
}
|
}
|
||||||
@@ -140,7 +140,7 @@ impl fmt::Display for Error {
|
|||||||
write!(f, "invalid peer certificate signature")
|
write!(f, "invalid peer certificate signature")
|
||||||
}
|
}
|
||||||
Error::InvalidCertificateData(ref reason) => {
|
Error::InvalidCertificateData(ref reason) => {
|
||||||
write!(f, "invalid peer certificate contents: {}", reason)
|
write!(f, "invalid peer certificate contents: {reason}")
|
||||||
}
|
}
|
||||||
Error::CorruptMessage => write!(f, "received corrupt message"),
|
Error::CorruptMessage => write!(f, "received corrupt message"),
|
||||||
Error::NoCertificatesPresented => write!(f, "peer sent no certificates"),
|
Error::NoCertificatesPresented => write!(f, "peer sent no certificates"),
|
||||||
@@ -150,13 +150,13 @@ impl fmt::Display for Error {
|
|||||||
Error::PeerSentOversizedRecord => write!(f, "peer sent excess record size"),
|
Error::PeerSentOversizedRecord => write!(f, "peer sent excess record size"),
|
||||||
Error::HandshakeNotComplete => write!(f, "handshake not complete"),
|
Error::HandshakeNotComplete => write!(f, "handshake not complete"),
|
||||||
Error::NoApplicationProtocol => write!(f, "peer doesn't support any known protocol"),
|
Error::NoApplicationProtocol => write!(f, "peer doesn't support any known protocol"),
|
||||||
Error::InvalidSct(ref err) => write!(f, "invalid certificate timestamp: {:?}", err),
|
Error::InvalidSct(ref err) => write!(f, "invalid certificate timestamp: {err:?}"),
|
||||||
Error::FailedToGetCurrentTime => write!(f, "failed to get current time"),
|
Error::FailedToGetCurrentTime => write!(f, "failed to get current time"),
|
||||||
Error::FailedToGetRandomBytes => write!(f, "failed to get random bytes"),
|
Error::FailedToGetRandomBytes => write!(f, "failed to get random bytes"),
|
||||||
Error::BadMaxFragmentSize => {
|
Error::BadMaxFragmentSize => {
|
||||||
write!(f, "the supplied max_fragment_size was too small or large")
|
write!(f, "the supplied max_fragment_size was too small or large")
|
||||||
}
|
}
|
||||||
Error::General(ref err) => write!(f, "unexpected error: {}", err),
|
Error::General(ref err) => write!(f, "unexpected error: {err}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -210,8 +210,8 @@ mod tests {
|
|||||||
];
|
];
|
||||||
|
|
||||||
for err in all {
|
for err in all {
|
||||||
println!("{:?}:", err);
|
println!("{err:?}:");
|
||||||
println!(" fmt '{}'", err);
|
println!(" fmt '{err}'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ mod tests {
|
|||||||
if let Ok(gotval) = got {
|
if let Ok(gotval) = got {
|
||||||
assert_eq!(gotval, want);
|
assert_eq!(gotval, want);
|
||||||
} else {
|
} else {
|
||||||
panic!("read failed, expected {:?} bytes", want);
|
panic!("read failed, expected {want:?} bytes");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ fn reads_random() {
|
|||||||
let bytes = [0x01; 32];
|
let bytes = [0x01; 32];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let rnd = Random::read(&mut rd).unwrap();
|
let rnd = Random::read(&mut rd).unwrap();
|
||||||
println!("{:?}", rnd);
|
println!("{rnd:?}");
|
||||||
|
|
||||||
assert!(!rd.any_left());
|
assert!(!rd.any_left());
|
||||||
}
|
}
|
||||||
@@ -50,7 +50,7 @@ fn accepts_short_sessionid() {
|
|||||||
let bytes = [1; 2];
|
let bytes = [1; 2];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let sess = SessionID::read(&mut rd).unwrap();
|
let sess = SessionID::read(&mut rd).unwrap();
|
||||||
println!("{:?}", sess);
|
println!("{sess:?}");
|
||||||
|
|
||||||
assert!(!sess.is_empty());
|
assert!(!sess.is_empty());
|
||||||
assert_eq!(sess.len(), 1);
|
assert_eq!(sess.len(), 1);
|
||||||
@@ -62,7 +62,7 @@ fn accepts_empty_sessionid() {
|
|||||||
let bytes = [0; 1];
|
let bytes = [0; 1];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let sess = SessionID::read(&mut rd).unwrap();
|
let sess = SessionID::read(&mut rd).unwrap();
|
||||||
println!("{:?}", sess);
|
println!("{sess:?}");
|
||||||
|
|
||||||
assert!(sess.is_empty());
|
assert!(sess.is_empty());
|
||||||
assert_eq!(sess.len(), 0);
|
assert_eq!(sess.len(), 0);
|
||||||
@@ -75,7 +75,7 @@ fn can_roundtrip_unknown_client_ext() {
|
|||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let ext = ClientExtension::read(&mut rd).unwrap();
|
let ext = ClientExtension::read(&mut rd).unwrap();
|
||||||
|
|
||||||
println!("{:?}", ext);
|
println!("{ext:?}");
|
||||||
assert_eq!(ext.get_type(), ExtensionType::Unknown(0x1234));
|
assert_eq!(ext.get_type(), ExtensionType::Unknown(0x1234));
|
||||||
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
||||||
}
|
}
|
||||||
@@ -127,7 +127,7 @@ fn can_roundtrip_single_sni() {
|
|||||||
let bytes = [0, 0, 0, 7, 0, 5, 0, 0, 2, 0x6c, 0x6f];
|
let bytes = [0, 0, 0, 7, 0, 5, 0, 0, 2, 0x6c, 0x6f];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let ext = ClientExtension::read(&mut rd).unwrap();
|
let ext = ClientExtension::read(&mut rd).unwrap();
|
||||||
println!("{:?}", ext);
|
println!("{ext:?}");
|
||||||
|
|
||||||
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
||||||
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
||||||
@@ -138,7 +138,7 @@ fn can_round_trip_mixed_case_sni() {
|
|||||||
let bytes = [0, 0, 0, 7, 0, 5, 0, 0, 2, 0x4c, 0x6f];
|
let bytes = [0, 0, 0, 7, 0, 5, 0, 0, 2, 0x4c, 0x6f];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let ext = ClientExtension::read(&mut rd).unwrap();
|
let ext = ClientExtension::read(&mut rd).unwrap();
|
||||||
println!("{:?}", ext);
|
println!("{ext:?}");
|
||||||
|
|
||||||
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
||||||
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
||||||
@@ -149,7 +149,7 @@ fn can_roundtrip_other_sni_name_types() {
|
|||||||
let bytes = [0, 0, 0, 7, 0, 5, 1, 0, 2, 0x6c, 0x6f];
|
let bytes = [0, 0, 0, 7, 0, 5, 1, 0, 2, 0x6c, 0x6f];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let ext = ClientExtension::read(&mut rd).unwrap();
|
let ext = ClientExtension::read(&mut rd).unwrap();
|
||||||
println!("{:?}", ext);
|
println!("{ext:?}");
|
||||||
|
|
||||||
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
||||||
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
||||||
@@ -160,7 +160,7 @@ fn get_single_hostname_returns_none_for_other_sni_name_types() {
|
|||||||
let bytes = [0, 0, 0, 7, 0, 5, 1, 0, 2, 0x6c, 0x6f];
|
let bytes = [0, 0, 0, 7, 0, 5, 1, 0, 2, 0x6c, 0x6f];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let ext = ClientExtension::read(&mut rd).unwrap();
|
let ext = ClientExtension::read(&mut rd).unwrap();
|
||||||
println!("{:?}", ext);
|
println!("{ext:?}");
|
||||||
|
|
||||||
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
||||||
if let ClientExtension::ServerName(snr) = ext {
|
if let ClientExtension::ServerName(snr) = ext {
|
||||||
@@ -176,7 +176,7 @@ fn can_roundtrip_multiname_sni() {
|
|||||||
let bytes = [0, 0, 0, 12, 0, 10, 0, 0, 2, 0x68, 0x69, 0, 0, 2, 0x6c, 0x6f];
|
let bytes = [0, 0, 0, 12, 0, 10, 0, 0, 2, 0x68, 0x69, 0, 0, 2, 0x6c, 0x6f];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let ext = ClientExtension::read(&mut rd).unwrap();
|
let ext = ClientExtension::read(&mut rd).unwrap();
|
||||||
println!("{:?}", ext);
|
println!("{ext:?}");
|
||||||
|
|
||||||
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
assert_eq!(ext.get_type(), ExtensionType::ServerName);
|
||||||
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
||||||
@@ -224,13 +224,13 @@ fn rejects_truncated_sni() {
|
|||||||
fn can_roundtrip_psk_identity() {
|
fn can_roundtrip_psk_identity() {
|
||||||
let bytes = [0, 0, 0x11, 0x22, 0x33, 0x44];
|
let bytes = [0, 0, 0x11, 0x22, 0x33, 0x44];
|
||||||
let psk_id = PresharedKeyIdentity::read(&mut Reader::init(&bytes)).unwrap();
|
let psk_id = PresharedKeyIdentity::read(&mut Reader::init(&bytes)).unwrap();
|
||||||
println!("{:?}", psk_id);
|
println!("{psk_id:?}");
|
||||||
assert_eq!(psk_id.obfuscated_ticket_age, 0x11223344);
|
assert_eq!(psk_id.obfuscated_ticket_age, 0x11223344);
|
||||||
assert_eq!(psk_id.get_encoding(), bytes.to_vec());
|
assert_eq!(psk_id.get_encoding(), bytes.to_vec());
|
||||||
|
|
||||||
let bytes = [0, 5, 0x1, 0x2, 0x3, 0x4, 0x5, 0x11, 0x22, 0x33, 0x44];
|
let bytes = [0, 5, 0x1, 0x2, 0x3, 0x4, 0x5, 0x11, 0x22, 0x33, 0x44];
|
||||||
let psk_id = PresharedKeyIdentity::read(&mut Reader::init(&bytes)).unwrap();
|
let psk_id = PresharedKeyIdentity::read(&mut Reader::init(&bytes)).unwrap();
|
||||||
println!("{:?}", psk_id);
|
println!("{psk_id:?}");
|
||||||
assert_eq!(psk_id.identity.0, vec![0x1, 0x2, 0x3, 0x4, 0x5]);
|
assert_eq!(psk_id.identity.0, vec![0x1, 0x2, 0x3, 0x4, 0x5]);
|
||||||
assert_eq!(psk_id.obfuscated_ticket_age, 0x11223344);
|
assert_eq!(psk_id.obfuscated_ticket_age, 0x11223344);
|
||||||
assert_eq!(psk_id.get_encoding(), bytes.to_vec());
|
assert_eq!(psk_id.get_encoding(), bytes.to_vec());
|
||||||
@@ -242,7 +242,7 @@ fn can_roundtrip_psk_offer() {
|
|||||||
0, 7, 0, 1, 0x99, 0x11, 0x22, 0x33, 0x44, 0, 4, 3, 0x01, 0x02, 0x3,
|
0, 7, 0, 1, 0x99, 0x11, 0x22, 0x33, 0x44, 0, 4, 3, 0x01, 0x02, 0x3,
|
||||||
];
|
];
|
||||||
let psko = PresharedKeyOffer::read(&mut Reader::init(&bytes)).unwrap();
|
let psko = PresharedKeyOffer::read(&mut Reader::init(&bytes)).unwrap();
|
||||||
println!("{:?}", psko);
|
println!("{psko:?}");
|
||||||
|
|
||||||
assert_eq!(psko.identities.len(), 1);
|
assert_eq!(psko.identities.len(), 1);
|
||||||
assert_eq!(psko.identities[0].identity.0, vec![0x99]);
|
assert_eq!(psko.identities[0].identity.0, vec![0x99]);
|
||||||
@@ -255,7 +255,7 @@ fn can_roundtrip_psk_offer() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn can_roundtrip_certstatusreq_for_ocsp() {
|
fn can_roundtrip_certstatusreq_for_ocsp() {
|
||||||
let ext = ClientExtension::CertificateStatusRequest(CertificateStatusRequest::build_ocsp());
|
let ext = ClientExtension::CertificateStatusRequest(CertificateStatusRequest::build_ocsp());
|
||||||
println!("{:?}", ext);
|
println!("{ext:?}");
|
||||||
|
|
||||||
let bytes = [
|
let bytes = [
|
||||||
0, 5, // CertificateStatusRequest
|
0, 5, // CertificateStatusRequest
|
||||||
@@ -264,7 +264,7 @@ fn can_roundtrip_certstatusreq_for_ocsp() {
|
|||||||
];
|
];
|
||||||
|
|
||||||
let csr = ClientExtension::read(&mut Reader::init(&bytes)).unwrap();
|
let csr = ClientExtension::read(&mut Reader::init(&bytes)).unwrap();
|
||||||
println!("{:?}", csr);
|
println!("{csr:?}");
|
||||||
assert_eq!(csr.get_encoding(), bytes.to_vec());
|
assert_eq!(csr.get_encoding(), bytes.to_vec());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,7 +277,7 @@ fn can_roundtrip_certstatusreq_for_other() {
|
|||||||
];
|
];
|
||||||
|
|
||||||
let csr = ClientExtension::read(&mut Reader::init(&bytes)).unwrap();
|
let csr = ClientExtension::read(&mut Reader::init(&bytes)).unwrap();
|
||||||
println!("{:?}", csr);
|
println!("{csr:?}");
|
||||||
assert_eq!(csr.get_encoding(), bytes.to_vec());
|
assert_eq!(csr.get_encoding(), bytes.to_vec());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,7 +286,7 @@ fn can_roundtrip_multi_proto() {
|
|||||||
let bytes = [0, 16, 0, 8, 0, 6, 2, 0x68, 0x69, 2, 0x6c, 0x6f];
|
let bytes = [0, 16, 0, 8, 0, 6, 2, 0x68, 0x69, 2, 0x6c, 0x6f];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let ext = ClientExtension::read(&mut rd).unwrap();
|
let ext = ClientExtension::read(&mut rd).unwrap();
|
||||||
println!("{:?}", ext);
|
println!("{ext:?}");
|
||||||
|
|
||||||
assert_eq!(ext.get_type(), ExtensionType::ALProtocolNegotiation);
|
assert_eq!(ext.get_type(), ExtensionType::ALProtocolNegotiation);
|
||||||
assert_eq!(ext.get_encoding(), bytes.to_vec());
|
assert_eq!(ext.get_encoding(), bytes.to_vec());
|
||||||
@@ -305,7 +305,7 @@ fn can_roundtrip_single_proto() {
|
|||||||
let bytes = [0, 16, 0, 5, 0, 3, 2, 0x68, 0x69];
|
let bytes = [0, 16, 0, 5, 0, 3, 2, 0x68, 0x69];
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let ext = ClientExtension::read(&mut rd).unwrap();
|
let ext = ClientExtension::read(&mut rd).unwrap();
|
||||||
println!("{:?}", ext);
|
println!("{ext:?}");
|
||||||
|
|
||||||
assert_eq!(ext.get_type(), ExtensionType::ALProtocolNegotiation);
|
assert_eq!(ext.get_type(), ExtensionType::ALProtocolNegotiation);
|
||||||
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
assert_eq!(bytes.to_vec(), ext.get_encoding());
|
||||||
@@ -423,7 +423,7 @@ fn test_truncated_psk_offer() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let mut enc = ext.get_encoding();
|
let mut enc = ext.get_encoding();
|
||||||
println!("testing {:?} enc {:?}", ext, enc);
|
println!("testing {ext:?} enc {enc:?}");
|
||||||
for l in 0..enc.len() {
|
for l in 0..enc.len() {
|
||||||
if l == 9 {
|
if l == 9 {
|
||||||
continue;
|
continue;
|
||||||
@@ -438,7 +438,7 @@ fn test_truncated_psk_offer() {
|
|||||||
fn test_truncated_client_hello_is_detected() {
|
fn test_truncated_client_hello_is_detected() {
|
||||||
let ch = get_sample_clienthellopayload();
|
let ch = get_sample_clienthellopayload();
|
||||||
let enc = ch.get_encoding();
|
let enc = ch.get_encoding();
|
||||||
println!("testing {:?} enc {:?}", ch, enc);
|
println!("testing {ch:?} enc {enc:?}");
|
||||||
|
|
||||||
for l in 0..enc.len() {
|
for l in 0..enc.len() {
|
||||||
println!("len {:?} enc {:?}", l, &enc[..l]);
|
println!("len {:?} enc {:?}", l, &enc[..l]);
|
||||||
@@ -455,7 +455,7 @@ fn test_truncated_client_extension_is_detected() {
|
|||||||
|
|
||||||
for ext in &chp.extensions {
|
for ext in &chp.extensions {
|
||||||
let mut enc = ext.get_encoding();
|
let mut enc = ext.get_encoding();
|
||||||
println!("testing {:?} enc {:?}", ext, enc);
|
println!("testing {ext:?} enc {enc:?}");
|
||||||
|
|
||||||
// "outer" truncation, i.e., where the extension-level length is longer than
|
// "outer" truncation, i.e., where the extension-level length is longer than
|
||||||
// the input
|
// the input
|
||||||
@@ -475,7 +475,7 @@ fn test_truncated_client_extension_is_detected() {
|
|||||||
// length, but isn't long enough for the type of extension
|
// length, but isn't long enough for the type of extension
|
||||||
for l in 0..(enc.len() - 4) {
|
for l in 0..(enc.len() - 4) {
|
||||||
put_u16(l as u16, &mut enc[2..]);
|
put_u16(l as u16, &mut enc[2..]);
|
||||||
println!(" encoding {:?} len {:?}", enc, l);
|
println!(" encoding {enc:?} len {l:?}");
|
||||||
assert!(ClientExtension::read_bytes(&enc).is_none());
|
assert!(ClientExtension::read_bytes(&enc).is_none());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -565,7 +565,7 @@ fn test_truncated_helloretry_extension_is_detected() {
|
|||||||
|
|
||||||
for ext in &hrr.extensions {
|
for ext in &hrr.extensions {
|
||||||
let mut enc = ext.get_encoding();
|
let mut enc = ext.get_encoding();
|
||||||
println!("testing {:?} enc {:?}", ext, enc);
|
println!("testing {ext:?} enc {enc:?}");
|
||||||
|
|
||||||
// "outer" truncation, i.e., where the extension-level length is longer than
|
// "outer" truncation, i.e., where the extension-level length is longer than
|
||||||
// the input
|
// the input
|
||||||
@@ -582,7 +582,7 @@ fn test_truncated_helloretry_extension_is_detected() {
|
|||||||
// length, but isn't long enough for the type of extension
|
// length, but isn't long enough for the type of extension
|
||||||
for l in 0..(enc.len() - 4) {
|
for l in 0..(enc.len() - 4) {
|
||||||
put_u16(l as u16, &mut enc[2..]);
|
put_u16(l as u16, &mut enc[2..]);
|
||||||
println!(" encoding {:?} len {:?}", enc, l);
|
println!(" encoding {enc:?} len {l:?}");
|
||||||
assert!(HelloRetryExtension::read_bytes(&enc).is_none());
|
assert!(HelloRetryExtension::read_bytes(&enc).is_none());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -630,7 +630,7 @@ fn test_truncated_server_extension_is_detected() {
|
|||||||
|
|
||||||
for ext in &shp.extensions {
|
for ext in &shp.extensions {
|
||||||
let mut enc = ext.get_encoding();
|
let mut enc = ext.get_encoding();
|
||||||
println!("testing {:?} enc {:?}", ext, enc);
|
println!("testing {ext:?} enc {enc:?}");
|
||||||
|
|
||||||
// "outer" truncation, i.e., where the extension-level length is longer than
|
// "outer" truncation, i.e., where the extension-level length is longer than
|
||||||
// the input
|
// the input
|
||||||
@@ -650,7 +650,7 @@ fn test_truncated_server_extension_is_detected() {
|
|||||||
// length, but isn't long enough for the type of extension
|
// length, but isn't long enough for the type of extension
|
||||||
for l in 0..(enc.len() - 4) {
|
for l in 0..(enc.len() - 4) {
|
||||||
put_u16(l as u16, &mut enc[2..]);
|
put_u16(l as u16, &mut enc[2..]);
|
||||||
println!(" encoding {:?} len {:?}", enc, l);
|
println!(" encoding {enc:?} len {l:?}");
|
||||||
assert!(ServerExtension::read_bytes(&enc).is_none());
|
assert!(ServerExtension::read_bytes(&enc).is_none());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -966,8 +966,8 @@ fn can_roundtrip_all_tls12_handshake_payloads() {
|
|||||||
assert!(!rd.any_left());
|
assert!(!rd.any_left());
|
||||||
assert_eq!(hm.get_encoding(), other.get_encoding());
|
assert_eq!(hm.get_encoding(), other.get_encoding());
|
||||||
|
|
||||||
println!("{:?}", hm);
|
println!("{hm:?}");
|
||||||
println!("{:?}", other);
|
println!("{other:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -975,7 +975,7 @@ fn can_roundtrip_all_tls12_handshake_payloads() {
|
|||||||
fn can_detect_truncation_of_all_tls12_handshake_payloads() {
|
fn can_detect_truncation_of_all_tls12_handshake_payloads() {
|
||||||
for hm in get_all_tls12_handshake_payloads().iter() {
|
for hm in get_all_tls12_handshake_payloads().iter() {
|
||||||
let mut enc = hm.get_encoding();
|
let mut enc = hm.get_encoding();
|
||||||
println!("test {:?} enc {:?}", hm, enc);
|
println!("test {hm:?} enc {enc:?}");
|
||||||
|
|
||||||
// outer truncation
|
// outer truncation
|
||||||
for l in 0..enc.len() {
|
for l in 0..enc.len() {
|
||||||
@@ -985,7 +985,7 @@ fn can_detect_truncation_of_all_tls12_handshake_payloads() {
|
|||||||
// inner truncation
|
// inner truncation
|
||||||
for l in 0..enc.len() - 4 {
|
for l in 0..enc.len() - 4 {
|
||||||
put_u24(l as u32, &mut enc[1..]);
|
put_u24(l as u32, &mut enc[1..]);
|
||||||
println!(" check len {:?} enc {:?}", l, enc);
|
println!(" check len {l:?} enc {enc:?}");
|
||||||
|
|
||||||
match (hm.typ, l) {
|
match (hm.typ, l) {
|
||||||
(HandshakeType::ClientHello, 41)
|
(HandshakeType::ClientHello, 41)
|
||||||
@@ -1107,8 +1107,8 @@ fn can_roundtrip_all_tls13_handshake_payloads() {
|
|||||||
assert!(!rd.any_left());
|
assert!(!rd.any_left());
|
||||||
assert_eq!(hm.get_encoding(), other.get_encoding());
|
assert_eq!(hm.get_encoding(), other.get_encoding());
|
||||||
|
|
||||||
println!("{:?}", hm);
|
println!("{hm:?}");
|
||||||
println!("{:?}", other);
|
println!("{other:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1122,7 +1122,7 @@ fn put_u24(u: u32, b: &mut [u8]) {
|
|||||||
fn can_detect_truncation_of_all_tls13_handshake_payloads() {
|
fn can_detect_truncation_of_all_tls13_handshake_payloads() {
|
||||||
for hm in get_all_tls13_handshake_payloads().iter() {
|
for hm in get_all_tls13_handshake_payloads().iter() {
|
||||||
let mut enc = hm.get_encoding();
|
let mut enc = hm.get_encoding();
|
||||||
println!("test {:?} enc {:?}", hm, enc);
|
println!("test {hm:?} enc {enc:?}");
|
||||||
|
|
||||||
// outer truncation
|
// outer truncation
|
||||||
for l in 0..enc.len() {
|
for l in 0..enc.len() {
|
||||||
@@ -1132,7 +1132,7 @@ fn can_detect_truncation_of_all_tls13_handshake_payloads() {
|
|||||||
// inner truncation
|
// inner truncation
|
||||||
for l in 0..enc.len() - 4 {
|
for l in 0..enc.len() - 4 {
|
||||||
put_u24(l as u32, &mut enc[1..]);
|
put_u24(l as u32, &mut enc[1..]);
|
||||||
println!(" check len {:?} enc {:?}", l, enc);
|
println!(" check len {l:?} enc {enc:?}");
|
||||||
|
|
||||||
match (hm.typ, l) {
|
match (hm.typ, l) {
|
||||||
(HandshakeType::ClientHello, 41)
|
(HandshakeType::ClientHello, 41)
|
||||||
@@ -1159,7 +1159,7 @@ fn cannot_read_messagehash_from_network() {
|
|||||||
typ: HandshakeType::MessageHash,
|
typ: HandshakeType::MessageHash,
|
||||||
payload: HandshakePayload::MessageHash(Payload::new(vec![1, 2, 3])),
|
payload: HandshakePayload::MessageHash(Payload::new(vec![1, 2, 3])),
|
||||||
};
|
};
|
||||||
println!("mh {:?}", mh);
|
println!("mh {mh:?}");
|
||||||
let enc = mh.get_encoding();
|
let enc = mh.get_encoding();
|
||||||
assert!(HandshakeMessagePayload::read_bytes(&enc).is_none());
|
assert!(HandshakeMessagePayload::read_bytes(&enc).is_none());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ fn test_read_fuzz_corpus() {
|
|||||||
|
|
||||||
let mut rd = Reader::init(&bytes);
|
let mut rd = Reader::init(&bytes);
|
||||||
let msg = OpaqueMessage::read(&mut rd).unwrap().into_plain_message();
|
let msg = OpaqueMessage::read(&mut rd).unwrap().into_plain_message();
|
||||||
println!("{:?}", msg);
|
println!("{msg:?}");
|
||||||
|
|
||||||
let msg = match Message::try_from(msg) {
|
let msg = match Message::try_from(msg) {
|
||||||
Ok(msg) => msg,
|
Ok(msg) => msg,
|
||||||
@@ -64,7 +64,7 @@ fn can_read_safari_client_hello() {
|
|||||||
\x01\x00\x00\x0a\x00\x0a\x00\x08\x00\x1d\x00\x17\x00\x18\x00\x19";
|
\x01\x00\x00\x0a\x00\x0a\x00\x08\x00\x1d\x00\x17\x00\x18\x00\x19";
|
||||||
let mut rd = Reader::init(bytes);
|
let mut rd = Reader::init(bytes);
|
||||||
let m = OpaqueMessage::read(&mut rd).unwrap();
|
let m = OpaqueMessage::read(&mut rd).unwrap();
|
||||||
println!("m = {:?}", m);
|
println!("m = {m:?}");
|
||||||
assert!(Message::try_from(m.into_plain_message()).is_err());
|
assert!(Message::try_from(m.into_plain_message()).is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,8 +92,8 @@ fn construct_all_types() {
|
|||||||
];
|
];
|
||||||
for &bytes in samples.iter() {
|
for &bytes in samples.iter() {
|
||||||
let m = OpaqueMessage::read(&mut Reader::init(bytes)).unwrap();
|
let m = OpaqueMessage::read(&mut Reader::init(bytes)).unwrap();
|
||||||
println!("m = {:?}", m);
|
println!("m = {m:?}");
|
||||||
let m = Message::try_from(m.into_plain_message());
|
let m = Message::try_from(m.into_plain_message());
|
||||||
println!("m' = {:?}", m);
|
println!("m' = {m:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -291,6 +291,6 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_scs_is_debug() {
|
fn test_scs_is_debug() {
|
||||||
println!("{:?}", ALL_CIPHER_SUITES);
|
println!("{ALL_CIPHER_SUITES:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ impl fmt::Debug for BsDebug<'_> {
|
|||||||
} else if (0x20..0x7f).contains(&c) {
|
} else if (0x20..0x7f).contains(&c) {
|
||||||
write!(fmt, "{}", c as char)?;
|
write!(fmt, "{}", c as char)?;
|
||||||
} else {
|
} else {
|
||||||
write!(fmt, "\\x{:02x}", c)?;
|
write!(fmt, "\\x{c:02x}")?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
write!(fmt, "\"")?;
|
write!(fmt, "\"")?;
|
||||||
|
|||||||
@@ -457,7 +457,7 @@ pub(crate) fn pki_error(error: webpki::Error) -> Error {
|
|||||||
UnsupportedSignatureAlgorithm | UnsupportedSignatureAlgorithmForPublicKey => {
|
UnsupportedSignatureAlgorithm | UnsupportedSignatureAlgorithmForPublicKey => {
|
||||||
Error::InvalidCertificateSignatureType
|
Error::InvalidCertificateSignatureType
|
||||||
}
|
}
|
||||||
e => Error::InvalidCertificateData(format!("invalid peer certificate: {}", e)),
|
e => Error::InvalidCertificateData(format!("invalid peer certificate: {e}")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -493,7 +493,7 @@ fn convert_scheme(scheme: SignatureScheme) -> Result<SignatureAlgorithms, Error>
|
|||||||
SignatureScheme::RSA_PSS_SHA512 => Ok(RSA_PSS_SHA512),
|
SignatureScheme::RSA_PSS_SHA512 => Ok(RSA_PSS_SHA512),
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
let error_msg = format!("received unadvertised sig scheme {:?}", scheme);
|
let error_msg = format!("received unadvertised sig scheme {scheme:?}");
|
||||||
Err(Error::PeerMisbehavedError(error_msg))
|
Err(Error::PeerMisbehavedError(error_msg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -543,7 +543,7 @@ fn convert_alg_tls13(
|
|||||||
RSA_PSS_SHA384 => Ok(&webpki::RSA_PSS_2048_8192_SHA384_LEGACY_KEY),
|
RSA_PSS_SHA384 => Ok(&webpki::RSA_PSS_2048_8192_SHA384_LEGACY_KEY),
|
||||||
RSA_PSS_SHA512 => Ok(&webpki::RSA_PSS_2048_8192_SHA512_LEGACY_KEY),
|
RSA_PSS_SHA512 => Ok(&webpki::RSA_PSS_2048_8192_SHA512_LEGACY_KEY),
|
||||||
_ => {
|
_ => {
|
||||||
let error_msg = format!("received unsupported sig scheme {:?}", scheme);
|
let error_msg = format!("received unsupported sig scheme {scheme:?}");
|
||||||
Err(Error::PeerMisbehavedError(error_msg))
|
Err(Error::PeerMisbehavedError(error_msg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ impl fmt::Display for VerifierError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(source) = &self.source {
|
if let Some(source) = &self.source {
|
||||||
write!(f, " caused by: {}", source)?;
|
write!(f, " caused by: {source}")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user