1*62c56f98SSadaf Ebrahimi/* BEGIN_HEADER */ 2*62c56f98SSadaf Ebrahimi 3*62c56f98SSadaf Ebrahimi/* This test module exercises the timing module. Since, depending on the 4*62c56f98SSadaf Ebrahimi * underlying operating system, the timing routines are not always reliable, 5*62c56f98SSadaf Ebrahimi * this suite only performs very basic sanity checks of the timing API. 6*62c56f98SSadaf Ebrahimi */ 7*62c56f98SSadaf Ebrahimi 8*62c56f98SSadaf Ebrahimi#include <limits.h> 9*62c56f98SSadaf Ebrahimi 10*62c56f98SSadaf Ebrahimi#include "mbedtls/timing.h" 11*62c56f98SSadaf Ebrahimi 12*62c56f98SSadaf Ebrahimi/* END_HEADER */ 13*62c56f98SSadaf Ebrahimi 14*62c56f98SSadaf Ebrahimi/* BEGIN_DEPENDENCIES 15*62c56f98SSadaf Ebrahimi * depends_on:MBEDTLS_TIMING_C 16*62c56f98SSadaf Ebrahimi * END_DEPENDENCIES 17*62c56f98SSadaf Ebrahimi */ 18*62c56f98SSadaf Ebrahimi 19*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */ 20*62c56f98SSadaf Ebrahimivoid timing_get_timer() 21*62c56f98SSadaf Ebrahimi{ 22*62c56f98SSadaf Ebrahimi struct mbedtls_timing_hr_time time; 23*62c56f98SSadaf Ebrahimi 24*62c56f98SSadaf Ebrahimi memset(&time, 0, sizeof(time)); 25*62c56f98SSadaf Ebrahimi 26*62c56f98SSadaf Ebrahimi (void) mbedtls_timing_get_timer(&time, 1); 27*62c56f98SSadaf Ebrahimi 28*62c56f98SSadaf Ebrahimi /* Check that a non-zero time was written back */ 29*62c56f98SSadaf Ebrahimi int all_zero = 1; 30*62c56f98SSadaf Ebrahimi for (size_t i = 0; i < sizeof(time); i++) { 31*62c56f98SSadaf Ebrahimi all_zero &= ((unsigned char *) &time)[i] == 0; 32*62c56f98SSadaf Ebrahimi } 33*62c56f98SSadaf Ebrahimi TEST_ASSERT(!all_zero); 34*62c56f98SSadaf Ebrahimi 35*62c56f98SSadaf Ebrahimi (void) mbedtls_timing_get_timer(&time, 0); 36*62c56f98SSadaf Ebrahimi 37*62c56f98SSadaf Ebrahimi /* This goto is added to avoid warnings from the generated code. */ 38*62c56f98SSadaf Ebrahimi goto exit; 39*62c56f98SSadaf Ebrahimi} 40*62c56f98SSadaf Ebrahimi/* END_CASE */ 41*62c56f98SSadaf Ebrahimi 42*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */ 43*62c56f98SSadaf Ebrahimivoid timing_delay(int fin_ms) 44*62c56f98SSadaf Ebrahimi{ 45*62c56f98SSadaf Ebrahimi mbedtls_timing_delay_context ctx; 46*62c56f98SSadaf Ebrahimi int result; 47*62c56f98SSadaf Ebrahimi if (fin_ms == 0) { 48*62c56f98SSadaf Ebrahimi mbedtls_timing_set_delay(&ctx, 0, 0); 49*62c56f98SSadaf Ebrahimi result = mbedtls_timing_get_delay(&ctx); 50*62c56f98SSadaf Ebrahimi TEST_ASSERT(result == -1); 51*62c56f98SSadaf Ebrahimi } else { 52*62c56f98SSadaf Ebrahimi mbedtls_timing_set_delay(&ctx, fin_ms / 2, fin_ms); 53*62c56f98SSadaf Ebrahimi result = mbedtls_timing_get_delay(&ctx); 54*62c56f98SSadaf Ebrahimi TEST_ASSERT(result >= 0 && result <= 2); 55*62c56f98SSadaf Ebrahimi } 56*62c56f98SSadaf Ebrahimi} 57*62c56f98SSadaf Ebrahimi/* END_CASE */ 58