#ifndef DK_WRAPPER_H
#define DK_WRAPPER_H

// #include <tees_secure_object.h>

#include "dk_common.h"
#include "dk_log.h"

#define SCP_CONTEXT_LENGTH  (185U)
#define CHANNEL_LENGTH      (26U)
#define SO_HEADER_SIZE      (16)
#define REMAINING_LENGTH    (512) - (SCP_CONTEXT_LENGTH + CHANNEL_LENGTH + SO_HEADER_SIZE)
#define MAX_BLOB_LENGTH     (REMAINING_LENGTH) + (SCP_CONTEXT_LENGTH + CHANNEL_LENGTH + SO_HEADER_SIZE)

typedef struct wrapped_session_t {
    size_t len;
    // Data may be padded during encryption increasing its size
    uint8_t blob[MAX_BLOB_LENGTH];
} __attribute__ ((packed)) wrapped_session_t;

TEE_Result wrap(uint8_t* in, size_t in_len, uint8_t* out, size_t* out_len);
TEE_Result unwrap(uint8_t* in, size_t in_len, uint8_t* out, size_t* out_len);

#endif