@chorus-one/signer-local
Version:
Local signer for Chorus One SDK that utilizes a BIP39 mnemonic for signing operations
28 lines (27 loc) • 1.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sign = exports.deriveKey = void 0;
const bip32_1 = require("@scure/bip32");
const secp256k1_1 = require("@noble/curves/secp256k1");
// We would love to use the @noble-secp256k1 package but it supports only esm:
// https://github.com/paulmillr/noble-secp256k1/issues/115#issuecomment-1748018784
function deriveKey(seed, hdPath) {
const key = bip32_1.HDKey.fromMasterSeed(seed).derive(hdPath);
if (key === null || key.publicKey == null || key.privateKey == null) {
throw new Error('failed to derive keypair from seed');
}
return { publicKey: key.publicKey, privateKey: key.privateKey };
}
exports.deriveKey = deriveKey;
async function sign(content, privKey) {
const signature = secp256k1_1.secp256k1.sign(Buffer.from(content, 'hex'), privKey);
const rawSig = signature.toCompactRawBytes();
const sig = {
fullSig: signature.toCompactHex(),
r: Buffer.from(rawSig.subarray(0, 32)).toString('hex'),
s: Buffer.from(rawSig.subarray(32, 64)).toString('hex'),
v: signature.recovery
};
return sig;
}
exports.sign = sign;