@firmachain/firma-js
Version:
The Official FirmaChain Javascript SDK written in Typescript
37 lines (36 loc) • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.decodeSignature = exports.encodeSecp256k1Signature = void 0;
/* eslint-disable @typescript-eslint/naming-convention */
var encoding_1 = require("@cosmjs/encoding");
var encoding_2 = require("./encoding");
var pubkeys_1 = require("./pubkeys");
/**
* Takes a binary pubkey and signature to create a signature object
*
* @param pubkey a compressed secp256k1 public key
* @param signature a 64 byte fixed length representation of secp256k1 signature components r and s
*/
function encodeSecp256k1Signature(pubkey, signature) {
if (signature.length !== 64) {
throw new Error("Signature must be 64 bytes long. Cosmos SDK uses a 2x32 byte fixed length encoding for the secp256k1 signature integers r and s.");
}
return {
pub_key: encoding_2.encodeSecp256k1Pubkey(pubkey),
signature: encoding_1.toBase64(signature),
};
}
exports.encodeSecp256k1Signature = encodeSecp256k1Signature;
function decodeSignature(signature) {
switch (signature.pub_key.type) {
// Note: please don't add cases here without writing additional unit tests
case pubkeys_1.pubkeyType.secp256k1:
return {
pubkey: encoding_1.fromBase64(signature.pub_key.value),
signature: encoding_1.fromBase64(signature.signature),
};
default:
throw new Error("Unsupported pubkey type");
}
}
exports.decodeSignature = decodeSignature;