ts-mls
Version:
[](https://github.com/LukaJCB/ts-mls/actions/workflows/ci.yml) [](https://badge.fury.io/js/ts-mls) [ => pskTypes[t]);
export const decodePskType = mapDecoderOption(decodeUint8, enumNumberToKey(pskTypes));
const resumptionPSKUsages = {
application: 1,
reinit: 2,
branch: 3,
};
export const encodeResumptionPSKUsage = contramapEncoder(encodeUint8, (u) => resumptionPSKUsages[u]);
export const decodeResumptionPSKUsage = mapDecoderOption(decodeUint8, enumNumberToKey(resumptionPSKUsages));
const encodePskInfoExternal = contramapEncoders([encodePskType, encodeVarLenData], (i) => [i.psktype, i.pskId]);
const encodePskInfoResumption = contramapEncoders([encodePskType, encodeResumptionPSKUsage, encodeVarLenData, encodeUint64], (info) => [info.psktype, info.usage, info.pskGroupId, info.pskEpoch]);
const decodePskInfoResumption = mapDecoders([decodeResumptionPSKUsage, decodeVarLenData, decodeUint64], (usage, pskGroupId, pskEpoch) => {
return { usage, pskGroupId, pskEpoch };
});
export const encodePskInfo = (info) => {
switch (info.psktype) {
case "external":
return encodePskInfoExternal(info);
case "resumption":
return encodePskInfoResumption(info);
}
};
export const decodePskInfo = flatMapDecoder(decodePskType, (psktype) => {
switch (psktype) {
case "external":
return mapDecoder(decodeVarLenData, (pskId) => ({
psktype,
pskId,
}));
case "resumption":
return mapDecoder(decodePskInfoResumption, (resumption) => ({
psktype,
...resumption,
}));
}
});
export const encodePskId = contramapEncoders([encodePskInfo, encodeVarLenData], (pskid) => [pskid, pskid.pskNonce]);
export const decodePskId = mapDecoders([decodePskInfo, decodeVarLenData], (info, pskNonce) => ({ ...info, pskNonce }));
export const encodePskLabel = contramapEncoders([encodePskId, encodeUint16, encodeUint16], (label) => [label.id, label.index, label.count]);
export const decodePskLabel = mapDecoders([decodePskId, decodeUint16, decodeUint16], (id, index, count) => ({ id, index, count }));
export async function computePskSecret(psks, impl) {
const zeroes = new Uint8Array(impl.kdf.size);
return psks.reduce(async (acc, [curId, curPsk], index) => updatePskSecret(await acc, curId, curPsk, index, psks.length, impl), Promise.resolve(zeroes));
}
export async function updatePskSecret(secret, pskId, psk, index, count, impl) {
const zeroes = new Uint8Array(impl.kdf.size);
return impl.kdf.extract(await expandWithLabel(await impl.kdf.extract(zeroes, psk), "derived psk", encodePskLabel({ id: pskId, index, count }), impl.kdf.size, impl.kdf), secret);
}
//# sourceMappingURL=presharedkey.js.map