Фикс ассиметричного обмена
This commit is contained in:
@@ -294,14 +294,17 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
/**
|
/**
|
||||||
* Другая сторона отправила нам ключи, теперь отправляем ей свои для генерации общего секрета
|
* Другая сторона отправила нам ключи, теперь отправляем ей свои для генерации общего секрета
|
||||||
*/
|
*/
|
||||||
const keys = generateSessionKeys();
|
|
||||||
const sharedPublic = packet.getSharedPublic();
|
const sharedPublic = packet.getSharedPublic();
|
||||||
if(!sharedPublic){
|
if(!sharedPublic){
|
||||||
info("Received key exchange signal without shared public key");
|
info("Received key exchange signal without shared public key");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(!sessionKeys){
|
||||||
|
info("Received key exchange signal but session keys are not generated");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const computedSharedSecret = nacl.box.before(Buffer.from(sharedPublic, 'hex'), keys.secretKey);
|
const computedSharedSecret = nacl.box.before(Buffer.from(sharedPublic, 'hex'), sessionKeys.secretKey);
|
||||||
sharedSecretRef.current = Buffer.from(computedSharedSecret).toString('hex');
|
sharedSecretRef.current = Buffer.from(computedSharedSecret).toString('hex');
|
||||||
info("Generated shared secret for call session: " + sharedSecretRef.current);
|
info("Generated shared secret for call session: " + sharedSecretRef.current);
|
||||||
setCallState(CallState.WEB_RTC_EXCHANGE);
|
setCallState(CallState.WEB_RTC_EXCHANGE);
|
||||||
@@ -316,7 +319,7 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
signalPacket.setSrc(publicKey);
|
signalPacket.setSrc(publicKey);
|
||||||
signalPacket.setDst(activeCall);
|
signalPacket.setDst(activeCall);
|
||||||
signalPacket.setSignalType(SignalType.KEY_EXCHANGE);
|
signalPacket.setSignalType(SignalType.KEY_EXCHANGE);
|
||||||
signalPacket.setSharedPublic(Buffer.from(keys.publicKey).toString('hex'));
|
signalPacket.setSharedPublic(Buffer.from(sessionKeys.publicKey).toString('hex'));
|
||||||
send(signalPacket);
|
send(signalPacket);
|
||||||
}
|
}
|
||||||
if(signalType == SignalType.ACCEPT){
|
if(signalType == SignalType.ACCEPT){
|
||||||
@@ -556,7 +559,11 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
stopLoopSound();
|
stopLoopSound();
|
||||||
stopSound();
|
stopSound();
|
||||||
/**
|
/**
|
||||||
* Звонок принят, можно обмениваться ключами
|
* Звонок принят, генерируем свой ключ для будующего обмена
|
||||||
|
*/
|
||||||
|
generateSessionKeys();
|
||||||
|
/**
|
||||||
|
* Отправляем сигнал что звонок принят другой стороне, чтобы она могла начать обмен ключами и установку соединения
|
||||||
*/
|
*/
|
||||||
const signalPacket = new PacketSignalPeer();
|
const signalPacket = new PacketSignalPeer();
|
||||||
signalPacket.setSrc(publicKey);
|
signalPacket.setSrc(publicKey);
|
||||||
@@ -565,6 +572,9 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
signalPacket.setJoinToken(callTokenRef.current);
|
signalPacket.setJoinToken(callTokenRef.current);
|
||||||
signalPacket.setSignalType(SignalType.ACCEPT);
|
signalPacket.setSignalType(SignalType.ACCEPT);
|
||||||
send(signalPacket);
|
send(signalPacket);
|
||||||
|
/**
|
||||||
|
* Устанавливаем состояние звонка и стадию обмена ключами
|
||||||
|
*/
|
||||||
setCallState(CallState.KEY_EXCHANGE);
|
setCallState(CallState.KEY_EXCHANGE);
|
||||||
roleRef.current = CallRole.CALLEE;
|
roleRef.current = CallRole.CALLEE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user