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_machine_enter_initiatingerror(stream, zrtp_error_timeout, 0);
|
||||
} else if (task->_is_enabled) {
|
||||
|
||||
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);
|
||||
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,
|
||||
cipher_ctx,
|
||||
(uint8_t*)&sasrelay->pad,
|
||||
(uint8_t*)sasrelay->pad,
|
||||
encrypted_body_size );
|
||||
} while(0);
|
||||
if (cipher_ctx) {
|
||||
session->blockcipher->stop(session->blockcipher, cipher_ctx);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (zrtp_status_ok != s) {
|
||||
ZRTP_LOG(1,(_ZTU_,"\tERROR! Failed to encrypt SASRELAY Message status=%d. ID=%u\n", s, stream->id));
|
||||
return s;
|
||||
|
@ -177,9 +180,9 @@ zrtp_status_t _zrtp_machine_process_sasrelay(zrtp_stream_t *stream, zrtp_rtp_inf
|
|||
break;
|
||||
}
|
||||
|
||||
s = session->blockcipher->encrypt( session->blockcipher,
|
||||
s = session->blockcipher->decrypt( session->blockcipher,
|
||||
cipher_ctx,
|
||||
(uint8_t*)&sasrelay->pad,
|
||||
(uint8_t*)sasrelay->pad,
|
||||
encrypted_body_size);
|
||||
} while(0);
|
||||
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 ( ( ((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))) )
|
||||
{
|
||||
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;
|
||||
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))) {
|
||||
ZRTP_LOG(1,(_ZTU_,"\tWARNING! SAS Value was received from NOT Trusted MiTM. ID=%u\n", stream->id));
|
||||
|
|
Loading…
Reference in New Issue