docs: ADR-037 revision, versioned envelope and key ring - #111
Merged
Conversation
Records the new storage format for EncryptedStringConverter: Base64 of [key version (1)][nonce (12)][ciphertext][tag (16)], replacing the un-versioned layout with no legacy decode path (affordable precisely because adoption is still zero). Adds the key-ring constructor, the current-version write / data-driven read model, the version byte authenticated as AES-GCM associated data, and the stateless, context-free stance that puts per-tenant key selection out of scope. Rewrites the "no rotation story", "no key identifier or version" and 28-byte overhead statements (now 29 bytes before Base64), rebases every line citation against the branch source, and adds a 2026-08-15 revision note. Documents work landing via MMCA.Common PR #247, unreleased. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KwnaQjfkHbHqoMm4Pec3oE
The index summary still described the un-versioned Base64 nonce+ct+tag layout and a single 32-byte key. Updated to the versioned envelope and the key ring, keeping the row's existing style: mechanism first, then the unadopted posture, which is now also the reason the old format was free to replace. Row count and ADR range are unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KwnaQjfkHbHqoMm4Pec3oE
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.
Revises ADR-037 (field-level encryption at rest) to record the redesigned
EncryptedStringConverter, and rebuildsdocs/.What the revision records
[key version (1)][nonce (12)][ciphertext][tag (16)]. The previous un-versioned[nonce][ciphertext][tag]layout is gone with no legacy decode path, which is affordable exactly because this ADR has recorded zero adopted columns since 2026-07-06. That window closes at the first adopted column.IReadOnlyDictionary<byte, byte[]>plus a nominated current version, validated once (non-null, non-empty, no null entry, every key exactly 32 bytes, current version present) and defensively copied to aFrozenDictionary. The single-keybyte[]constructor stays, as sugar for a one-entry ring at version 1.DbContext; per-tenant and per-request key selection stay deliberately out of scope for a value converter (that needs aSaveChangesinterceptor or application-layer encryption).EncryptedStringConverter.cscitation rebased against the branch source. Honest latent posture preserved: still zero production columns.Source
The code change lands via MMCA.Common PR #247 (ivanball/MMCA.Common#247), unreleased; it ships in the next framework release, and the revision note says so.
Notes
docs-src/edit and the regenerateddocs/adr/037-field-level-encryption-at-rest.html,assets/data/search-index.jsonandsitemap.xmlare committed together (freshness gate).README.mdwas left untouched per instructions; its summary cell for 037 still describes the oldnonce+ct+taglayout and will need a follow-up.mainpublishes the live site.🤖 Generated with Claude Code
https://claude.ai/code/session_01KwnaQjfkHbHqoMm4Pec3oE