UNPKG

@hyperledger/cactus-common

Version:

Universal library used by both front end and back end components of Cactus. Aims to be a developer swiss army knife.

84 lines 5.93 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.JsObjectSigner = void 0; const logger_provider_1 = require("./logging/logger-provider"); const secp256k1_1 = __importDefault(require("secp256k1")); const sha3_1 = __importDefault(require("sha3")); const json_stable_stringify_1 = __importDefault(require("json-stable-stringify")); class JsObjectSigner { constructor(options) { this.options = options; if (!options) { throw new Error(`JsObjectSigner#ctor options falsy.`); } if (!options.privateKey) { throw new Error(`JsObjectSigner#ctor options.privateKey falsy.`); } // allows for private keys to passed as strings, but will automatically convert them to byte arrays for consistency // type check is needed to satisfy compiler if (typeof options.privateKey === "string") { this.privateKey = Buffer.from(options.privateKey, `hex`); } else { this.privateKey = options.privateKey; } this.signatureFunc = options.signatureFunc; this.verifySignatureFunc = options.verifySignatureFunc; this.hashFunc = options.hashFunc; this.logger = logger_provider_1.LoggerProvider.getOrCreate({ label: "js-object-signer", level: options.logLevel || "INFO", }); } /** * Generate signature from formated message * @param msg * @returns Generated signature */ sign(msg) { this.logger.debug("Message to sign: " + (0, json_stable_stringify_1.default)(msg)); if (this.signatureFunc) { return this.signatureFunc(msg, this.privateKey); } else { let hashMsg; if (this.hashFunc) { hashMsg = this.hashFunc(msg); } else { hashMsg = this.dataHash(msg); } const signObj = secp256k1_1.default.ecdsaSign(Buffer.from(hashMsg, `hex`), this.privateKey); return signObj.signature; } } /** * Verify if a signature corresponds to given message and public key * @param msg * @param pubKey * @param signature * @returns {boolean} */ verify(msg, signature, pubKey) { if (this.verifySignatureFunc) { return this.verifySignatureFunc(msg, signature, pubKey); } return secp256k1_1.default.ecdsaVerify(signature, Buffer.from(this.dataHash(msg), `hex`), pubKey); } /** * Format message to be signed * @param data * @returns {string} */ dataHash(data) { const hashObj = new sha3_1.default.SHA3Hash(256); hashObj.update((0, json_stable_stringify_1.default)(data)); const hashMsg = hashObj.digest(`hex`); return hashMsg; } } exports.JsObjectSigner = JsObjectSigner; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMtb2JqZWN0LXNpZ25lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tYWluL3R5cGVzY3JpcHQvanMtb2JqZWN0LXNpZ25lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSwrREFBMkQ7QUFHM0QsMERBQWtDO0FBQ2xDLGdEQUF3QjtBQUN4QixrRkFBOEM7QUFrQjlDLE1BQWEsY0FBYztJQU96QixZQUE0QixPQUErQjtRQUEvQixZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUN6RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxtSEFBbUg7UUFDbkgsMkNBQTJDO1FBQzNDLElBQUksT0FBTyxPQUFPLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQ0FBYyxDQUFDLFdBQVcsQ0FBQztZQUN2QyxLQUFLLEVBQUUsa0JBQWtCO1lBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLE1BQU07U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsR0FBWTtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxJQUFBLCtCQUFTLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4RCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksT0FBZSxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQixPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLG1CQUFTLENBQUMsU0FBUyxDQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztZQUNGLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FDWCxHQUFZLEVBQ1osU0FBcUIsRUFDckIsTUFBa0I7UUFFbEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCxPQUFPLG1CQUFTLENBQUMsV0FBVyxDQUMxQixTQUFTLEVBQ1QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN0QyxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLElBQWE7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBQSwrQkFBUyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUE1RkQsd0NBNEZDIn0=