cipher-ethereum
Version:
An Ethereum library used by Cipher Browser, a mobile Ethereum client
87 lines (79 loc) • 2.44 kB
JavaScript
;
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());
}