diff --git a/library/timing.c b/library/timing.c
index 0acec5b..d87f71e 100644
--- a/library/timing.c
+++ b/library/timing.c
@@ -21,40 +21,39 @@
 
 #if defined(MBEDTLS_TIMING_C)
 
-#include "mbedtls/timing.h"
+#    include "mbedtls/timing.h"
 
-#if !defined(MBEDTLS_TIMING_ALT)
+#    if !defined(MBEDTLS_TIMING_ALT)
 
-#if !defined(unix) && !defined(__unix__) && !defined(__unix) && \
-    !defined(__APPLE__) && !defined(_WIN32) && !defined(__QNXNTO__) && \
-    !defined(__HAIKU__) && !defined(__midipix__)
-#error "This module only works on Unix and Windows, see MBEDTLS_TIMING_C in mbedtls_config.h"
-#endif
+#        if !defined(unix) && !defined(__unix__) && !defined(__unix) &&        \
+            !defined(__APPLE__) && !defined(_WIN32) && !defined(__QNXNTO__) && \
+            !defined(__HAIKU__) && !defined(__midipix__)
+#            error \
+                "This module only works on Unix and Windows, see MBEDTLS_TIMING_C in mbedtls_config.h"
+#        endif
 
-#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
+#        if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
 
-#include <windows.h>
-#include <process.h>
+#            include <windows.h>
+#            include <process.h>
 
-struct _hr_time
-{
+struct _hr_time {
     LARGE_INTEGER start;
 };
 
-#else
+#        else
 
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <signal.h>
-#include <time.h>
+#            include <unistd.h>
+#            include <sys/types.h>
+#            include <sys/time.h>
+#            include <signal.h>
+#            include <time.h>
 
-struct _hr_time
-{
+struct _hr_time {
     struct timeval start;
 };
 
-#endif /* _WIN32 && !EFIX64 && !EFI32 */
+#        endif /* _WIN32 && !EFIX64 && !EFI32 */
 
 /**
  * \brief          Return the elapsed time in milliseconds
@@ -75,88 +74,84 @@
  *                 get_timer(0) }` the value time1+time2 is only approximately
  *                 the delay since the first reset.
  */
-#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
+#        if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
 
-unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int reset )
+unsigned long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val,
+                                       int reset)
 {
-    struct _hr_time *t = (struct _hr_time *) val;
+    struct _hr_time *t = (struct _hr_time *)val;
 
-    if( reset )
-    {
-        QueryPerformanceCounter( &t->start );
-        return 0 ;
-    }
-    else
-    {
+    if (reset) {
+        QueryPerformanceCounter(&t->start);
+        return 0;
+    } else {
         unsigned long delta;
         LARGE_INTEGER now, hfreq;
-        QueryPerformanceCounter(  &now );
-        QueryPerformanceFrequency( &hfreq );
-        delta = (unsigned long)( ( now.QuadPart - t->start.QuadPart ) * 1000ul
-                                 / hfreq.QuadPart );
-        return delta ;
+        QueryPerformanceCounter(&now);
+        QueryPerformanceFrequency(&hfreq);
+        delta = (unsigned long)((now.QuadPart - t->start.QuadPart) * 1000ul /
+                                hfreq.QuadPart);
+        return delta;
     }
 }
 
-#else /* _WIN32 && !EFIX64 && !EFI32 */
+#        else /* _WIN32 && !EFIX64 && !EFI32 */
 
-unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int reset )
+unsigned long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val,
+                                       int reset)
 {
-    struct _hr_time *t = (struct _hr_time *) val;
+    struct _hr_time *t = (struct _hr_time *)val;
 
-    if( reset )
-    {
-        gettimeofday( &t->start, NULL );
-        return 0 ;
-    }
-    else
-    {
+    if (reset) {
+        gettimeofday(&t->start, NULL);
+        return 0;
+    } else {
         unsigned long delta;
         struct timeval now;
-        gettimeofday( &now, NULL );
-        delta = ( now.tv_sec  - t->start.tv_sec  ) * 1000ul
-              + ( now.tv_usec - t->start.tv_usec ) / 1000;
-        return delta ;
+        gettimeofday(&now, NULL);
+        delta = (now.tv_sec - t->start.tv_sec) * 1000ul +
+                (now.tv_usec - t->start.tv_usec) / 1000;
+        return delta;
     }
 }
 
-#endif /* _WIN32 && !EFIX64 && !EFI32 */
+#        endif /* _WIN32 && !EFIX64 && !EFI32 */
 
 /*
  * Set delays to watch
  */
-void mbedtls_timing_set_delay( void *data, uint32_t int_ms, uint32_t fin_ms )
+void mbedtls_timing_set_delay(void *data, uint32_t int_ms, uint32_t fin_ms)
 {
-    mbedtls_timing_delay_context *ctx = (mbedtls_timing_delay_context *) data;
+    mbedtls_timing_delay_context *ctx = (mbedtls_timing_delay_context *)data;
 
     ctx->int_ms = int_ms;
     ctx->fin_ms = fin_ms;
 
-    if( fin_ms != 0 )
-        (void) mbedtls_timing_get_timer( &ctx->timer, 1 );
+    if (fin_ms != 0)
+        (void)mbedtls_timing_get_timer(&ctx->timer, 1);
 }
 
 /*
  * Get number of delays expired
  */
-int mbedtls_timing_get_delay( void *data )
+int mbedtls_timing_get_delay(void *data)
 {
-    mbedtls_timing_delay_context *ctx = (mbedtls_timing_delay_context *) data;
+    mbedtls_timing_delay_context *ctx = (mbedtls_timing_delay_context *)data;
     unsigned long elapsed_ms;
 
-    if( ctx->fin_ms == 0 )
-        return -1 ;
+    if (ctx->fin_ms == 0)
+        return -1;
 
-    elapsed_ms = mbedtls_timing_get_timer( &ctx->timer, 0 );
+    elapsed_ms = mbedtls_timing_get_timer(&ctx->timer, 0);
 
-    if( elapsed_ms >= ctx->fin_ms )
-        return 2 ;
+    if (elapsed_ms >= ctx->fin_ms)
+        return 2;
 
-    if( elapsed_ms >= ctx->int_ms )
-        return 1 ;
+    if (elapsed_ms >= ctx->int_ms)
+        return 1;
 
-    return 0 ;
+    return 0;
 }
 
-#endif /* !MBEDTLS_TIMING_ALT */
+#    endif /* !MBEDTLS_TIMING_ALT */
 #endif /* MBEDTLS_TIMING_C */
