@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
JavaScript
"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=