xref: /aosp_15_r20/external/mbedtls/tests/suites/test_suite_timing.function (revision 62c56f9862f102b96d72393aff6076c951fb8148)
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