UNPKG

@mysten/sui

Version:

Sui TypeScript API(Work in Progress)

60 lines (59 loc) 1.81 kB
import { fromB64, toB64 } from "@mysten/bcs"; import { bcs } from "../bcs/index.js"; import { parseSerializedZkLoginSignature } from "../zklogin/publickey.js"; import { SIGNATURE_FLAG_TO_SCHEME, SIGNATURE_SCHEME_TO_FLAG, SIGNATURE_SCHEME_TO_SIZE } from "./signature-scheme.js"; function toSerializedSignature({ signature, signatureScheme, publicKey }) { if (!publicKey) { throw new Error("`publicKey` is required"); } const pubKeyBytes = publicKey.toRawBytes(); const serializedSignature = new Uint8Array(1 + signature.length + pubKeyBytes.length); serializedSignature.set([SIGNATURE_SCHEME_TO_FLAG[signatureScheme]]); serializedSignature.set(signature, 1); serializedSignature.set(pubKeyBytes, 1 + signature.length); return toB64(serializedSignature); } function parseSerializedSignature(serializedSignature) { const bytes = fromB64(serializedSignature); const signatureScheme = SIGNATURE_FLAG_TO_SCHEME[bytes[0]]; switch (signatureScheme) { case "MultiSig": const multisig = bcs.MultiSig.parse(bytes.slice(1)); return { serializedSignature, signatureScheme, multisig, bytes }; case "ZkLogin": return parseSerializedZkLoginSignature(serializedSignature); case "ED25519": case "Secp256k1": case "Secp256r1": const size = SIGNATURE_SCHEME_TO_SIZE[signatureScheme]; const signature = bytes.slice(1, bytes.length - size); const publicKey = bytes.slice(1 + signature.length); return { serializedSignature, signatureScheme, signature, publicKey, bytes }; default: throw new Error("Unsupported signature scheme"); } } export { parseSerializedSignature, toSerializedSignature }; //# sourceMappingURL=signature.js.map