#ifndef __KG_UTILS_H__
#define __KG_UTILS_H__

#include <stdio.h>

#include "TZ_Vendor_tl.h"
#include "kg_defs.h"
#include "kg_log.h"
#include "kg_openssl.h"
#include "kg_rpmb.h"
#include "tee_internal_api.h"

uint32_t hmac_sha256(
    uint8_t *key, 
    uint32_t key_len, 
    uint8_t *message_data, 
    uint32_t message_len, 
    uint8_t *digest, 
    uint32_t *digest_len);

uint32_t reverse(char str[], int length);

void kg_dump(char *label, uint8_t *data, uint32_t data_len);

int KG_gcm_encrypt(unsigned char *plaintext, int plaintext_len,
                unsigned char *key,
                unsigned char *iv, int iv_len,
                unsigned char *ciphertext,
                int *cipher_len,
                unsigned char *tag);

int KG_gcm_decrypt(unsigned char *ciphertext, int ciphertext_len,
                unsigned char *tag,
                unsigned char *key,
                unsigned char *iv, int iv_len,
                unsigned char *plaintext,
                int *plain_len);

int kg_public_encrypt(unsigned char * data,int data_len, RSA* key, unsigned char *out, int *out_len);

char *decimal_to_binary(uint32_t n);

// for Teegris SDK 3.0.0_update4 ONLY
int Atoi(char *str);

#endif // __KG_UTILS_H__
