ecash-lib
Version:
Library for eCash transaction building
105 lines • 3.18 kB
JavaScript
;
// Copyright (c) 2024 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
Object.defineProperty(exports, "__esModule", { value: true });
exports.Ecc = exports.__setEcc = exports.EccDummy = void 0;
/** Dummy Ecc impl that always returns 0, useful for measuring tx size */
class EccDummy {
derivePubkey(_seckey) {
return new Uint8Array(33);
}
ecdsaSign(_seckey, _msg) {
return new Uint8Array(73);
}
ecdsaVerify(_sig, _msg, _pk) { }
schnorrSign(_seckey, _msg) {
return new Uint8Array(64);
}
schnorrVerify(_sig, _msg, _pk) { }
isValidSeckey(_seckey) {
return false;
}
seckeyAdd(_a, _b) {
return new Uint8Array(32);
}
pubkeyAdd(_a, _b) {
return new Uint8Array(32);
}
signRecoverable(_seckey, _msg) {
return new Uint8Array(65);
}
recoverSig(_sig, _msg) {
return new Uint8Array(33);
}
compressPk(_pk) {
return new Uint8Array(33);
}
}
exports.EccDummy = EccDummy;
const ECC = {};
function __setEcc(ecc) {
ECC.ecc = ecc;
}
exports.__setEcc = __setEcc;
// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
class Ecc {
/** Derive a public key from secret key. */
derivePubkey(seckey) {
return ECC.ecc.derivePubkey(seckey);
}
/** Sign an ECDSA signature. msg needs to be a 32-byte hash */
ecdsaSign(seckey, msg) {
return ECC.ecc.ecdsaSign(seckey, msg);
}
/**
* Verify an ECDSA signature. msg needs to be a 32-byte hash.
* Throws an exception if the signature is invalid.
**/
ecdsaVerify(sig, msg, pk) {
ECC.ecc?.ecdsaVerify(sig, msg, pk);
}
/** Sign a Schnorr signature. msg needs to be a 32-byte hash */
schnorrSign(seckey, msg) {
return ECC.ecc.schnorrSign(seckey, msg);
}
/**
* Verify a Schnorr signature. msg needs to be a 32-byte hash.
* Throws an exception if the signature is invalid.
**/
schnorrVerify(sig, msg, pk) {
ECC.ecc?.schnorrVerify(sig, msg, pk);
}
/**
* Return whether the given secret key is valid, i.e. whether is of correct
* length (32 bytes) and is on the curve.
*/
isValidSeckey(seckey) {
return ECC.ecc.isValidSeckey(seckey);
}
/** Add a scalar to a secret key */
seckeyAdd(a, b) {
return ECC.ecc.seckeyAdd(a, b);
}
/** Add a scalar to a public key (adding G*b) */
pubkeyAdd(a, b) {
return ECC.ecc.pubkeyAdd(a, b);
}
signRecoverable(seckey, msg) {
return ECC.ecc.signRecoverable(seckey, msg);
}
recoverSig(sig, msg) {
return ECC.ecc.recoverSig(sig, msg);
}
compressPk(pk) {
if (pk[0] != 0x04) {
throw new Error('Uncompressed pubkey must start with 0x04');
}
const compressedPk = new Uint8Array(33);
compressedPk[0] = 0x02 | (pk[64] & 0x01);
compressedPk.set(pk.slice(1, 33), 1);
return compressedPk;
}
}
exports.Ecc = Ecc;
//# sourceMappingURL=ecc.js.map