/* BEGIN_HEADER */
#include <polarssl/ssl.h>
/* END_HEADER */

/* BEGIN_DEPENDENCIES
 * depends_on:POLARSSL_SSL_TLS_C
 * END_DEPENDENCIES
 */

/* BEGIN_CASE depends_on:POLARSSL_SSL_DTLS_ANTI_REPLAY */
void ssl_dtls_replay( char *prevs, char *new, int ret )
{
    ssl_context ssl;
    char *end_prevs = prevs + strlen( prevs ) + 1;

    TEST_ASSERT( ssl_init( &ssl ) == 0 );
    TEST_ASSERT( ssl_set_transport( &ssl, SSL_TRANSPORT_DATAGRAM ) == 0 );

    /* Read previous record numbers */
    for( ; end_prevs - prevs >= 13; prevs += 13 )
    {
        prevs[12] = '\0';
        unhexify( ssl.in_ctr + 2, prevs );
        ssl_dtls_replay_update( &ssl );
    }

    /* Check new number */
    unhexify( ssl.in_ctr + 2, new );
    TEST_ASSERT( ssl_dtls_replay_check( &ssl ) == ret );

    ssl_free( &ssl );
}
/* END_CASE */
