#ifndef __SPU_CRYPTO_H__
#define __SPU_CRYPTO_H__

#include <stdint.h>

#ifndef SKEYMASTER_BUILD
#define SKEYMASTER_BUILD
#endif
#ifdef DEBUG
#define SPU_CRYPTO_TEST
#endif
#define SPU_CRYPTO_OK 0
#define SPU_CRYPTO_ALLOCATION_FAIL 1
#define SPU_CRYPTO_INVALID_BLOB 2
#define SPU_CRYPTO_QSEE_INTERNAL_ERR 3
#define SPU_CRYPTO_INVALID_ARGUMENT 4
#define SPU_CRYPTO_SSP_INTERNAL_ERR 5
#define SPU_CRYPTO_GENERAL_ERROR 100

#define MAX_WRAPPED_BLOB_LENGTH (4096 * 1000)

typedef struct spu_wrap_data {
    uint8_t *data;
    uint32_t len;
} spu_wrap_data_t;

int32_t wrap_using_spu(const spu_wrap_data_t *in, spu_wrap_data_t *out);
int32_t unwrap_using_spu(const spu_wrap_data_t *in, spu_wrap_data_t *out);

int32_t test_wrap_using_spu(uint32_t testdatalen, uint32_t try);

#ifdef SKEYMASTER_BUILD
int32_t tz_wrap_using_spu(const spu_wrap_data_t *in, spu_wrap_data_t *out);
int32_t tz_unwrap_using_spu(const spu_wrap_data_t *in, spu_wrap_data_t *out);
#endif

#endif //__SPU_CRYPTO_H__
