Repository navigation
feat(session): add recipient and SPQR 1.6 parity - #38
Merged
Merged
Conversation
Bind resumed pre-key sessions to their established identity and clone entire records before authentication. Require SPQR V1 for fresh sessions while retaining explicit legacy-state compatibility. Genuine Rust oracles guard negotiation and parser parity.
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.
Summary
Add the pure-Go recipient pre-key API and upstream SPQR 1.6 behavior without changing wire schemas or existing protocol fixtures.
PreKeyDecryptStores/DecryptPreKeyestablish PQXDH sessions, resume current or archived sessions, enforce identity binding, and commit successful pre-key consumption in upstream order.Locked Scope
Plan/design:
GoCodeAlone/workspace/docs/plans/2026-07-10-signal-spaces-group-channels{,-design}.md; additive API:2026-10-02-libsignal-v01040-upstream-audit.md.PR Count: 34. Tasks: 41. Status: Locked 2026-10-03T08:47:45Z.
Task 31 merged independently in #37. No tag here; Task 10 owns consolidated v0.8.0 release/provenance. Encrypted Spaces work remains deferred under ADR 0150, not completed.
Verification
go test -race ./... -count=1, focused recipient/SPQR/oracle suites,go vet ./...,CGO_ENABLED=0 go build ./..., andgolangci-lint run(0 issues).06959b4708f9b7b1e94d0f8cc835f3958c077e94; upstream libsignal257105c55a7389ca6b1e85185e2769465e6729f1.9d53c9cecf7f5a5c5a3dc868a8a6836a9d956a80f7173dee0a23f40a2193dc94..protofiles and existing session/Sender Key/PQ fixtures are unchanged. External public API signature/store-field compile fixture passes.Regression proof with protections temporarily bypassed:
The old fallback test now supplies an explicit legacy state; default V1 downgrade denial is tested separately. Nine malformed minimum-version cases ensure lint-safe conversion retains Rust's low-byte semantics rather than adding Go-only rejection rules.
Doc-reconciliation: clean. Current oracle/parity additions are distinguished from the inherited global proof-report baseline, which Task 10 updates.