UNPKG

ts-mls

Version:

[![CI](https://github.com/LukaJCB/ts-mls/actions/workflows/ci.yml/badge.svg)](https://github.com/LukaJCB/ts-mls/actions/workflows/ci.yml) [![npm version](https://badge.fury.io/js/ts-mls.svg)](https://badge.fury.io/js/ts-mls) [![Coverage Status](https://co

30 lines 1.74 kB
import { decodeUint16, encodeUint16 } from "./codec/number.js"; import { mapDecoders, orDecoder } from "./codec/tlsDecoder.js"; import { contramapEncoders } from "./codec/tlsEncoder.js"; import { decodeVarLenData, encodeVarLenData } from "./codec/variableLength.js"; import { decodeDefaultExtensionType, encodeDefaultExtensionType, defaultExtensionTypes, } from "./defaultExtensionType.js"; import { constantTimeEqual } from "./util/constantTimeCompare.js"; export const encodeExtensionType = (t) => typeof t === "number" ? encodeUint16(t) : encodeDefaultExtensionType(t); export const decodeExtensionType = orDecoder(decodeDefaultExtensionType, decodeUint16); export const encodeExtension = contramapEncoders([encodeExtensionType, encodeVarLenData], (e) => [e.extensionType, e.extensionData]); export const decodeExtension = mapDecoders([decodeExtensionType, decodeVarLenData], (extensionType, extensionData) => ({ extensionType, extensionData })); export function extensionEqual(a, b) { return a.extensionType === b.extensionType && constantTimeEqual(a.extensionData, b.extensionData); } export function extensionsEqual(a, b) { if (a.length !== b.length) return false; return a.every((val, i) => extensionEqual(val, b[i])); } export function extensionsSupportedByCapabilities(requiredExtensions, capabilities) { return requiredExtensions .filter((ex) => !isDefaultExtension(ex.extensionType)) .every((ex) => capabilities.extensions.includes(extensionTypeToNumber(ex.extensionType))); } function isDefaultExtension(t) { return typeof t !== "number"; } export function extensionTypeToNumber(t) { return typeof t === "number" ? t : defaultExtensionTypes[t]; } //# sourceMappingURL=extension.js.map