ts-mls
Version:
[](https://github.com/LukaJCB/ts-mls/actions/workflows/ci.yml) [](https://badge.fury.io/js/ts-mls) [, encodeVarLenData, encodeUint32], (g) => [g.groupContext, g.extensions, g.confirmationTag, g.signer]);
export const decodeGroupInfoTBS = mapDecoders([decodeGroupContext, decodeVarLenType(decodeExtension), decodeVarLenData, decodeUint32], (groupContext, extensions, confirmationTag, signer) => ({
groupContext,
extensions,
confirmationTag,
signer,
}));
export const encodeGroupInfo = contramapEncoders([encodeGroupInfoTBS, encodeVarLenData], (g) => [g, g.signature]);
export const decodeGroupInfo = mapDecoders([decodeGroupInfoTBS, decodeVarLenData], (tbs, signature) => ({
...tbs,
signature,
}));
export function ratchetTreeFromExtension(info) {
const treeExtension = info.extensions.find((ex) => ex.extensionType === "ratchet_tree");
if (treeExtension !== undefined) {
const tree = decodeRatchetTree(treeExtension.extensionData, 0);
if (tree === undefined)
throw new CodecError("Could not decode RatchetTree");
return tree[0];
}
}
export async function signGroupInfo(tbs, privateKey, s) {
const signature = await signWithLabel(privateKey, "GroupInfoTBS", encodeGroupInfoTBS(tbs), s);
return { ...tbs, signature };
}
export function verifyGroupInfoSignature(gi, publicKey, s) {
return verifyWithLabel(publicKey, "GroupInfoTBS", encodeGroupInfoTBS(gi), gi.signature, s);
}
export async function verifyGroupInfoConfirmationTag(gi, joinerSecret, pskSecret, cs) {
const epochSecret = await extractEpochSecret(gi.groupContext, joinerSecret, cs.kdf, pskSecret);
const key = await deriveSecret(epochSecret, "confirm", cs.kdf);
return cs.hash.verifyMac(key, gi.confirmationTag, gi.groupContext.confirmedTranscriptHash);
}
export async function extractWelcomeSecret(joinerSecret, pskSecret, kdf) {
return deriveSecret(await kdf.extract(joinerSecret, pskSecret), "welcome", kdf);
}
//# sourceMappingURL=groupInfo.js.map