fix: adopt upstream NUT-13 improvements (big.Int + collision detection) - #8
Merged
Merged
Conversation
Replaces SHA-256 hash approach for V2 keyset ID derivation with math/big.Int based keysetIdToBigInt() from elnosh/gonuts upstream (lescur97's PRs elnosh#146, elnosh#147). The big.Int approach is cleaner, handles arbitrary-length IDs without overflow risk, and supports both hex and base64 keyset ID formats. Adds CheckCollidingKeysets() to detect keyset ID collisions after modulo reduction — prevents two different keyset IDs from mapping to the same BIP32 derivation path. Adopted from: elnosh#146 elnosh#147 6 new tests: V2 keyset derivation, hex/base64 parsing, collision detection.
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
Adopts lescuer97's NUT-13 improvements from elnosh/gonuts upstream (PRs #146, #147) into our fork.
Changes
keysetIdToBigInt()replaces SHA-256 hash approachmath/big.Intto parse keyset IDs of any length, supports both hex and base64 formats, then applies modulo2^31-1. Cleaner, no overflow risk, handles edge cases properly.CheckCollidingKeysets()— new collision detectionVerifies that keyset IDs don't collide after modulo reduction. Two different keyset IDs that produce the same BIP32 derivation path would cause silent secret reuse — this function detects and prevents that.
Test Results
Full suite: all 17 packages pass.
Why adopt from upstream?
elnosh/gonuts is the original repository. lescuer97 contributed these improvements in August 2025. Our fork (OpenTollGate/gonuts-tollgate) is the active fork for TollGate, but we should stay close to upstream where possible. This change is strictly better than our SHA-256 hash workaround.