Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add input validation, minor refactor #3

Merged
merged 3 commits into from
Feb 23, 2021
Merged

Conversation

rekmarks
Copy link
Member

@rekmarks rekmarks commented Feb 23, 2021

This PR adds input validation to ensure that only properly formatted paths are processed by deriveKeyFromPath. Aside from internal import/export refactoring, the only functional change is the added input validation, and the tests, which are functionally unchanged, pass.

This PR is intended as the first entry before a major version bump, due to this package's anticipated production use. Therefore, the following breaking, but not cryptographically relevant changes, are made:

  • deriveKeyFromPath: Change the order of parameters
    • The first parameter was often null, which is unergonomic
  • Add index.js file to derivers directory, re-export individual derivers from there
    • We (I?) love being agnostic of directory structure when importing!
  • Update readme
  • Delete dead code

@rekmarks rekmarks requested a review from kumavis February 23, 2021 04:50
Comment on lines +43 to +69
function validateDeriveKeyParams(pathSegment, parentKey) {
// The path segment must be one of the following:
// - A lone BIP-32 path segment
// - A lone BIP-39 path segment
// - A multipath
if (!(
BIP_32_PATH_REGEX.test(pathSegment) ||
BIP_39_PATH_REGEX.test(pathSegment) ||
MULTI_PATH_REGEX.test(pathSegment)
)) {
throw new Error('Invalid HD path segment. Ensure that the HD path segment is correctly formatted.')
}

// BIP-39 segments can only initiate HD paths
if (BIP_39_PATH_REGEX.test(pathSegment) && parentKey) {
throw new Error('May not specify parent key and BIP-39 path segment.')
}

// BIP-32 segments cannot initiate HD paths
if (!pathSegment.startsWith('bip39') && !parentKey) {
throw new Error('Must specify parent key if the first path of the path segment is not BIP-39.')
}

// The parent key must be a Buffer
if (parentKey && !Buffer.isBuffer(parentKey)) {
throw new Error('Parent key must be a Buffer if specified.')
}
Copy link
Member Author

@rekmarks rekmarks Feb 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This here is the crux of this PR.

@kumavis kumavis merged commit 75a2c30 into master Feb 23, 2021
@kumavis kumavis deleted the add-input-validation branch February 23, 2021 05:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants