Implement call encryption

Security fixes
This commit is contained in:
2025-10-01 22:50:32 +03:00
Unverified
parent a424ea009d
commit 1b2f825a74
9 changed files with 657 additions and 27 deletions
+16 -2
View File
@@ -1,9 +1,10 @@
import type { WebSocketMessage, CallSignalingData, CallInvite } from "@/core/types";
import type { CallInvite, CallSignalingMessage } from "@/core/types";
import * as WebRTC from "./webrtc";
export interface CallState {
receiveCall: (userId: number, username: string) => void;
endCall: () => void;
setCallSessionKeyHash: (sessionKeyHash: string) => void;
}
export class CallSignalingHandler {
@@ -13,7 +14,7 @@ export class CallSignalingHandler {
this.getState = getState;
}
handleWebSocketMessage(message: WebSocketMessage<CallSignalingData>) {
handleWebSocketMessage(message: CallSignalingMessage) {
if (message.type !== "call_signaling") {
return;
}
@@ -48,6 +49,9 @@ export class CallSignalingHandler {
case "call_end":
this.handleCallEnd(data);
break;
case "call_session_key":
this.handleCallSessionKey(data);
break;
}
}
@@ -112,4 +116,14 @@ export class CallSignalingHandler {
// End the call
state.endCall();
}
private handleCallSessionKey({ sessionKeyHash, data, ...message }: CallSignalingMessage) {
const state = this.getState();
if (sessionKeyHash) {
state.setCallSessionKeyHash(sessionKeyHash);
}
if (data?.wrappedSessionKey && message.fromUserId) {
WebRTC.receiveWrappedSessionKey(message.fromUserId, data.wrappedSessionKey, sessionKeyHash);
}
}
}