PHP WebShell

Текущая директория: /opt/BitGoJS/modules/utxo-lib/test/bitgo

Просмотр файла: keyutil.ts

import { networks } from '../../src';

const assert = require('assert');
const crypto = require('crypto');

import { ECPairInterface } from 'ecpair';
import {
  convertExtendedKeyNetwork,
  privateKeyBufferFromECPair,
  privateKeyBufferToECPair,
} from '../../src/bitgo/keyutil';
import { bip32, ECPair } from '../../src/noble_ecc';

describe('privateKeyBufferFromECPair', function () {
  it('pads short private keys', function () {
    const keyPair = ECPair.fromPrivateKey(
      Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
    );
    assert.strictEqual(privateKeyBufferFromECPair(keyPair).length, 32);
    assert.strictEqual(
      privateKeyBufferFromECPair(keyPair).toString('hex'),
      '0000000000000000000000000000000000000000000000000000000000000001'
    );
  });

  it('does not pad 32 bytes private keys', function () {
    const hexString = 'a000000000000000000000000000000000000000000000000000000000000000';
    const keyPair = ECPair.fromPrivateKey(Buffer.from(hexString, 'hex'));
    assert.strictEqual(privateKeyBufferFromECPair(keyPair).length, 32);
    assert.strictEqual(privateKeyBufferFromECPair(keyPair).toString('hex'), hexString);
  });

  it('throws if passed value is not ecpair', function () {
    assert.throws(function () {
      privateKeyBufferFromECPair({} as ECPairInterface);
    }, new RegExp('invalid argument ecpair'));
  });
});

describe('privateKeyBufferToECPair', function () {
  it('constructs an ECPair from a random private key buffer', function () {
    const prvKeyBuffer = crypto.randomBytes(32);
    const ecPair = privateKeyBufferToECPair(prvKeyBuffer);
    const ecPairPrvBuffer = privateKeyBufferFromECPair(ecPair);
    assert.strictEqual(Buffer.compare(ecPairPrvBuffer, prvKeyBuffer), 0);
  });

  it('throws if the private key buffer is not a buffer', function () {
    assert.throws(function () {
      privateKeyBufferToECPair('not a buffer' as any);
    }, new RegExp('invalid private key buffer'));
  });

  it('throws if the private key buffer is not 32 bytes', function () {
    assert.throws(function () {
      privateKeyBufferToECPair(Buffer.alloc(31, 0x00));
    }, new RegExp('invalid private key buffer'));

    assert.throws(function () {
      privateKeyBufferToECPair(Buffer.alloc(33, 0x00));
    }, new RegExp('invalid private key buffer'));
  });
});

describe('convertExtendedKeyNetwork', function () {
  const prvKeyBuffer = crypto.randomBytes(32);
  const mainnetHdNode = bip32.fromSeed(prvKeyBuffer, networks.bitcoin);
  const testnetHdNode = bip32.fromSeed(prvKeyBuffer, networks.testnet);

  it('should return the same extended key if fromNetwork and targetNetwork are the same', () => {
    const extendedKey = mainnetHdNode.toBase58();
    const result = convertExtendedKeyNetwork(extendedKey, networks.bitcoin, networks.bitcoin);
    assert.strictEqual(result, extendedKey);
  });

  it('should change the network from mainnet to testnet for a neutered (public) key', () => {
    const extendedKey = mainnetHdNode.neutered().toBase58();
    const expectedKey = convertExtendedKeyNetwork(extendedKey, networks.bitcoin, networks.testnet);
    const testnetHdNodeFromExpected = bip32.fromBase58(expectedKey, networks.testnet);
    assert.deepStrictEqual(testnetHdNodeFromExpected.publicKey, mainnetHdNode.neutered().publicKey);
  });

  it('should change the network from testnet to mainnet for a neutered (public) key', () => {
    const extendedKey = testnetHdNode.neutered().toBase58();
    const expectedKey = convertExtendedKeyNetwork(extendedKey, networks.testnet, networks.bitcoin);
    const mainnetHdNodeFromExpected = bip32.fromBase58(expectedKey, networks.bitcoin);
    assert.deepStrictEqual(mainnetHdNodeFromExpected.publicKey, testnetHdNode.neutered().publicKey);
  });

  it('should change the network from mainnet to testnet for a non-neutered (private) key', () => {
    const extendedKey = mainnetHdNode.toBase58();
    const expectedKey = convertExtendedKeyNetwork(extendedKey, networks.bitcoin, networks.testnet);
    const testnetHdNodeFromExpected = bip32.fromBase58(expectedKey, networks.testnet);
    assert.deepStrictEqual(testnetHdNodeFromExpected.privateKey, mainnetHdNode.privateKey);
  });

  it('should change the network from testnet to mainnet for a non-neutered (private) key', () => {
    const extendedKey = testnetHdNode.toBase58();
    const expectedKey = convertExtendedKeyNetwork(extendedKey, networks.testnet, networks.bitcoin);
    const mainnetHdNodeFromExpected = bip32.fromBase58(expectedKey, networks.bitcoin);
    assert.deepStrictEqual(mainnetHdNodeFromExpected.privateKey, testnetHdNode.privateKey);
  });
});

Выполнить команду


Для локальной разработки. Не используйте в интернете!