UNPKG

cipher-ethereum

Version:

An Ethereum library used by Cipher Browser, a mobile Ethereum client

87 lines (79 loc) 2.44 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.numberToHex = numberToHex; exports.bnToHex = bnToHex; exports.hexToEvenLengthHex = hexToEvenLengthHex; exports.hexToBuffer = hexToBuffer; exports.numberToBuffer = numberToBuffer; exports.bnToBuffer = bnToBuffer; exports.keccak256 = keccak256; exports.decompressPublicKey = decompressPublicKey; var _elliptic = require('elliptic'); var _bn = require('bn.js'); var _bn2 = _interopRequireDefault(_bn); var _js = require('keccak/js'); var _js2 = _interopRequireDefault(_js); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var secp256k1 = new _elliptic.ec('secp256k1'); function numberToHex(num, includePrefix) { if (includePrefix === void 0) { includePrefix = true; } var hex = new _bn2.default(num).toString(16); return includePrefix ? '0x' + hex : hex; } function bnToHex(bn, includePrefix) { if (includePrefix === void 0) { includePrefix = true; } var hex = bn.toString(16); return includePrefix ? '0x' + hex : hex; } function hexToEvenLengthHex(hex, includePrefix) { if (includePrefix === void 0) { includePrefix = true; } var h = (hex.match(/^0x/i) ? hex.slice(2) : hex).toLowerCase(); if (h.length % 2 === 1) { h = '0' + h; } return includePrefix ? '0x' + h : h; } function hexToBuffer(hex) { if (hex.length === 0) { return Buffer.alloc(0); } return Buffer.from(hexToEvenLengthHex(hex, false), 'hex'); } function numberToBuffer(num) { if (num === 0) { return Buffer.alloc(0); } return hexToBuffer(numberToHex(num, false)); } function bnToBuffer(bn) { if (bn.isZero()) { return Buffer.alloc(0); } return hexToBuffer(bn.toString(16)); } function keccak256(data) { var buf = data instanceof Buffer ? data : Buffer.from(data, 'utf8'); return (0, _js2.default)('keccak256').update(buf).digest(); } function decompressPublicKey(publicKey) { var length = publicKey.length; var firstByte = publicKey[0]; if (length !== 33 && length !== 65 || firstByte < 2 || firstByte > 4) { throw new Error('invalid public key'); } var key; try { key = secp256k1.keyFromPublic(publicKey); } catch (_err) { throw new Error('invalid public key'); } return Buffer.from(key.getPublic().encode()); }