PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-lib/src/bitgo
Просмотр файла: keyutil.ts
import { ECPairInterface } from 'ecpair';
import * as bs58check from 'bs58check';
import { Network } from '../networks';
import { bip32, ECPair } from '../noble_ecc';
/**
* Create an ECPair from the raw private key bytes
* @param {Buffer} buffer - Private key for the ECPair. Must be exactly 32 bytes.
* @param {Object} [network] - Network for the ECPair. Defaults to bitcoin.
* @return {ECPair}
*/
export function privateKeyBufferToECPair(buffer: Buffer, network?: Network): ECPairInterface {
if (!Buffer.isBuffer(buffer) || buffer.length !== 32) {
throw new Error('invalid private key buffer');
}
return ECPair.fromPrivateKey(buffer);
}
/**
* Get the private key as a 32 bytes buffer. If it is smaller than 32 bytes, pad it with zeros
* @param {ECPair} ecPair
* @return Buffer 32 bytes
*/
export function privateKeyBufferFromECPair(ecPair: ECPairInterface): Buffer {
if (ecPair.constructor.name !== 'ECPair') {
throw new TypeError(`invalid argument ecpair`);
}
const privkey = ecPair.privateKey;
if (!Buffer.isBuffer(privkey)) {
throw new Error(`unexpected privkey type`);
}
if (privkey.length !== 32) {
throw new Error(`unexpected privkey length`);
}
return privkey;
}
/**
* Converts an extended key from one network to another by updating its version bytes.
*
* Handles both public and private keys, allowing conversion between networks like
* Bitcoin Mainnet and Testnet.
*
* @returns The extended key with the updated network version.
*/
export function convertExtendedKeyNetwork(extendedKey: string, fromNetwork: Network, targetNetwork: Network): string {
if (fromNetwork === targetNetwork) {
return extendedKey;
}
const decodedData = bs58check.decode(extendedKey);
const hdNode = bip32.fromBase58(extendedKey, fromNetwork);
const targetVersionBytes = hdNode.isNeutered() ? targetNetwork.bip32.public : targetNetwork.bip32.private;
const versionBuffer = Buffer.alloc(4);
versionBuffer.writeUInt32BE(targetVersionBytes, 0);
versionBuffer.copy(decodedData, 0, 0, 4);
return bs58check.encode(decodedData);
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!