Skip to content

Commit dcdf925

Browse files
author
Threepwood-7
committed
RUST-BUG-079: avoid false plaintext diagnostics
1 parent c0470f8 commit dcdf925

3 files changed

Lines changed: 69 additions & 7 deletions

File tree

crates/emulebb-ed2k/src/ed2k_tcp/diag_event.rs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,11 @@ pub(super) fn emit_ed2k_tcp_diag_event(record: &Ed2kTcpDumpRecord<'_>) {
5757
body.insert("payloadHexTruncated".to_string(), json!(truncated));
5858
}
5959
// `obfuscated` (C): real on-wire state derived from the transport-mode label.
60-
body.insert(
61-
"obfuscated".to_string(),
62-
json!(transport_mode_is_obfuscated(record.transport_mode)),
63-
);
60+
// Pre-handshake meta events use `unknown`; omitting the field there avoids
61+
// reporting a false plaintext verdict before the transport exists.
62+
if let Some(obfuscated) = transport_mode_obfuscated(record.transport_mode) {
63+
body.insert("obfuscated".to_string(), json!(obfuscated));
64+
}
6465
body.insert("transportMode".to_string(), json!(record.transport_mode));
6566
body.insert("flow".to_string(), json!(record.flow));
6667
body.insert("phase".to_string(), json!(record.phase));
@@ -77,7 +78,22 @@ pub(super) fn emit_ed2k_tcp_diag_event(record: &Ed2kTcpDumpRecord<'_>) {
7778
);
7879
}
7980

80-
/// Whether an `Ed2kTransportMode` label denotes an obfuscated on-wire transport.
81-
fn transport_mode_is_obfuscated(transport_mode: &str) -> bool {
82-
transport_mode.contains("obfusc") || transport_mode.contains("crypt")
81+
/// Whether an `Ed2kTransportMode` label denotes a known obfuscated on-wire transport.
82+
fn transport_mode_obfuscated(transport_mode: &str) -> Option<bool> {
83+
match transport_mode {
84+
"unknown" => None,
85+
_ => Some(transport_mode.contains("obfusc") || transport_mode.contains("crypt")),
86+
}
87+
}
88+
89+
#[cfg(test)]
90+
mod tests {
91+
use super::transport_mode_obfuscated;
92+
93+
#[test]
94+
fn transport_obfuscation_is_omitted_until_mode_is_known() {
95+
assert_eq!(transport_mode_obfuscated("unknown"), None);
96+
assert_eq!(transport_mode_obfuscated("plaintext"), Some(false));
97+
assert_eq!(transport_mode_obfuscated("obfuscated"), Some(true));
98+
}
8399
}

docs/active/INDEX.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ items.
9090
| [RUST-BUG-076](items/RUST-BUG-076.md) | Major | DONE | Keep diag_event JSONL records line-atomic across shims |
9191
| [RUST-BUG-077](items/RUST-BUG-077.md) | Major | DONE | Persist accepted ED2K request blocks before bitmap recovery |
9292
| [RUST-BUG-078](items/RUST-BUG-078.md) | Major | DONE | Do not immediately downgrade failed obfuscated ED2K peers |
93+
| [RUST-BUG-079](items/RUST-BUG-079.md) | Minor | DONE | Do not report unknown ED2K TCP transport as plaintext |
9394

9495
## Refactors (`REF`)
9596

docs/active/items/RUST-BUG-079.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
id: RUST-BUG-079
3+
title: Do not report unknown ED2K TCP transport as plaintext
4+
status: done
5+
priority: Minor
6+
category: bug
7+
workflow: local
8+
---
9+
10+
# RUST-BUG-079: Do not report unknown ED2K TCP transport as plaintext
11+
12+
## Problem
13+
14+
Live-wire diagnostics showed `native_download` `connect_start` events where the
15+
structured `diag_event_v1.body.obfuscated` field was `false` while the note still
16+
contained source metadata such as `obfuscated=true has_user_hash=true`. At that
17+
phase no transport exists yet, so the on-wire mode is unknown.
18+
19+
This made obfuscation-off parity analysis harder: a source may advertise crypt
20+
metadata, but the actual transport decision is only known at `connect_ready`.
21+
Reporting unknown as `false` made pre-handshake diagnostics look like a confirmed
22+
plaintext verdict.
23+
24+
## Acceptance
25+
26+
- [x] Pre-handshake ED2K TCP meta events with `transportMode="unknown"` omit the
27+
on-wire `obfuscated` field.
28+
- [x] Known plaintext and obfuscated transport modes still emit explicit boolean
29+
values.
30+
- [x] Protocol behavior is unchanged.
31+
32+
## Implementation Notes
33+
34+
- Changed the ED2K TCP `diag_event_v1` mapper to emit `body.obfuscated` only for
35+
known transport modes.
36+
- Kept `body.transportMode` present for every record, including `unknown`.
37+
- Added unit coverage for unknown, plaintext, and obfuscated mapping.
38+
39+
## Evidence
40+
41+
- Live evidence source:
42+
`EMULEBB_WORKSPACE_OUTPUT_ROOT\live-wire\rust-hideme-20260619T001217Z`.
43+
- In that run, all obfuscation-off native-download `connect_ready` records were
44+
plaintext even when some `connect_start` source notes advertised obfuscation
45+
metadata.

0 commit comments

Comments
 (0)