From: Chris Duncan Date: Fri, 15 May 2026 08:05:42 +0000 (-0700) Subject: Extract child key algorithm steps 2-6 to its own function. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=f957b11014ad62a6c1b204f686b4c8cc46c5331d;p=libnemo.git Extract child key algorithm steps 2-6 to its own function. --- diff --git a/src/lib/crypto/bip44.ts b/src/lib/crypto/bip44.ts index 922b7d1..040bdc6 100644 --- a/src/lib/crypto/bip44.ts +++ b/src/lib/crypto/bip44.ts @@ -103,24 +103,26 @@ function CKDpriv (curve: Curve, { privateKey, chainCode }: ExtendedKey, index?: const key = chainCode const data = t.buffer return hmac(key, data) - .then(I => { - const IL = I.slice(0, I.byteLength / 2) - const IR = I.slice(I.byteLength / 2) - if (curve === 'ed25519 seed') { - return ({ privateKey: IL, chainCode: IR }) - } else { - const ILparsed = parse256(new Uint8Array(IL)) - if (ILparsed >= Point.CURVE().n) { - throw new Error('Invalid child key is greater than the order of the curve') - } - const pkParsed = parse256(pk) - const childKey = (ILparsed + pkParsed) % Point.CURVE().n - if (childKey === 0n) { - throw new Error('Invalid child key is zero') - } - return ({ privateKey: ser256(childKey).buffer, chainCode: IR }) - } - }) + .then(I => childKey(curve, pk, I)) +} + +function childKey (curve: Curve, pk: Bytes, I: ArrayBuffer): ExtendedKey { + const IL = I.slice(0, I.byteLength / 2) + const IR = I.slice(I.byteLength / 2) + if (curve === 'ed25519 seed') { + return ({ privateKey: IL, chainCode: IR }) + } else { + const ILparsed = parse256(new Uint8Array(IL)) + if (ILparsed >= Point.CURVE().n) { + throw new Error('Invalid child key is greater than the order of the curve') + } + const pkParsed = parse256(pk) + const childKey = (ILparsed + pkParsed) % Point.CURVE().n + if (childKey === 0n) { + throw new Error('Invalid child key is zero') + } + return ({ privateKey: ser256(childKey).buffer, chainCode: IR }) + } } function ser32 (integer: number): Bytes {