Terminate on any unsupported version instead of sending code 2 - #40
Merged
Conversation
A challenger's next read after sending CHALLENGE is exactly the 32-byte CHALLENGE-RESPONSE hash, so a response code written into that stream is indistinguishable from the start of a hash. Close without responding (SPEC SS10.5); code 2 remains for unsupported MESSAGE versions, where the peer's first read is always a response code. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Aug 10, 2026
Follows the revised ruling in markmnl/fmsg#29: an unsupported version is one we do not know how to respond in, so both branches of readVersionOrChallenge now TERMINATE without writing anything — the message-version branch (first byte <= 128) as well as the challenge branch. Code 2 is therefore never sent on the wire. RejectCodeUnsupportedVersion and its responseCodeName case are removed, with 2 left unassigned so the numbering is unchanged; responseCodeName falls through to unknown(2) if one is ever read from a peer. Its host_test row goes with it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Design correction from spec review (markmnl/fmsg#29): an unsupported version is one we don't know how to respond in, so the listener MUST TERMINATE without writing anything — on both first-byte branches.
Changes
readVersionOrChallengecloses without writing on both unsupported branches.RejectCodeUnsupportedVersionand itsresponseCodeNamecase are removed; 2 is left unassigned so existing numbering is unchanged, matching the spec's code table (which already has an unassigned 104).responseCodeNamefalls through tounknown(2)should one ever be read from a peer.host_test.gotable row is dropped.go build,go vet,go test ./...all pass.History
An earlier v0.5.0 spec draft split the two branches — REJECT 2 for the message-version branch, TERMINATE for the challenge branch — and an earlier revision of this PR implemented that split. Review settled on the simpler rule: terminate in both cases. This PR now implements that, and depends on markmnl/fmsg#29 landing with it.
🤖 Generated with Claude Code