#ifndef __VK_VAULT_MANAGER_H__
#define __VK_VAULT_MANAGER_H__

#include <stdbool.h>
#include "vk_data_struct.h"

int wrap_vault(target_t* target, uint8_t* data, uint32_t len, uint8_t* tag, uint32_t tag_len, uint8_t* random_iv);
int unwrap_vault(target_t* target, uint8_t* data, uint32_t len, uint8_t* tag, uint32_t tag_len, uint8_t* random_iv);
int read_multi_blk_rpmb(target_t* target, const uint32_t vtab_index, const uint32_t jump_blk, const uint32_t read_size, uint8_t* pBuffer, const bool mirror);
int read_unsheltered_vault(target_t* target, cmd_req_t* req, unsvault_t* vault);
int write_unsheltered_vault(target_t* target, cmd_req_t* req, cmd_rsp_t* rsp, unsvault_t* vault);
int write_unsheltered_data(target_t* target, cmd_req_t* req, cmd_rsp_t* rsp, uint8_t* unsheltered_data);
int read_entire_vault(target_t* target, cmd_req_t* req, vault_t* entire_vault);
int write_entire_vault(target_t* target, cmd_req_t* req, cmd_rsp_t* rsp, vault_t* entire_vault);
int make_hmac(cmd_req_t* req, uint8_t* key, uint8_t* hmac);
int read_meta(target_t* target, cmd_req_t* req, uint32_t type, uint32_t* result);

#endif // __VK_VAULT_MANAGER_H__
