@mysten/sui
Version:
Sui TypeScript API(Work in Progress)
60 lines (59 loc) • 1.81 kB
JavaScript
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