mirror of
https://github.com/pezkuwichain/pezkuwi-common.git
synced 2026-04-22 04:27:59 +00:00
ec06da0ebc
- Package namespace: @polkadot/* -> @pezkuwi/* - Repository: polkadot-js/common -> pezkuwichain/pezkuwi-common - Author: Pezkuwi Team <team@pezkuwichain.io> Core packages: - @pezkuwi/util (utilities) - @pezkuwi/util-crypto (crypto primitives) - @pezkuwi/keyring (account management) - @pezkuwi/networks (chain metadata) - @pezkuwi/hw-ledger (Ledger hardware wallet) - @pezkuwi/x-* (10 polyfill packages) Total: 14 packages Upstream: polkadot-js/common v14.0.1
35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
import { BN_EIGHT, bnToU8a, u8aConcat, u8aToBn } from '@pezkuwi/util';
|
|
|
|
import { BN_LE_32_OPTS, BN_LE_512_OPTS, BN_LE_OPTS } from '../../bn.js';
|
|
import { hmacShaAsU8a } from '../../hmac/index.js';
|
|
|
|
// performs hard-only derivation on the xprv
|
|
export function ledgerDerivePrivate (xprv: Uint8Array, index: number): Uint8Array {
|
|
const kl = xprv.subarray(0, 32);
|
|
const kr = xprv.subarray(32, 64);
|
|
const cc = xprv.subarray(64, 96);
|
|
const data = u8aConcat([0], kl, kr, bnToU8a(index, BN_LE_32_OPTS));
|
|
const z = hmacShaAsU8a(cc, data, 512);
|
|
|
|
data[0] = 0x01;
|
|
|
|
return u8aConcat(
|
|
bnToU8a(
|
|
u8aToBn(kl, BN_LE_OPTS).iadd(
|
|
u8aToBn(z.subarray(0, 28), BN_LE_OPTS).imul(BN_EIGHT)
|
|
),
|
|
BN_LE_512_OPTS
|
|
).subarray(0, 32),
|
|
bnToU8a(
|
|
u8aToBn(kr, BN_LE_OPTS).iadd(
|
|
u8aToBn(z.subarray(32, 64), BN_LE_OPTS)
|
|
),
|
|
BN_LE_512_OPTS
|
|
).subarray(0, 32),
|
|
hmacShaAsU8a(cc, data, 512).subarray(32, 64)
|
|
);
|
|
}
|