#ifndef __VK_TABLE_H__
#define __VK_TABLE_H__

#include <stdbool.h>

#include "vk_data_struct.h"
#include "vk_constants.h"

// Vault Record
typedef struct vtab_rec  {
	int vault_level;
	unsigned int client_class;
	unsigned int client_code;
	char crypto_context[MAX_CRYPTO_CONTEXT_LEN];
	char client_name[MAX_CLIENT_NAME_LEN];
	char vault_name[MAX_VAULT_NAME_LEN];
	char nonce_name[MAX_CLIENT_NONCE_NAME_LEN];
	int rpmb_partition;
	int start_index_rpmb;
	int start_index_rpmb_backup;
	int num_blocks; // minimum 2 blocks
	// Start vault option
	bool one_time_writable;
	bool update_steady; /* Vault Level-2 Only */
	bool write_block_custom_kernel;
} vtab_rec_t;

// vk_client_worker type 
#define CLASS_KG                    0x00000001
#define CLASS_CASS                  0x00000002
#define CLASS_EVERYMAN              0x00000003

#define PROC_NAME_VK_SYSTEM         "/system/bin/vaultkeeperd"
#define PROC_NAME_VK_VENDOR         "/vendor/bin/vaultkeeperd"
#define PROC_NAME_SYSTEM_SERVER     "system_server"
#define PROC_NAME_CASS_SYSTEM       "/system/bin/cass"
#define PROC_NAME_CASS_VENDOR       "/vendor/bin/cass"
#define PROC_NAME_RIL               "/vendor/bin/hw/rild"
#define PROC_NAME_PHONE             "com.android.phone"
#define PROC_NAME_SCS               "/system/bin/scs"
#define PROC_NAME_DRK_1             "/vendor/bin/vendor.samsung.security.drk@1.0-service"
#define PROC_NAME_DRK_2             "/vendor/bin/hw/vendor.samsung.hardware.security.drk@2.0-service"
#define PROC_NAME_BT                "com.android.bluetooth"
#define PROC_NAME_SWIFI             "com.samsung.android.fast"
#define PROC_NAME_OQC_TEST          "com.samsung.android.app.mobiledoctor.ve"
#define PROC_NAME_FMM               "com.samsung.android.fmm"
#define PROC_NAME_AASA              "com.samsung.aasaservice"
#define PROC_NAME_VK_TEST           "com.samsung.security"
#define PROC_NAME_KG                "com.samsung.android.kgclient"
#define PROC_NAME_SYSTEMUI          "com.android.systemui"
#define PROC_NAME_SETTINGS          "com.android.settings"
#define PROC_NAME_RMM               "com.samsung.android.rlc"
#define PROC_NAME_SPD               "/vendor/bin/spdaemon"
#define PROC_NAME_CID               "com.samsung.android.cidmanager"

#define VAULT_NAME_VK               "VK"
#define VAULT_NAME_RMM              "RemoteLockControl"
#define VAULT_NAME_KG               "KnoxGuard"
#define VAULT_NAME_KG2              "KnoxGuard2"
#define VAULT_NAME_CASS             "CASS"
#define VAULT_NAME_AID              "AID"
#define VAULT_NAME_DRK              "DRK"
#define VAULT_NAME_EMT              "EMT"
#define VAULT_NAME_SPU              "SPU"
#define VAULT_NAME_WIFI             "WIFI"
#define VAULT_NAME_BT               "BT"
#define VAULT_NAME_SWIFI            "SWIFI"
#define VAULT_NAME_FMM              "FMM"
#define VAULT_NAME_AASA             "AASA"
#define VAULT_NAME_TEST             "TestVault"

#define VAULT_LEVEL1                0x00000001
#define VAULT_LEVEL2                0x00000002

// Client nonce
#define VK_NONCE_NAME_VK            "vk_nonce"
#define VK_NONCE_NAME_RMM           "rmm_nonce"
#define VK_NONCE_NAME_KG    	    "kg_nonce"
#define VK_NONCE_NAME_KG2           "kg2_nonce"
#define VK_NONCE_NAME_CASS  	    "cass_nonce"
#define VK_NONCE_NAME_AID           "aid_nonce"
#define VK_NONCE_NAME_DRK           "drk_nonce"
#define VK_NONCE_NAME_EMT           "emt_nonce"
#define VK_NONCE_NAME_SPU           "spu_nonce"
#define VK_NONCE_NAME_WIFI          "wifi_nonce"
#define VK_NONCE_NAME_BT            "bt_nonce"
#define VK_NONCE_NAME_SWIFI         "swifi_nonce"
#define VK_NONCE_NAME_FMM           "fmm_nonce"
#define VK_NONCE_NAME_AASA          "aasa_nonce"
#define VK_NONCE_NAME_TEST    	    "test_nonce"

// Client Code : 0xFA || Client ID 1byte || Vault ID 1byte || Version 1 byte
#define CC_VK                    0xFAC0CC02
#define CC_RMM                   0xFAC1AA02
#define CC_KG                    0xFAC1AA02
#define CC_KG2                   0xFAC1BB02
#define CC_CASS                  0xFAC2BB02
#define CC_AID                   0xFAC3CC02
#define CC_DRK                   0xFAC4CC02
#define CC_EMT                   0xFAC5CC02
#define CC_SPU                   0xFAC7CC02
#define CC_WIFI                  0xFAC8CC02
#define CC_BT                    0xFAC9CC02
#define CC_SWIFI                 0xFACACC02
#define CC_FMM                   0xFACBCC02
#define CC_AASA                  0xFACCCC02
#define CC_TEST                  0xFAD1AA02

// Crypto Context for Client's vault
#define VAULT_CTX_VK       "This is the cryptographic contexts for VK vault"
#define VAULT_CTX_RMM      "This is the cryptographic contexts for RMM vault"
#define VAULT_CTX_KG       "This is the cryptographic contexts for KG vault"
#define VAULT_CTX_KG2      "This is the cryptographic contexts for KG2 vault"
#define VAULT_CTX_CASS     "This is the cryptographic contexts for CASS vault"
#define VAULT_CTX_AID      "This is the cryptographic contexts for AID vault"
#define VAULT_CTX_DRK      "This is the cryptographic contexts for DRK vault"
#define VAULT_CTX_EMT      "This is the cryptographic contexts for EMT vault"
#define VAULT_CTX_SPU      "This is the cryptographic contexts for SPU vault"
#define VAULT_CTX_WIFI     "This is the cryptographic contexts for WIFI vault"
#define VAULT_CTX_BT       "This is the cryptographic contexts for BT vault"
#define VAULT_CTX_SWIFI    "This is the cryptographic contexts for SWIFI vault"
#define VAULT_CTX_FMM      "This is the cryptographic contexts for FMM vault"
#define VAULT_CTX_AASA     "This is the cryptographic contexts for AASA vault"
#define VAULT_CTX_TEST     "This is the cryptographic contexts for TEST vault"

/*
 * ============================================================
 *  REPOSITORY
 *  VAULT LEVEL 1 - STEADY
 *  VAULT LEVEL 2 - RPMB
 * ============================================================
 */
#if defined (VK_EXYNOS_8895)    || \
    defined (VK_QSEE_8998)      || \
    defined (VK_QSEE_8996)      || \
    defined (VK_QSEE_8917)      || \
    defined (VK_QSEE_845)       || \
    defined (VK_QSEE_660)       || \
    defined (VK_QSEE_8953)      || \
    defined (VK_QSEE_429)       || \
    defined (VK_QSEE_439)       || \
    defined (VK_QSEE_710)       || \
    defined (VK_EXYNOS_7885)    || \
    defined (VK_EXYNOS_9810)    || \
    defined (VK_TEEGRIS_9610)   || \
    defined (VK_TEEGRIS_9630)   || \
    defined (VK_TEEGRIS_9820)   || \
    defined (VK_TEEGRIS_7904)   || \
    defined (VK_TEEGRIS_7904_4) || \
    defined (VK_TEEGRIS_9830)   || \
    defined (VK_TEEGRIS_850)    || \
    defined (VK_TEEGRIS_9810)   || \
    defined (VK_QSEE_8150)      || \
    defined (VK_QSEE_6150)      || \
    defined (VK_QSEE_7150)      || \
    defined (VK_QSEE_7250)      || \
    defined (VK_QSEE_8250)      || \
    defined (VK_QSEE_6115)      || \
    defined (VK_QSEE_7225)      || \
    defined (VK_MTK_6762)       || \
    defined (VK_MTK_6765)       || \
    defined (VK_MTK_6768)       || \
    defined (VK_MTK_6739)

#define NUM_OF_VAULTS 36

static const vtab_rec_t VTAB[NUM_OF_VAULTS] = {

	// Reserved index[0:5]. Ref. vk_kg_cmd_worker.c - for_legacy_bootloader() 
	// Reserved index[6:170]. CASS legacy
#ifdef VK_SWD_KINIBI_MTK
	// TEST
	{VAULT_LEVEL2, CLASS_KG, CC_TEST, VAULT_CTX_TEST, PROC_NAME_VK_TEST, VAULT_NAME_TEST, VK_NONCE_NAME_TEST, RPMB_P1, 320, 360, 40,
	false, true, false},
#else
	// TEST
	{VAULT_LEVEL2, CLASS_KG, CC_TEST, VAULT_CTX_TEST, PROC_NAME_VK_TEST, VAULT_NAME_TEST, VK_NONCE_NAME_TEST, RPMB_P2, 429, 469, 40,
	false, true, true},
#endif

	// TSS (Activated ID)
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_AID, VAULT_CTX_AID, PROC_NAME_PHONE, VAULT_NAME_AID, VK_NONCE_NAME_AID, RPMB_P1, 171, 173, 2,
	true, false, false},

	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_AID, VAULT_CTX_AID, PROC_NAME_RIL, VAULT_NAME_AID, VK_NONCE_NAME_AID, RPMB_P1, 171, 173, 2,
	true, false, false},

	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_AID, VAULT_CTX_AID, PROC_NAME_SCS, VAULT_NAME_AID, VK_NONCE_NAME_AID, RPMB_P1, 171, 173, 2,
	true, false, false},

	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_AID, VAULT_CTX_AID, PROC_NAME_CID, VAULT_NAME_AID, VK_NONCE_NAME_AID, RPMB_P1, 171, 173, 2,
	true, false, false},

	// EMT
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_EMT, VAULT_CTX_EMT, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_EMT, VK_NONCE_NAME_EMT, RPMB_P1, 176, 179, 3,
	false, false, false},

	// AASA
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_AASA, VAULT_CTX_AASA, PROC_NAME_AASA, VAULT_NAME_AASA, VK_NONCE_NAME_AASA, RPMB_P1, 183, 185, 2,
	false, false, true},

	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_AASA, VAULT_CTX_AASA, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_AASA, VK_NONCE_NAME_AASA, RPMB_P1, 183, 185, 2,
	false, false, true},

	// RMM
	{VAULT_LEVEL2, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, RPMB_P1, 200, 220, 20,
	false, true, true},

	{VAULT_LEVEL2, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_RMM, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, RPMB_P1, 200, 220, 20,
	false, true, true},

	{VAULT_LEVEL2, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_SETTINGS, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, RPMB_P1, 200, 220, 20,
	false, true, true},

	{VAULT_LEVEL2, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_PHONE, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, RPMB_P1, 200, 220, 20,
	false, true, true},

	{VAULT_LEVEL2, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_SYSTEMUI, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, RPMB_P1, 200, 220, 20,
	false, true, true},

	// KG
	{VAULT_LEVEL2, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_KG, VK_NONCE_NAME_KG, RPMB_P1, 240, 280, 40,
	false, true, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_KG, VAULT_NAME_KG, VK_NONCE_NAME_KG, RPMB_P1, 240, 280, 40,
	false, true, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_SETTINGS, VAULT_NAME_KG, VK_NONCE_NAME_KG, RPMB_P1, 240, 280, 40,
	false, true, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_PHONE, VAULT_NAME_KG, VK_NONCE_NAME_KG, RPMB_P1, 240, 280, 40,
	false, true, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_SYSTEMUI, VAULT_NAME_KG, VK_NONCE_NAME_KG, RPMB_P1, 240, 280, 40,
	false, true, true},
#ifdef VK_SWD_KINIBI_MTK
	// KG2 (cass legacy offset)
	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P1, 6, 46, 40,
	false, false, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_KG, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P1, 6, 46, 40,
	false, false, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_SETTINGS, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P1, 6, 46, 40,
	false, false, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_PHONE, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P1, 6, 46, 40,
	false, false, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_SYSTEMUI, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P1, 6, 46, 40,
	false, false, true},
#else
	// KG2
	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P2, 0, 40, 40,
	false, false, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_KG, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P2, 0, 40, 40,
	false, false, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_SETTINGS, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P2, 0, 40, 40,
	false, false, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_PHONE, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P2, 0, 40, 40,
	false, false, true},

	{VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_SYSTEMUI, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, RPMB_P2, 0, 40, 40,
	false, false, true},
#endif
	// CASS - After factory command processing, migrate to RPMB
	{VAULT_LEVEL1, CLASS_CASS, CC_CASS, VAULT_CTX_CASS, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_CASS, VK_NONCE_NAME_CASS, RPMB_P1, 320, 402, 82,
	false, false, true},

	{VAULT_LEVEL1, CLASS_CASS, CC_CASS, VAULT_CTX_CASS, PROC_NAME_CASS_SYSTEM, VAULT_NAME_CASS, VK_NONCE_NAME_CASS, RPMB_P1, 320, 402, 82,
	false, false, true},

	{VAULT_LEVEL1, CLASS_CASS, CC_CASS, VAULT_CTX_CASS, PROC_NAME_CASS_VENDOR, VAULT_NAME_CASS, VK_NONCE_NAME_CASS, RPMB_P1, 320, 402, 82,
	false, false, true},

	// DRK for P OS (+SPU - SPU Block state)
	{VAULT_LEVEL1, CLASS_EVERYMAN, CC_DRK, VAULT_CTX_DRK, PROC_NAME_DRK_1, VAULT_NAME_DRK, VK_NONCE_NAME_DRK, -1, -1, -1, 20,
	false, false, true},

	// DRK (+SPU - SPU Block state)
	{VAULT_LEVEL1, CLASS_EVERYMAN, CC_DRK, VAULT_CTX_DRK, PROC_NAME_DRK_2, VAULT_NAME_DRK, VK_NONCE_NAME_DRK, -1, -1, -1, 20,
	false, false, true},

	// SPU - SPU Block state ((Only Beyond on P OS)
	{VAULT_LEVEL1, CLASS_EVERYMAN, CC_SPU, VAULT_CTX_SPU, PROC_NAME_SPD, VAULT_NAME_SPU, VK_NONCE_NAME_SPU, -1, -1, -1, 2,
	false, false, true},

	// WIFI - User password
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_WIFI, VAULT_CTX_WIFI, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_WIFI, VK_NONCE_NAME_WIFI, RPMB_P1, 490, 492, 2,
	false, false, true},

	// Bluetooth - Link secret key
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_BT, VAULT_CTX_BT, PROC_NAME_BT, VAULT_NAME_BT, VK_NONCE_NAME_BT, RPMB_P1, 494, 496, 2,
	false, false, true},

	// OQC test app - Activated ID verification
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_AID, VAULT_CTX_AID, PROC_NAME_OQC_TEST, VAULT_NAME_AID, VK_NONCE_NAME_AID, RPMB_P1, 171, 173, 2,
	true, false, false},

	// VaultKeeper's own vault /vendor
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_VENDOR, VAULT_NAME_VK, VK_NONCE_NAME_VK, RPMB_P1, 506, 508, 2,
	false, true, false},

	// VaultKeeper's own vault /system
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_SYSTEM, VAULT_NAME_VK, VK_NONCE_NAME_VK, RPMB_P1, 506, 508, 2,
	false, true, false},

	// Secure WIFI
	{VAULT_LEVEL1, CLASS_EVERYMAN, CC_SWIFI, VAULT_CTX_SWIFI, PROC_NAME_SWIFI, VAULT_NAME_SWIFI, VK_NONCE_NAME_SWIFI, -1, -1, -1, 80,
	false, false, true},

	// Find my mobile
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_FMM, VAULT_CTX_FMM, PROC_NAME_FMM, VAULT_NAME_FMM, VK_NONCE_NAME_FMM, RPMB_P1, 498, 500, 2,
	false, false, false},
};

/*
 * ============================================================
 *  REPOSITORY
 *  VAULT LEVEL 1 - STEADY
 * ============================================================
 */
#elif defined(VK_EXYNOS_7870)   || \
    defined(VK_EXYNOS_7880)     || \
    defined(VK_EXYNOS_7570)     || \
    defined(VK_TEEGRIS_COMMON)  || \
    defined(VK_EXYNOS_8890)

#define NUM_OF_VAULTS 22

static const vtab_rec_t VTAB[NUM_OF_VAULTS] = {
	// RMM
	{VAULT_LEVEL1, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, -1, -1, -1, 20,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_RMM, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, -1, -1, -1, 20,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_SETTINGS, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, -1, -1, -1, 20,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_PHONE, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, -1, -1, -1, 20,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_RMM, VAULT_CTX_RMM, PROC_NAME_SYSTEMUI, VAULT_NAME_RMM, VK_NONCE_NAME_RMM, -1, -1, -1, 20,
	false, false, true},

	// KG
	{VAULT_LEVEL1, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_KG, VK_NONCE_NAME_KG, -1, -1, -1, 40,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_KG, VAULT_NAME_KG, VK_NONCE_NAME_KG, -1, -1, -1, 40,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_SETTINGS, VAULT_NAME_KG, VK_NONCE_NAME_KG, -1, -1, -1, 40,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_PHONE, VAULT_NAME_KG, VK_NONCE_NAME_KG, -1, -1, -1, 40,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_KG, VAULT_CTX_KG, PROC_NAME_SYSTEMUI, VAULT_NAME_KG, VK_NONCE_NAME_KG, -1, -1, -1, 40,
	false, false, true},

	// KG2
	{VAULT_LEVEL1, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, -1, -1, -1, 40,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_KG, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, -1, -1, -1, 40,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_SETTINGS, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, -1, -1, -1, 40,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_PHONE, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, -1, -1, -1, 40,
	false, false, true},

	{VAULT_LEVEL1, CLASS_KG, CC_KG2, VAULT_CTX_KG2, PROC_NAME_SYSTEMUI, VAULT_NAME_KG2, VK_NONCE_NAME_KG2, -1, -1, -1, 40,
	false, false, true},

	// DRK for P OS (+SPU - SPU Block state)
	{VAULT_LEVEL1, CLASS_EVERYMAN, CC_DRK, VAULT_CTX_DRK, PROC_NAME_DRK_1, VAULT_NAME_DRK, VK_NONCE_NAME_DRK, -1, -1, -1, 20,
	false, false, true},

	// DRK (+SPU - SPU Block state)
	{VAULT_LEVEL1, CLASS_EVERYMAN, CC_DRK, VAULT_CTX_DRK, PROC_NAME_DRK_2, VAULT_NAME_DRK, VK_NONCE_NAME_DRK, -1, -1, -1, 20,
	false, false, true},

	// AASA
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_AASA, VAULT_CTX_AASA, PROC_NAME_AASA, VAULT_NAME_AASA, VK_NONCE_NAME_AASA, -1, -1, -1, 2,
	false, false, true},

	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_AASA, VAULT_CTX_AASA, PROC_NAME_SYSTEM_SERVER, VAULT_NAME_AASA, VK_NONCE_NAME_AASA, -1, -1, -1, 2,
	false, false, true},

	// TEST
	{VAULT_LEVEL1, CLASS_KG, CC_TEST, VAULT_CTX_TEST, PROC_NAME_OQC_TEST, VAULT_NAME_TEST, VK_NONCE_NAME_TEST, -1, -1, -1, 40,
	false, false, true},

	// VaultKeeper's own vault /vendor
	{VAULT_LEVEL1, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_VENDOR, VAULT_NAME_VK, VK_NONCE_NAME_VK, -1, -1, -1, 2,
	false, false, false},

	// VaultKeeper's own vault /system
	{VAULT_LEVEL1, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_SYSTEM, VAULT_NAME_VK, VK_NONCE_NAME_VK, -1, -1, -1, 2,
	false, false, false},
};

#endif

#define MAX_EM_TOKEN_INDEX_LEN 3
// Only one token for each client
typedef struct vault_with_em_token  {
	char client_name[MAX_CLIENT_NAME_LEN];
	char vault_name[MAX_VAULT_NAME_LEN];
	char mode_index[MAX_EM_TOKEN_INDEX_LEN];
} em_token_t;

#define NUM_OF_EMT_ITEMS 1
static const em_token_t EM_TOKEN_TAB[NUM_OF_EMT_ITEMS] = {
	{PROC_NAME_RIL, VAULT_NAME_AID, "20"},
};

#endif // __VK_TABLE_H__
