timing.h
mbedtls/config.h
stdint.h
mbedtls/check_config.h
mbedtls/config.h
timing.h
limits.h
stdint.h
mbedtls_timing_hr_time
mbedtls_timing_delay_context
struct mbedtls_timing_delay_context typedef struct mbedtls_timing_delay_context mbedtls_timing_delay_context mbedtls_timing_delay_context

Context for mbedtls_timing_set/get_delay()

volatile int volatile int mbedtls_timing_alarmed mbedtls_timing_alarmed
unsigned long unsigned long mbedtls_timing_hardclock (void) mbedtls_timing_hardclock void

Return the CPU cycle counter value.

This is only a best effort! Do not rely on this! In particular, it is known to be unreliable on virtual machines.

This value starts at an unspecified origin and may wrap around.

unsigned long unsigned long mbedtls_timing_get_timer (struct mbedtls_timing_hr_time *val, int reset) mbedtls_timing_get_timer struct mbedtls_timing_hr_time * val int reset

Return the elapsed time in milliseconds.

val

points to a timer structure

reset

If 0, query the elapsed time. Otherwise (re)start the timer.

Elapsed time since the previous reset in ms. When restarting, this is always 0.

To initialize a timer, call this function with reset=1. Determining the elapsed time and resetting the timer is not atomic on all platforms, so after the sequence `{ get_timer(1); ...; time1 = get_timer(1); ...; time2 = get_timer(0) }` the value time1+time2 is only approximately the delay since the first reset.

void void mbedtls_set_alarm (int seconds) mbedtls_set_alarm int seconds

Setup an alarm clock.

seconds

delay before the "mbedtls_timing_alarmed" flag is set (must be >=0)

Only one alarm at a time is supported. In a threaded context, this means one for the whole process, not one per thread.

void void mbedtls_timing_set_delay (void *data, uint32_t int_ms, uint32_t fin_ms) mbedtls_timing_set_delay void * data uint32_t int_ms uint32_t fin_ms

Set a pair of delays to watch (See `mbedtls_timing_get_delay()`.)

data

Pointer to timing data. Must point to a valid `mbedtls_timing_delay_context` struct.

int_ms

First (intermediate) delay in milliseconds. The effect if int_ms > fin_ms is unspecified.

fin_ms

Second (final) delay in milliseconds. Pass 0 to cancel the current delay.

To set a single delay, either use `mbedtls_timing_set_timer` directly or use this function with int_ms == fin_ms.

int int mbedtls_timing_get_delay (void *data) mbedtls_timing_get_delay void * data

Get the status of delays (Memory helper: number of delays passed.)

data

Pointer to timing data Must point to a valid `mbedtls_timing_delay_context` struct.

-1 if cancelled (fin_ms = 0), 0 if none of the delays are passed, 1 if only the intermediate delay is passed, 2 if the final delay is passed.

int int mbedtls_timing_self_test (int verbose) mbedtls_timing_self_test int verbose

Checkup routine.

0 if successful, or 1 if a test failed

Portable interface to timeouts and to the CPU cycle counter.

    /*
    *CopyrightTheMbedTLSContributors
    *SPDX-License-Identifier:Apache-2.0ORGPL-2.0-or-later
    */
    #ifndefMBEDTLS_TIMING_H
    #defineMBEDTLS_TIMING_H

    #if!defined(MBEDTLS_CONFIG_FILE)
    #include"mbedtls/config.h"
    #else
    #includeMBEDTLS_CONFIG_FILE
    #endif

    #include<stdint.h>

    #ifdef__cplusplus
    extern"C"{
    #endif

    #if!defined(MBEDTLS_TIMING_ALT)
    //Regularimplementation
    //

    structmbedtls_timing_hr_time{
    unsignedcharopaque[32];
    };

    typedefstructmbedtls_timing_delay_context{
    structmbedtls_timing_hr_timetimer;
    uint32_tint_ms;
    uint32_tfin_ms;
    }mbedtls_timing_delay_context;

    #else/*MBEDTLS_TIMING_ALT*/
    #include"timing_alt.h"
    #endif/*MBEDTLS_TIMING_ALT*/

    externvolatileintmbedtls_timing_alarmed;

    unsignedlongmbedtls_timing_hardclock(void);

    unsignedlongmbedtls_timing_get_timer(structmbedtls_timing_hr_time*val,intreset);

    voidmbedtls_set_alarm(intseconds);

    voidmbedtls_timing_set_delay(void*data,uint32_tint_ms,uint32_tfin_ms);

    intmbedtls_timing_get_delay(void*data);

    #ifdefined(MBEDTLS_SELF_TEST)
    intmbedtls_timing_self_test(intverbose);
    #endif

    #ifdef__cplusplus
    }
    #endif

    #endif/*timing.h*/