@leather.io/crypto 1.12.13 → 1.12.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -73,11 +73,18 @@ declare function deriveRootBip32Keychain(seed: Uint8Array): HDKey;
73
73
  declare function deriveRootKeychainFromMnemonic(mnemonic: string, passphrase?: string): Promise<HDKey>;
74
74
  declare function deriveChildKeychainFromMnemnonic(path: string, mnemonic: string, passphrase?: string): Promise<HDKey>;
75
75
  declare const deriveKeychainFromXpub: (xpub: string) => HDKey;
76
+ declare function fingerprintAsNumberToHex(fingerprint: number): string;
77
+ declare function safelyReadPaddedFingerprint(fingerprintHex: string): string;
78
+ declare function unpadHex(hex: string): string;
76
79
  /**
77
80
  * Gets keychain fingerprint directly from mnemonic. This is useful for
78
81
  * referencing a mnemonic safely by an identifier.
79
82
  */
80
83
  declare function getMnemonicRootKeyFingerprint(mnemonic: string, passphrase?: string): Promise<string>;
84
+ /**
85
+ * @deprecated Does not handle leading zeros correctly, use `getMnemonicRootKeyFingerprint` instead
86
+ */
87
+ declare function getMnemonicRootKeyFingerprintBroken(mnemonic: string, passphrase?: string): Promise<string>;
81
88
  declare function deriveKeychainExtendedPublicKeyDescriptor(rootKeychain: HDKey, path: string): string;
82
89
  declare function isValidMnemonicWord(word: string): boolean;
83
90
  declare function isValidMnemonic(mnemonic: string): boolean;
@@ -95,5 +102,5 @@ interface Signer {
95
102
  derivationPath: string;
96
103
  }
97
104
  //#endregion
98
- export { DerivationPathDepth, Signer, appendAddressIndexToPath, createDescriptor, createKeyOriginPath, decomposeDescriptor, deriveBip39MnemonicFromSeed, deriveBip39SeedFromMnemonic, deriveChildKeychainFromMnemnonic, deriveKeychainExtendedPublicKeyDescriptor, deriveKeychainFromXpub, deriveRootBip32Keychain, deriveRootKeychainFromMnemonic, extractAccountIndexFromDescriptor, extractAccountIndexFromPath, extractAccountPathFromFullPath, extractAddressIndexFromPath, extractChangeIndexFromPath, extractDerivationPathFromDescriptor, extractFingerprintFromDescriptor, extractFingerprintFromKeyOriginPath, extractKeyFromDescriptor, extractKeyOriginPathFromDescriptor, extractPurposeFromPath, generateMnemonic, getMnemonicRootKeyFingerprint, isValidMnemonic, isValidMnemonicWord, keyOriginToDerivationPath, makeAccountIdentifer, validateKeyOriginPath };
105
+ export { DerivationPathDepth, Signer, appendAddressIndexToPath, createDescriptor, createKeyOriginPath, decomposeDescriptor, deriveBip39MnemonicFromSeed, deriveBip39SeedFromMnemonic, deriveChildKeychainFromMnemnonic, deriveKeychainExtendedPublicKeyDescriptor, deriveKeychainFromXpub, deriveRootBip32Keychain, deriveRootKeychainFromMnemonic, extractAccountIndexFromDescriptor, extractAccountIndexFromPath, extractAccountPathFromFullPath, extractAddressIndexFromPath, extractChangeIndexFromPath, extractDerivationPathFromDescriptor, extractFingerprintFromDescriptor, extractFingerprintFromKeyOriginPath, extractKeyFromDescriptor, extractKeyOriginPathFromDescriptor, extractPurposeFromPath, fingerprintAsNumberToHex, generateMnemonic, getMnemonicRootKeyFingerprint, getMnemonicRootKeyFingerprintBroken, isValidMnemonic, isValidMnemonicWord, keyOriginToDerivationPath, makeAccountIdentifer, safelyReadPaddedFingerprint, unpadHex, validateKeyOriginPath };
99
106
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/derivation-path-utils.ts","../src/keychain.ts","../src/signer/signer.ts"],"sourcesContent":[],"mappings":";;;aAEY,mBAAA;;;EAAA,QAAA,GAAA,CAAA;EAkBC,OAAA,GAAA,CAAA;EAEA,MAAA,GAAA,CAAA;EAIA,YAAA,GAAA,CAAA;AAIb;AAIgB,cAdH,sBAc2B,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,MAAA;AAMxB,cAlBH,2BAkBsC,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,MAAA;AAcnC,cA5BH,0BA4BsB,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,MAAA;AAKnB,cA7BH,2BA6BwB,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,MAAA;AAqBrB,iBA9CA,wBAAA,CA8CgB,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAQhB,iBAhDA,mCAAA,CAgDkC,aAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AASlD;AAQA;AAOA;AAOA;AAOA;AAKA;AAKA;;iBAlFgB,mBAAA;iBAKA,qBAAA;ACzChB;AAIA;;;;AAAuF,iBD0DvE,gBAAA,CC1DuE,aAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAIvF;AAEA;AAIA;AAIsB,iBDoDN,kCAAA,CCjDK,UAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAMrB;AAMA;AAKA;AAWgB,iBD8BA,mCAAA,CC9BmB,UAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAInC;AAOA;;iBD2BgB,gCAAA;;;;AEzGwC,iBFgHxC,iCAAA,CEhHwC,UAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;AAExD;iBFqHgB,wBAAA;;;;iBAOA,8BAAA;iBAKA,yBAAA;iBAKA,mBAAA;;;;;;;;;iBCtHA,gBAAA,CAAA;iBAIM,2BAAA,yCAAiE,QAAA,WAAA;ADpBvF;AAkBa,cCMA,2BDNsF,EAAA,OCM3D,2BDN2D;AAEtF,iBCMG,uBAAA,CDJf,IAAA,ECI6C,UDJ7C,CAAA,ECIuD,KDJvD;AAEY,iBCMS,8BAAA,CDJrB,QAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,MAAA,CAAA,ECIyF,ODJzF,CCIyF,KDJzF,CAAA;AAEY,iBCMS,gCAAA,CDJrB,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,MAAA,CAAA,ECOoB,ODPpB,CCOoB,KDPpB,CAAA;AAEe,cCWH,sBDX2B,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GCWmB,KDXnB;AAMxC;AAcA;AAKA;AAqBA;AAQgB,iBCrCM,6BAAA,CDqC4B,QAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,MAAA,CAAA,ECrCuC,ODqCvC,CAAA,MAAA,CAAA;AASlC,iBCzCA,yCAAA,CDyCmC,YAAA,ECzCqB,KDyCrB,EAAA,IAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAQnC,iBCtCA,mBAAA,CDsCgC,IAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAOhC,iBCzCA,eAAA,CDyCiC,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAOjD;AAOA;AAKA;AAKgB,iBC1DA,oBAAA,CD0DmB,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;KExI9B,iBAAiB,0BAA0B,QAAQ;UAEvC,MAAA;QACT;EFDI,OAAA,EAAA,MAAA;EAkBC,SAAA,EEfA,UFeA;EAEA,cAAA,EAAA,MAAA;AAIb"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/derivation-path-utils.ts","../src/keychain.ts","../src/signer/signer.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -136,15 +136,31 @@ async function deriveChildKeychainFromMnemnonic(path, mnemonic, passphrase) {
136
136
  return deriveRootBip32Keychain(await mnemonicToSeed(mnemonic, passphrase)).derive(keyOriginToDerivationPath(path));
137
137
  }
138
138
  const deriveKeychainFromXpub = memoize((xpub) => HDKey.fromExtendedKey(xpub));
139
+ function fingerprintAsNumberToHex(fingerprint) {
140
+ return fingerprint.toString(16).padStart(8, "0");
141
+ }
142
+ function safelyReadPaddedFingerprint(fingerprintHex) {
143
+ if (fingerprintHex.length < 8) return fingerprintHex.padStart(8, "0");
144
+ return fingerprintHex;
145
+ }
146
+ function unpadHex(hex) {
147
+ return BigInt("0x" + hex).toString(16);
148
+ }
139
149
  /**
140
150
  * Gets keychain fingerprint directly from mnemonic. This is useful for
141
151
  * referencing a mnemonic safely by an identifier.
142
152
  */
143
153
  async function getMnemonicRootKeyFingerprint(mnemonic, passphrase) {
154
+ return fingerprintAsNumberToHex(deriveRootBip32Keychain(await deriveBip39SeedFromMnemonic(mnemonic, passphrase)).fingerprint);
155
+ }
156
+ /**
157
+ * @deprecated Does not handle leading zeros correctly, use `getMnemonicRootKeyFingerprint` instead
158
+ */
159
+ async function getMnemonicRootKeyFingerprintBroken(mnemonic, passphrase) {
144
160
  return toHexString(deriveRootBip32Keychain(await deriveBip39SeedFromMnemonic(mnemonic, passphrase)).fingerprint);
145
161
  }
146
162
  function deriveKeychainExtendedPublicKeyDescriptor(rootKeychain, path) {
147
- const keyOriginPath = createKeyOriginPath(toHexString(rootKeychain.fingerprint), path);
163
+ const keyOriginPath = createKeyOriginPath(fingerprintAsNumberToHex(rootKeychain.fingerprint), path);
148
164
  if (rootKeychain.depth !== DerivationPathDepth.Root) throw new Error("Cannot derive account keychain from non-root keychain");
149
165
  return createDescriptor(keyOriginPath, rootKeychain.derive(path).publicExtendedKey);
150
166
  }
@@ -162,5 +178,5 @@ function makeAccountIdentifer(fingerprint, accountIndex) {
162
178
  }
163
179
 
164
180
  //#endregion
165
- export { DerivationPathDepth, appendAddressIndexToPath, createDescriptor, createKeyOriginPath, decomposeDescriptor, deriveBip39MnemonicFromSeed, deriveBip39SeedFromMnemonic, deriveChildKeychainFromMnemnonic, deriveKeychainExtendedPublicKeyDescriptor, deriveKeychainFromXpub, deriveRootBip32Keychain, deriveRootKeychainFromMnemonic, extractAccountIndexFromDescriptor, extractAccountIndexFromPath, extractAccountPathFromFullPath, extractAddressIndexFromPath, extractChangeIndexFromPath, extractDerivationPathFromDescriptor, extractFingerprintFromDescriptor, extractFingerprintFromKeyOriginPath, extractKeyFromDescriptor, extractKeyOriginPathFromDescriptor, extractPurposeFromPath, generateMnemonic, getMnemonicRootKeyFingerprint, isValidMnemonic, isValidMnemonicWord, keyOriginToDerivationPath, makeAccountIdentifer, validateKeyOriginPath };
181
+ export { DerivationPathDepth, appendAddressIndexToPath, createDescriptor, createKeyOriginPath, decomposeDescriptor, deriveBip39MnemonicFromSeed, deriveBip39SeedFromMnemonic, deriveChildKeychainFromMnemnonic, deriveKeychainExtendedPublicKeyDescriptor, deriveKeychainFromXpub, deriveRootBip32Keychain, deriveRootKeychainFromMnemonic, extractAccountIndexFromDescriptor, extractAccountIndexFromPath, extractAccountPathFromFullPath, extractAddressIndexFromPath, extractChangeIndexFromPath, extractDerivationPathFromDescriptor, extractFingerprintFromDescriptor, extractFingerprintFromKeyOriginPath, extractKeyFromDescriptor, extractKeyOriginPathFromDescriptor, extractPurposeFromPath, fingerprintAsNumberToHex, generateMnemonic, getMnemonicRootKeyFingerprint, getMnemonicRootKeyFingerprintBroken, isValidMnemonic, isValidMnemonicWord, keyOriginToDerivationPath, makeAccountIdentifer, safelyReadPaddedFingerprint, unpadHex, validateKeyOriginPath };
166
182
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["scureGenerateMnemonic"],"sources":["../src/derivation-path-utils.ts","../src/keychain.ts"],"sourcesContent":["import { isHexString } from '@leather.io/utils';\n\nexport enum DerivationPathDepth {\n Root = 0,\n Purpose = 1,\n CoinType = 2,\n Account = 3,\n Change = 4,\n AddressIndex = 5,\n}\n\nfunction extractSectionFromDerivationPath(depth: DerivationPathDepth) {\n return (path: string) => {\n const segments = path.split('/');\n const accountNum = parseInt(segments[depth].replaceAll(\"'\", ''), 10);\n if (isNaN(accountNum)) throw new Error(`Cannot parse ${DerivationPathDepth[depth]} from path`);\n return accountNum;\n };\n}\n\nexport const extractPurposeFromPath = extractSectionFromDerivationPath(DerivationPathDepth.Purpose);\n\nexport const extractAccountIndexFromPath = extractSectionFromDerivationPath(\n DerivationPathDepth.Account\n);\n\nexport const extractChangeIndexFromPath = extractSectionFromDerivationPath(\n DerivationPathDepth.Change\n);\n\nexport const extractAddressIndexFromPath = extractSectionFromDerivationPath(\n DerivationPathDepth.AddressIndex\n);\n\nexport function appendAddressIndexToPath(path: string, change: number, addressIndex: number) {\n const accountIndex = extractAccountIndexFromPath(path);\n if (!Number.isInteger(accountIndex)) throw new Error('Invalid path, must have account index');\n return `${path}/${change}/${addressIndex}`;\n}\n\nexport function extractFingerprintFromKeyOriginPath(keyOriginPath: string) {\n const fingerprint = keyOriginPath.split('/')[0];\n if (!isHexString(fingerprint)) throw new Error('Fingerprint must be a hexadecimal string');\n return fingerprint;\n}\n\n/**\n * @description\n * A key origin path refers to the identifier commonly used as part of the key\n * information provided as part of a Output Descriptor described in BIP-380. It\n * replaces the `m/` part of a derivation path with the master key fingerprint to which the\n * key it describes belongs.\n * @example `0a3fd8ef/84'/0'/0'`\n */\nexport function createKeyOriginPath(fingerprint: string, path: string) {\n if (!isHexString(fingerprint)) throw new Error('Fingerprint must be a hexadecimal string');\n return `${fingerprint}/${path.replace('m/', '')}`;\n}\n\nexport function validateKeyOriginPath(keyOriginPath: string) {\n if (keyOriginPath.includes('[') || keyOriginPath.includes(']'))\n throw new Error('Key origin path should not contain square brackets');\n\n if (!keyOriginPath.includes('/'))\n throw new Error('Key origin path must contain a fingerprint and derivation path');\n\n if (!isHexString(extractFingerprintFromKeyOriginPath(keyOriginPath)))\n throw new Error('Fingerprint must be a hexadecimal string');\n\n if (keyOriginPath.split('/').length < 4)\n throw new Error('Key origin path is too short. Should describe at least to the account level');\n\n return true;\n}\n\n/**\n * @description\n * Creates a descriptor with key origin and xpub or public key\n * @returns `[0a3fd8ef/84'/0'/0']xpuba1b…2c3`\n */\nexport function createDescriptor(keyOriginPath: string, key: string) {\n validateKeyOriginPath(keyOriginPath);\n return `[${keyOriginPath}]${key}`;\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/0']xpuba1b…2c3` -> `0a3fd8ef/84'/0'/0'`\n */\nexport function extractKeyOriginPathFromDescriptor(descriptor: string) {\n const keyOriginPath = descriptor.split(']')[0].replace('[', '');\n validateKeyOriginPath(keyOriginPath);\n return keyOriginPath;\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/0']xpuba1b…2c3` -> `m/84'/0'/0'`\n */\nexport function extractDerivationPathFromDescriptor(descriptor: string) {\n const keyOriginPath = extractKeyOriginPathFromDescriptor(descriptor);\n return 'm/' + keyOriginPath.split('/').slice(1).join('/');\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/0']xpuba1b…2c3` -> `0a3fd8ef`\n */\nexport function extractFingerprintFromDescriptor(descriptor: string) {\n return extractFingerprintFromKeyOriginPath(extractKeyOriginPathFromDescriptor(descriptor));\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/6']xpuba1b…2c3` -> `6`\n */\nexport function extractAccountIndexFromDescriptor(descriptor: string) {\n return extractAccountIndexFromPath(extractKeyOriginPathFromDescriptor(descriptor));\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/6']xpuba1b…2c3` -> `xpuba1b…2c3`\n */\nexport function extractKeyFromDescriptor(descriptor: string) {\n return descriptor.split(']')[1];\n}\n\n/**\n * @example `0a3fd8ef/84'/0'/0/0/0` -> `0a3fd8ef/84'/0'/0`\n */\nexport function extractAccountPathFromFullPath(path: string) {\n const segments = path.split('/');\n return segments.slice(0, 4).join('/');\n}\n\nexport function keyOriginToDerivationPath(keyOrigin: string) {\n const [_fingerprint, ...remainingPath] = keyOrigin.split('/');\n return `m/${remainingPath.join('/')}`;\n}\n\nexport function decomposeDescriptor(descriptor: string) {\n return {\n descriptor,\n keyOrigin: extractKeyOriginPathFromDescriptor(descriptor),\n fingerprint: extractFingerprintFromDescriptor(descriptor),\n derivationPath: extractDerivationPathFromDescriptor(descriptor),\n accountIndex: extractAccountIndexFromDescriptor(descriptor),\n };\n}\n","import { HDKey } from '@scure/bip32';\nimport {\n mnemonicToSeed,\n generateMnemonic as scureGenerateMnemonic,\n validateMnemonic,\n} from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\nimport memoize from 'just-memoize';\n\nimport { toHexString } from '@leather.io/utils';\n\nimport {\n DerivationPathDepth,\n createDescriptor,\n createKeyOriginPath,\n keyOriginToDerivationPath,\n} from './derivation-path-utils';\n\nexport function generateMnemonic() {\n return scureGenerateMnemonic(wordlist, 256);\n}\n\nexport async function deriveBip39SeedFromMnemonic(mnemonic: string, passphrase?: string) {\n return mnemonicToSeed(mnemonic, passphrase);\n}\n/** @deprecated Inaccurately named fn, use `deriveBip39SeedFromMnemonic` */\nexport const deriveBip39MnemonicFromSeed = deriveBip39SeedFromMnemonic;\n\nexport function deriveRootBip32Keychain(seed: Uint8Array) {\n return HDKey.fromMasterSeed(seed);\n}\n\nexport async function deriveRootKeychainFromMnemonic(mnemonic: string, passphrase?: string) {\n return deriveRootBip32Keychain(await deriveBip39SeedFromMnemonic(mnemonic, passphrase));\n}\n\nexport async function deriveChildKeychainFromMnemnonic(\n path: string,\n mnemonic: string,\n passphrase?: string\n) {\n const rootKeychain = deriveRootBip32Keychain(await mnemonicToSeed(mnemonic, passphrase));\n return rootKeychain.derive(keyOriginToDerivationPath(path));\n}\n\nexport const deriveKeychainFromXpub = memoize((xpub: string) => HDKey.fromExtendedKey(xpub));\n\n/**\n * Gets keychain fingerprint directly from mnemonic. This is useful for\n * referencing a mnemonic safely by an identifier.\n */\nexport async function getMnemonicRootKeyFingerprint(mnemonic: string, passphrase?: string) {\n const keychain = deriveRootBip32Keychain(await deriveBip39SeedFromMnemonic(mnemonic, passphrase));\n return toHexString(keychain.fingerprint);\n}\n\nexport function deriveKeychainExtendedPublicKeyDescriptor(rootKeychain: HDKey, path: string) {\n const masterFingerprint = toHexString(rootKeychain.fingerprint);\n const keyOriginPath = createKeyOriginPath(masterFingerprint, path);\n\n if (rootKeychain.depth !== DerivationPathDepth.Root)\n throw new Error('Cannot derive account keychain from non-root keychain');\n\n const accountKeychain = rootKeychain.derive(path);\n return createDescriptor(keyOriginPath, accountKeychain.publicExtendedKey);\n}\n\nexport function isValidMnemonicWord(word: string): boolean {\n return wordlist.includes(word);\n}\n\nexport function isValidMnemonic(mnemonic: string): boolean {\n return validateMnemonic(mnemonic, wordlist);\n}\n\n/**\n * Create a unique accountId using wallet's fingerprint and accountIndex\n */\nexport function makeAccountIdentifer(fingerprint: string, accountIndex: number) {\n return [fingerprint, accountIndex].join('/');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["scureGenerateMnemonic"],"sources":["../src/derivation-path-utils.ts","../src/keychain.ts"],"sourcesContent":["import { isHexString } from '@leather.io/utils';\n\nexport enum DerivationPathDepth {\n Root = 0,\n Purpose = 1,\n CoinType = 2,\n Account = 3,\n Change = 4,\n AddressIndex = 5,\n}\n\nfunction extractSectionFromDerivationPath(depth: DerivationPathDepth) {\n return (path: string) => {\n const segments = path.split('/');\n const accountNum = parseInt(segments[depth].replaceAll(\"'\", ''), 10);\n if (isNaN(accountNum)) throw new Error(`Cannot parse ${DerivationPathDepth[depth]} from path`);\n return accountNum;\n };\n}\n\nexport const extractPurposeFromPath = extractSectionFromDerivationPath(DerivationPathDepth.Purpose);\n\nexport const extractAccountIndexFromPath = extractSectionFromDerivationPath(\n DerivationPathDepth.Account\n);\n\nexport const extractChangeIndexFromPath = extractSectionFromDerivationPath(\n DerivationPathDepth.Change\n);\n\nexport const extractAddressIndexFromPath = extractSectionFromDerivationPath(\n DerivationPathDepth.AddressIndex\n);\n\nexport function appendAddressIndexToPath(path: string, change: number, addressIndex: number) {\n const accountIndex = extractAccountIndexFromPath(path);\n if (!Number.isInteger(accountIndex)) throw new Error('Invalid path, must have account index');\n return `${path}/${change}/${addressIndex}`;\n}\n\nexport function extractFingerprintFromKeyOriginPath(keyOriginPath: string) {\n const fingerprint = keyOriginPath.split('/')[0];\n if (!isHexString(fingerprint)) throw new Error('Fingerprint must be a hexadecimal string');\n return fingerprint;\n}\n\n/**\n * @description\n * A key origin path refers to the identifier commonly used as part of the key\n * information provided as part of a Output Descriptor described in BIP-380. It\n * replaces the `m/` part of a derivation path with the master key fingerprint to which the\n * key it describes belongs.\n * @example `0a3fd8ef/84'/0'/0'`\n */\nexport function createKeyOriginPath(fingerprint: string, path: string) {\n if (!isHexString(fingerprint)) throw new Error('Fingerprint must be a hexadecimal string');\n return `${fingerprint}/${path.replace('m/', '')}`;\n}\n\nexport function validateKeyOriginPath(keyOriginPath: string) {\n if (keyOriginPath.includes('[') || keyOriginPath.includes(']'))\n throw new Error('Key origin path should not contain square brackets');\n\n if (!keyOriginPath.includes('/'))\n throw new Error('Key origin path must contain a fingerprint and derivation path');\n\n if (!isHexString(extractFingerprintFromKeyOriginPath(keyOriginPath)))\n throw new Error('Fingerprint must be a hexadecimal string');\n\n if (keyOriginPath.split('/').length < 4)\n throw new Error('Key origin path is too short. Should describe at least to the account level');\n\n return true;\n}\n\n/**\n * @description\n * Creates a descriptor with key origin and xpub or public key\n * @returns `[0a3fd8ef/84'/0'/0']xpuba1b…2c3`\n */\nexport function createDescriptor(keyOriginPath: string, key: string) {\n validateKeyOriginPath(keyOriginPath);\n return `[${keyOriginPath}]${key}`;\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/0']xpuba1b…2c3` -> `0a3fd8ef/84'/0'/0'`\n */\nexport function extractKeyOriginPathFromDescriptor(descriptor: string) {\n const keyOriginPath = descriptor.split(']')[0].replace('[', '');\n validateKeyOriginPath(keyOriginPath);\n return keyOriginPath;\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/0']xpuba1b…2c3` -> `m/84'/0'/0'`\n */\nexport function extractDerivationPathFromDescriptor(descriptor: string) {\n const keyOriginPath = extractKeyOriginPathFromDescriptor(descriptor);\n return 'm/' + keyOriginPath.split('/').slice(1).join('/');\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/0']xpuba1b…2c3` -> `0a3fd8ef`\n */\nexport function extractFingerprintFromDescriptor(descriptor: string) {\n return extractFingerprintFromKeyOriginPath(extractKeyOriginPathFromDescriptor(descriptor));\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/6']xpuba1b…2c3` -> `6`\n */\nexport function extractAccountIndexFromDescriptor(descriptor: string) {\n return extractAccountIndexFromPath(extractKeyOriginPathFromDescriptor(descriptor));\n}\n\n/**\n * @example `[0a3fd8ef/84'/0'/6']xpuba1b…2c3` -> `xpuba1b…2c3`\n */\nexport function extractKeyFromDescriptor(descriptor: string) {\n return descriptor.split(']')[1];\n}\n\n/**\n * @example `0a3fd8ef/84'/0'/0/0/0` -> `0a3fd8ef/84'/0'/0`\n */\nexport function extractAccountPathFromFullPath(path: string) {\n const segments = path.split('/');\n return segments.slice(0, 4).join('/');\n}\n\nexport function keyOriginToDerivationPath(keyOrigin: string) {\n const [_fingerprint, ...remainingPath] = keyOrigin.split('/');\n return `m/${remainingPath.join('/')}`;\n}\n\nexport function decomposeDescriptor(descriptor: string) {\n return {\n descriptor,\n keyOrigin: extractKeyOriginPathFromDescriptor(descriptor),\n fingerprint: extractFingerprintFromDescriptor(descriptor),\n derivationPath: extractDerivationPathFromDescriptor(descriptor),\n accountIndex: extractAccountIndexFromDescriptor(descriptor),\n };\n}\n","import { HDKey } from '@scure/bip32';\nimport {\n mnemonicToSeed,\n generateMnemonic as scureGenerateMnemonic,\n validateMnemonic,\n} from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\nimport memoize from 'just-memoize';\n\nimport { toHexString } from '@leather.io/utils';\n\nimport {\n DerivationPathDepth,\n createDescriptor,\n createKeyOriginPath,\n keyOriginToDerivationPath,\n} from './derivation-path-utils';\n\nexport function generateMnemonic() {\n return scureGenerateMnemonic(wordlist, 256);\n}\n\nexport async function deriveBip39SeedFromMnemonic(mnemonic: string, passphrase?: string) {\n return mnemonicToSeed(mnemonic, passphrase);\n}\n\n/** @deprecated Inaccurately named fn, use `deriveBip39SeedFromMnemonic` */\nexport const deriveBip39MnemonicFromSeed = deriveBip39SeedFromMnemonic;\n\nexport function deriveRootBip32Keychain(seed: Uint8Array) {\n return HDKey.fromMasterSeed(seed);\n}\n\nexport async function deriveRootKeychainFromMnemonic(mnemonic: string, passphrase?: string) {\n return deriveRootBip32Keychain(await deriveBip39SeedFromMnemonic(mnemonic, passphrase));\n}\n\nexport async function deriveChildKeychainFromMnemnonic(\n path: string,\n mnemonic: string,\n passphrase?: string\n) {\n const rootKeychain = deriveRootBip32Keychain(await mnemonicToSeed(mnemonic, passphrase));\n return rootKeychain.derive(keyOriginToDerivationPath(path));\n}\n\nexport const deriveKeychainFromXpub = memoize((xpub: string) => HDKey.fromExtendedKey(xpub));\n\nexport function fingerprintAsNumberToHex(fingerprint: number) {\n return fingerprint.toString(16).padStart(8, '0');\n}\n\nexport function safelyReadPaddedFingerprint(fingerprintHex: string) {\n if (fingerprintHex.length < 8) {\n return fingerprintHex.padStart(8, '0');\n }\n return fingerprintHex;\n}\n\nexport function unpadHex(hex: string) {\n return BigInt('0x' + hex).toString(16);\n}\n\n/**\n * Gets keychain fingerprint directly from mnemonic. This is useful for\n * referencing a mnemonic safely by an identifier.\n */\nexport async function getMnemonicRootKeyFingerprint(mnemonic: string, passphrase?: string) {\n const keychain = deriveRootBip32Keychain(await deriveBip39SeedFromMnemonic(mnemonic, passphrase));\n return fingerprintAsNumberToHex(keychain.fingerprint);\n}\n\n/**\n * @deprecated Does not handle leading zeros correctly, use `getMnemonicRootKeyFingerprint` instead\n */\nexport async function getMnemonicRootKeyFingerprintBroken(mnemonic: string, passphrase?: string) {\n const keychain = deriveRootBip32Keychain(await deriveBip39SeedFromMnemonic(mnemonic, passphrase));\n return toHexString(keychain.fingerprint);\n}\n\nexport function deriveKeychainExtendedPublicKeyDescriptor(rootKeychain: HDKey, path: string) {\n const masterFingerprint = fingerprintAsNumberToHex(rootKeychain.fingerprint);\n const keyOriginPath = createKeyOriginPath(masterFingerprint, path);\n\n if (rootKeychain.depth !== DerivationPathDepth.Root)\n throw new Error('Cannot derive account keychain from non-root keychain');\n\n const accountKeychain = rootKeychain.derive(path);\n return createDescriptor(keyOriginPath, accountKeychain.publicExtendedKey);\n}\n\nexport function isValidMnemonicWord(word: string): boolean {\n return wordlist.includes(word);\n}\n\nexport function isValidMnemonic(mnemonic: string): boolean {\n return validateMnemonic(mnemonic, wordlist);\n}\n\n/**\n * Create a unique accountId using wallet's fingerprint and accountIndex\n */\nexport function makeAccountIdentifer(fingerprint: string, accountIndex: number) {\n return [fingerprint, accountIndex].join('/');\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -2,24 +2,25 @@
2
2
  "name": "@leather.io/crypto",
3
3
  "author": "leather.io",
4
4
  "description": "Generic crypto utils package for Leather",
5
- "version": "1.12.13",
5
+ "version": "1.12.14",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "exports": {
9
9
  ".": "./dist/index.js"
10
10
  },
11
11
  "dependencies": {
12
+ "@noble/hashes": "1.5.0",
12
13
  "@scure/bip32": "1.6.2",
13
14
  "@scure/bip39": "1.5.4",
14
15
  "just-memoize": "2.2.0",
15
- "@leather.io/utils": "0.49.7"
16
+ "@leather.io/utils": "0.49.8"
16
17
  },
17
18
  "devDependencies": {
18
19
  "prettier": "3.5.1",
19
20
  "tsdown": "0.16.5",
20
21
  "vitest": "2.1.9",
21
22
  "@leather.io/prettier-config": "0.9.0",
22
- "@leather.io/test-config": "0.1.2"
23
+ "@leather.io/test-config": "0.1.3"
23
24
  },
24
25
  "files": [
25
26
  "dist"