#ifndef _ESECOMM_COMMON_H_
#define _ESECOMM_COMMON_H_

typedef struct spi_session {
	uint8_t channelId;
	int spiOpenFlag;
	int secEseOpenFlag;

	uint8_t attr_xmit;
	uint8_t attr_close_session;

	uint8_t aid[TZ_ESECOMM_MAX_AID_SIZE];
	uint8_t aid_length;	

	uint8_t key[TZ_ESECOMM_MAX_SHORT_RAPDU_DATA_SIZE];
	uint32_t key_size;

	uint8_t aaid[TZ_ESECOMM_MAX_AID_SIZE];
	uint8_t aaid_length;

	uint8_t skey[TZ_ESECOMM_MAX_WRAPPED_SKEY_SO_SIZE];
	uint8_t skey_length;
	
	uint8_t skey_enc[TZ_ESECOMM_MAX_SKEY_SIZE];
	uint8_t skey_mac[TZ_ESECOMM_MAX_SKEY_SIZE];
	uint8_t skey_dek[TZ_ESECOMM_MAX_SKEY_SIZE];

} __attribute__ ((packed)) spi_session_t;

typedef struct op_status {
	int return_code;
	int eseStatus;
#define _STATUS_DESC_S 64	
	uint8_t desc[_STATUS_DESC_S];
} __attribute__ ((packed)) op_status_t;

int ST_aes256_decrypt(void);
void init_op_status(op_status_t *s);
int is_status_updated(op_status_t *s);
int closeSpiSession(spi_session_t *ps, op_status_t *s);
int openSpiSession(spi_session_t *ps, op_status_t *s);
int getAESKeyFromEseApplet(spi_session_t *ps, op_status_t *s);
int selectAid(spi_session_t *ps, op_status_t *s);

int openSecureSpiSession(spi_session_t *ps, op_status_t *s);
void show_spi_session(char *alias, spi_session_t *p, op_status_t *s);

#endif
