PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo-express/node_modules/ripple-keypairs/distrib/npm

Просмотр файла: index.js

'use strict'; // eslint-disable-line strict

var assert = require('assert');
var brorand = require('brorand');
var hashjs = require('hash.js');
var elliptic = require('elliptic');
var Ed25519 = elliptic.eddsa('ed25519');
var Secp256k1 = elliptic.ec('secp256k1');
var addressCodec = require('ripple-address-codec');
var derivePrivateKey = require('./secp256k1').derivePrivateKey;
var accountPublicFromPublicGenerator = require('./secp256k1').accountPublicFromPublicGenerator;
var utils = require('./utils');
var hexToBytes = utils.hexToBytes;
var bytesToHex = utils.bytesToHex;

function generateSeed() {
  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];

  assert(!options.entropy || options.entropy.length >= 16, 'entropy too short');
  var entropy = options.entropy ? options.entropy.slice(0, 16) : brorand(16);
  var type = options.algorithm === 'ed25519' ? 'ed25519' : 'secp256k1';
  return addressCodec.encodeSeed(entropy, type);
}

function hash(message) {
  return hashjs.sha512().update(message).digest().slice(0, 32);
}

var secp256k1 = {
  deriveKeypair: function deriveKeypair(entropy, options) {
    var prefix = '00';
    var privateKey = prefix + derivePrivateKey(entropy, options).toString(16, 64).toUpperCase();
    var publicKey = bytesToHex(Secp256k1.keyFromPrivate(privateKey.slice(2)).getPublic().encodeCompressed());
    return { privateKey: privateKey, publicKey: publicKey };
  },
  sign: function sign(message, privateKey) {
    return bytesToHex(Secp256k1.sign(hash(message), hexToBytes(privateKey), { canonical: true }).toDER());
  },
  verify: function verify(message, signature, publicKey) {
    return Secp256k1.verify(hash(message), signature, hexToBytes(publicKey));
  }
};

var ed25519 = {
  deriveKeypair: function deriveKeypair(entropy) {
    var prefix = 'ED';
    var rawPrivateKey = hash(entropy);
    var privateKey = prefix + bytesToHex(rawPrivateKey);
    var publicKey = prefix + bytesToHex(Ed25519.keyFromSecret(rawPrivateKey).pubBytes());
    return { privateKey: privateKey, publicKey: publicKey };
  },
  sign: function sign(message, privateKey) {
    // caution: Ed25519.sign interprets all strings as hex, stripping
    // any non-hex characters without warning
    assert(Array.isArray(message), 'message must be array of octets');
    return bytesToHex(Ed25519.sign(message, hexToBytes(privateKey).slice(1)).toBytes());
  },
  verify: function verify(message, signature, publicKey) {
    return Ed25519.verify(message, hexToBytes(signature), hexToBytes(publicKey).slice(1));
  }
};

function select(algorithm) {
  var methods = { 'ecdsa-secp256k1': secp256k1, ed25519: ed25519 };
  return methods[algorithm];
}

function deriveKeypair(seed, options) {
  var decoded = addressCodec.decodeSeed(seed);
  var algorithm = decoded.type === 'ed25519' ? 'ed25519' : 'ecdsa-secp256k1';
  var method = select(algorithm);
  var keypair = method.deriveKeypair(decoded.bytes, options);
  var messageToVerify = hash('This test message should verify.');
  var signature = method.sign(messageToVerify, keypair.privateKey);
  if (method.verify(messageToVerify, signature, keypair.publicKey) !== true) {
    throw new Error('derived keypair did not generate verifiable signature');
  }
  return keypair;
}

function getAlgorithmFromKey(key) {
  var bytes = hexToBytes(key);
  return bytes.length === 33 && bytes[0] === 0xED ? 'ed25519' : 'ecdsa-secp256k1';
}

function sign(messageHex, privateKey) {
  var algorithm = getAlgorithmFromKey(privateKey);
  return select(algorithm).sign(hexToBytes(messageHex), privateKey);
}

function verify(messageHex, signature, publicKey) {
  var algorithm = getAlgorithmFromKey(publicKey);
  return select(algorithm).verify(hexToBytes(messageHex), signature, publicKey);
}

function deriveAddressFromBytes(publicKeyBytes) {
  return addressCodec.encodeAccountID(utils.computePublicKeyHash(publicKeyBytes));
}

function deriveAddress(publicKey) {
  return deriveAddressFromBytes(hexToBytes(publicKey));
}

function deriveNodeAddress(publicKey) {
  var generatorBytes = addressCodec.decodeNodePublic(publicKey);
  var accountPublicBytes = accountPublicFromPublicGenerator(generatorBytes);
  return deriveAddressFromBytes(accountPublicBytes);
}

module.exports = {
  generateSeed: generateSeed,
  deriveKeypair: deriveKeypair,
  sign: sign,
  verify: verify,
  deriveAddress: deriveAddress,
  deriveNodeAddress: deriveNodeAddress
};

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


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