From a99f06dfc6c3fdc45550cd3c0aa684665d898920 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Tue, 8 Jul 2014 10:25:52 -0400 Subject: [PATCH] sync changes from srtp upstream --- libs/srtp/README | 35 ++++++++---- libs/srtp/crypto/Makefile.in | 9 ++- libs/srtp/crypto/cipher/aes_icm.c | 8 ++- libs/srtp/crypto/cipher/null_cipher.c | 1 - libs/srtp/crypto/hash/null_auth.c | 1 - libs/srtp/crypto/include/aes_icm.h | 3 + libs/srtp/crypto/replay/ut_sim.c | 1 + libs/srtp/crypto/rng/ctr_prng.c | 4 +- libs/srtp/crypto/test/aes_calc.c | 2 +- libs/srtp/crypto/test/rand_gen_soak.c | 76 ++++++++++++++++++++++++++ libs/srtp/doc/libsrtp.pdf | Bin 234411 -> 234575 bytes libs/srtp/srtp/ekt.c | 1 - libs/srtp/srtp/srtp.c | 71 +++++++++++++----------- libs/srtp/test/rtpw_test_gcm.sh | 0 14 files changed, 156 insertions(+), 56 deletions(-) create mode 100644 libs/srtp/crypto/test/rand_gen_soak.c mode change 100644 => 100755 libs/srtp/test/rtpw_test_gcm.sh diff --git a/libs/srtp/README b/libs/srtp/README index 8ea9f72d08..97f382c42a 100644 --- a/libs/srtp/README +++ b/libs/srtp/README @@ -29,7 +29,7 @@ The configure script accepts the following options: --enable-openssl use OpenSSL crypto primitives --gdoi use GDOI key management (disabled at present) -By default, debbuging is enabled and stdout is used for debugging. +By default, debugging is enabled and stdout is used for debugging. You can use the above configure options to have the debugging output sent to syslog or the system console. Alternatively, you can define ERR_REPORTING_FILE in include/conf.h to be any other file that can be @@ -87,15 +87,30 @@ or rtpw -l which the dictionary will be sent, respectively. options: - -a use message authentication - -e use encryption (use 128, 192, or 256 for key size) - -g Use AES-GCM mode (must be used with -e) - -k sets the srtp master key - -s act as rtp sender - -r act as rtp receiver - -l list debug modules - -d turn on debugging for module - -i specify input/output file + + -s (s)rtp sender - causes app to send words + + -r (s)rtp receive - causes app to receive words + + -k use srtp master key , where the + key is a hexadecimal value (without the + leading "0x") + + -e encrypt/decrypt (for data confidentiality) + (requires use of -k option as well) + (use 128, 192, or 256 for keysize) + + -g use AES-GCM mode (must be used with -e) + + -a message authentication + (requires use of -k option as well) + + -l list debug modules + + -d turn on debugging for module + -i specify input/output file + (instead of using dictionary file) + In order to get random 30-byte values for use as key/salt pairs , you can use the following bash function to format the output of diff --git a/libs/srtp/crypto/Makefile.in b/libs/srtp/crypto/Makefile.in index c6248fcf63..c93d9b1672 100644 --- a/libs/srtp/crypto/Makefile.in +++ b/libs/srtp/crypto/Makefile.in @@ -40,15 +40,14 @@ endif dummy : all runtest # test applications - ifneq (1, $(USE_OPENSSL)) AES_CALC = test/aes_calc$(EXE) endif -testapp = #test/cipher_driver$(EXE) test/datatypes_driver$(EXE) \ - #test/stat_driver$(EXE) test/sha1_driver$(EXE) \ - #test/kernel_driver$(EXE) $(AES_CALC) test/rand_gen$(EXE) \ - #test/env$(EXE) +testapp = test/cipher_driver$(EXE) test/datatypes_driver$(EXE) \ + test/stat_driver$(EXE) test/sha1_driver$(EXE) \ + test/kernel_driver$(EXE) $(AES_CALC) test/rand_gen$(EXE) \ + test/env$(EXE) # data values used to test the aes_calc application for AES-128 k128=000102030405060708090a0b0c0d0e0f diff --git a/libs/srtp/crypto/cipher/aes_icm.c b/libs/srtp/crypto/cipher/aes_icm.c index 64eb51dee6..ef7545f283 100644 --- a/libs/srtp/crypto/cipher/aes_icm.c +++ b/libs/srtp/crypto/cipher/aes_icm.c @@ -395,7 +395,7 @@ aes_icm_encrypt_ismacryp(aes_icm_ctx_t *c, for (i=0; i < (bytes_to_encr/sizeof(v128_t)); i++) { /* fill buffer with new keystream */ - aes_icm_advance_ismacryp(c, (uint8_t)forIsmacryp); + aes_icm_advance_ismacryp(c, forIsmacryp); /* * add keystream into the data buffer (this would be a lot faster @@ -443,7 +443,7 @@ aes_icm_encrypt_ismacryp(aes_icm_ctx_t *c, if ((bytes_to_encr & 0xf) != 0) { /* fill buffer with new keystream */ - aes_icm_advance_ismacryp(c, (uint8_t)forIsmacryp); + aes_icm_advance_ismacryp(c, forIsmacryp); for (i=0; i < (bytes_to_encr & 0xf); i++) *buf++ ^= c->keystream_buffer.v8[i]; @@ -476,6 +476,10 @@ aes_icm_output(aes_icm_ctx_t *c, uint8_t *buffer, int num_octets_to_output) { return aes_icm_encrypt(c, buffer, &len); } +uint16_t +aes_icm_bytes_encrypted(aes_icm_ctx_t *c) { + return htons(c->counter.v16[7]); +} char aes_icm_description[] = "aes integer counter mode"; diff --git a/libs/srtp/crypto/cipher/null_cipher.c b/libs/srtp/crypto/cipher/null_cipher.c index b12b1bfe8f..68d7aa70f5 100644 --- a/libs/srtp/crypto/cipher/null_cipher.c +++ b/libs/srtp/crypto/cipher/null_cipher.c @@ -48,7 +48,6 @@ #include "null_cipher.h" #include "alloc.h" - /* the null_cipher uses the cipher debug module */ extern debug_module_t mod_cipher; diff --git a/libs/srtp/crypto/hash/null_auth.c b/libs/srtp/crypto/hash/null_auth.c index 5d810dd5b7..103444bc53 100644 --- a/libs/srtp/crypto/hash/null_auth.c +++ b/libs/srtp/crypto/hash/null_auth.c @@ -48,7 +48,6 @@ #include "null_auth.h" #include "alloc.h" - /* null_auth uses the auth debug module */ extern debug_module_t mod_auth; diff --git a/libs/srtp/crypto/include/aes_icm.h b/libs/srtp/crypto/include/aes_icm.h index bbcc6c3f5c..685a6d4c77 100644 --- a/libs/srtp/crypto/include/aes_icm.h +++ b/libs/srtp/crypto/include/aes_icm.h @@ -53,5 +53,8 @@ aes_icm_alloc_ismacryp(cipher_t **c, int key_len, int forIsmacryp); +uint16_t +aes_icm_bytes_encrypted(aes_icm_ctx_t *c); + #endif /* AES_ICM_H */ diff --git a/libs/srtp/crypto/replay/ut_sim.c b/libs/srtp/crypto/replay/ut_sim.c index 837aad7a3c..43c411e46b 100644 --- a/libs/srtp/crypto/replay/ut_sim.c +++ b/libs/srtp/crypto/replay/ut_sim.c @@ -47,6 +47,7 @@ #include "ut_sim.h" + int ut_compar(const void *a, const void *b) { return rand() > (RAND_MAX/2) ? -1 : 1; diff --git a/libs/srtp/crypto/rng/ctr_prng.c b/libs/srtp/crypto/rng/ctr_prng.c index 285124d415..69a1f37ab5 100644 --- a/libs/srtp/crypto/rng/ctr_prng.c +++ b/libs/srtp/crypto/rng/ctr_prng.c @@ -83,10 +83,8 @@ ctr_prng_get_octet_string(void *dest, uint32_t len) { /* * if we need to re-initialize the prng, do so now - * - * avoid 32-bit overflows by subtracting instead of adding */ - if (ctr_prng.octet_count > MAX_PRNG_OUT_LEN - len) { + if ((aes_icm_bytes_encrypted(&ctr_prng.state) + len) > 0xffff) { status = ctr_prng_init(ctr_prng.rand); if (status) return status; diff --git a/libs/srtp/crypto/test/aes_calc.c b/libs/srtp/crypto/test/aes_calc.c index fe3c6ad07d..d1e900876a 100644 --- a/libs/srtp/crypto/test/aes_calc.c +++ b/libs/srtp/crypto/test/aes_calc.c @@ -36,7 +36,7 @@ main (int argc, char *argv[]) { uint8_t key[AES_MAX_KEY_LEN]; aes_expanded_key_t exp_key; int key_len, len; - int verbose; + int verbose = 0; err_status_t status; if (argc == 3) { diff --git a/libs/srtp/crypto/test/rand_gen_soak.c b/libs/srtp/crypto/test/rand_gen_soak.c new file mode 100644 index 0000000000..81a640853c --- /dev/null +++ b/libs/srtp/crypto/test/rand_gen_soak.c @@ -0,0 +1,76 @@ +/* + * Soak test the RNG for exhaustion failures + */ +#include /* for printf() */ +#include /* for getopt() */ +#include "crypto_kernel.h" + +#define BUF_LEN (MAX_PRINT_STRING_LEN/2) + +int main(int argc, char *argv[]) +{ + int q; + extern char *optarg; + int num_octets = 0; + err_status_t status; + uint32_t iterations = 0; + int print_values = 0; + + if (argc == 1) { + exit(255); + } + + status = crypto_kernel_init(); + if (status) { + printf("error: crypto_kernel init failed\n"); + exit(1); + } + + while (1) { + q = getopt(argc, argv, "pvn:"); + if (q == -1) { + break; + } + switch (q) { + case 'p': + print_values = 1; + break; + case 'n': + num_octets = atoi(optarg); + if (num_octets < 0 || num_octets > BUF_LEN) { + exit(255); + } + break; + case 'v': + num_octets = 30; + print_values = 0; + break; + default: + exit(255); + } + } + + if (num_octets > 0) { + while (iterations < 300000) { + uint8_t buffer[BUF_LEN]; + + status = crypto_get_random(buffer, num_octets); + if (status) { + printf("iteration %d error: failure in random source\n", iterations); + exit(255); + } else if (print_values) { + printf("%s\n", octet_string_hex_string(buffer, num_octets)); + } + iterations++; + } + } + + status = crypto_kernel_shutdown(); + if (status) { + printf("error: crypto_kernel shutdown failed\n"); + exit(1); + } + + return 0; +} + diff --git a/libs/srtp/doc/libsrtp.pdf b/libs/srtp/doc/libsrtp.pdf index 578f0c643c5ffab2afb42f8276c02d57cdda6bc8..a0a11b7bdc4e3a05397e200890a800599d012c5f 100644 GIT binary patch delta 50924 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 ~j2v&MA(J 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 delta 50790 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≠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 diff --git a/libs/srtp/srtp/ekt.c b/libs/srtp/srtp/ekt.c index 1079809d8f..f7786c597f 100644 --- a/libs/srtp/srtp/ekt.c +++ b/libs/srtp/srtp/ekt.c @@ -47,7 +47,6 @@ #include "srtp_priv.h" #include "ekt.h" - extern debug_module_t mod_srtp; /* diff --git a/libs/srtp/srtp/srtp.c b/libs/srtp/srtp/srtp.c index 1f7ac1246a..e7f0b2394c 100644 --- a/libs/srtp/srtp/srtp.c +++ b/libs/srtp/srtp/srtp.c @@ -376,7 +376,7 @@ srtp_kdf_init(srtp_kdf_t *kdf, cipher_type_id_t cipher_id, const uint8_t *key, i err_status_t srtp_kdf_generate(srtp_kdf_t *kdf, srtp_prf_label label, - uint8_t *key, unsigned length) { + uint8_t *key, unsigned int length) { v128_t nonce; err_status_t status; @@ -841,11 +841,11 @@ static void srtp_calc_aead_iv(srtp_stream_ctx_t *stream, v128_t *iv, */ static err_status_t srtp_protect_aead (srtp_ctx_t *ctx, srtp_stream_ctx_t *stream, - void *rtp_hdr, int *pkt_octet_len) + void *rtp_hdr, unsigned int *pkt_octet_len) { srtp_hdr_t *hdr = (srtp_hdr_t*)rtp_hdr; uint32_t *enc_start; /* pointer to start of encrypted portion */ - unsigned enc_octet_len = 0; /* number of octets in encrypted portion */ + unsigned int enc_octet_len = 0; /* number of octets in encrypted portion */ xtd_seq_num_t est; /* estimated xtd_seq_num_t of *hdr */ int delta; /* delta of local pkt idx and that in hdr */ err_status_t status; @@ -886,10 +886,10 @@ srtp_protect_aead (srtp_ctx_t *ctx, srtp_stream_ctx_t *stream, srtp_hdr_xtnd_t *xtn_hdr = (srtp_hdr_xtnd_t*)enc_start; enc_start += (ntohs(xtn_hdr->length) + 1); } - if (!(enc_start < (uint32_t*)hdr + *pkt_octet_len)) + if (!((uint8_t*)enc_start < (uint8_t*)hdr + *pkt_octet_len)) return err_status_parse_err; enc_octet_len = (unsigned int)(*pkt_octet_len - - ((enc_start - (uint32_t*)hdr) << 2)); + ((uint8_t*)enc_start - (uint8_t*)hdr)); /* * estimate the packet index using the start of the replay window @@ -972,11 +972,11 @@ srtp_protect_aead (srtp_ctx_t *ctx, srtp_stream_ctx_t *stream, */ static err_status_t srtp_unprotect_aead (srtp_ctx_t *ctx, srtp_stream_ctx_t *stream, int delta, - xtd_seq_num_t est, void *srtp_hdr, int *pkt_octet_len) + xtd_seq_num_t est, void *srtp_hdr, unsigned int *pkt_octet_len) { srtp_hdr_t *hdr = (srtp_hdr_t*)srtp_hdr; uint32_t *enc_start; /* pointer to start of encrypted portion */ - unsigned enc_octet_len = 0; /* number of octets in encrypted portion */ + unsigned int enc_octet_len = 0; /* number of octets in encrypted portion */ v128_t iv; err_status_t status; int tag_len; @@ -1013,13 +1013,13 @@ srtp_unprotect_aead (srtp_ctx_t *ctx, srtp_stream_ctx_t *stream, int delta, srtp_hdr_xtnd_t *xtn_hdr = (srtp_hdr_xtnd_t*)enc_start; enc_start += (ntohs(xtn_hdr->length) + 1); } - if (!(enc_start < (uint32_t*)hdr + *pkt_octet_len)) + if (!((uint8_t*)enc_start < (uint8_t*)hdr + *pkt_octet_len)) return err_status_parse_err; /* * We pass the tag down to the cipher when doing GCM mode */ - enc_octet_len = (unsigned int) *pkt_octet_len - - ((enc_start - (uint32_t *)hdr) << 2); + enc_octet_len = (unsigned int)(*pkt_octet_len - + ((uint8_t*)enc_start - (uint8_t*)hdr)); /* * Sanity check the encrypted payload length against @@ -1131,7 +1131,7 @@ srtp_unprotect_aead (srtp_ctx_t *ctx, srtp_stream_ctx_t *stream, int delta, srtp_hdr_t *hdr = (srtp_hdr_t *)rtp_hdr; uint32_t *enc_start; /* pointer to start of encrypted portion */ uint32_t *auth_start; /* pointer to start of auth. portion */ - unsigned enc_octet_len = 0; /* number of octets in encrypted portion */ + unsigned int enc_octet_len = 0; /* number of octets in encrypted portion */ xtd_seq_num_t est; /* estimated xtd_seq_num_t of *hdr */ int delta; /* delta of local pkt idx and that in hdr */ uint8_t *auth_tag = NULL; /* location of auth_tag within packet */ @@ -1201,7 +1201,7 @@ srtp_unprotect_aead (srtp_ctx_t *ctx, srtp_stream_ctx_t *stream, int delta, */ if (stream->rtp_cipher->algorithm == AES_128_GCM || stream->rtp_cipher->algorithm == AES_256_GCM) { - return srtp_protect_aead(ctx, stream, rtp_hdr, pkt_octet_len); + return srtp_protect_aead(ctx, stream, rtp_hdr, (unsigned int*)pkt_octet_len); } /* @@ -1238,11 +1238,11 @@ srtp_unprotect_aead (srtp_ctx_t *ctx, srtp_stream_ctx_t *stream, int delta, if (hdr->x == 1) { srtp_hdr_xtnd_t *xtn_hdr = (srtp_hdr_xtnd_t *)enc_start; enc_start += (ntohs(xtn_hdr->length) + 1); - if (!(enc_start < (uint32_t*)hdr + *pkt_octet_len)) + if (!((uint8_t*)enc_start < (uint8_t*)hdr + *pkt_octet_len)) return err_status_parse_err; } - enc_octet_len = (unsigned int)(*pkt_octet_len - - ((enc_start - (uint32_t *)hdr) << 2)); + enc_octet_len = (unsigned int)(*pkt_octet_len - + ((uint8_t*)enc_start - (uint8_t*)hdr)); } else { enc_start = NULL; } @@ -1386,7 +1386,7 @@ srtp_unprotect(srtp_ctx_t *ctx, void *srtp_hdr, int *pkt_octet_len) { srtp_hdr_t *hdr = (srtp_hdr_t *)srtp_hdr; uint32_t *enc_start; /* pointer to start of encrypted portion */ uint32_t *auth_start; /* pointer to start of auth. portion */ - unsigned enc_octet_len = 0;/* number of octets in encrypted portion */ + unsigned int enc_octet_len = 0;/* number of octets in encrypted portion */ uint8_t *auth_tag = NULL; /* location of auth_tag within packet */ xtd_seq_num_t est; /* estimated xtd_seq_num_t of *hdr */ int delta; /* delta of local pkt idx and that in hdr */ @@ -1460,7 +1460,7 @@ srtp_unprotect(srtp_ctx_t *ctx, void *srtp_hdr, int *pkt_octet_len) { */ if (stream->rtp_cipher->algorithm == AES_128_GCM || stream->rtp_cipher->algorithm == AES_256_GCM) { - return srtp_unprotect_aead(ctx, stream, delta, est, srtp_hdr, pkt_octet_len); + return srtp_unprotect_aead(ctx, stream, delta, est, srtp_hdr, (unsigned int*)pkt_octet_len); } /* get tag length from stream */ @@ -1521,10 +1521,10 @@ srtp_unprotect(srtp_ctx_t *ctx, void *srtp_hdr, int *pkt_octet_len) { srtp_hdr_xtnd_t *xtn_hdr = (srtp_hdr_xtnd_t *)enc_start; enc_start += (ntohs(xtn_hdr->length) + 1); } - if (!(enc_start < (uint32_t*)hdr + *pkt_octet_len)) + if (!((uint8_t*)enc_start < (uint8_t*)hdr + *pkt_octet_len)) return err_status_parse_err; - enc_octet_len = (uint32_t)(*pkt_octet_len - tag_len - - ((enc_start - (uint32_t *)hdr) << 2)); + enc_octet_len = (uint32_t)(*pkt_octet_len - tag_len - + ((uint8_t*)enc_start - (uint8_t*)hdr)); } else { enc_start = NULL; } @@ -2210,12 +2210,12 @@ static void srtp_calc_aead_iv_srtcp(srtp_stream_ctx_t *stream, v128_t *iv, */ static err_status_t srtp_protect_rtcp_aead (srtp_t ctx, srtp_stream_ctx_t *stream, - void *rtcp_hdr, int *pkt_octet_len) + void *rtcp_hdr, unsigned int *pkt_octet_len) { srtcp_hdr_t *hdr = (srtcp_hdr_t*)rtcp_hdr; uint32_t *enc_start; /* pointer to start of encrypted portion */ uint32_t *trailer; /* pointer to start of trailer */ - unsigned enc_octet_len = 0; /* number of octets in encrypted portion */ + unsigned int enc_octet_len = 0; /* number of octets in encrypted portion */ uint8_t *auth_tag = NULL; /* location of auth_tag within packet */ err_status_t status; int tag_len; @@ -2333,7 +2333,7 @@ srtp_protect_rtcp_aead (srtp_t ctx, srtp_stream_ctx_t *stream, * Even though we're not encrypting the payload, we need * to run the cipher to get the auth tag. */ - unsigned nolen = 0; + unsigned int nolen = 0; status = cipher_encrypt(stream->rtcp_cipher, NULL, &nolen); if (status) { return err_status_cipher_fail; @@ -2363,12 +2363,12 @@ srtp_protect_rtcp_aead (srtp_t ctx, srtp_stream_ctx_t *stream, */ static err_status_t srtp_unprotect_rtcp_aead (srtp_t ctx, srtp_stream_ctx_t *stream, - void *srtcp_hdr, int *pkt_octet_len) + void *srtcp_hdr, unsigned int *pkt_octet_len) { srtcp_hdr_t *hdr = (srtcp_hdr_t*)srtcp_hdr; uint32_t *enc_start; /* pointer to start of encrypted portion */ uint32_t *trailer; /* pointer to start of trailer */ - unsigned enc_octet_len = 0; /* number of octets in encrypted portion */ + unsigned int enc_octet_len = 0; /* number of octets in encrypted portion */ uint8_t *auth_tag = NULL; /* location of auth_tag within packet */ err_status_t status; int tag_len; @@ -2543,7 +2543,7 @@ srtp_protect_rtcp(srtp_t ctx, void *rtcp_hdr, int *pkt_octet_len) { uint32_t *enc_start; /* pointer to start of encrypted portion */ uint32_t *auth_start; /* pointer to start of auth. portion */ uint32_t *trailer; /* pointer to start of trailer */ - unsigned enc_octet_len = 0;/* number of octets in encrypted portion */ + unsigned int enc_octet_len = 0;/* number of octets in encrypted portion */ uint8_t *auth_tag = NULL; /* location of auth_tag within packet */ err_status_t status; int tag_len; @@ -2607,7 +2607,7 @@ srtp_protect_rtcp(srtp_t ctx, void *rtcp_hdr, int *pkt_octet_len) { */ if (stream->rtp_cipher->algorithm == AES_128_GCM || stream->rtp_cipher->algorithm == AES_256_GCM) { - return srtp_protect_rtcp_aead(ctx, stream, rtcp_hdr, pkt_octet_len); + return srtp_protect_rtcp_aead(ctx, stream, rtcp_hdr, (unsigned int*)pkt_octet_len); } /* get tag length from stream context */ @@ -2740,12 +2740,12 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) { uint32_t *enc_start; /* pointer to start of encrypted portion */ uint32_t *auth_start; /* pointer to start of auth. portion */ uint32_t *trailer; /* pointer to start of trailer */ - unsigned enc_octet_len = 0;/* number of octets in encrypted portion */ + unsigned int enc_octet_len = 0;/* number of octets in encrypted portion */ uint8_t *auth_tag = NULL; /* location of auth_tag within packet */ uint8_t tmp_tag[SRTP_MAX_TAG_LEN]; uint8_t tag_copy[SRTP_MAX_TAG_LEN]; err_status_t status; - unsigned auth_len; + unsigned int auth_len; int tag_len; srtp_stream_ctx_t *stream; int prefix_len; @@ -2754,6 +2754,13 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) { int sec_serv_confidentiality; /* whether confidentiality was requested */ /* we assume the hdr is 32-bit aligned to start */ + + /* check that the length value is sane; we'll check again once we + know the tag length, but we at least want to know that it is + a positive value */ + if (*pkt_octet_len < octets_in_rtcp_header + sizeof(srtcp_trailer_t)) + return err_status_bad_param; + /* * look up ssrc in srtp_stream list, and process the packet with * the appropriate stream. if we haven't seen this stream before, @@ -2796,9 +2803,9 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) { /* check the packet length - it must contain at least a full RTCP header, an auth tag (if applicable), and the SRTCP encrypted flag and 31-bit index value */ - if (*pkt_octet_len < (octets_in_rtcp_header + tag_len + - sizeof(srtcp_trailer_t))) + if (*pkt_octet_len < (octets_in_rtcp_header + tag_len + sizeof(srtcp_trailer_t))) { return err_status_bad_param; + } /* * Check if this is an AEAD stream (GCM mode). If so, then dispatch @@ -2806,7 +2813,7 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) { */ if (stream->rtp_cipher->algorithm == AES_128_GCM || stream->rtp_cipher->algorithm == AES_256_GCM) { - return srtp_unprotect_rtcp_aead(ctx, stream, srtcp_hdr, pkt_octet_len); + return srtp_unprotect_rtcp_aead(ctx, stream, srtcp_hdr, (unsigned int*)pkt_octet_len); } sec_serv_confidentiality = stream->rtcp_services == sec_serv_conf || diff --git a/libs/srtp/test/rtpw_test_gcm.sh b/libs/srtp/test/rtpw_test_gcm.sh old mode 100644 new mode 100755