/**
 * \file gatekeeper_hal.h
**/
#ifndef GATEKEEPER_HAL_H
#define GATEKEEPER_HAL_H

#include "pw_handle.h"
#include <stdlib.h>
#include <stdint.h>

int gk_restore_fail_counter(uint32_t uid,
                            void *trusted_data_buffer,
                            size_t trusted_data_size);

int gk_store_fail_counter(uint32_t uid,
                          const void *trusted_data_buffer,
                          size_t trusted_data_size);

void hal_gen_rand(uint8_t *dest, uint32_t len);
uint64_t hal_get_time();

bool
hal_hmac_sha256(const uint8_t *data, uint32_t data_len,
                uint8_t *key, uint32_t key_len,
                uint8_t *buf, uint32_t *dest_len);

void clear_signature(uint32_t signature_length, uint8_t *signature);

bool
hal_pwd_hmac(const uint8_t *password, uint32_t password_length, salt_t salt,
             uint32_t signature_length, uint8_t *signature);

int hal_mem_cmp(const void *buffer1, const void *buffer2, uint32_t size);
void hal_mem_fill(void *buffer, uint32_t  x, uint32_t size);
void hal_mem_free(void *buffer);
void hal_mem_move(void *dest, const void *src, uint32_t size);
void *hal_mem_malloc(uint32_t size);

#endif /* GATEKEEPER_HAL_H */
