UNPKG

@taquito/signer

Version:

Software signer implementations and signing utilities for Taquito.

105 lines (104 loc) 4.78 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _BLSKey_key, _BLSKey_publicKey, _BLSPublicKey_key; Object.defineProperty(exports, "__esModule", { value: true }); exports.BLSPublicKey = exports.BLSKey = void 0; const utils_1 = require("@taquito/utils"); const bls12_381_1 = require("@noble/curves/bls12-381"); const blake2_js_1 = require("@noble/hashes/blake2.js"); const bls = bls12_381_1.bls12_381.longSignatures; // AKA MinPK class BLSKey { constructor(key, decrypt) { _BLSKey_key.set(this, void 0); _BLSKey_publicKey.set(this, void 0); const tmp = (0, utils_1.b58DecodeAndCheckPrefix)(key, [ utils_1.PrefixV2.BLS12_381EncryptedSecretKey, utils_1.PrefixV2.BLS12_381SecretKey, ]); let [keyData] = tmp; const [, prefix] = tmp; if (prefix === utils_1.PrefixV2.BLS12_381EncryptedSecretKey) { if (decrypt !== undefined) { keyData = decrypt(keyData); } else { throw new Error('decryption function is not provided'); } } __classPrivateFieldSet(this, _BLSKey_key, keyData, "f"); __classPrivateFieldSet(this, _BLSKey_publicKey, bls.getPublicKey(this.sk()).toBytes(), "f"); } sk() { return new Uint8Array(__classPrivateFieldGet(this, _BLSKey_key, "f")).reverse(); } signDst(message, dst) { const point = bls.hash(message, dst); const sig = bls.sign(point, this.sk()).toBytes(); return { rawSignature: sig, sig: (0, utils_1.b58Encode)(sig, utils_1.PrefixV2.GenericSignature), prefixSig: (0, utils_1.b58Encode)(sig, utils_1.PrefixV2.BLS12_381Signature), }; } sign(message) { return this.signDst(message, utils_1.BLS12_381_DST); } provePossession() { return this.signDst(__classPrivateFieldGet(this, _BLSKey_publicKey, "f"), utils_1.POP_DST); } publicKey() { return new BLSPublicKey(__classPrivateFieldGet(this, _BLSKey_publicKey, "f")); } secretKey() { return (0, utils_1.b58Encode)(__classPrivateFieldGet(this, _BLSKey_key, "f"), utils_1.PrefixV2.BLS12_381SecretKey); } } exports.BLSKey = BLSKey; _BLSKey_key = new WeakMap(), _BLSKey_publicKey = new WeakMap(); class BLSPublicKey { constructor(src) { _BLSPublicKey_key.set(this, void 0); if (typeof src === 'string') { const [key, _] = (0, utils_1.b58DecodeAndCheckPrefix)(src, [utils_1.PrefixV2.BLS12_381PublicKey]); __classPrivateFieldSet(this, _BLSPublicKey_key, key, "f"); } else { __classPrivateFieldSet(this, _BLSPublicKey_key, src, "f"); } } compare(other) { if (other instanceof BLSPublicKey) { return (0, utils_1.compareArrays)(this.bytes(), other.bytes()); } else { throw new utils_1.InvalidPublicKeyError('BLS key expected'); } } hash() { return (0, utils_1.b58Encode)((0, blake2_js_1.blake2b)(__classPrivateFieldGet(this, _BLSPublicKey_key, "f"), { dkLen: 20 }), utils_1.PrefixV2.BLS12_381PublicKeyHash); } bytes() { return __classPrivateFieldGet(this, _BLSPublicKey_key, "f"); } toProtocol() { const res = new Uint8Array(__classPrivateFieldGet(this, _BLSPublicKey_key, "f").length + 1); res[0] = 3; res.set(__classPrivateFieldGet(this, _BLSPublicKey_key, "f"), 1); return res; } toString() { return (0, utils_1.b58Encode)(__classPrivateFieldGet(this, _BLSPublicKey_key, "f"), utils_1.PrefixV2.BLS12_381PublicKey); } } exports.BLSPublicKey = BLSPublicKey; _BLSPublicKey_key = new WeakMap();