UNPKG

thor-devkit

Version:

Typescript library to aid DApp development on VeChain Thor

46 lines 3.89 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Certificate = void 0; const address_1 = require("./address"); const blake2b_1 = require("./blake2b"); const secp256k1_1 = require("./secp256k1"); const fast_json_stable_stringify_1 = __importDefault(require("fast-json-stable-stringify")); const buffer_1 = require("buffer"); var Certificate; (function (Certificate) { function safeToLowerCase(str) { return typeof str === 'string' ? str.toLowerCase() : str; } /** * deterministically encode cert into JSON * @param cert cert object */ function encode(cert) { return (0, fast_json_stable_stringify_1.default)(Object.assign(Object.assign({}, cert), { signer: safeToLowerCase(cert.signer), signature: cert.signature ? safeToLowerCase(cert.signature) : cert.signature })); } Certificate.encode = encode; /** * verify the cert * @param cert cert object with signature */ function verify(cert) { if (!cert.signature) { throw new Error('signature missing'); } const signature = cert.signature; if (!/^0x[0-9a-f]+$/i.test(signature) || signature.length % 2 !== 0) { throw new Error('invalid signature'); } const encoded = encode(Object.assign(Object.assign({}, cert), { signature: undefined })); const signingHash = (0, blake2b_1.blake2b256)(encoded); const pubKey = secp256k1_1.secp256k1.recover(signingHash, buffer_1.Buffer.from(signature.slice(2), 'hex')); if (address_1.address.fromPublicKey(pubKey) !== safeToLowerCase(cert.signer)) { throw new Error('signature does not match with signer'); } } Certificate.verify = verify; })(Certificate || (exports.Certificate = Certificate = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2VydGlmaWNhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsdUNBQW1DO0FBQ25DLHVDQUFzQztBQUN0QywyQ0FBdUM7QUFDdkMsNEZBQWdFO0FBQ2hFLG1DQUErQjtBQW1CL0IsSUFBaUIsV0FBVyxDQXNDM0I7QUF0Q0QsV0FBaUIsV0FBVztJQUN4QixTQUFTLGVBQWUsQ0FBQyxHQUFXO1FBQ2hDLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtJQUM1RCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsU0FBZ0IsTUFBTSxDQUFDLElBQWlCO1FBQ3BDLE9BQU8sSUFBQSxvQ0FBdUIsa0NBQ3ZCLElBQUksS0FDUCxNQUFNLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDcEMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQ3BFLENBQUE7SUFDaEIsQ0FBQztJQU5lLGtCQUFNLFNBTXJCLENBQUE7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixNQUFNLENBQUMsSUFBaUI7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFDeEMsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFDeEMsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0saUNBQU0sSUFBSSxLQUFFLFNBQVMsRUFBRSxTQUFTLElBQUcsQ0FBQTtRQUN6RCxNQUFNLFdBQVcsR0FBRyxJQUFBLG9CQUFVLEVBQUMsT0FBTyxDQUFDLENBQUE7UUFFdkMsTUFBTSxNQUFNLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGVBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBRXJGLElBQUksaUJBQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtRQUMzRCxDQUFDO0lBQ0wsQ0FBQztJQWpCZSxrQkFBTSxTQWlCckIsQ0FBQTtBQUNMLENBQUMsRUF0Q2dCLFdBQVcsMkJBQVgsV0FBVyxRQXNDM0IifQ==