#ifndef __VK_UTILS_H__
#define __VK_UTILS_H__

#include <stdbool.h>

#include "vk_interface.h"
#include "vk_data_struct.h"

uint32_t make_hash_str(const char* str);
bool isAllZero(const void* buf, int size);
char* getVaultNameByClientName(char* clientName);
int getVaultIndexByName(char* vaultName);
int get_vtab_index(char* vault_name, char* client_name);
int swap_vault_open(cmd_req_t* source, cmd_req_t* target, char* vault_name);
void swap_vault_close(cmd_req_t* source);
void print_hex_to_string(void* str, int len);
void show_payload(uint8_t* payload, uint32_t len);
void show_req_to_ta(req_to_ta_t* req);
void show_rsp_from_ta(rsp_from_ta_t* rsp);
void show_cp_msg(cp_rw_msg_t* msg, int type);
int vk_payload_push_item(uint8_t* payload, uint16_t type, uint8_t* data, uint32_t len);
int check_write_protection(target_t* target, cmd_req_t* req, bool* enabled);
bool hasEmTokenToWrite(target_t* target, cmd_req_t* req);
int get_vk_info(target_t* target, cmd_req_t* req);
int getPropResult(uint32_t prop_type);
int decimal_to_binary_string(int num, char* result, int* result_len);
int getId(target_t* target, uint8_t* vk_id);
void vk_nanosleep(long int nsec);

#endif // __VK_UTILS_H__
