timing.h File Reference

Portable interface to timeouts and to the CPU cycle counter. More...

`#include "config.h"`
`#include <stdint.h>`
Include dependency graph for timing.h:

Go to the source code of this file.

## Data Structures

struct | mbedtls_timing_hr_time
| timer structure More...
struct | mbedtls_timing_delay_context
| Context for mbedtls_timing_set/get_delay() More...

## Functions

unsigned long | mbedtls_timing_hardclock (void)
| Return the CPU cycle counter value. More...
unsigned long | mbedtls_timing_get_timer (struct mbedtls_timing_hr_time *val, int reset)
| Return the elapsed time in milliseconds. More...
void | mbedtls_set_alarm (int seconds)
| Setup an alarm clock. More...
void | 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()`.) More...
int | mbedtls_timing_get_delay (void *data)
| Get the status of delays (Memory helper: number of delays passed.) More...
int | mbedtls_timing_self_test (int verbose)
| Checkup routine. More...

## Variables

volatile int | mbedtls_timing_alarmed

## Detailed Description

Portable interface to timeouts and to the CPU cycle counter.

Definition in file timing.h.

## Function Documentation

## mbedtls_set_alarm()

void mbedtls_set_alarm | ( | int | seconds | ) |

Setup an alarm clock.

Parameters

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

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

## mbedtls_timing_get_delay()

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

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

Parameters

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

Returns
  -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.

## mbedtls_timing_get_timer()

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

Return the elapsed time in milliseconds.

Parameters

  val | points to a timer structure
  reset | If 0, query the elapsed time. Otherwise (re)start the timer.

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

Note
  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.

## mbedtls_timing_hardclock()

unsigned long mbedtls_timing_hardclock | ( | void |  | ) |

Return the CPU cycle counter value.

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

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

## mbedtls_timing_self_test()

int mbedtls_timing_self_test | ( | int | verbose | ) |

Checkup routine.

Returns
  0 if successful, or 1 if a test failed

## mbedtls_timing_set_delay()

void 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()`.)

Parameters

  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.

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

## Variable Documentation

## mbedtls_timing_alarmed

volatile int mbedtls_timing_alarmed