summaryrefslogtreecommitdiff
path: root/googlepatches/vidyo-3-srtp-ws.patch
diff options
context:
space:
mode:
Diffstat (limited to 'googlepatches/vidyo-3-srtp-ws.patch')
-rw-r--r--googlepatches/vidyo-3-srtp-ws.patch937
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
- };