c5807c07a9
The redirector TLS question cannot be answered from the cipher OpenSSL selected: its server follows client preference by default, so FIFA preferring static RSA does not prove ECDHE was unavailable. Choosing a TLS stack on that inference would be a guess. This reads the actual ClientHello. PASSIVE BY CONSTRUCTION. Bytes relay verbatim both ways, nothing is injected or rewritten, and the handshake is still terminated by the untouched Python redirector. A parse failure logs and relays anyway -- observation must never be able to break the path it observes. Reports record/client version, supported_versions, SNI, every offered suite by name, extensions, and a verdict on whether ANY forward-secret suite is offered, which is exactly the rustls question. Unknown suites print as hex rather than being dropped. Verified end to end against the live Python redirector with openssl s_client: 31 offered suites parsed, 18 classified forward-secret, and Python logged the relayed request and served its 406B serverinstanceinfo -- proving observation AND pass-through in one run. Unit-tested on truncated and non-TLS input; the verdict is asserted in both directions so a static-RSA-only hello reports RULED OUT rather than defaulting to the permissive answer. NOTE: that 18-suite result is from openssl s_client, NOT from FIFA. It proves the instrument works. The actual question is still open until a retail FIFA ClientHello is captured. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
39 lines
1.1 KiB
TOML
39 lines
1.1 KiB
TOML
[package]
|
|
name = "openfut-blaze-host"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
license = "MIT"
|
|
description = "Thin TCP host for the FIFA 17 Blaze RPC surface; runs beside the Python backend"
|
|
publish = false
|
|
|
|
[dependencies]
|
|
openfut-protocol-blaze = { path = "../openfut-protocol-blaze" }
|
|
openfut-adapter-fifa17 = { path = "../openfut-adapter-fifa17" }
|
|
# Session keys. The client never validates them, but they must be distinct per
|
|
# connection; seeding from the clock would not be.
|
|
rand = "0.8"
|
|
# The probe replays the adapter's recorded fixture conversation.
|
|
serde_json = "1"
|
|
|
|
# No async runtime and no TLS, both deliberate:
|
|
# * A FIFA client opens a handful of connections, so a thread each mirrors the
|
|
# Python oracle and keeps the host readable.
|
|
# * The Blaze main port is plaintext — verified against the running backend.
|
|
# TLS belongs to the redirector phase.
|
|
|
|
[[bin]]
|
|
name = "openfut-blaze-host"
|
|
path = "src/main.rs"
|
|
|
|
[[bin]]
|
|
name = "blaze-probe"
|
|
path = "src/bin/blaze-probe.rs"
|
|
|
|
[[bin]]
|
|
name = "tls-observe"
|
|
path = "src/bin/tls-observe.rs"
|
|
|
|
[[bin]]
|
|
name = "blaze-sanitize"
|
|
path = "src/bin/blaze-sanitize.rs"
|