UNPKG

thor-devkit

Version:

Typescript library to aid DApp development on VeChain Thor

89 lines 7.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.secp256k1 = void 0; const crypto_1 = require("crypto"); const elliptic_1 = require("elliptic"); const buffer_1 = require("buffer"); const curve = new elliptic_1.ec('secp256k1'); const N = buffer_1.Buffer.from('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 'hex'); const ZERO = buffer_1.Buffer.alloc(32, 0); function isValidPrivateKey(key) { return buffer_1.Buffer.isBuffer(key) && key.length === 32 && !key.equals(ZERO) && key.compare(N) < 0; } function isValidMessageHash(hash) { return buffer_1.Buffer.isBuffer(hash) && hash.length === 32; } /** secp256k1 methods set */ var secp256k1; (function (secp256k1) { /** * generate private key * @param rng the optional random number generator, which exactly generates 32 random bytes */ function generatePrivateKey(rng) { rng = rng !== null && rng !== void 0 ? rng : (() => crypto_1.randomBytes(32)); for (;;) { const privKey = rng(); if (isValidPrivateKey(privKey)) { return privKey; } } } secp256k1.generatePrivateKey = generatePrivateKey; /** * derive public key(uncompressed) from private key * @param privKey the private key */ function derivePublicKey(privKey) { if (!isValidPrivateKey(privKey)) { throw new Error('invalid private key'); } const keyPair = curve.keyFromPrivate(privKey); return buffer_1.Buffer.from(keyPair.getPublic().encode('array', false)); } secp256k1.derivePublicKey = derivePublicKey; /** * sign a message using elliptic curve algorithm on the curve secp256k1 * @param msgHash hash of message * @param privKey serialized private key */ function sign(msgHash, privKey) { if (!isValidMessageHash(msgHash)) { throw new Error('invalid message hash'); } if (!isValidPrivateKey(privKey)) { throw new Error('invalid private key'); } const keyPair = curve.keyFromPrivate(privKey); const sig = keyPair.sign(msgHash, { canonical: true }); const r = buffer_1.Buffer.from(sig.r.toArray('be', 32)); const s = buffer_1.Buffer.from(sig.s.toArray('be', 32)); return buffer_1.Buffer.concat([r, s, buffer_1.Buffer.from([sig.recoveryParam])]); } secp256k1.sign = sign; /** * recovery signature to public key * @param msgHash hash of message * @param sig signature */ function recover(msgHash, sig) { if (!isValidMessageHash(msgHash)) { throw new Error('invalid message hash'); } if (!buffer_1.Buffer.isBuffer(sig) || sig.length !== 65) { throw new Error('invalid signature'); } const recovery = sig[64]; if (recovery !== 0 && recovery !== 1) { throw new Error('invalid signature recovery'); } const r = sig.slice(0, 32); const s = sig.slice(32, 64); return buffer_1.Buffer.from(curve.recoverPubKey(msgHash, { r, s }, recovery).encode('array', false)); } secp256k1.recover = recover; })(secp256k1 = exports.secp256k1 || (exports.secp256k1 = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcDI1NmsxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NlY3AyNTZrMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFDcEMsdUNBQW1DO0FBQ25DLG1DQUErQjtBQUUvQixNQUFNLEtBQUssR0FBRyxJQUFJLGFBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUVqQyxNQUFNLENBQUMsR0FBRyxlQUFNLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ2hHLE1BQU0sSUFBSSxHQUFHLGVBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBRWhDLFNBQVMsaUJBQWlCLENBQUMsR0FBVztJQUNsQyxPQUFPLGVBQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRTtRQUNqQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzFCLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLElBQVk7SUFDcEMsT0FBTyxlQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFBO0FBQ3RELENBQUM7QUFFRCw0QkFBNEI7QUFDNUIsSUFBaUIsU0FBUyxDQTRFekI7QUE1RUQsV0FBaUIsU0FBUztJQUN0Qjs7O09BR0c7SUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFrQjtRQUNqRCxHQUFHLEdBQUcsR0FBRyxhQUFILEdBQUcsY0FBSCxHQUFHLEdBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDcEMsU0FBVTtZQUNOLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFBO1lBQ3JCLElBQUks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