UNPKG

@taquito/signer

Version:

Software signer implementations and signing utilities for Taquito.

131 lines (130 loc) 5.38 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 _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();