UNPKG

@signalapp/mock-server

Version:
51 lines (50 loc) 1.9 kB
"use strict"; // Copyright 2026 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only Object.defineProperty(exports, "__esModule", { value: true }); exports.getStrpKeyMaterial = getStrpKeyMaterial; exports.deriveStrpClientAndServer = deriveStrpClientAndServer; const libsignal_client_1 = require("@signalapp/libsignal-client"); const KEY_LABEL = Buffer.from('Signal_Group_Call_20211105_SignallingDH_SRTPKey_KDF'); const KEY_LENGTH = 16; const SALT_LENGTH = 12; // In the order [client_key, client_salt, server_key, server_salt] const KEY_MATERIAL_LENGTH = KEY_LENGTH + SALT_LENGTH + KEY_LENGTH + SALT_LENGTH; function getStrpKeyMaterial(params) { const clientHkdfExtraInfo = params.clientHkdfExtraInfo ?? Buffer.alloc(0); const keyMaterial = (0, libsignal_client_1.hkdf)(KEY_MATERIAL_LENGTH, params.sharedSecret, Buffer.concat([KEY_LABEL, clientHkdfExtraInfo]), null); return keyMaterial; } function deriveStrpClientAndServer(keyMaterial) { const mid = KEY_LENGTH + SALT_LENGTH; return { client: deriveKeyPairs({ key: keyMaterial.subarray(0, KEY_LENGTH), salt: keyMaterial.subarray(KEY_LENGTH, mid), }), server: deriveKeyPairs({ key: keyMaterial.subarray(mid, mid + KEY_LENGTH), salt: keyMaterial.subarray(mid + KEY_LENGTH), }), }; } function deriveKeyPairs(master) { return { rtp: { key: deriveKey(master, 0), salt: deriveSalt(master, 2), }, rtcp: { key: deriveKey(master, 3), salt: deriveSalt(master, 5), }, }; } // eslint-disable-next-line @typescript-eslint/no-unused-vars function deriveKey(keyPair, label) { throw new Error('unimplemented'); } // eslint-disable-next-line @typescript-eslint/no-unused-vars function deriveSalt(keyPair, label) { throw new Error('unimplemented'); }