Repository navigation
Conversation
A node configured with an application publisher key stamps the constant "offline" as the wire app_id on every frame it originates, and seals the real id inside RichPayloadV1.app_id, which a receiver restores as authoritative. A forwarded frame keeps its origin's app_id. Unconfigured nodes are unchanged (ADR 0037 step 9).
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Step 9 of the shared-network plan (ADR 0037). Stacked on #689.
What changes
A node configured with an application publisher key no longer names its application in the clear.
app_id = "offline"(WIRE_APP_ID, inoffline-protocol-sealed). TheTransportManagerstamps it at the send boundary, next to the codec stamp, and only when the sender is this node. A frame it forwards keeps theapp_idits origin gave it.RichPayloadV1.app_id. Toward a rich-capable recipient, a configured node seals it on every message, in an id-only body when nothing else needs sealing. Group sends do the same.app_idthat is a validAppIdoverrides the wire copy, soMessageReceivedreports the real application.What it does not hide
offline.offline), not sent in the clear. This is the same downgrade rule as every other sealed extra.app_idwas never in a signed payload, so stamping after signing changes no signature.Tests
a_configured_node_stamps_the_constant_and_seals_the_real_application_id: two members with a real MLS session. The wire frame saysoffline, and the receiver reportscom.example.chat. Mutation-checked: disabling the stamp fails the test, and disabling the restore fails it too.an_unconfigured_node_stamps_its_own_application_id_as_before.the_wire_app_id_is_stamped_only_on_frames_this_node_originates(transport manager): a relayed frame keeps its origin's id.cargo test -p offline-protocol --lib: 2214 passed.cargo clippy --workspace -- -D warningsis clean.Spec
wire-format.md: the configured-node paragraph.encryption-envelopes.md: theapp_idfield and restore rule 5.The threat-model update (R17) lands with step 12.
CI does not run on a PR whose base is not
main. It will run once the stack below has merged.