|
Packit |
549fdc |
/*
|
|
Packit |
549fdc |
* Copyright (C) 2016 Red Hat, Inc.
|
|
Packit |
549fdc |
*
|
|
Packit |
549fdc |
* Author: Nikos Mavrogiannopoulos
|
|
Packit |
549fdc |
*
|
|
Packit |
549fdc |
* This file is part of GnuTLS.
|
|
Packit |
549fdc |
*
|
|
Packit |
549fdc |
* GnuTLS is free software; you can redistribute it and/or modify it
|
|
Packit |
549fdc |
* under the terms of the GNU General Public License as published by
|
|
Packit |
549fdc |
* the Free Software Foundation; either version 3 of the License, or
|
|
Packit |
549fdc |
* (at your option) any later version.
|
|
Packit |
549fdc |
*
|
|
Packit |
549fdc |
* GnuTLS is distributed in the hope that it will be useful, but
|
|
Packit |
549fdc |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
549fdc |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
549fdc |
* General Public License for more details.
|
|
Packit |
549fdc |
*
|
|
Packit |
549fdc |
* You should have received a copy of the GNU General Public License
|
|
Packit |
549fdc |
* along with GnuTLS; if not, write to the Free Software Foundation,
|
|
Packit |
549fdc |
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
Packit |
549fdc |
*/
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
#include <config.h>
|
|
Packit |
549fdc |
#include <stdarg.h>
|
|
Packit |
549fdc |
#include <stddef.h>
|
|
Packit |
549fdc |
#include <setjmp.h>
|
|
Packit |
549fdc |
#include <cmocka.h>
|
|
Packit |
549fdc |
#include <limits.h>
|
|
Packit |
549fdc |
#include <stdint.h>
|
|
Packit |
549fdc |
#include <string.h>
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
/* Unit test for DTLS window handling */
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
#define LARGE_INT 4194304
|
|
Packit |
549fdc |
#define INT_OVER_32_BITS 281474976708836LL
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
struct record_parameters_st {
|
|
Packit |
549fdc |
uint64_t dtls_sw_bits;
|
|
Packit |
549fdc |
uint64_t dtls_sw_next;
|
|
Packit |
549fdc |
unsigned dtls_sw_have_recv;
|
|
Packit |
549fdc |
unsigned epoch;
|
|
Packit |
549fdc |
};
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
typedef struct {
|
|
Packit |
549fdc |
unsigned char i[8];
|
|
Packit |
549fdc |
} gnutls_uint64;
|
|
Packit |
549fdc |
#define gnutls_assert_val(x) x
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
void _dtls_reset_window(struct record_parameters_st *rp);
|
|
Packit |
549fdc |
int _dtls_record_check(struct record_parameters_st *rp, gnutls_uint64 * _seq);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
/* taken from nettle */
|
|
Packit |
549fdc |
#ifdef WORDS_BIGENDIAN
|
|
Packit |
549fdc |
# define BSWAP64(x) x
|
|
Packit |
549fdc |
#else
|
|
Packit |
549fdc |
# define BSWAP64(x) \
|
|
Packit |
549fdc |
((((uint64_t)(x) & 0xff) << 56) \
|
|
Packit |
549fdc |
| (((uint64_t)(x) & 0xff00) << 40) \
|
|
Packit |
549fdc |
| (((uint64_t)(x) & 0xff0000) << 24) \
|
|
Packit |
549fdc |
| (((uint64_t)(x) & 0xff000000) << 8) \
|
|
Packit |
549fdc |
| (((uint64_t)(x) >> 8) & 0xff000000) \
|
|
Packit |
549fdc |
| (((uint64_t)(x) >> 24) & 0xff0000) \
|
|
Packit |
549fdc |
| (((uint64_t)(x) >> 40) & 0xff00) \
|
|
Packit |
549fdc |
| ((uint64_t)(x) >> 56) )
|
|
Packit |
549fdc |
#endif
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
#define DTLS_SW_NO_INCLUDES
|
|
Packit |
549fdc |
#include "../lib/dtls-sw.c"
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void uint64_set(gnutls_uint64* t, uint64_t v)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
memcpy(t->i, &v, 8);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
#define RESET_WINDOW \
|
|
Packit |
549fdc |
memset(&state, 0, sizeof(state))
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
#define SET_WINDOW_NEXT(x) \
|
|
Packit |
549fdc |
state.dtls_sw_next = (((x)&DTLS_SEQ_NUM_MASK))
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
#define SET_WINDOW_LAST_RECV(x) \
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(x)); \
|
|
Packit |
549fdc |
state.dtls_sw_have_recv = 1
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_uninit_0(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_uninit_large(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+1+64));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_uninit_very_large(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(INT_OVER_32_BITS));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_12(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(0);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(2));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_19(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(0);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(9));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_skip1(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
unsigned i;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(0);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
for (i=2;i<256;i+=2) {
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(i));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_skip3(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
unsigned i;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(0);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
for (i=5;i<256;i+=2) {
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(i));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_21(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(0);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(2);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(1));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_91(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(0);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(9);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(1));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_large_21(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT+2);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+1));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_large_12(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT+1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+2));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_large_91(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT+9);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+1));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_large_19(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT+1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+9));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_very_large_12(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(INT_OVER_32_BITS);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(INT_OVER_32_BITS+2));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_very_large_91(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(INT_OVER_32_BITS);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+9);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(INT_OVER_32_BITS+1));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_very_large_19(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(INT_OVER_32_BITS);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(INT_OVER_32_BITS+9));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_outside(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(0);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(1+64));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_large_outside(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT+1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+1+64));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_very_large_outside(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(INT_OVER_32_BITS);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(INT_OVER_32_BITS+1+64));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_dup1(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT-1);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+1));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+16));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+1));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), -3);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_dup2(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT-1);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+16));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+1));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+16));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), -3);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_dup3(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT-1);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+16));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+15));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+14));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+5));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+5));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), -3);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_out_of_order(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT-1);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+8));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+7));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+6));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+5));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+4));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+3));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+2));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+1));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT+9));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_epoch_higher(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(LARGE_INT-1);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV(LARGE_INT);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(LARGE_INT));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64((LARGE_INT+8)|0x1000000000000LL));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), -1);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
static void check_dtls_window_epoch_lower(void **glob_state)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
struct record_parameters_st state;
|
|
Packit |
549fdc |
gnutls_uint64 t;
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
RESET_WINDOW;
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(0x1000000000000LL));
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
state.epoch = 1;
|
|
Packit |
549fdc |
SET_WINDOW_NEXT(0x1000000000000LL);
|
|
Packit |
549fdc |
SET_WINDOW_LAST_RECV((0x1000000000000LL) + 1);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(2 | 0x1000000000000LL));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(3 | 0x1000000000000LL));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), 0);
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
uint64_set(&t, BSWAP64(5));
|
|
Packit |
549fdc |
assert_int_equal(_dtls_record_check(&state, &t), -1);
|
|
Packit |
549fdc |
}
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
|
|
Packit |
549fdc |
int main(void)
|
|
Packit |
549fdc |
{
|
|
Packit |
549fdc |
const struct CMUnitTest tests[] = {
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_uninit_0),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_uninit_large),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_uninit_very_large),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_12),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_21),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_19),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_91),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_large_21),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_large_12),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_large_19),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_large_91),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_dup1),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_dup2),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_dup3),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_outside),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_large_outside),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_out_of_order),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_epoch_lower),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_epoch_higher),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_very_large_12),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_very_large_19),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_very_large_91),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_very_large_outside),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_skip3),
|
|
Packit |
549fdc |
cmocka_unit_test(check_dtls_window_skip1)
|
|
Packit |
549fdc |
};
|
|
Packit |
549fdc |
return cmocka_run_group_tests(tests, NULL, NULL);
|
|
Packit |
549fdc |
}
|