Skip to content

Commit

Permalink
Merge pull request #310 from pabuhler/merge_308_into_2_1_x
Browse files Browse the repository at this point in the history
Merge #308 into 2_1_x
  • Loading branch information
pabuhler committed Jun 7, 2017
2 parents ef72f4e + 28209e2 commit 98c6ced
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 21 deletions.
8 changes: 6 additions & 2 deletions srtp/srtp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2346,6 +2346,8 @@ srtp_unprotect_mki(srtp_ctx_t *ctx, void *srtp_hdr, int *pkt_octet_len,
unsigned int mki_size = 0;
srtp_session_keys_t *session_keys = NULL;
int advance_packet_index = 0;
uint32_t roc_to_set = 0;
uint16_t seq_to_set = 0;

debug_print(mod_srtp, "function srtp_unprotect", NULL);

Expand Down Expand Up @@ -2404,6 +2406,8 @@ srtp_unprotect_mki(srtp_ctx_t *ctx, void *srtp_hdr, int *pkt_octet_len,

if (status == srtp_err_status_pkt_idx_adv) {
advance_packet_index = 1;
roc_to_set = (uint32_t)(est >> 16);
seq_to_set = (uint16_t)(est & 0xFFFF);
}

/* check replay database */
Expand Down Expand Up @@ -2664,8 +2668,8 @@ srtp_unprotect_mki(srtp_ctx_t *ctx, void *srtp_hdr, int *pkt_octet_len,
*/
if (advance_packet_index) {
srtp_rdbx_set_roc_seq(&stream->rtp_rdbx,
(uint32_t)(est >> 16),
(uint16_t)(est & 0xFFFF));
roc_to_set,
seq_to_set);
stream->pending_roc = 0;
srtp_rdbx_add_index(&stream->rtp_rdbx, 0);
} else {
Expand Down
70 changes: 51 additions & 19 deletions test/srtp_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -3077,15 +3077,19 @@ test_set_receiver_roc(uint32_t packets, uint32_t roc_to_set)
srtp_policy_t receiver_policy;
srtp_t receiver_session;

srtp_hdr_t *pkt;
unsigned char *recv_pkt;
srtp_hdr_t *pkt_1;
unsigned char *recv_pkt_1;

srtp_hdr_t *pkt_2;
unsigned char *recv_pkt_2;

uint32_t i;
uint32_t ts;
uint16_t seq;

int msg_len_octets = 32;
int protected_msg_len_octets;
int protected_msg_len_octets_1;
int protected_msg_len_octets_2;

/* Create sender */
memset(&sender_policy, 0, sizeof(sender_policy));
Expand All @@ -3105,21 +3109,34 @@ test_set_receiver_roc(uint32_t packets, uint32_t roc_to_set)
seq = 0;
ts = 0;
for (i = 0; i < packets; i++) {
pkt = srtp_create_test_packet_extended(msg_len_octets, sender_policy.ssrc.value, seq, ts);
protected_msg_len_octets = msg_len_octets;
status = srtp_protect(sender_session, pkt, &protected_msg_len_octets);
free(pkt);
srtp_hdr_t *tmp_pkt;
int tmp_len;

tmp_pkt = srtp_create_test_packet_extended(msg_len_octets, sender_policy.ssrc.value, seq, ts);
tmp_len = msg_len_octets;
status = srtp_protect(sender_session, tmp_pkt, &tmp_len);
free(tmp_pkt);
if (status) {
return status;
}
seq++;
ts++;
}

/* Create the packet to decrypt and test for ROC change */
pkt = srtp_create_test_packet_extended(msg_len_octets, sender_policy.ssrc.value, seq, ts);
protected_msg_len_octets = msg_len_octets;
status = srtp_protect(sender_session, pkt, &protected_msg_len_octets);
/* Create the first packet to decrypt and test for ROC change */
pkt_1 = srtp_create_test_packet_extended(msg_len_octets, sender_policy.ssrc.value, seq, ts);
protected_msg_len_octets_1 = msg_len_octets;
status = srtp_protect(sender_session, pkt_1, &protected_msg_len_octets_1);
if (status) {
return status;
}

/* Create the second packet to decrypt and test for ROC change */
seq++;
ts++;
pkt_2 = srtp_create_test_packet_extended(msg_len_octets, sender_policy.ssrc.value, seq, ts);
protected_msg_len_octets_2 = msg_len_octets;
status = srtp_protect(sender_session, pkt_2, &protected_msg_len_octets_2);
if (status) {
return status;
}
Expand All @@ -3138,20 +3155,34 @@ test_set_receiver_roc(uint32_t packets, uint32_t roc_to_set)
return status;
}

/* Make a copy of the sent protected packet */
recv_pkt = malloc(protected_msg_len_octets);
if (recv_pkt == NULL) {
/* Make a copy of the first sent protected packet */
recv_pkt_1 = malloc(protected_msg_len_octets_1);
if (recv_pkt_1 == NULL) {
return srtp_err_status_fail;
}
memcpy(recv_pkt, pkt, protected_msg_len_octets);
memcpy(recv_pkt_1, pkt_1, protected_msg_len_octets_1);

/* Make a copy of the second sent protected packet */
recv_pkt_2 = malloc(protected_msg_len_octets_2);
if (recv_pkt_2 == NULL) {
return srtp_err_status_fail;
}
memcpy(recv_pkt_2, pkt_2, protected_msg_len_octets_2);

/* Set the ROC to the wanted value */
status = srtp_set_stream_roc(receiver_session, receiver_policy.ssrc.value, roc_to_set);
if (status) {
return status;
}

status = srtp_unprotect(receiver_session, recv_pkt, &protected_msg_len_octets);
/* Unprotect the first packet */
status = srtp_unprotect(receiver_session, recv_pkt_1, &protected_msg_len_octets_1);
if (status) {
return status;
}

/* Unprotect the second packet */
status = srtp_unprotect(receiver_session, recv_pkt_2, &protected_msg_len_octets_2);
if (status) {
return status;
}
Expand All @@ -3167,8 +3198,10 @@ test_set_receiver_roc(uint32_t packets, uint32_t roc_to_set)
return status;
}

free(pkt);
free(recv_pkt);
free(pkt_1);
free(recv_pkt_1);
free(pkt_2);
free(recv_pkt_2);

return srtp_err_status_ok;
}
Expand Down Expand Up @@ -3326,7 +3359,6 @@ srtp_test_set_receiver_roc() {
return status;
}


return srtp_err_status_ok;
}

Expand Down

0 comments on commit 98c6ced

Please sign in to comment.