@taquito/signer
Version:
Software signer implementations and signing utilities for Taquito.
131 lines (130 loc) • 5.38 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 _EdKey_keyPair, _EdPublicKey_key;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EdPublicKey = exports.EdKey = void 0;
const blake2_js_1 = require("@noble/hashes/blake2.js");
const ed25519_1 = require("@noble/curves/ed25519");
const utils_1 = require("@taquito/utils");
function generateKeyPairFromSeed(seed) {
const publicKey = ed25519_1.ed25519.getPublicKey(seed);
const secretKey = new Uint8Array(64);
secretKey.set(seed);
secretKey.set(publicKey, 32);
return { secretKey, publicKey };
}
/**
* Provide signing logic for ed25519 curve based key (tz1)
*/
class EdKey {
/**
*
* @param key Encoded private key
* @param encrypted Is the private key encrypted
* @param decrypt Decrypt function
* @throws InvalidKeyError
*/
constructor(key, decrypt) {
_EdKey_keyPair.set(this, void 0);
const tmp = (0, utils_1.b58DecodeAndCheckPrefix)(key, [
utils_1.PrefixV2.Ed25519SecretKey,
utils_1.PrefixV2.Ed25519EncryptedSeed,
utils_1.PrefixV2.Ed25519Seed,
]);
let [keyData] = tmp;
const [, prefix] = tmp;
if (prefix === utils_1.PrefixV2.Ed25519SecretKey) {
__classPrivateFieldSet(this, _EdKey_keyPair, {
secretKey: keyData,
publicKey: keyData.slice(32),
}, "f");
}
else {
if (prefix === utils_1.PrefixV2.Ed25519EncryptedSeed) {
if (decrypt !== undefined) {
keyData = decrypt(keyData);
}
else {
throw new Error('decryption function is not provided');
}
}
__classPrivateFieldSet(this, _EdKey_keyPair, generateKeyPairFromSeed(keyData), "f");
}
}
/**
*
* @param bytes Bytes to sign
* @param bytesHash Blake2b hash of the bytes to sign
*/
sign(bytes) {
const hash = (0, blake2_js_1.blake2b)(bytes, { dkLen: 32 });
const seed = __classPrivateFieldGet(this, _EdKey_keyPair, "f").secretKey.subarray(0, 32);
const signature = ed25519_1.ed25519.sign(hash, seed);
return {
rawSignature: signature,
sig: (0, utils_1.b58Encode)(signature, utils_1.PrefixV2.GenericSignature),
prefixSig: (0, utils_1.b58Encode)(signature, utils_1.PrefixV2.Ed25519Signature),
};
}
/**
* @returns Encoded public key
*/
publicKey() {
return new EdPublicKey(__classPrivateFieldGet(this, _EdKey_keyPair, "f").publicKey);
}
/**
* @returns Encoded private key
*/
secretKey() {
return (0, utils_1.b58Encode)(__classPrivateFieldGet(this, _EdKey_keyPair, "f").secretKey, utils_1.PrefixV2.Ed25519SecretKey);
}
}
exports.EdKey = EdKey;
_EdKey_keyPair = new WeakMap();
class EdPublicKey {
constructor(src) {
_EdPublicKey_key.set(this, void 0);
if (typeof src === 'string') {
const [key, _] = (0, utils_1.b58DecodeAndCheckPrefix)(src, [utils_1.PrefixV2.Ed25519PublicKey]);
__classPrivateFieldSet(this, _EdPublicKey_key, key, "f");
}
else {
__classPrivateFieldSet(this, _EdPublicKey_key, src, "f");
}
}
compare(other) {
if (other instanceof EdPublicKey) {
return (0, utils_1.compareArrays)(this.bytes(), other.bytes());
}
else {
throw new utils_1.InvalidPublicKeyError('EdDSA key expected');
}
}
hash() {
return (0, utils_1.b58Encode)((0, blake2_js_1.blake2b)(__classPrivateFieldGet(this, _EdPublicKey_key, "f"), { dkLen: 20 }), utils_1.PrefixV2.Ed25519PublicKeyHash);
}
bytes() {
return __classPrivateFieldGet(this, _EdPublicKey_key, "f");
}
toProtocol() {
const res = new Uint8Array(__classPrivateFieldGet(this, _EdPublicKey_key, "f").length + 1);
res[0] = 0;
res.set(__classPrivateFieldGet(this, _EdPublicKey_key, "f"), 1);
return res;
}
toString() {
return (0, utils_1.b58Encode)(__classPrivateFieldGet(this, _EdPublicKey_key, "f"), utils_1.PrefixV2.Ed25519PublicKey);
}
}
exports.EdPublicKey = EdPublicKey;
_EdPublicKey_key = new WeakMap();