UNPKG

@flarenetwork/flare-stake-tool

Version:
170 lines 6.69 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.compressedPublicKey = compressedPublicKey; exports.uncompressedPublicKey = uncompressedPublicKey; exports.normalizePublicKey = normalizePublicKey; exports.equalPublicKey = equalPublicKey; exports.isPublicKey = isPublicKey; exports.publicKeyToCAddress = publicKeyToCAddress; exports.isCAddress = isCAddress; exports.equalCAddress = equalCAddress; exports.normalizeCAddress = normalizeCAddress; exports.publicKeyToPAddress = publicKeyToPAddress; exports.isPAddress = isPAddress; exports.equalPAddress = equalPAddress; exports.pAddressToHex = pAddressToHex; exports.pAddressToBytes20 = pAddressToBytes20; exports.pAddressToBech = pAddressToBech; exports.normalizePAddress = normalizePAddress; exports.recoverPublicKeyFromMsg = recoverPublicKeyFromMsg; exports.recoverPublicKeyFromEthMsg = recoverPublicKeyFromEthMsg; exports.getHashedEthMsg = getHashedEthMsg; exports.compressPublicKey = compressPublicKey; const settings = __importStar(require("../settings")); const utils = __importStar(require("../utils")); const bech32_1 = require("bech32"); const elliptic_1 = require("elliptic"); const ethutil = __importStar(require("ethereumjs-util")); const secp256k1 = new elliptic_1.ec('secp256k1'); function compressedPublicKey(publicKey) { return _getKeyPair(publicKey).getPublic(true, 'hex'); } function uncompressedPublicKey(publicKey, prefix) { return _getKeyPair(publicKey) .getPublic(false, 'hex') .slice(prefix ? 0 : 2); } function normalizePublicKey(publicKey) { return uncompressedPublicKey(publicKey, false); } function equalPublicKey(value1, value2) { try { return normalizePublicKey(value1) === normalizePublicKey(value2); } catch { return false; } } function isPublicKey(value) { try { _getKeyPair(value); return true; } catch { return false; } } function publicKeyToCAddress(publicKey) { let uncompressed = utils.toBuffer(uncompressedPublicKey(publicKey, false)); return normalizeCAddress(utils.toHex(ethutil.publicToAddress(uncompressed))); } function isCAddress(value) { return ethutil.isValidAddress(value); } function equalCAddress(value1, value2) { return utils.isEqualHex(value1, value2) && isCAddress(value1); } function normalizeCAddress(cAddress) { return ethutil.toChecksumAddress(cAddress); } function publicKeyToPAddress(network, publicKey) { let compressed = utils.toBuffer(compressedPublicKey(publicKey)); let address = ethutil.ripemd160(ethutil.sha256(compressed), false); let hrp = settings.HRP[network]; return normalizePAddress(network, bech32_1.bech32.encode(hrp, bech32_1.bech32.toWords(address))); } function isPAddress(network, value) { return (value.startsWith('P-') ? value.slice(2) : value).startsWith(settings.HRP[network]); } function equalPAddress(network, value1, value2) { let value1Hex = utils.isHex(value1) ? value1 : pAddressToHex(value1.startsWith('P-') ? value1.slice(2) : value1); let value2Hex = utils.isHex(value2) ? value2 : pAddressToHex(value2.startsWith('P-') ? value2.slice(2) : value2); return (utils.isEqualHex(value1Hex, value2Hex) && isPAddress(network, pAddressToBech(network, value1Hex))); } function pAddressToHex(pAddressBech) { return utils.toHex(bech32_1.bech32.fromWords(bech32_1.bech32.decode(pAddressBech).words)); } function pAddressToBytes20(pAddress) { return Buffer.from(bech32_1.bech32.fromWords(bech32_1.bech32.decode(pAddress).words)).toString('hex'); } function pAddressToBech(network, pAddressHex) { let hrp = settings.HRP[network]; return bech32_1.bech32.encode(hrp, bech32_1.bech32.toWords(utils.toBuffer(pAddressHex))); } function normalizePAddress(network, pAddress) { if (pAddress.startsWith('P-') || pAddress.startsWith('C-')) { pAddress = pAddress.slice(2); } if (utils.isHex(pAddress)) { pAddress = pAddressToBech(network, pAddress); } return pAddress; } function recoverPublicKeyFromMsg(message, signature) { let msg = utils.toBuffer(message); let sig = ethutil.fromRpcSig(utils.toHex(signature)); return normalizePublicKey(utils.toHex(ethutil.ecrecover(msg, sig.v, sig.r, sig.s))); } function recoverPublicKeyFromEthMsg(message, signature) { let hashedMsg = getHashedEthMsg(message); return recoverPublicKeyFromMsg(hashedMsg, signature); } function getHashedEthMsg(message) { return utils.toHex(ethutil.keccakFromString(`\x19Ethereum Signed Message:\n${message.length}${message}`)); } function _getKeyPair(publicKey) { publicKey = utils.toHex(publicKey, false); if (publicKey.length == 128) { publicKey = '04' + publicKey; } return secp256k1.keyFromPublic(publicKey, 'hex'); } function compressPublicKey(publicKey) { // Check if the public key is already compressed if (publicKey.length === 33) { return publicKey; } // Get the x coordinate const x = publicKey.slice(1, 33); // Get the y coordinate const y = publicKey.slice(33, 65); // Determine the parity of the y coordinate const prefix = y[y.length - 1] % 2 === 0 ? 0x02 : 0x03; // Return the compressed public key return Buffer.concat([Buffer.from([prefix]), x]); } //# sourceMappingURL=pubk.js.map