From 46af6661a19422a2111d64faa2f9fac7eda5e304 Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Fri, 20 Mar 2026 18:22:49 +0200 Subject: [PATCH] =?UTF-8?q?=D0=A8=D0=B8=D1=84=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/providers/CallProvider/CallProvider.tsx | 21 +++++++++++---------- app/providers/CallProvider/audioE2EE.ts | 1 + 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/providers/CallProvider/CallProvider.tsx b/app/providers/CallProvider/CallProvider.tsx index 62996bc..c0ee1d3 100644 --- a/app/providers/CallProvider/CallProvider.tsx +++ b/app/providers/CallProvider/CallProvider.tsx @@ -74,7 +74,8 @@ export function CallProvider(props : CallProviderProps) { const roomIdRef = useRef(""); const roleRef = useRef(null); - const [sharedSecret, setSharedSecret] = useState(""); + //const [sharedSecret, setSharedSecret] = useState(""); + const sharedSecretRef = useRef(""); const iceServersRef = useRef([]); const remoteAudioRef = useRef(null); const iceCandidatesBufferRef = useRef([]); @@ -246,8 +247,8 @@ export function CallProvider(props : CallProviderProps) { } const sessionKeys = generateSessionKeys(); const computedSharedSecret = nacl.box.before(Buffer.from(sharedPublic, 'hex'), sessionKeys.secretKey); - setSharedSecret(Buffer.from(computedSharedSecret).toString('hex')); - info("Generated shared secret for call session: " + Buffer.from(computedSharedSecret).toString('hex')); + sharedSecretRef.current = Buffer.from(computedSharedSecret).toString('hex'); + info("Generated shared secret for call session: " + sharedSecretRef.current); /** * Нам нужно отправить свой публичный ключ другой стороне, чтобы она тоже могла создать общую секретную сессию */ @@ -284,8 +285,8 @@ export function CallProvider(props : CallProviderProps) { return; } const computedSharedSecret = nacl.box.before(Buffer.from(sharedPublic, 'hex'), sessionKeys.secretKey); - info("Generated shared secret for call session: " + Buffer.from(computedSharedSecret).toString('hex')); - setSharedSecret(Buffer.from(computedSharedSecret).toString('hex')); + sharedSecretRef.current = Buffer.from(computedSharedSecret).toString('hex'); + info("Generated shared secret for call session: " + sharedSecretRef.current); setCallState(CallState.WEB_RTC_EXCHANGE); } if(signalType == SignalType.CREATE_ROOM) { @@ -326,7 +327,7 @@ export function CallProvider(props : CallProviderProps) { peerConnectionRef.current.ontrack = async (event) => { try { - await attachReceiverE2EE(event.receiver, Buffer.from(sharedSecret, "hex")); + await attachReceiverE2EE(event.receiver, Buffer.from(sharedSecretRef.current, "hex")); } catch (e) { console.error("attachReceiverE2EE failed:", e); } @@ -356,7 +357,7 @@ export function CallProvider(props : CallProviderProps) { streams: [localStream] }); - await attachSenderE2EE(tx.sender, Buffer.from(sharedSecret, "hex")); + await attachSenderE2EE(tx.sender, Buffer.from(sharedSecretRef.current, "hex")); /** * Отправляем свой оффер другой стороне @@ -369,7 +370,7 @@ export function CallProvider(props : CallProviderProps) { send(offerSignal); return; } - }, [activeCall, sessionKeys, sharedSecret]); + }, [activeCall, sessionKeys]); const openCallsModal = (text : string) => { modals.open({ @@ -483,10 +484,10 @@ export function CallProvider(props : CallProviderProps) { * @returns */ const getKeyCast = () => { - if(!sharedSecret){ + if(!sharedSecretRef.current){ return ""; } - return sharedSecret; + return sharedSecretRef.current; } diff --git a/app/providers/CallProvider/audioE2EE.ts b/app/providers/CallProvider/audioE2EE.ts index 0d385ba..97fbd6e 100644 --- a/app/providers/CallProvider/audioE2EE.ts +++ b/app/providers/CallProvider/audioE2EE.ts @@ -7,6 +7,7 @@ type KeyInput = Buffer | Uint8Array; async function importAesCtrKey(input: KeyInput): Promise { +console.info("Importing AES-CTR key for E2EE:", Buffer.from(input).toString('hex')); const keyBytes = toArrayBuffer(input); if (keyBytes.byteLength !== 32) { throw new Error(`E2EE key must be 32 bytes, got ${keyBytes.byteLength}`);