forked from mirrors/gecko-dev
Backed out 2 changesets (bug 1792069, bug 1792070) for causing build bustages CLOSED TREE
Backed out changeset a64a597a93a4 (bug 1792069) Backed out changeset dfbeb0ea1c65 (bug 1792070)
This commit is contained in:
parent
464388f161
commit
0652e4917a
15 changed files with 1527 additions and 44 deletions
44
third_party/libsrtp/moz.yaml
vendored
44
third_party/libsrtp/moz.yaml
vendored
|
|
@ -1,44 +0,0 @@
|
|||
schema: 1
|
||||
|
||||
bugzilla:
|
||||
product: "Core"
|
||||
component: "WebRTC: Networking"
|
||||
|
||||
origin:
|
||||
name: "libsrtp"
|
||||
description: "Secure Real-time Transport Protocol (SRTP)"
|
||||
|
||||
url: "https://github.com/cisco/libsrtp/"
|
||||
license: BSD-3-Clause
|
||||
license-file: LICENSE
|
||||
|
||||
release: v2.4.2 (2021-09-20T16:10:47+02:00).
|
||||
revision: v2.4.2
|
||||
|
||||
|
||||
updatebot:
|
||||
maintainer-phab: jesup
|
||||
maintainer-bz: rjesup@jesup.org
|
||||
tasks:
|
||||
- type: vendoring
|
||||
enabled: True
|
||||
|
||||
vendoring:
|
||||
url: https://github.com/cisco/libsrtp
|
||||
source-hosting: github
|
||||
tracking: tag
|
||||
vendor-directory: third_party/libsrtp/src
|
||||
|
||||
exclude:
|
||||
- ".*"
|
||||
- ".github"
|
||||
- "**"
|
||||
|
||||
include:
|
||||
- srtp
|
||||
- crypto
|
||||
- include
|
||||
- test
|
||||
- LICENSE
|
||||
- CHANGES
|
||||
- README.md
|
||||
1
third_party/libsrtp/src/VERSION
vendored
Normal file
1
third_party/libsrtp/src/VERSION
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
2.4.2
|
||||
1
third_party/libsrtp/src/crypto/VERSION
vendored
Normal file
1
third_party/libsrtp/src/crypto/VERSION
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
1.0.0
|
||||
66
third_party/libsrtp/src/crypto/include/stat.h
vendored
Normal file
66
third_party/libsrtp/src/crypto/include/stat.h
vendored
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* stats.h
|
||||
*
|
||||
* interface to statistical test functions
|
||||
*
|
||||
* David A. McGrew
|
||||
* Cisco Systems, Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* Copyright(c) 2001-2017, Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef STAT_H
|
||||
#define STAT_H
|
||||
|
||||
#include "datatypes.h" /* for uint8_t */
|
||||
#include "err.h" /* for srtp_err_status_t */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
srtp_err_status_t stat_test_monobit(uint8_t *data);
|
||||
|
||||
srtp_err_status_t stat_test_poker(uint8_t *data);
|
||||
|
||||
srtp_err_status_t stat_test_runs(uint8_t *data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STAT_H */
|
||||
213
third_party/libsrtp/src/crypto/math/stat.c
vendored
Normal file
213
third_party/libsrtp/src/crypto/math/stat.c
vendored
Normal file
|
|
@ -0,0 +1,213 @@
|
|||
/*
|
||||
* stats.c
|
||||
*
|
||||
* statistical tests
|
||||
*
|
||||
* David A. McGrew
|
||||
* Cisco Systems, Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2001-2017, Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "stat.h"
|
||||
|
||||
srtp_debug_module_t srtp_mod_stat = {
|
||||
0, /* debugging is off by default */
|
||||
(char *)"stat test" /* printable module name */
|
||||
};
|
||||
|
||||
/*
|
||||
* each test assumes that 20,000 bits (2500 octets) of data is
|
||||
* provided as input
|
||||
*/
|
||||
|
||||
#define STAT_TEST_DATA_LEN 2500
|
||||
|
||||
srtp_err_status_t stat_test_monobit(uint8_t *data)
|
||||
{
|
||||
uint8_t *data_end = data + STAT_TEST_DATA_LEN;
|
||||
uint16_t ones_count;
|
||||
|
||||
ones_count = 0;
|
||||
while (data < data_end) {
|
||||
ones_count += octet_get_weight(*data);
|
||||
data++;
|
||||
}
|
||||
|
||||
debug_print(srtp_mod_stat, "bit count: %d", ones_count);
|
||||
|
||||
if ((ones_count < 9725) || (ones_count > 10275))
|
||||
return srtp_err_status_algo_fail;
|
||||
|
||||
return srtp_err_status_ok;
|
||||
}
|
||||
|
||||
srtp_err_status_t stat_test_poker(uint8_t *data)
|
||||
{
|
||||
int i;
|
||||
uint8_t *data_end = data + STAT_TEST_DATA_LEN;
|
||||
double poker;
|
||||
uint16_t f[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
while (data < data_end) {
|
||||
f[*data & 0x0f]++; /* increment freq. count for low nibble */
|
||||
f[(*data) >> 4]++; /* increment freq. count for high nibble */
|
||||
data++;
|
||||
}
|
||||
|
||||
poker = 0.0;
|
||||
for (i = 0; i < 16; i++)
|
||||
poker += (double)f[i] * f[i];
|
||||
|
||||
poker *= (16.0 / 5000.0);
|
||||
poker -= 5000.0;
|
||||
|
||||
debug_print(srtp_mod_stat, "poker test: %f\n", poker);
|
||||
|
||||
if ((poker < 2.16) || (poker > 46.17))
|
||||
return srtp_err_status_algo_fail;
|
||||
|
||||
return srtp_err_status_ok;
|
||||
}
|
||||
|
||||
/*
|
||||
* runs[i] holds the number of runs of size (i-1)
|
||||
*/
|
||||
|
||||
srtp_err_status_t stat_test_runs(uint8_t *data)
|
||||
{
|
||||
uint8_t *data_end = data + STAT_TEST_DATA_LEN;
|
||||
uint16_t runs[6] = { 0, 0, 0, 0, 0, 0 };
|
||||
uint16_t gaps[6] = { 0, 0, 0, 0, 0, 0 };
|
||||
uint16_t lo_value[6] = { 2315, 1114, 527, 240, 103, 103 };
|
||||
uint16_t hi_value[6] = { 2685, 1386, 723, 384, 209, 209 };
|
||||
int state = 0;
|
||||
uint16_t mask;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* the state variable holds the number of bits in the
|
||||
* current run (or gap, if negative)
|
||||
*/
|
||||
|
||||
while (data < data_end) {
|
||||
/* loop over the bits of this byte */
|
||||
for (mask = 1; mask < 256; mask <<= 1) {
|
||||
if (*data & mask) {
|
||||
/* next bit is a one */
|
||||
if (state > 0) {
|
||||
/* prefix is a run, so increment the run-count */
|
||||
state++;
|
||||
|
||||
/* check for long runs */
|
||||
if (state > 25) {
|
||||
debug_print(srtp_mod_stat, ">25 runs: %d", state);
|
||||
return srtp_err_status_algo_fail;
|
||||
}
|
||||
|
||||
} else if (state < 0) {
|
||||
/* prefix is a gap */
|
||||
if (state < -25) {
|
||||
debug_print(srtp_mod_stat, ">25 gaps: %d", state);
|
||||
return srtp_err_status_algo_fail; /* long-runs test
|
||||
failed */
|
||||
}
|
||||
if (state < -6) {
|
||||
state = -6; /* group together gaps > 5 */
|
||||
}
|
||||
gaps[-1 - state]++; /* increment gap count */
|
||||
state = 1; /* set state at one set bit */
|
||||
} else {
|
||||
/* state is zero; this happens only at initialization */
|
||||
state = 1;
|
||||
}
|
||||
} else {
|
||||
/* next bit is a zero */
|
||||
if (state > 0) {
|
||||
/* prefix is a run */
|
||||
if (state > 25) {
|
||||
debug_print(srtp_mod_stat, ">25 runs (2): %d", state);
|
||||
return srtp_err_status_algo_fail; /* long-runs test
|
||||
failed */
|
||||
}
|
||||
if (state > 6) {
|
||||
state = 6; /* group together runs > 5 */
|
||||
}
|
||||
runs[state - 1]++; /* increment run count */
|
||||
state = -1; /* set state at one zero bit */
|
||||
} else if (state < 0) {
|
||||
/* prefix is a gap, so increment gap-count (decrement state)
|
||||
*/
|
||||
state--;
|
||||
|
||||
/* check for long gaps */
|
||||
if (state < -25) {
|
||||
debug_print(srtp_mod_stat, ">25 gaps (2): %d", state);
|
||||
return srtp_err_status_algo_fail;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* state is zero; this happens only at initialization */
|
||||
state = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* move along to next octet */
|
||||
data++;
|
||||
}
|
||||
|
||||
if (srtp_mod_stat.on) {
|
||||
debug_print(srtp_mod_stat, "runs test", NULL);
|
||||
for (i = 0; i < 6; i++)
|
||||
debug_print(srtp_mod_stat, " runs[]: %d", runs[i]);
|
||||
for (i = 0; i < 6; i++)
|
||||
debug_print(srtp_mod_stat, " gaps[]: %d", gaps[i]);
|
||||
}
|
||||
|
||||
/* check run and gap counts against the fixed limits */
|
||||
for (i = 0; i < 6; i++)
|
||||
if ((runs[i] < lo_value[i]) || (runs[i] > hi_value[i]) ||
|
||||
(gaps[i] < lo_value[i]) || (gaps[i] > hi_value[i]))
|
||||
return srtp_err_status_algo_fail;
|
||||
|
||||
return srtp_err_status_ok;
|
||||
}
|
||||
104
third_party/libsrtp/src/crypto/replay/ut_sim.c
vendored
Normal file
104
third_party/libsrtp/src/crypto/replay/ut_sim.c
vendored
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* ut_sim.c
|
||||
*
|
||||
* an unreliable transport simulator
|
||||
* (for testing replay databases and suchlike)
|
||||
*
|
||||
* David A. McGrew
|
||||
* Cisco Systems, Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2001-2017, Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "ut_sim.h"
|
||||
|
||||
int ut_compar(const void *a, const void *b)
|
||||
{
|
||||
return rand() > (RAND_MAX / 2) ? -1 : 1;
|
||||
}
|
||||
|
||||
void ut_init(ut_connection *utc)
|
||||
{
|
||||
int i;
|
||||
utc->index = 0;
|
||||
|
||||
for (i = 0; i < UT_BUF; i++)
|
||||
utc->buffer[i] = i;
|
||||
|
||||
qsort(utc->buffer, UT_BUF, sizeof(uint32_t), ut_compar);
|
||||
|
||||
utc->index = UT_BUF - 1;
|
||||
}
|
||||
|
||||
uint32_t ut_next_index(ut_connection *utc)
|
||||
{
|
||||
uint32_t tmp;
|
||||
|
||||
tmp = utc->buffer[0];
|
||||
utc->index++;
|
||||
utc->buffer[0] = utc->index;
|
||||
|
||||
qsort(utc->buffer, UT_BUF, sizeof(uint32_t), ut_compar);
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
#ifdef UT_TEST
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
uint32_t i, irecvd, idiff;
|
||||
ut_connection utc;
|
||||
|
||||
ut_init(&utc);
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
irecvd = ut_next_index(&utc);
|
||||
idiff = i - irecvd;
|
||||
printf("%lu\t%lu\t%d\n", i, irecvd, idiff);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
258
third_party/libsrtp/src/crypto/test/stat_driver.c
vendored
Normal file
258
third_party/libsrtp/src/crypto/test/stat_driver.c
vendored
Normal file
|
|
@ -0,0 +1,258 @@
|
|||
/*
|
||||
* stat-driver.c
|
||||
*
|
||||
* test driver for the stat_test functions
|
||||
*
|
||||
* David A. McGrew
|
||||
* Cisco Systems, Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2001-2017, Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h> /* for printf() */
|
||||
|
||||
#include "err.h"
|
||||
#include "stat.h"
|
||||
#include "srtp.h"
|
||||
|
||||
#include "cipher.h"
|
||||
|
||||
typedef struct {
|
||||
void *state;
|
||||
} random_source_t;
|
||||
|
||||
srtp_err_status_t random_source_alloc(void);
|
||||
|
||||
void err_check(srtp_err_status_t s)
|
||||
{
|
||||
if (s) {
|
||||
printf("error (code %d)\n", s);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
uint8_t buffer[2532];
|
||||
unsigned int buf_len = 2500;
|
||||
int i, j;
|
||||
extern srtp_cipher_type_t srtp_aes_icm_128;
|
||||
extern srtp_cipher_type_t srtp_aes_icm_256;
|
||||
#ifdef GCM
|
||||
extern srtp_cipher_type_t srtp_aes_gcm_128;
|
||||
extern srtp_cipher_type_t srtp_aes_gcm_256;
|
||||
#endif
|
||||
srtp_cipher_t *c;
|
||||
/* clang-format off */
|
||||
uint8_t key[46] = {
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05
|
||||
};
|
||||
/* clang-format on */
|
||||
v128_t nonce;
|
||||
int num_trials = 500;
|
||||
int num_fail;
|
||||
|
||||
printf("statistical tests driver\n");
|
||||
|
||||
v128_set_to_zero(&nonce);
|
||||
for (i = 0; i < 2500; i++)
|
||||
buffer[i] = 0;
|
||||
|
||||
/* run tests */
|
||||
printf("running stat_tests on all-null buffer, expecting failure\n");
|
||||
printf("monobit %d\n", stat_test_monobit(buffer));
|
||||
printf("poker %d\n", stat_test_poker(buffer));
|
||||
printf("runs %d\n", stat_test_runs(buffer));
|
||||
|
||||
for (i = 0; i < 2500; i++)
|
||||
buffer[i] = rand();
|
||||
printf("running stat_tests on rand(), expecting success\n");
|
||||
printf("monobit %d\n", stat_test_monobit(buffer));
|
||||
printf("poker %d\n", stat_test_poker(buffer));
|
||||
printf("runs %d\n", stat_test_runs(buffer));
|
||||
|
||||
printf("running stat_tests on AES-128-ICM, expecting success\n");
|
||||
/* set buffer to cipher output */
|
||||
for (i = 0; i < 2500; i++)
|
||||
buffer[i] = 0;
|
||||
err_check(srtp_cipher_type_alloc(&srtp_aes_icm_128, &c,
|
||||
SRTP_AES_ICM_128_KEY_LEN_WSALT, 0));
|
||||
err_check(srtp_cipher_init(c, key));
|
||||
err_check(srtp_cipher_set_iv(c, (uint8_t *)&nonce, srtp_direction_encrypt));
|
||||
err_check(srtp_cipher_encrypt(c, buffer, &buf_len));
|
||||
/* run tests on cipher outout */
|
||||
printf("monobit %d\n", stat_test_monobit(buffer));
|
||||
printf("poker %d\n", stat_test_poker(buffer));
|
||||
printf("runs %d\n", stat_test_runs(buffer));
|
||||
|
||||
printf("runs test (please be patient): ");
|
||||
fflush(stdout);
|
||||
num_fail = 0;
|
||||
v128_set_to_zero(&nonce);
|
||||
for (j = 0; j < num_trials; j++) {
|
||||
for (i = 0; i < 2500; i++)
|
||||
buffer[i] = 0;
|
||||
nonce.v32[3] = i;
|
||||
err_check(
|
||||
srtp_cipher_set_iv(c, (uint8_t *)&nonce, srtp_direction_encrypt));
|
||||
err_check(srtp_cipher_encrypt(c, buffer, &buf_len));
|
||||
if (stat_test_runs(buffer)) {
|
||||
num_fail++;
|
||||
}
|
||||
}
|
||||
|
||||
printf("%d failures in %d tests\n", num_fail, num_trials);
|
||||
printf("(nota bene: a small fraction of stat_test failures does not \n"
|
||||
"indicate that the random source is invalid)\n");
|
||||
|
||||
err_check(srtp_cipher_dealloc(c));
|
||||
|
||||
printf("running stat_tests on AES-256-ICM, expecting success\n");
|
||||
/* set buffer to cipher output */
|
||||
for (i = 0; i < 2500; i++)
|
||||
buffer[i] = 0;
|
||||
err_check(srtp_cipher_type_alloc(&srtp_aes_icm_256, &c,
|
||||
SRTP_AES_ICM_256_KEY_LEN_WSALT, 0));
|
||||
err_check(srtp_cipher_init(c, key));
|
||||
err_check(srtp_cipher_set_iv(c, (uint8_t *)&nonce, srtp_direction_encrypt));
|
||||
err_check(srtp_cipher_encrypt(c, buffer, &buf_len));
|
||||
/* run tests on cipher outout */
|
||||
printf("monobit %d\n", stat_test_monobit(buffer));
|
||||
printf("poker %d\n", stat_test_poker(buffer));
|
||||
printf("runs %d\n", stat_test_runs(buffer));
|
||||
|
||||
printf("runs test (please be patient): ");
|
||||
fflush(stdout);
|
||||
num_fail = 0;
|
||||
v128_set_to_zero(&nonce);
|
||||
for (j = 0; j < num_trials; j++) {
|
||||
for (i = 0; i < 2500; i++)
|
||||
buffer[i] = 0;
|
||||
nonce.v32[3] = i;
|
||||
err_check(
|
||||
srtp_cipher_set_iv(c, (uint8_t *)&nonce, srtp_direction_encrypt));
|
||||
err_check(srtp_cipher_encrypt(c, buffer, &buf_len));
|
||||
if (stat_test_runs(buffer)) {
|
||||
num_fail++;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef GCM
|
||||
{
|
||||
printf("running stat_tests on AES-128-GCM, expecting success\n");
|
||||
/* set buffer to cipher output */
|
||||
for (i = 0; i < 2500; i++) {
|
||||
buffer[i] = 0;
|
||||
}
|
||||
err_check(srtp_cipher_type_alloc(&srtp_aes_gcm_128, &c,
|
||||
SRTP_AES_GCM_128_KEY_LEN_WSALT, 8));
|
||||
err_check(srtp_cipher_init(c, key));
|
||||
err_check(
|
||||
srtp_cipher_set_iv(c, (uint8_t *)&nonce, srtp_direction_encrypt));
|
||||
err_check(srtp_cipher_encrypt(c, buffer, &buf_len));
|
||||
/* run tests on cipher outout */
|
||||
printf("monobit %d\n", stat_test_monobit(buffer));
|
||||
printf("poker %d\n", stat_test_poker(buffer));
|
||||
printf("runs %d\n", stat_test_runs(buffer));
|
||||
fflush(stdout);
|
||||
num_fail = 0;
|
||||
v128_set_to_zero(&nonce);
|
||||
for (j = 0; j < num_trials; j++) {
|
||||
for (i = 0; i < 2500; i++) {
|
||||
buffer[i] = 0;
|
||||
}
|
||||
nonce.v32[3] = i;
|
||||
err_check(srtp_cipher_set_iv(c, (uint8_t *)&nonce,
|
||||
srtp_direction_encrypt));
|
||||
err_check(srtp_cipher_encrypt(c, buffer, &buf_len));
|
||||
buf_len = 2500;
|
||||
if (stat_test_runs(buffer)) {
|
||||
num_fail++;
|
||||
}
|
||||
}
|
||||
|
||||
printf("running stat_tests on AES-256-GCM, expecting success\n");
|
||||
/* set buffer to cipher output */
|
||||
for (i = 0; i < 2500; i++) {
|
||||
buffer[i] = 0;
|
||||
}
|
||||
err_check(srtp_cipher_type_alloc(&srtp_aes_gcm_256, &c,
|
||||
SRTP_AES_GCM_256_KEY_LEN_WSALT, 16));
|
||||
err_check(srtp_cipher_init(c, key));
|
||||
err_check(
|
||||
srtp_cipher_set_iv(c, (uint8_t *)&nonce, srtp_direction_encrypt));
|
||||
err_check(srtp_cipher_encrypt(c, buffer, &buf_len));
|
||||
/* run tests on cipher outout */
|
||||
printf("monobit %d\n", stat_test_monobit(buffer));
|
||||
printf("poker %d\n", stat_test_poker(buffer));
|
||||
printf("runs %d\n", stat_test_runs(buffer));
|
||||
fflush(stdout);
|
||||
num_fail = 0;
|
||||
v128_set_to_zero(&nonce);
|
||||
for (j = 0; j < num_trials; j++) {
|
||||
for (i = 0; i < 2500; i++) {
|
||||
buffer[i] = 0;
|
||||
}
|
||||
nonce.v32[3] = i;
|
||||
err_check(srtp_cipher_set_iv(c, (uint8_t *)&nonce,
|
||||
srtp_direction_encrypt));
|
||||
err_check(srtp_cipher_encrypt(c, buffer, &buf_len));
|
||||
buf_len = 2500;
|
||||
if (stat_test_runs(buffer)) {
|
||||
num_fail++;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
printf("%d failures in %d tests\n", num_fail, num_trials);
|
||||
printf("(nota bene: a small fraction of stat_test failures does not \n"
|
||||
"indicate that the random source is invalid)\n");
|
||||
|
||||
err_check(srtp_cipher_dealloc(c));
|
||||
|
||||
return 0;
|
||||
}
|
||||
6
third_party/libsrtp/src/include/config.h
vendored
Normal file
6
third_party/libsrtp/src/include/config.h
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
/* empty file; config done via Makefile.in & configure.in */
|
||||
181
third_party/libsrtp/src/include/ekt.h
vendored
Normal file
181
third_party/libsrtp/src/include/ekt.h
vendored
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
/*
|
||||
* ekt.h
|
||||
*
|
||||
* interface to Encrypted Key Transport for SRTP
|
||||
*
|
||||
* David McGrew
|
||||
* Cisco Systems, Inc.
|
||||
*/
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2001-2017 Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* EKT implementation strategy
|
||||
*
|
||||
* use stream_template approach
|
||||
*
|
||||
* in srtp_unprotect, when a new stream appears, check if template has
|
||||
* EKT defined, and if it does, then apply EKT processing
|
||||
*
|
||||
* question: will we want to allow key-sharing templates in addition
|
||||
* to EKT templates? could define a new ssrc_type_t that's associated
|
||||
* with an EKT, e.g. ssrc_any_ekt.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SRTP_EKT_H
|
||||
#define SRTP_EKT_H
|
||||
|
||||
// left in commented out as reminder to not include private headers
|
||||
//#include "srtp_priv.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SRTP_EKT_CIPHER_DEFAULT 1
|
||||
#define SRTP_EKT_CIPHER_AES_128_ECB 1
|
||||
#define SRTP_EKT_CIPHER_AES_192_KEY_WRAP 2
|
||||
#define SRTP_EKT_CIPHER_AES_256_KEY_WRAP 3
|
||||
|
||||
typedef uint16_t srtp_ekt_spi_t;
|
||||
|
||||
unsigned srtp_ekt_octets_after_base_tag(srtp_ekt_stream_t ekt);
|
||||
|
||||
/*
|
||||
* an srtp_policy_t structure can contain a pointer to an
|
||||
* srtp_ekt_policy_t structure
|
||||
*
|
||||
* this structure holds all of the high level EKT information, and it
|
||||
* is passed into libsrtp to indicate what policy should be in effect
|
||||
*/
|
||||
|
||||
typedef struct srtp_ekt_policy_ctx_t {
|
||||
srtp_ekt_spi_t spi; /* security parameter index */
|
||||
uint8_t ekt_cipher_type;
|
||||
uint8_t *ekt_key;
|
||||
struct srtp_ekt_policy_ctx_t *next_ekt_policy;
|
||||
} srtp_ekt_policy_ctx_t;
|
||||
|
||||
/*
|
||||
* an srtp_ekt_data_t structure holds the data corresponding to an ekt key,
|
||||
* spi, and so on
|
||||
*/
|
||||
|
||||
typedef struct srtp_ekt_data_t {
|
||||
srtp_ekt_spi_t spi;
|
||||
uint8_t ekt_cipher_type;
|
||||
srtp_aes_expanded_key_t ekt_enc_key;
|
||||
srtp_aes_expanded_key_t ekt_dec_key;
|
||||
struct ekt_data_t *next_ekt_data;
|
||||
} srtp_ekt_data_t;
|
||||
|
||||
/*
|
||||
* an srtp_stream_ctx_t can contain an srtp_ekt_stream_ctx_t
|
||||
*
|
||||
* an srtp_ekt_stream_ctx_t structure holds all of the EKT information for
|
||||
* a specific SRTP stream
|
||||
*/
|
||||
|
||||
typedef struct srtp_ekt_stream_ctx_t {
|
||||
srtp_ekt_data_t *data;
|
||||
uint16_t isn; /* initial sequence number */
|
||||
uint8_t encrypted_master_key[SRTP_MAX_KEY_LEN];
|
||||
} srtp_ekt_stream_ctx_t;
|
||||
|
||||
srtp_err_status_t srtp_ekt_alloc(srtp_ekt_stream_t *stream_data,
|
||||
srtp_ekt_policy_t policy);
|
||||
|
||||
srtp_err_status_t srtp_ekt_stream_init(srtp_ekt_stream_t e,
|
||||
srtp_ekt_spi_t spi,
|
||||
void *ekt_key,
|
||||
unsigned ekt_cipher_type);
|
||||
|
||||
srtp_err_status_t srtp_ekt_stream_init_from_policy(srtp_ekt_stream_t e,
|
||||
srtp_ekt_policy_t p);
|
||||
|
||||
srtp_err_status_t srtp_stream_init_from_ekt(srtp_stream_t stream,
|
||||
const void *srtcp_hdr,
|
||||
unsigned pkt_octet_len);
|
||||
|
||||
void srtp_ekt_write_data(srtp_ekt_stream_t ekt,
|
||||
uint8_t *base_tag,
|
||||
unsigned base_tag_len,
|
||||
int *packet_len,
|
||||
srtp_xtd_seq_num_t pkt_index);
|
||||
|
||||
/*
|
||||
* We handle EKT by performing some additional steps before
|
||||
* authentication (copying the auth tag into a temporary location,
|
||||
* zeroizing the "base tag" field in the packet)
|
||||
*
|
||||
* With EKT, the tag_len parameter is actually the base tag
|
||||
* length
|
||||
*/
|
||||
srtp_err_status_t srtp_ekt_tag_verification_preproces(uint8_t *pkt_tag,
|
||||
uint8_t *pkt_tag_copy,
|
||||
unsigned tag_len);
|
||||
|
||||
srtp_err_status_t srtp_ekt_tag_verification_postproces(uint8_t *pkt_tag,
|
||||
uint8_t *pkt_tag_copy,
|
||||
unsigned tag_len);
|
||||
|
||||
/*
|
||||
* @brief EKT pre-processing for srtcp tag generation
|
||||
*
|
||||
* This function does the pre-processing of the SRTCP authentication
|
||||
* tag format. When EKT is used, it consists of writing the Encrypted
|
||||
* Master Key, the SRTP ROC, the Initial Sequence Number, and SPI
|
||||
* fields. The Base Authentication Tag field is set to the all-zero
|
||||
* value
|
||||
*
|
||||
* When EKT is not used, this function is a no-op.
|
||||
*
|
||||
*/
|
||||
srtp_err_status_t srtp_stream_srtcp_auth_tag_generation_preprocess(
|
||||
const srtp_stream_t *s,
|
||||
uint8_t *pkt_tag,
|
||||
unsigned pkt_octet_len);
|
||||
|
||||
/* it's not clear that a tag_generation_postprocess function is needed */
|
||||
srtp_err_status_t srtcp_auth_tag_generation_postprocess(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* SRTP_EKT_H */
|
||||
67
third_party/libsrtp/src/include/getopt_s.h
vendored
Normal file
67
third_party/libsrtp/src/include/getopt_s.h
vendored
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* getopt.h
|
||||
*
|
||||
* interface to a minimal implementation of the getopt() function,
|
||||
* written so that test applications that use that function can run on
|
||||
* non-POSIX platforms
|
||||
*
|
||||
*/
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2001-2017 Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GETOPT_S_H
|
||||
#define GETOPT_S_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* getopt_s(), optarg_s, and optind_s are small, locally defined
|
||||
* versions of the POSIX standard getopt() interface.
|
||||
*/
|
||||
|
||||
int getopt_s(int argc, char *const argv[], const char *optstring);
|
||||
|
||||
extern char *optarg_s; /* defined in getopt.c */
|
||||
|
||||
extern int optind_s; /* defined in getopt.c */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GETOPT_S_H */
|
||||
83
third_party/libsrtp/src/include/ut_sim.h
vendored
Normal file
83
third_party/libsrtp/src/include/ut_sim.h
vendored
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* ut-sim.h
|
||||
*
|
||||
* an unreliable transport simulator
|
||||
* (for testing replay databases and suchlike)
|
||||
*
|
||||
* David A. McGrew
|
||||
* Cisco Systems, Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2001-2017, Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef UT_SIM_H
|
||||
#define UT_SIM_H
|
||||
|
||||
#include "integers.h" /* for uint32_t */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define UT_BUF 160 /* maximum amount of packet reorder */
|
||||
|
||||
typedef struct {
|
||||
uint32_t index;
|
||||
uint32_t buffer[UT_BUF];
|
||||
} ut_connection;
|
||||
|
||||
/*
|
||||
* ut_init(&u) initializes the ut_connection
|
||||
*
|
||||
* this function should always be the first one called on a new
|
||||
* ut_connection
|
||||
*/
|
||||
|
||||
void ut_init(ut_connection *utc);
|
||||
|
||||
/*
|
||||
* ut_next_index(&u) returns the next index from the simulated
|
||||
* unreliable connection
|
||||
*/
|
||||
|
||||
uint32_t ut_next_index(ut_connection *utc);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* UT_SIM_H */
|
||||
1
third_party/libsrtp/src/moz.build
vendored
1
third_party/libsrtp/src/moz.build
vendored
|
|
@ -24,6 +24,7 @@ UNIFIED_SOURCES += [
|
|||
'crypto/math/datatypes.c',
|
||||
'crypto/replay/rdb.c',
|
||||
'crypto/replay/rdbx.c',
|
||||
'crypto/replay/ut_sim.c',
|
||||
'srtp/srtp.c',
|
||||
]
|
||||
|
||||
|
|
|
|||
281
third_party/libsrtp/src/srtp/ekt.c
vendored
Normal file
281
third_party/libsrtp/src/srtp/ekt.c
vendored
Normal file
|
|
@ -0,0 +1,281 @@
|
|||
/*
|
||||
* ekt.c
|
||||
*
|
||||
* Encrypted Key Transport for SRTP
|
||||
*
|
||||
* David McGrew
|
||||
* Cisco Systems, Inc.
|
||||
*/
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2001-2017 Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "srtp_priv.h"
|
||||
#include "err.h"
|
||||
#include "ekt.h"
|
||||
|
||||
extern srtp_debug_module_t mod_srtp;
|
||||
|
||||
/*
|
||||
* The EKT Authentication Tag format.
|
||||
*
|
||||
* 0 1 2 3
|
||||
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* : Base Authentication Tag :
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* : Encrypted Master Key :
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | Rollover Counter |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | Initial Sequence Number | Security Parameter Index |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
*
|
||||
*/
|
||||
|
||||
#define EKT_OCTETS_AFTER_BASE_TAG 24
|
||||
#define EKT_OCTETS_AFTER_EMK 8
|
||||
#define EKT_OCTETS_AFTER_ROC 4
|
||||
#define EKT_SPI_LEN 2
|
||||
|
||||
unsigned srtp_ekt_octets_after_base_tag(srtp_ekt_stream_t ekt)
|
||||
{
|
||||
/*
|
||||
* if the pointer ekt is NULL, then EKT is not in effect, so we
|
||||
* indicate this by returning zero
|
||||
*/
|
||||
if (!ekt)
|
||||
return 0;
|
||||
|
||||
switch (ekt->data->ekt_cipher_type) {
|
||||
case SRTP_EKT_CIPHER_AES_128_ECB:
|
||||
return 16 + EKT_OCTETS_AFTER_EMK;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline srtp_ekt_spi_t srtcp_packet_get_ekt_spi(
|
||||
const uint8_t *packet_start,
|
||||
unsigned pkt_octet_len)
|
||||
{
|
||||
const uint8_t *spi_location;
|
||||
|
||||
spi_location = packet_start + (pkt_octet_len - EKT_SPI_LEN);
|
||||
|
||||
return *((const srtp_ekt_spi_t *)spi_location);
|
||||
}
|
||||
|
||||
static inline uint32_t srtcp_packet_get_ekt_roc(const uint8_t *packet_start,
|
||||
unsigned pkt_octet_len)
|
||||
{
|
||||
const uint8_t *roc_location;
|
||||
|
||||
roc_location = packet_start + (pkt_octet_len - EKT_OCTETS_AFTER_ROC);
|
||||
|
||||
return *((const uint32_t *)roc_location);
|
||||
}
|
||||
|
||||
static inline const uint8_t *srtcp_packet_get_emk_location(
|
||||
const uint8_t *packet_start,
|
||||
unsigned pkt_octet_len)
|
||||
{
|
||||
const uint8_t *location;
|
||||
|
||||
location = packet_start + (pkt_octet_len - EKT_OCTETS_AFTER_BASE_TAG);
|
||||
|
||||
return location;
|
||||
}
|
||||
|
||||
srtp_err_status_t srtp_ekt_alloc(srtp_ekt_stream_t *stream_data,
|
||||
srtp_ekt_policy_t policy)
|
||||
{
|
||||
/*
|
||||
* if the policy pointer is NULL, then EKT is not in use
|
||||
* so we just set the EKT stream data pointer to NULL
|
||||
*/
|
||||
if (!policy) {
|
||||
*stream_data = NULL;
|
||||
return srtp_err_status_ok;
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
*stream_data = NULL;
|
||||
|
||||
return srtp_err_status_ok;
|
||||
}
|
||||
|
||||
srtp_err_status_t srtp_ekt_stream_init_from_policy(
|
||||
srtp_ekt_stream_t stream_data,
|
||||
srtp_ekt_policy_t policy)
|
||||
{
|
||||
if (!stream_data)
|
||||
return srtp_err_status_ok;
|
||||
|
||||
return srtp_err_status_ok;
|
||||
}
|
||||
|
||||
void aes_decrypt_with_raw_key(void *ciphertext, const void *key, int key_len)
|
||||
{
|
||||
#ifndef GCM
|
||||
// FIXME: need to get this working through the crypto module interface
|
||||
srtp_aes_expanded_key_t expanded_key;
|
||||
|
||||
srtp_aes_expand_decryption_key(key, key_len, &expanded_key);
|
||||
srtp_aes_decrypt(ciphertext, &expanded_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* The function srtp_stream_init_from_ekt() initializes a stream using
|
||||
* the EKT data from an SRTCP trailer.
|
||||
*/
|
||||
|
||||
srtp_err_status_t srtp_stream_init_from_ekt(srtp_stream_t stream,
|
||||
const void *srtcp_hdr,
|
||||
unsigned pkt_octet_len)
|
||||
{
|
||||
srtp_err_status_t err;
|
||||
const uint8_t *master_key;
|
||||
srtp_policy_t srtp_policy;
|
||||
uint32_t roc;
|
||||
|
||||
/*
|
||||
* NOTE: at present, we only support a single ekt_policy at a time.
|
||||
*/
|
||||
if (stream->ekt->data->spi !=
|
||||
srtcp_packet_get_ekt_spi(srtcp_hdr, pkt_octet_len))
|
||||
return srtp_err_status_no_ctx;
|
||||
|
||||
if (stream->ekt->data->ekt_cipher_type != SRTP_EKT_CIPHER_AES_128_ECB)
|
||||
return srtp_err_status_bad_param;
|
||||
|
||||
/* decrypt the Encrypted Master Key field */
|
||||
master_key = srtcp_packet_get_emk_location(srtcp_hdr, pkt_octet_len);
|
||||
/* FIX!? This decrypts the master key in-place, and never uses it */
|
||||
/* FIX!? It's also passing to ekt_dec_key (which is an aes_expanded_key_t)
|
||||
* to a function which expects a raw (unexpanded) key */
|
||||
aes_decrypt_with_raw_key((void *)master_key,
|
||||
&stream->ekt->data->ekt_dec_key, 16);
|
||||
|
||||
/* set the SRTP ROC */
|
||||
roc = srtcp_packet_get_ekt_roc(srtcp_hdr, pkt_octet_len);
|
||||
err = srtp_rdbx_set_roc(&stream->rtp_rdbx, roc);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = srtp_stream_init(stream, &srtp_policy);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return srtp_err_status_ok;
|
||||
}
|
||||
|
||||
void srtp_ekt_write_data(srtp_ekt_stream_t ekt,
|
||||
uint8_t *base_tag,
|
||||
unsigned base_tag_len,
|
||||
int *packet_len,
|
||||
srtp_xtd_seq_num_t pkt_index)
|
||||
{
|
||||
uint32_t roc;
|
||||
uint16_t isn;
|
||||
unsigned emk_len;
|
||||
uint8_t *packet;
|
||||
|
||||
/* if the pointer ekt is NULL, then EKT is not in effect */
|
||||
if (!ekt) {
|
||||
debug_print(mod_srtp, "EKT not in use", NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
/* write zeros into the location of the base tag */
|
||||
octet_string_set_to_zero(base_tag, base_tag_len);
|
||||
packet = base_tag + base_tag_len;
|
||||
|
||||
/* copy encrypted master key into packet */
|
||||
emk_len = srtp_ekt_octets_after_base_tag(ekt);
|
||||
memcpy(packet, ekt->encrypted_master_key, emk_len);
|
||||
debug_print(mod_srtp, "writing EKT EMK: %s,",
|
||||
srtp_octet_string_hex_string(packet, emk_len));
|
||||
packet += emk_len;
|
||||
|
||||
/* copy ROC into packet */
|
||||
roc = (uint32_t)(pkt_index >> 16);
|
||||
*((uint32_t *)packet) = be32_to_cpu(roc);
|
||||
debug_print(mod_srtp, "writing EKT ROC: %s,",
|
||||
srtp_octet_string_hex_string(packet, sizeof(roc)));
|
||||
packet += sizeof(roc);
|
||||
|
||||
/* copy ISN into packet */
|
||||
isn = (uint16_t)pkt_index;
|
||||
*((uint16_t *)packet) = htons(isn);
|
||||
debug_print(mod_srtp, "writing EKT ISN: %s,",
|
||||
srtp_octet_string_hex_string(packet, sizeof(isn)));
|
||||
packet += sizeof(isn);
|
||||
|
||||
/* copy SPI into packet */
|
||||
*((uint16_t *)packet) = htons(ekt->data->spi);
|
||||
debug_print(mod_srtp, "writing EKT SPI: %s,",
|
||||
srtp_octet_string_hex_string(packet, sizeof(ekt->data->spi)));
|
||||
|
||||
/* increase packet length appropriately */
|
||||
*packet_len += EKT_OCTETS_AFTER_EMK + emk_len;
|
||||
}
|
||||
|
||||
/*
|
||||
* The function call srtcp_ekt_trailer(ekt, auth_len, auth_tag )
|
||||
*
|
||||
* If the pointer ekt is NULL, then the other inputs are unaffected.
|
||||
*
|
||||
* auth_tag is a pointer to the pointer to the location of the
|
||||
* authentication tag in the packet. If EKT is in effect, then the
|
||||
* auth_tag pointer is set to the location
|
||||
*/
|
||||
|
||||
void srtcp_ekt_trailer(srtp_ekt_stream_t ekt,
|
||||
unsigned *auth_len,
|
||||
void **auth_tag,
|
||||
void *tag_copy)
|
||||
{
|
||||
/*
|
||||
* if there is no EKT policy, then the other inputs are unaffected
|
||||
*/
|
||||
if (!ekt)
|
||||
return;
|
||||
|
||||
/* copy auth_tag into temporary location */
|
||||
}
|
||||
261
third_party/libsrtp/src/test/dtls_srtp_driver.c
vendored
Normal file
261
third_party/libsrtp/src/test/dtls_srtp_driver.c
vendored
Normal file
|
|
@ -0,0 +1,261 @@
|
|||
/*
|
||||
* dtls_srtp_driver.c
|
||||
*
|
||||
* test driver for DTLS-SRTP functions
|
||||
*
|
||||
* David McGrew
|
||||
* Cisco Systems, Inc.
|
||||
*/
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2001-2017 Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h> /* for printf() */
|
||||
#include "getopt_s.h" /* for local getopt() */
|
||||
#include "srtp_priv.h"
|
||||
|
||||
srtp_err_status_t test_dtls_srtp(void);
|
||||
|
||||
srtp_hdr_t *srtp_create_test_packet(int pkt_octet_len, uint32_t ssrc);
|
||||
|
||||
void usage(char *prog_name)
|
||||
{
|
||||
printf("usage: %s [ -t ][ -c ][ -v ][-d <debug_module> ]* [ -l ]\n"
|
||||
" -d <mod> turn on debugging module <mod>\n"
|
||||
" -l list debugging modules\n",
|
||||
prog_name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
unsigned do_list_mods = 0;
|
||||
int q;
|
||||
srtp_err_status_t err;
|
||||
|
||||
printf("dtls_srtp_driver\n");
|
||||
|
||||
/* initialize srtp library */
|
||||
err = srtp_init();
|
||||
if (err) {
|
||||
printf("error: srtp init failed with error code %d\n", err);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* process input arguments */
|
||||
while (1) {
|
||||
q = getopt_s(argc, argv, "ld:");
|
||||
if (q == -1)
|
||||
break;
|
||||
switch (q) {
|
||||
case 'l':
|
||||
do_list_mods = 1;
|
||||
break;
|
||||
case 'd':
|
||||
err = srtp_crypto_kernel_set_debug_module(optarg_s, 1);
|
||||
if (err) {
|
||||
printf("error: set debug module (%s) failed\n", optarg_s);
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
usage(argv[0]);
|
||||
}
|
||||
}
|
||||
|
||||
if (do_list_mods) {
|
||||
err = srtp_crypto_kernel_list_debug_modules();
|
||||
if (err) {
|
||||
printf("error: list of debug modules failed\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
printf("testing dtls_srtp...");
|
||||
err = test_dtls_srtp();
|
||||
if (err) {
|
||||
printf("\nerror (code %d)\n", err);
|
||||
exit(1);
|
||||
}
|
||||
printf("passed\n");
|
||||
|
||||
/* shut down srtp library */
|
||||
err = srtp_shutdown();
|
||||
if (err) {
|
||||
printf("error: srtp shutdown failed with error code %d\n", err);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
srtp_err_status_t test_dtls_srtp(void)
|
||||
{
|
||||
srtp_hdr_t *test_packet;
|
||||
int test_packet_len = 80;
|
||||
srtp_t s;
|
||||
srtp_policy_t policy;
|
||||
uint8_t key[SRTP_MAX_KEY_LEN];
|
||||
uint8_t salt[SRTP_MAX_KEY_LEN];
|
||||
unsigned int key_len, salt_len;
|
||||
srtp_profile_t profile;
|
||||
srtp_err_status_t err;
|
||||
|
||||
memset(&policy, 0x0, sizeof(srtp_policy_t));
|
||||
|
||||
/* create a 'null' SRTP session */
|
||||
err = srtp_create(&s, NULL);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/*
|
||||
* verify that packet-processing functions behave properly - we
|
||||
* expect that these functions will return srtp_err_status_no_ctx
|
||||
*/
|
||||
test_packet = srtp_create_test_packet(80, 0xa5a5a5a5);
|
||||
if (test_packet == NULL)
|
||||
return srtp_err_status_alloc_fail;
|
||||
|
||||
err = srtp_protect(s, test_packet, &test_packet_len);
|
||||
if (err != srtp_err_status_no_ctx) {
|
||||
printf("wrong return value from srtp_protect() (got code %d)\n", err);
|
||||
return srtp_err_status_fail;
|
||||
}
|
||||
|
||||
err = srtp_unprotect(s, test_packet, &test_packet_len);
|
||||
if (err != srtp_err_status_no_ctx) {
|
||||
printf("wrong return value from srtp_unprotect() (got code %d)\n", err);
|
||||
return srtp_err_status_fail;
|
||||
}
|
||||
|
||||
err = srtp_protect_rtcp(s, test_packet, &test_packet_len);
|
||||
if (err != srtp_err_status_no_ctx) {
|
||||
printf("wrong return value from srtp_protect_rtcp() (got code %d)\n",
|
||||
err);
|
||||
return srtp_err_status_fail;
|
||||
}
|
||||
|
||||
err = srtp_unprotect_rtcp(s, test_packet, &test_packet_len);
|
||||
if (err != srtp_err_status_no_ctx) {
|
||||
printf("wrong return value from srtp_unprotect_rtcp() (got code %d)\n",
|
||||
err);
|
||||
return srtp_err_status_fail;
|
||||
}
|
||||
|
||||
/*
|
||||
* set keys to known values for testing
|
||||
*/
|
||||
profile = srtp_profile_aes128_cm_sha1_80;
|
||||
key_len = srtp_profile_get_master_key_length(profile);
|
||||
salt_len = srtp_profile_get_master_salt_length(profile);
|
||||
memset(key, 0xff, key_len);
|
||||
memset(salt, 0xee, salt_len);
|
||||
srtp_append_salt_to_key(key, key_len, salt, salt_len);
|
||||
policy.key = key;
|
||||
|
||||
/* initialize SRTP policy from profile */
|
||||
err = srtp_crypto_policy_set_from_profile_for_rtp(&policy.rtp, profile);
|
||||
if (err)
|
||||
return err;
|
||||
err = srtp_crypto_policy_set_from_profile_for_rtcp(&policy.rtcp, profile);
|
||||
if (err)
|
||||
return err;
|
||||
policy.ssrc.type = ssrc_any_inbound;
|
||||
policy.ekt = NULL;
|
||||
policy.window_size = 128;
|
||||
policy.allow_repeat_tx = 0;
|
||||
policy.next = NULL;
|
||||
|
||||
err = srtp_add_stream(s, &policy);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = srtp_dealloc(s);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
free(test_packet);
|
||||
|
||||
return srtp_err_status_ok;
|
||||
}
|
||||
|
||||
/*
|
||||
* srtp_create_test_packet(len, ssrc) returns a pointer to a
|
||||
* (malloced) example RTP packet whose data field has the length given
|
||||
* by pkt_octet_len and the SSRC value ssrc. The total length of the
|
||||
* packet is twelve octets longer, since the header is at the
|
||||
* beginning. There is room at the end of the packet for a trailer,
|
||||
* and the four octets following the packet are filled with 0xff
|
||||
* values to enable testing for overwrites.
|
||||
*
|
||||
* note that the location of the test packet can (and should) be
|
||||
* deallocated with the free() call once it is no longer needed.
|
||||
*/
|
||||
|
||||
srtp_hdr_t *srtp_create_test_packet(int pkt_octet_len, uint32_t ssrc)
|
||||
{
|
||||
int i;
|
||||
uint8_t *buffer;
|
||||
srtp_hdr_t *hdr;
|
||||
int bytes_in_hdr = 12;
|
||||
|
||||
/* allocate memory for test packet */
|
||||
hdr = malloc(pkt_octet_len + bytes_in_hdr + SRTP_MAX_TRAILER_LEN + 4);
|
||||
if (!hdr)
|
||||
return NULL;
|
||||
|
||||
hdr->version = 2; /* RTP version two */
|
||||
hdr->p = 0; /* no padding needed */
|
||||
hdr->x = 0; /* no header extension */
|
||||
hdr->cc = 0; /* no CSRCs */
|
||||
hdr->m = 0; /* marker bit */
|
||||
hdr->pt = 0xf; /* payload type */
|
||||
hdr->seq = htons(0x1234); /* sequence number */
|
||||
hdr->ts = htonl(0xdecafbad); /* timestamp */
|
||||
hdr->ssrc = htonl(ssrc); /* synch. source */
|
||||
|
||||
buffer = (uint8_t *)hdr;
|
||||
buffer += bytes_in_hdr;
|
||||
|
||||
/* set RTP data to 0xab */
|
||||
for (i = 0; i < pkt_octet_len; i++)
|
||||
*buffer++ = 0xab;
|
||||
|
||||
/* set post-data value to 0xffff to enable overrun checking */
|
||||
for (i = 0; i < SRTP_MAX_TRAILER_LEN + 4; i++)
|
||||
*buffer++ = 0xff;
|
||||
|
||||
return hdr;
|
||||
}
|
||||
4
third_party/libsrtp/srtp_update.log
vendored
Normal file
4
third_party/libsrtp/srtp_update.log
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
srtp updated from CVS on Fri Sep 21 14:51:37 EDT 2012
|
||||
srtp updated to revision 8f38517394a45678cd4468febf69f75722f35d00 from git on Wed Nov 22 14:15:32 PST 2017
|
||||
srtp updated to revision bb0412ee84ebe3d2916b45b19de72fabb183d9db from git on Tue Sep 11 21:51:05 PDT 2018
|
||||
srtp updated to release 2.4.2 from github on Mon Feb 7 06:03:40 PM EST 2022
|
||||
Loading…
Reference in a new issue