diff options
Diffstat (limited to 'googlepatches/vidyo-3-srtp-ws.patch')
-rw-r--r-- | googlepatches/vidyo-3-srtp-ws.patch | 937 |
1 files changed, 0 insertions, 937 deletions
diff --git a/googlepatches/vidyo-3-srtp-ws.patch b/googlepatches/vidyo-3-srtp-ws.patch deleted file mode 100644 index c8896e0..0000000 --- a/googlepatches/vidyo-3-srtp-ws.patch +++ /dev/null @@ -1,937 +0,0 @@ -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/crypto/include/crypto_math.h srtp/crypto/include/crypto_math.h ---- srtp-lin/crypto/include/crypto_math.h 2006-06-08 13:00:27.000000000 -0400 -+++ srtp/crypto/include/crypto_math.h 2009-04-22 19:03:15.000000000 -0400 -@@ -233,40 +233,6 @@ void - octet_string_set_to_zero(uint8_t *s, int len); - - --/* -- * functions manipulating bit_vector_t -- * -- * A bitvector_t consists of an array of words and an integer -- * representing the number of significant bits stored in the array. -- * The bits are packed as follows: the least significant bit is that -- * of word[0], while the most significant bit is the nth most -- * significant bit of word[m], where length = bits_per_word * m + n. -- * -- */ -- --#define bits_per_word 32 --#define bytes_per_word 4 -- --typedef struct { -- uint32_t length; -- uint32_t *word; --} bitvector_t; -- --int --bitvector_alloc(bitvector_t *v, unsigned long length); -- --void --bitvector_set_bit(bitvector_t *v, int bit_index); -- --int --bitvector_get_bit(const bitvector_t *v, int bit_index); -- --int --bitvector_print_hex(const bitvector_t *v, FILE *stream); -- --int --bitvector_set_from_hex(bitvector_t *v, char *string); -- - #endif /* MATH_H */ - - -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/crypto/include/datatypes.h srtp/crypto/include/datatypes.h ---- srtp-lin/crypto/include/datatypes.h 2006-07-12 18:41:57.000000000 -0400 -+++ srtp/crypto/include/datatypes.h 2009-04-22 19:20:01.000000000 -0400 -@@ -424,4 +424,83 @@ static inline uint64_t be64_to_cpu(uint6 - - #endif /* WORDS_BIGENDIAN */ - -+/* -+ * functions manipulating bitvector_t -+ * -+ * A bitvector_t consists of an array of words and an integer -+ * representing the number of significant bits stored in the array. -+ * The bits are packed as follows: the least significant bit is that -+ * of word[0], while the most significant bit is the nth most -+ * significant bit of word[m], where length = bits_per_word * m + n. -+ * -+ */ -+ -+#define bits_per_word 32 -+#define bytes_per_word 4 -+ -+typedef struct { -+ uint32_t length; -+ uint32_t *word; -+} bitvector_t; -+ -+ -+#define _bitvector_get_bit(v, bit_index) \ -+( \ -+ ((((v)->word[((bit_index) >> 5)]) >> ((bit_index) & 31)) & 1) \ -+) -+ -+ -+#define _bitvector_set_bit(v, bit_index) \ -+( \ -+ (((v)->word[((bit_index) >> 5)] |= ((uint32_t)1 << ((bit_index) & 31)))) \ -+) -+ -+#define _bitvector_clear_bit(v, bit_index) \ -+( \ -+ (((v)->word[((bit_index) >> 5)] &= ~((uint32_t)1 << ((bit_index) & 31)))) \ -+) -+ -+#define _bitvector_get_length(v) \ -+( \ -+ ((v)->length) \ -+) -+ -+#ifdef DATATYPES_USE_MACROS /* little functions are really macros */ -+ -+#define bitvector_get_bit(v, bit_index) _bitvector_get_bit(v, bit_index) -+#define bitvector_set_bit(v, bit_index) _bitvector_set_bit(v, bit_index) -+#define bitvector_clear_bit(v, bit_index) _bitvector_clear_bit(v, bit_index) -+#define bitvector_get_length(v) _bitvector_get_length(v) -+ -+#else -+ -+int -+bitvector_get_bit(const bitvector_t *v, int bit_index); -+ -+void -+bitvector_set_bit(bitvector_t *v, int bit_index); -+ -+void -+bitvector_clear_bit(bitvector_t *v, int bit_index); -+ -+unsigned long -+bitvector_get_length(const bitvector_t *v); -+ -+#endif -+ -+int -+bitvector_alloc(bitvector_t *v, unsigned long length); -+ -+void -+bitvector_dealloc(bitvector_t *v); -+ -+void -+bitvector_set_to_zero(bitvector_t *x); -+ -+void -+bitvector_left_shift(bitvector_t *x, int index); -+ -+char * -+bitvector_bit_string(bitvector_t *x, char* buf, int len); -+ - #endif /* _DATATYPES_H */ -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/crypto/include/rdbx.h srtp/crypto/include/rdbx.h ---- srtp-lin/crypto/include/rdbx.h 2007-06-15 14:17:40.000000000 -0400 -+++ srtp/crypto/include/rdbx.h 2009-04-22 19:03:15.000000000 -0400 -@@ -46,19 +46,29 @@ typedef uint64_t xtd_seq_num_t; - - typedef struct { - xtd_seq_num_t index; -- v128_t bitmask; -+ bitvector_t bitmask; - } rdbx_t; - - - /* -- * rdbx_init(rdbx_ptr) -+ * rdbx_init(rdbx_ptr, ws) - * -- * initializes the rdbx pointed to by its argument, setting the -- * rollover counter and sequence number to zero -+ * initializes the rdbx pointed to by its argument with the window size ws, -+ * setting the rollover counter and sequence number to zero - */ - - err_status_t --rdbx_init(rdbx_t *rdbx); -+rdbx_init(rdbx_t *rdbx, unsigned long ws); -+ -+ -+/* -+ * rdbx_uninit(rdbx_ptr) -+ * -+ * frees memory associated with the rdbx -+ */ -+ -+err_status_t -+rdbx_uninit(rdbx_t *rdbx); - - - /* -@@ -127,6 +137,15 @@ rdbx_get_packet_index(const rdbx_t *rdbx - * api instead! - */ - -+/* -+ * rdbx_get_ws(rdbx_ptr) -+ * -+ * gets the window size which was used to initialize the rdbx -+ */ -+ -+unsigned long -+rdbx_get_window_size(const rdbx_t *rdbx); -+ - - /* index_init(&pi) initializes a packet index pi (sets it to zero) */ - -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/crypto/math/datatypes.c srtp/crypto/math/datatypes.c ---- srtp-lin/crypto/math/datatypes.c 2006-07-18 15:45:46.000000000 -0400 -+++ srtp/crypto/math/datatypes.c 2009-04-22 19:03:15.000000000 -0400 -@@ -387,6 +387,124 @@ v128_left_shift(v128_t *x, int index) { - - } - -+/* functions manipulating bitvector_t */ -+ -+#ifndef DATATYPES_USE_MACROS /* little functions are not macros */ -+ -+int -+bitvector_get_bit(const bitvector_t *v, int bit_index) -+{ -+ return _bitvector_get_bit(v, bit_index); -+} -+ -+void -+bitvector_set_bit(bitvector_t *v, int bit_index) -+{ -+ _bitvector_set_bit(v, bit_index); -+} -+ -+void -+bitvector_clear_bit(bitvector_t *v, int bit_index) -+{ -+ _bitvector_clear_bit(v, bit_index); -+} -+ -+ -+#endif /* DATATYPES_USE_MACROS */ -+ -+int -+bitvector_alloc(bitvector_t *v, unsigned long length) { -+ unsigned long l; -+ -+ /* Round length up to a multiple of bits_per_word */ -+ length = (length + bits_per_word - 1) & ~(unsigned long)((bits_per_word - 1)); -+ -+ l = length / bits_per_word * bytes_per_word; -+ -+ /* allocate memory, then set parameters */ -+ if (l == 0) -+ v->word = NULL; -+ else { -+ v->word = (uint32_t*)crypto_alloc(l); -+ if (v->word == NULL) { -+ v->word = NULL; -+ v->length = 0; -+ return -1; -+ } -+ } -+ v->length = length; -+ -+ /* initialize bitvector to zero */ -+ bitvector_set_to_zero(v); -+ -+ return 0; -+} -+ -+ -+void -+bitvector_dealloc(bitvector_t *v) { -+ if (v->word != NULL) -+ crypto_free(v->word); -+ v->word = NULL; -+ v->length = 0; -+} -+ -+void -+bitvector_set_to_zero(bitvector_t *x) -+{ -+ /* C99 guarantees that memset(0) will set the value 0 for uint32_t */ -+ memset(x->word, 0, x->length >> 3); -+} -+ -+char * -+bitvector_bit_string(bitvector_t *x, char* buf, int len) { -+ int j, index; -+ uint32_t mask; -+ -+ for (j=index=0; j < (int)(x->length>>5) && index < len-1; j++) { -+ for (mask=0x80000000; mask > 0; mask >>= 1) { -+ if (x->word[j] & mask) -+ buf[index] = '1'; -+ else -+ buf[index] = '0'; -+ ++index; -+ if (index >= len-1) -+ break; -+ } -+ } -+ buf[index] = 0; /* null terminate string */ -+ -+ return buf; -+} -+ -+void -+bitvector_left_shift(bitvector_t *x, int index) { -+ int i; -+ const int base_index = index >> 5; -+ const int bit_index = index & 31; -+ const int word_length = x->length >> 5; -+ -+ if (index >= (int)x->length) { -+ bitvector_set_to_zero(x); -+ return; -+ } -+ -+ if (bit_index == 0) { -+ for (i=0; i < word_length - base_index; i++) -+ x->word[i] = x->word[i+base_index]; -+ } else { -+ for (i=0; i < word_length - base_index - 1; i++) -+ x->word[i] = (x->word[i+base_index] >> bit_index) ^ -+ (x->word[i+base_index+1] << (32 - bit_index)); -+ x->word[word_length - base_index-1] = x->word[word_length-1] >> bit_index; -+ } -+ -+ /* now wrap up the final portion */ -+ for (i = word_length - base_index; i < word_length; i++) -+ x->word[i] = 0; -+ -+} -+ - - int - octet_string_is_eq(uint8_t *a, uint8_t *b, int len) { -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/crypto/math/math.c srtp/crypto/math/math.c ---- srtp-lin/crypto/math/math.c 2006-06-08 13:00:28.000000000 -0400 -+++ srtp/crypto/math/math.c 2009-04-22 19:03:15.000000000 -0400 -@@ -43,7 +43,6 @@ - */ - - #include "crypto_math.h" --#include <stdlib.h> /* malloc() used in bitvector_alloc */ - - int - octet_weight[256] = { -@@ -773,165 +772,6 @@ octet_string_set_to_zero(uint8_t *s, int - - } - --/* functions manipulating bit_vector_t */ -- --#define BITVECTOR_MAX_WORDS 5 -- --int --bitvector_alloc(bitvector_t *v, unsigned long length) { -- unsigned long l = (length + bytes_per_word - 1) / bytes_per_word; -- int i; -- -- /* allocate memory, then set parameters */ -- if (l > BITVECTOR_MAX_WORDS) -- return -1; -- else -- l = BITVECTOR_MAX_WORDS; -- v->word = malloc(l); -- if (v->word == NULL) -- return -1; -- v->length = length; -- -- /* initialize bitvector to zero */ -- for (i=0; i < (length >> 5); i++) { -- v->word = 0; -- } -- -- return 0; --} -- --void --bitvector_set_bit(bitvector_t *v, int bit_index) { -- -- v->word[(bit_index >> 5)] |= (1 << (bit_index & 31)); -- --} -- --int --bitvector_get_bit(const bitvector_t *v, int bit_index) { -- -- return ((v->word[(bit_index >> 5)]) >> (bit_index & 31)) & 1; -- --} -- --#include <stdio.h> -- --int --bitvector_print_hex(const bitvector_t *v, FILE *stream) { -- int i; -- int m = v->length >> 5; -- int n = v->length & 31; -- char string[9]; -- uint32_t tmp; -- -- /* if length isn't a multiple of four, we can't hex_print */ -- if (n & 3) -- return -1; -- -- /* if the length is zero, do nothing */ -- if (v->length == 0) -- return 0; -- -- /* -- * loop over words from most significant to least significant - -- */ -- -- for (i=m; i > 0; i++) { -- char *str = string + 7; -- tmp = v->word[i]; -- -- /* null terminate string */ -- string[8] = 0; -- -- /* loop over nibbles */ -- *str-- = nibble_to_hex_char(tmp & 0xf); tmp >>= 4; -- *str-- = nibble_to_hex_char(tmp & 0xf); tmp >>= 4; -- *str-- = nibble_to_hex_char(tmp & 0xf); tmp >>= 4; -- *str-- = nibble_to_hex_char(tmp & 0xf); tmp >>= 4; -- *str-- = nibble_to_hex_char(tmp & 0xf); tmp >>= 4; -- *str-- = nibble_to_hex_char(tmp & 0xf); tmp >>= 4; -- *str-- = nibble_to_hex_char(tmp & 0xf); tmp >>= 4; -- *str-- = nibble_to_hex_char(tmp & 0xf); -- -- /* now print stream */ -- fprintf(stream, string); -- } -- -- return 0; -- --} -- -- --int --hex_string_length(char *s) { -- int count = 0; -- -- /* ignore leading zeros */ -- while ((*s != 0) && *s == '0') -- s++; -- -- /* count remaining characters */ -- while (*s != 0) { -- if (hex_char_to_nibble(*s++) == -1) -- return -1; -- count++; -- } -- -- return count; --} -- --int --bitvector_set_from_hex(bitvector_t *v, char *string) { -- int num_hex_chars, m, n, i, j; -- uint32_t tmp; -- -- num_hex_chars = hex_string_length(string); -- if (num_hex_chars == -1) -- return -1; -- -- /* set length */ -- v->length = num_hex_chars * 4; -- /* -- * at this point, we should subtract away a bit if the high -- * bit of the first character is zero, but we ignore that -- * for now and assume that we're four-bit aligned - DAM -- */ -- -- -- m = num_hex_chars / 8; /* number of words */ -- n = num_hex_chars % 8; /* number of nibbles in last word */ -- -- /* if the length is greater than the bitvector, return an error */ -- if (m > BITVECTOR_MAX_WORDS) -- return -1; -- -- /* -- * loop over words from most significant - first word is a special -- * case -- */ -- -- if (n) { -- tmp = 0; -- for (i=0; i < n; i++) { -- tmp = hex_char_to_nibble(*string++); -- tmp <<= 4; -- } -- v->word[m] = tmp; -- } -- -- /* now loop over the rest of the words */ -- for (i=m-1; i >= 0; i--) { -- tmp = 0; -- for (j=0; j < 8; j++) { -- tmp = hex_char_to_nibble(*string++); -- tmp <<= 4; -- } -- v->word[i] = tmp; -- } -- -- return 0; --} -- - - /* functions below not yet tested! */ - -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/crypto/replay/rdbx.c srtp/crypto/replay/rdbx.c ---- srtp-lin/crypto/replay/rdbx.c 2007-06-15 14:17:40.000000000 -0400 -+++ srtp/crypto/replay/rdbx.c 2009-04-22 19:03:15.000000000 -0400 -@@ -45,7 +45,6 @@ - - #include "rdbx.h" - --#define rdbx_high_bit_in_bitmask 127 - - /* - * from draft-ietf-avt-srtp-00.txt: -@@ -180,17 +179,32 @@ index_guess(const xtd_seq_num_t *local, - - - /* -- * rdbx_init(&r) initalizes the rdbx_t pointed to by r -+ * rdbx_init(&r, ws) initializes the rdbx_t pointed to by r with window size ws - */ - - err_status_t --rdbx_init(rdbx_t *rdbx) { -- v128_set_to_zero(&rdbx->bitmask); -+rdbx_init(rdbx_t *rdbx, unsigned long ws) { -+ if (ws == 0) -+ return err_status_bad_param; -+ -+ if (bitvector_alloc(&rdbx->bitmask, ws) != 0) -+ return err_status_alloc_fail; -+ - index_init(&rdbx->index); - - return err_status_ok; - } - -+/* -+ * rdbx_uninit(&r) uninitializes the rdbx_t pointed to by r -+ */ -+ -+err_status_t -+rdbx_uninit(rdbx_t *rdbx) { -+ bitvector_dealloc(&rdbx->bitmask); -+ -+ return err_status_ok; -+} - - /* - * rdbx_set_roc(rdbx, roc) initalizes the rdbx_t at the location rdbx -@@ -202,7 +216,7 @@ rdbx_init(rdbx_t *rdbx) { - - err_status_t - rdbx_set_roc(rdbx_t *rdbx, uint32_t roc) { -- v128_set_to_zero(&rdbx->bitmask); -+ bitvector_set_to_zero(&rdbx->bitmask); - - #ifdef NO_64BIT_MATH - #error not yet implemented -@@ -231,6 +245,17 @@ rdbx_get_packet_index(const rdbx_t *rdbx - } - - /* -+ * rdbx_get_window_size(rdbx) returns the value of the window size -+ * for the rdbx_t pointed to by rdbx -+ * -+ */ -+ -+unsigned long -+rdbx_get_window_size(const rdbx_t *rdbx) { -+ return bitvector_get_length(&rdbx->bitmask); -+} -+ -+/* - * rdbx_check(&r, delta) checks to see if the xtd_seq_num_t - * which is at rdbx->index + delta is in the rdb - */ -@@ -240,11 +265,11 @@ rdbx_check(const rdbx_t *rdbx, int delta - - if (delta > 0) { /* if delta is positive, it's good */ - return err_status_ok; -- } else if (rdbx_high_bit_in_bitmask + delta < 0) { -+ } else if ((int)(bitvector_get_length(&rdbx->bitmask) - 1) + delta < 0) { - /* if delta is lower than the bitmask, it's bad */ - return err_status_replay_old; -- } else if (v128_get_bit(&rdbx->bitmask, -- rdbx_high_bit_in_bitmask + delta) == 1) { -+ } else if (bitvector_get_bit(&rdbx->bitmask, -+ (int)(bitvector_get_length(&rdbx->bitmask) - 1) + delta) == 1) { - /* delta is within the window, so check the bitmask */ - return err_status_replay_fail; - } -@@ -268,11 +293,11 @@ rdbx_add_index(rdbx_t *rdbx, int delta) - if (delta > 0) { - /* shift forward by delta */ - index_advance(&rdbx->index, delta); -- v128_left_shift(&rdbx->bitmask, delta); -- v128_set_bit(&rdbx->bitmask, 127); -+ bitvector_left_shift(&rdbx->bitmask, delta); -+ bitvector_set_bit(&rdbx->bitmask, bitvector_get_length(&rdbx->bitmask) - 1); - } else { - /* delta is in window, so flip bit in bitmask */ -- v128_set_bit(&rdbx->bitmask, -delta); -+ bitvector_set_bit(&rdbx->bitmask, -delta); - } - - /* note that we need not consider the case that delta == 0 */ -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/include/srtp.h srtp/include/srtp.h ---- srtp-lin/include/srtp.h 2007-06-15 14:17:40.000000000 -0400 -+++ srtp/include/srtp.h 2009-04-22 19:06:22.000000000 -0400 -@@ -223,6 +223,8 @@ typedef struct srtp_policy_t { - * this stream. */ - ekt_policy_t ekt; /**< Pointer to the EKT policy structure - * for this stream (if any) */ -+ unsigned long window_size; /**< The window size to use for replay -+ * protection. */ - struct srtp_policy_t *next; /**< Pointer to next stream policy. */ - } srtp_policy_t; - -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/srtp/srtp.c srtp/srtp/srtp.c ---- srtp-lin/srtp/srtp.c 2007-06-15 14:17:40.000000000 -0400 -+++ srtp/srtp/srtp.c 2009-04-22 19:18:43.000000000 -0400 -@@ -275,7 +275,10 @@ srtp_stream_clone(const srtp_stream_ctx_ - return status; - - /* initialize replay databases */ -- rdbx_init(&str->rtp_rdbx); -+ status = rdbx_init(&str->rtp_rdbx, -+ rdbx_get_window_size(&stream_template->rtp_rdbx)); -+ if (status) -+ return status; - rdb_init(&str->rtcp_rdb); - - /* set ssrc to that provided */ -@@ -491,7 +494,8 @@ srtp_stream_init(srtp_stream_ctx_t *srtp - p->ssrc.value); - - /* initialize replay database */ -- rdbx_init(&srtp->rtp_rdbx); -+ err = rdbx_init(&srtp->rtp_rdbx, p->window_size); -+ if (err) return err; - - /* initialize key limit to maximum value */ - #ifdef NO_64BIT_MATH -@@ -525,14 +529,20 @@ srtp_stream_init(srtp_stream_ctx_t *srtp - - /* initialize keys */ - err = srtp_stream_init_keys(srtp, p->key); -- if (err) return err; -+ if (err) { -+ rdbx_uninit(&srtp->rtp_rdbx); -+ return err; -+ } - - /* - * if EKT is in use, then initialize the EKT data associated with - * the stream - */ - err = ekt_stream_init_from_policy(srtp->ekt, p->ekt); -- if (err) return err; -+ if (err) { -+ rdbx_uninit(&srtp->rtp_rdbx); -+ return err; -+ } - - return err_status_ok; - } -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/test/dtls_srtp_driver.c srtp/test/dtls_srtp_driver.c ---- srtp-lin/test/dtls_srtp_driver.c 2009-04-23 15:50:26.000000000 -0400 -+++ srtp/test/dtls_srtp_driver.c 2009-04-23 15:50:48.000000000 -0400 -@@ -184,6 +184,7 @@ test_dtls_srtp() { - if (err) return err; - policy.ssrc.type = ssrc_any_inbound; - policy.ekt = NULL; -+ policy.window_size = 128; - policy.next = NULL; - - err = srtp_add_stream(s, &policy); -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/test/rdbx_driver.c srtp/test/rdbx_driver.c ---- srtp-lin/test/rdbx_driver.c 2006-07-17 16:41:22.000000000 -0400 -+++ srtp/test/rdbx_driver.c 2009-04-22 19:22:21.000000000 -0400 -@@ -55,10 +55,10 @@ - #include "ut_sim.h" - - err_status_t --test_replay_dbx(int num_trials); -+test_replay_dbx(int num_trials, unsigned long ws); - - double --rdbx_check_adds_per_second(int num_trials); -+rdbx_check_adds_per_second(int num_trials, unsigned long ws); - - void - usage(char *prog_name) { -@@ -99,9 +99,18 @@ main (int argc, char *argv[]) { - usage(argv[0]); - - if (do_validation) { -- printf("testing rdbx_t...\n"); -+ printf("testing rdbx_t (ws=128)...\n"); - -- status = test_replay_dbx(1 << 12); -+ status = test_replay_dbx(1 << 12, 128); -+ if (status) { -+ printf("failed\n"); -+ exit(1); -+ } -+ printf("passed\n"); -+ -+ printf("testing rdbx_t (ws=1024)...\n"); -+ -+ status = test_replay_dbx(1 << 12, 1024); - if (status) { - printf("failed\n"); - exit(1); -@@ -110,8 +119,10 @@ main (int argc, char *argv[]) { - } - - if (do_timing_test) { -- rate = rdbx_check_adds_per_second(1 << 18); -- printf("rdbx_check/replay_adds per second: %e\n", rate); -+ rate = rdbx_check_adds_per_second(1 << 18, 128); -+ printf("rdbx_check/replay_adds per second (ws=128): %e\n", rate); -+ rate = rdbx_check_adds_per_second(1 << 18, 1024); -+ printf("rdbx_check/replay_adds per second (ws=1024): %e\n", rate); - } - - return 0; -@@ -119,8 +130,11 @@ main (int argc, char *argv[]) { - - void - print_rdbx(rdbx_t *rdbx) { -+ char buf[2048]; - printf("rdbx: {%llu, %s}\n", -- (unsigned long long)(rdbx->index), v128_bit_string(&rdbx->bitmask)); -+ (unsigned long long)(rdbx->index), -+ bitvector_bit_string(&rdbx->bitmask, buf, sizeof(buf)) -+); - } - - -@@ -194,17 +208,15 @@ rdbx_check_unordered(rdbx_t *rdbx, uint3 - return err_status_ok; - } - --#define MAX_IDX 160 -- - err_status_t --test_replay_dbx(int num_trials) { -+test_replay_dbx(int num_trials, unsigned long ws) { - rdbx_t rdbx; - uint32_t idx, ircvd; - ut_connection utc; - err_status_t status; - int num_fp_trials; - -- status = rdbx_init(&rdbx); -+ status = rdbx_init(&rdbx, ws); - if (status) { - printf("replay_init failed with error code %d\n", status); - exit(1); -@@ -241,7 +253,9 @@ test_replay_dbx(int num_trials) { - printf("passed\n"); - - /* re-initialize */ -- if (rdbx_init(&rdbx) != err_status_ok) { -+ rdbx_uninit(&rdbx); -+ -+ if (rdbx_init(&rdbx, ws) != err_status_ok) { - printf("replay_init failed\n"); - return err_status_init_fail; - } -@@ -263,6 +277,8 @@ test_replay_dbx(int num_trials) { - } - printf("passed\n"); - -+ rdbx_uninit(&rdbx); -+ - return err_status_ok; - } - -@@ -272,7 +288,7 @@ test_replay_dbx(int num_trials) { - #include <stdlib.h> /* for random() */ - - double --rdbx_check_adds_per_second(int num_trials) { -+rdbx_check_adds_per_second(int num_trials, unsigned long ws) { - uint32_t i; - int delta; - rdbx_t rdbx; -@@ -280,7 +296,7 @@ rdbx_check_adds_per_second(int num_trial - clock_t timer; - int failures; /* count number of failures */ - -- if (rdbx_init(&rdbx) != err_status_ok) { -+ if (rdbx_init(&rdbx, ws) != err_status_ok) { - printf("replay_init failed\n"); - exit(1); - } -@@ -301,6 +317,8 @@ rdbx_check_adds_per_second(int num_trial - - printf("number of failures: %d \n", failures); - -+ rdbx_uninit(&rdbx); -+ - return (double) CLOCKS_PER_SEC * num_trials / timer; - } - -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/test/rtpw.c srtp/test/rtpw.c ---- srtp-lin/test/rtpw.c 2006-07-17 16:41:22.000000000 -0400 -+++ srtp/test/rtpw.c 2009-04-22 19:16:52.000000000 -0400 -@@ -330,6 +330,7 @@ main (int argc, char *argv[]) { - policy.ssrc.value = ssrc; - policy.key = (uint8_t *) key; - policy.next = NULL; -+ policy.window_size = 128; - policy.rtp.sec_serv = sec_servs; - policy.rtcp.sec_serv = sec_serv_none; /* we don't do RTCP anyway */ - -@@ -382,6 +383,7 @@ main (int argc, char *argv[]) { - policy.rtcp.auth_key_len = 0; - policy.rtcp.auth_tag_len = 0; - policy.rtcp.sec_serv = sec_serv_none; -+ policy.window_size = 0; - policy.next = NULL; - } - -diff -purN -x CVS -x '*~' -x '.*' -x 'obj-*' srtp-lin/test/srtp_driver.c srtp/test/srtp_driver.c ---- srtp-lin/test/srtp_driver.c 2009-04-22 18:20:27.000000000 -0400 -+++ srtp/test/srtp_driver.c 2009-04-22 19:16:52.000000000 -0400 -@@ -321,6 +321,8 @@ main (int argc, char *argv[]) { - policy.ssrc.type = ssrc_specific; - policy.ssrc.value = 0xdecafbad; - policy.key = test_key; -+ policy.ekt = NULL; -+ policy.window_size = 128; - policy.next = NULL; - - printf("mips estimate: %e\n", mips); -@@ -989,14 +991,16 @@ srtp_session_print_policy(srtp_t srtp) { - "# rtp services: %s\r\n" - "# rtcp cipher: %s\r\n" - "# rtcp auth: %s\r\n" -- "# rtcp services: %s\r\n", -+ "# rtcp services: %s\r\n" -+ "# window size: %lu\r\n", - direction[stream->direction], - stream->rtp_cipher->type->description, - stream->rtp_auth->type->description, - serv_descr[stream->rtp_services], - stream->rtcp_cipher->type->description, - stream->rtcp_auth->type->description, -- serv_descr[stream->rtcp_services]); -+ serv_descr[stream->rtcp_services], -+ rdbx_get_window_size(&stream->rtp_rdbx)); - } - - /* loop over streams in session, printing the policy of each */ -@@ -1011,14 +1015,16 @@ srtp_session_print_policy(srtp_t srtp) { - "# rtp services: %s\r\n" - "# rtcp cipher: %s\r\n" - "# rtcp auth: %s\r\n" -- "# rtcp services: %s\r\n", -+ "# rtcp services: %s\r\n" -+ "# window size: %lu\r\n", - stream->ssrc, - stream->rtp_cipher->type->description, - stream->rtp_auth->type->description, - serv_descr[stream->rtp_services], - stream->rtcp_cipher->type->description, - stream->rtcp_auth->type->description, -- serv_descr[stream->rtcp_services]); -+ serv_descr[stream->rtcp_services], -+ rdbx_get_window_size(&stream->rtp_rdbx)); - - /* advance to next stream in the list */ - stream = stream->next; -@@ -1172,6 +1178,8 @@ srtp_validate() { - policy.ssrc.type = ssrc_specific; - policy.ssrc.value = 0xcafebabe; - policy.key = test_key; -+ policy.ekt = NULL; -+ policy.window_size = 128; - policy.next = NULL; - - status = srtp_create(&srtp_snd, &policy); -@@ -1328,6 +1336,7 @@ const srtp_policy_t default_policy = { - }, - test_key, - NULL, /* indicates that EKT is not in use */ -+ 128, /* replay window size */ - NULL - }; - -@@ -1351,6 +1360,7 @@ const srtp_policy_t aes_tmmh_policy = { - }, - test_key, - NULL, /* indicates that EKT is not in use */ -+ 128, /* replay window size */ - NULL - }; - -@@ -1374,6 +1384,7 @@ const srtp_policy_t tmmh_only_policy = { - }, - test_key, - NULL, /* indicates that EKT is not in use */ -+ 128, /* replay window size */ - NULL - }; - -@@ -1397,6 +1408,7 @@ const srtp_policy_t aes_only_policy = { - }, - test_key, - NULL, /* indicates that EKT is not in use */ -+ 128, /* replay window size */ - NULL - }; - -@@ -1420,6 +1432,7 @@ const srtp_policy_t hmac_only_policy = { - }, - test_key, - NULL, /* indicates that EKT is not in use */ -+ 128, /* replay window size */ - NULL - }; - -@@ -1443,6 +1456,7 @@ const srtp_policy_t null_policy = { - }, - test_key, - NULL, /* indicates that EKT is not in use */ -+ 128, /* replay window size */ - NULL - }; - -@@ -1480,6 +1494,7 @@ const srtp_policy_t hmac_only_with_ekt_p - }, - test_key, - &ekt_test_policy, /* indicates that EKT is not in use */ -+ 128, /* replay window size */ - NULL - }; - -@@ -1531,5 +1546,7 @@ const srtp_policy_t wildcard_policy = { - sec_serv_conf_and_auth /* security services flag */ - }, - test_key, -+ NULL, -+ 128, /* replay window size */ - NULL - }; |