Skip to content

Commit

Permalink
fix data length in client hello (#433)
Browse files Browse the repository at this point in the history
* fix data length in client hello
  • Loading branch information
airycanon authored Feb 26, 2025
1 parent 1da2128 commit a58bfdf
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 33 deletions.
40 changes: 21 additions & 19 deletions rama-cli/src/cmd/fp/data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ pub(super) struct Ja3DisplayInfo {
#[derive(Debug, Clone, Serialize)]
pub(super) struct TlsDisplayInfoExtension {
pub(super) id: String,
pub(super) data: TlsDisplayInfoExtensionData,
pub(super) data: Option<TlsDisplayInfoExtensionData>,
}

#[derive(Debug, Clone, Serialize)]
Expand Down Expand Up @@ -306,50 +306,52 @@ pub(super) fn get_tls_display_info(ctx: &Context<Arc<State>>) -> Option<TlsDispl
.map(|extension| match extension {
ClientHelloExtension::ServerName(domain) => TlsDisplayInfoExtension {
id: extension.id().to_string(),
data: TlsDisplayInfoExtensionData::Single(match domain {
Some(domain) => domain.to_string(),
None => "".to_owned(),
}),
data: domain
.as_ref()
.map(|d| TlsDisplayInfoExtensionData::Single(d.to_string())),
},
ClientHelloExtension::SignatureAlgorithms(v) => TlsDisplayInfoExtension {
id: extension.id().to_string(),
data: TlsDisplayInfoExtensionData::Multi(
data: Some(TlsDisplayInfoExtensionData::Multi(
v.iter().map(|s| s.to_string()).collect(),
),
)),
},
ClientHelloExtension::SupportedVersions(v) => TlsDisplayInfoExtension {
id: extension.id().to_string(),
data: TlsDisplayInfoExtensionData::Multi(
data: Some(TlsDisplayInfoExtensionData::Multi(
v.iter().map(|s| s.to_string()).collect(),
),
)),
},
ClientHelloExtension::ApplicationLayerProtocolNegotiation(v) => {
TlsDisplayInfoExtension {
id: extension.id().to_string(),
data: TlsDisplayInfoExtensionData::Multi(
data: Some(TlsDisplayInfoExtensionData::Multi(
v.iter().map(|s| s.to_string()).collect(),
),
)),
}
}
ClientHelloExtension::SupportedGroups(v) => TlsDisplayInfoExtension {
id: extension.id().to_string(),
data: TlsDisplayInfoExtensionData::Multi(
data: Some(TlsDisplayInfoExtensionData::Multi(
v.iter().map(|s| s.to_string()).collect(),
),
)),
},
ClientHelloExtension::ECPointFormats(v) => TlsDisplayInfoExtension {
id: extension.id().to_string(),
data: TlsDisplayInfoExtensionData::Multi(
data: Some(TlsDisplayInfoExtensionData::Multi(
v.iter().map(|s| s.to_string()).collect(),
),
)),
},
ClientHelloExtension::Opaque { id, data } => TlsDisplayInfoExtension {
id: id.to_string(),
data: TlsDisplayInfoExtensionData::Single(if data.is_empty() {
"EMPTY".to_owned()
data: if data.is_empty() {
None
} else {
format!("0x{}", hex::encode(data))
}),
Some(TlsDisplayInfoExtensionData::Single(format!(
"0x{}",
hex::encode(data)
)))
},
},
})
.collect::<Vec<_>>(),
Expand Down
21 changes: 11 additions & 10 deletions rama-cli/src/cmd/fp/endpoints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -547,18 +547,19 @@ impl From<TlsDisplayInfo> for Vec<Table> {
],
});
for extension in info.extensions {
let mut rows = vec![("ID".to_owned(), extension.id)];
if let Some(data) = extension.data {
rows.push((
"Data".to_owned(),
match data {
TlsDisplayInfoExtensionData::Single(s) => s,
TlsDisplayInfoExtensionData::Multi(v) => v.join(", "),
},
));
}
vec.push(Table {
title: "🔒 TLS Client Hello — Extension".to_owned(),
rows: vec![
("ID".to_owned(), extension.id),
(
"Data".to_owned(),
match extension.data {
TlsDisplayInfoExtensionData::Single(s) => s,
TlsDisplayInfoExtensionData::Multi(v) => v.join(", "),
},
),
],
rows,
});
}
vec
Expand Down
14 changes: 10 additions & 4 deletions src/cli/service/echo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -414,10 +414,16 @@ impl Service<(), Request> for EchoService {
"id": extension.id().to_string(),
"data": v.iter().map(|s| s.to_string()).collect::<Vec<_>>(),
}),
ClientHelloExtension::Opaque { id, data } => json!({
"id": id.to_string(),
"data": format!("0x{}", hex::encode(data)),
}),
ClientHelloExtension::Opaque { id, data } => if data.is_empty() {
json!({
"id": id.to_string()
})
} else {
json!({
"id": id.to_string(),
"data": format!("0x{}", hex::encode(data))
})
},
}).collect::<Vec<_>>(),
"ja3": ja3,
"ja4": ja4,
Expand Down

0 comments on commit a58bfdf

Please sign in to comment.