Repository navigation
Address non-security review follow-ups - #113
Merged
Merged
Conversation
establish rejects duplicate classical extension types and forgets the folded apq_psk; attestation verification decodes at the codepoints' wire width; exportSecret throws on out-of-range lengths; ProposalStore.insert no longer overwrites a migrated entry. Also fixes two stale docs and zeroizes the exporter's first-stage secret. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🦋 Changeset detectedLatest commit: 4acf84c The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Merged
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.
Batches the non-security follow-ups from a review of the v0.1.6 changes:
CombinerGroup.establishrejects a classical GroupContext extension list that repeats a type. RFC 9420 §13.4: "Any field containing a list of extensions MUST NOT have more than one extension of any given type." Types are compared by raw value, so a hand-built.unknowncan't slip past a.knownof the same code point.verifyFullCommitAttestation/verifyFullCommitdecode a.customProposal-wrapped attestation under theCodepoints' own wire width. Before this, a caller verifying outside its.uint32scope rejected every wrapped attestation.Group.exportSecretthrowsexportLengthOutOfRangefor a length outside1...255·Nh(RFC 5869 §2.3), instead of trapping in HKDF.establish/joinforget the foldedapq_psk, so a returnedCombinerGroup's PSK store is empty.ProposalStore.insertno longer silently overwrites an entry written by the migration SPI. A matching verified proposal leaves it in place (keeping its leaf secret); a mismatched one throwsmigratedUpdateRefAlreadyStored.HalfCreation's randomness claim), and a zeroizing first stage in the §8.5 exporter.Deferred:
Group.create, GroupContextExtensions proposals, KeyPackage / LeafNode / GroupInfo). This PR only closes the combiner's caller-supplied path.Testing: full
swift testplus the strict lint. Each new test was mutation-checked, i.e. it fails when its mechanism is removed.🤖 Generated with Claude Code