mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-13 04:36:42 +00:00
Fix bug with sasrelay
libzrtp was forcing a new SAS rendering even when SasRelay sashash was zero. Modified-by: Travis Cross <tc@traviscross.com> Signed-off-by: Travis Cross <tc@traviscross.com>
This commit is contained in:
parent
2bfb3e7408
commit
656669d241
@ -25,6 +25,7 @@ static void _send_and_resend_sasrelay(zrtp_stream_t *stream, zrtp_retry_task_t*
|
|||||||
ZRTP_LOG(1,(_ZTU_,"WARNING! SASRELAY Max retransmissions count reached. ID=%u\n", stream->id));
|
ZRTP_LOG(1,(_ZTU_,"WARNING! SASRELAY Max retransmissions count reached. ID=%u\n", stream->id));
|
||||||
_zrtp_machine_enter_initiatingerror(stream, zrtp_error_timeout, 0);
|
_zrtp_machine_enter_initiatingerror(stream, zrtp_error_timeout, 0);
|
||||||
} else if (task->_is_enabled) {
|
} else if (task->_is_enabled) {
|
||||||
|
|
||||||
zrtp_status_t s = _zrtp_packet_send_message(stream, ZRTP_SASRELAY, &stream->messages.sasrelay);
|
zrtp_status_t s = _zrtp_packet_send_message(stream, ZRTP_SASRELAY, &stream->messages.sasrelay);
|
||||||
task->timeout = _zrtp_get_timeout((uint32_t)task->timeout, ZRTP_SASRELAY);
|
task->timeout = _zrtp_get_timeout((uint32_t)task->timeout, ZRTP_SASRELAY);
|
||||||
if (zrtp_status_ok == s) {
|
if (zrtp_status_ok == s) {
|
||||||
@ -87,13 +88,15 @@ static zrtp_status_t _create_sasrelay( zrtp_stream_t *stream,
|
|||||||
|
|
||||||
s = session->blockcipher->encrypt( session->blockcipher,
|
s = session->blockcipher->encrypt( session->blockcipher,
|
||||||
cipher_ctx,
|
cipher_ctx,
|
||||||
(uint8_t*)&sasrelay->pad,
|
(uint8_t*)sasrelay->pad,
|
||||||
encrypted_body_size );
|
encrypted_body_size );
|
||||||
} while(0);
|
} while(0);
|
||||||
if (cipher_ctx) {
|
if (cipher_ctx) {
|
||||||
session->blockcipher->stop(session->blockcipher, cipher_ctx);
|
session->blockcipher->stop(session->blockcipher, cipher_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (zrtp_status_ok != s) {
|
if (zrtp_status_ok != s) {
|
||||||
ZRTP_LOG(1,(_ZTU_,"\tERROR! Failed to encrypt SASRELAY Message status=%d. ID=%u\n", s, stream->id));
|
ZRTP_LOG(1,(_ZTU_,"\tERROR! Failed to encrypt SASRELAY Message status=%d. ID=%u\n", s, stream->id));
|
||||||
return s;
|
return s;
|
||||||
@ -177,9 +180,9 @@ zrtp_status_t _zrtp_machine_process_sasrelay(zrtp_stream_t *stream, zrtp_rtp_inf
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = session->blockcipher->encrypt( session->blockcipher,
|
s = session->blockcipher->decrypt( session->blockcipher,
|
||||||
cipher_ctx,
|
cipher_ctx,
|
||||||
(uint8_t*)&sasrelay->pad,
|
(uint8_t*)sasrelay->pad,
|
||||||
encrypted_body_size);
|
encrypted_body_size);
|
||||||
} while(0);
|
} while(0);
|
||||||
if (cipher_ctx) {
|
if (cipher_ctx) {
|
||||||
@ -229,7 +232,7 @@ zrtp_status_t _zrtp_machine_process_sasrelay(zrtp_stream_t *stream, zrtp_rtp_inf
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (session->secrets.matches & ZRTP_BIT_PBX) {
|
if (session->secrets.matches & ZRTP_BIT_PBX) {
|
||||||
if ( ( ((uint32_t) *sasrelay->sas_scheme) != (uint32_t)0x0L ) &&
|
if ( (((uint32_t) *sasrelay->sas_scheme) != (uint32_t)0x0L) &&
|
||||||
(0 != zrtp_memcmp(sasrelay->sashash, zerosashash, sizeof(sasrelay->sashash))) )
|
(0 != zrtp_memcmp(sasrelay->sashash, zerosashash, sizeof(sasrelay->sashash))) )
|
||||||
{
|
{
|
||||||
char buff[256];
|
char buff[256];
|
||||||
@ -240,7 +243,7 @@ zrtp_status_t _zrtp_machine_process_sasrelay(zrtp_stream_t *stream, zrtp_rtp_inf
|
|||||||
|
|
||||||
sas_hash_did_change = 1;
|
sas_hash_did_change = 1;
|
||||||
ZRTP_LOG(3,(_ZTU_,"\tSasRelay: SAS value was updated to bin=%s.\n",
|
ZRTP_LOG(3,(_ZTU_,"\tSasRelay: SAS value was updated to bin=%s.\n",
|
||||||
hex2str(buff, sizeof(buff), session->sasbin.buffer, session->sasbin.length)));
|
hex2str(session->sasbin.buffer, session->sasbin.length, buff, sizeof(buff))));
|
||||||
}
|
}
|
||||||
} else if (0 != zrtp_memcmp(sasrelay->sashash, zerosashash, sizeof(sasrelay->sashash))) {
|
} else if (0 != zrtp_memcmp(sasrelay->sashash, zerosashash, sizeof(sasrelay->sashash))) {
|
||||||
ZRTP_LOG(1,(_ZTU_,"\tWARNING! SAS Value was received from NOT Trusted MiTM. ID=%u\n", stream->id));
|
ZRTP_LOG(1,(_ZTU_,"\tWARNING! SAS Value was received from NOT Trusted MiTM. ID=%u\n", stream->id));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user