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>