@taquito/signer
Version:
Software signer implementations and signing utilities for Taquito.
105 lines (104 loc) • 4.78 kB
JavaScript
;
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();