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