Fix DefaultEncryption key reload on runtime compat flips + add regression coverage#776
Open
shaikh-shahid wants to merge 1 commit intoholepunchto:mainfrom
Open
Conversation
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.
This PR fixes a runtime encryption bug in DefaultEncryption that could surface when core.compat changes after a session is already open (for example, when a manifest is learned later and persisted). It also adds a regression test that reproduces this transition and validates the fix.
Summary
Hypercore supports paths where a core starts without a local manifest and later receives one (for example, via session open with manifest, or replication manifest sync). When that happens, internal core.compat can transition at runtime. Encryption providers account for this by reloading derived keys when compat mode changes. Before this PR, that reload path was broken and could produce undefined keys, leading to runtime failures in decrypt/encrypt paths.
Updated _reload in lib/default-encryption.js (/Users/shahidshaikh/Projects/hypercore/lib/default-encryption.js) to:
Extended test/encryption.js (/Users/shahidshaikh/Projects/hypercore/test/encryption.js) with:
Test flow:
Replaced test.solo(...) with test(...) in test/replicate.js (/Users/shahidshaikh/Projects/hypercore/test/replicate.js) so the full suite can execute normally.
Tests
rather than functional regression.