#ifndef __SCPKM_H__
#define __SCPKM_H__

#include "sec_apdu.h"
#include "tz_platform.h"

#define MAX_KEY_NAME_SIZE                       50

#define SSD_SELECTABLE_APPLET_EXIST             0
#define SSD_SELECTABLE_APPLET_NOT_EXIST         1
#define SSD_NOT_SELECTABLE_APPLET_EXIST         2
#define SSD_NOT_SELECTABLE_APPLET_NOT_EXIST     3
#define SSD_NOT_EXIST_APPLET_NOT_EXIST          4
#define SSD_NOT_EXIST_APPLET_EXIST              5

typedef struct key_list_info_st {
    uint8_t service_name[MAX_KEY_NAME_SIZE];

    uint8_t key_id_qsee[MAX_QSEE_ID_SIZE];
    uint8_t key_id_mobicore[TID_SIZE];
    uint8_t key_id_blowfish[TID_SIZE];

    uint8_t key_id_extension[TID_SIZE];

    uint8_t associated_ssd_aid[MAX_AID_SIZE];
} __attribute__((packed)) key_list_info_t, *p_key_list_info_t;


// Support SCP-KM
void checkSeState(p_cmd_t cmd, p_rsp_t rsp);
void requestCredentials(p_cmd_t cmd, p_rsp_t rsp);
void rewrapCredentials(p_cmd_t cmd, p_rsp_t rsp);

#ifdef DEBUG_LOW
void scpKmTest(p_cmd_t cmd, p_rsp_t rsp);
#endif

#endif
