#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_VENDOR         "/vendor/bin/vaultkeeperd"
#define PROC_NAME_SYSTEM_SERVER     "system_server"
#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_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_KG                "com.samsung.android.kgclient"
#define PROC_NAME_SYSTEMUI          "com.android.systemui"
#define PROC_NAME_SETTINGS          "com.android.settings"
#define PROC_NAME_CID               "com.samsung.android.cidmanager"
#define PROC_NAME_SSU               "/system/bin/ssud"
#ifdef __VK_TEST__
#define PROC_NAME_TEST_KG           "com.samsung.security"
#define PROC_NAME_TEST_AID          "/vendor/bin/AID_SCENARIO_TEST"
#define PROC_NAME_TEST_CASS         "/vendor/bin/CASS_SCENARIO_TEST"
#define PROC_NAME_TEST_CLIENT01     "com.samsung.security"
#define PROC_NAME_TEST_CLIENT02     "/vendor/bin/CLIENT02_SCENARIO_TEST"
#endif

#define VAULT_NAME_VK               "VK"
#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_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_SSU              "SSU"
#ifdef __VK_TEST__
#define VAULT_NAME_TEST_KG          "TestKG"
#define VAULT_NAME_TEST_KG2         "TestKG2"
#define VAULT_NAME_TEST_AID         "TestAID"
#define VAULT_NAME_TEST_CASS        "TestCASS"
#define VAULT_NAME_TEST_CLIENT01    "TestCLIENT01"
#define VAULT_NAME_TEST_CLIENT02    "TestCLIENT02"
#endif

#define VAULT_LEVEL1                0x00000001
#define VAULT_LEVEL2                0x00000002

// Client nonce
#define VK_NONCE_NAME_VK            "vk_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_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_SSU           "ssu_nonce"
#ifdef __VK_TEST__
#define VK_NONCE_NAME_TEST          "test_nonce"
#define VK_NONCE_NAME_TEST2    	    "test_nonce2"
#define VK_NONCE_NAME_TEST_AID      "testaid_nonce1"
#define VK_NONCE_NAME_TEST_CASS     "testcass_nonce"
#define VK_NONCE_NAME_TEST_CLIENT01 "testclient01_nonce"
#define VK_NONCE_NAME_TEST_CLIENT02 "testclient02_nonce"
#endif

// Client Code : 0xFA || Client ID 1byte || Vault ID 1byte || Version 1 byte
#define CC_VK                    0xFAC0CC02
#define CC_KG                    0xFAC1AA02
#define CC_KG2                   0xFAC1BB02
#define CC_CASS                  0xFAC2BB02
#define CC_AID                   0xFAC3CC02
#define CC_DRK                   0xFAC4CC02
#define CC_WIFI                  0xFAC8CC02
#define CC_BT                    0xFAC9CC02
#define CC_SWIFI                 0xFACACC02
#define CC_FMM                   0xFACBCC02
#define CC_AASA                  0xFACCCC02
#define CC_SSU                   0xFACDCC02
#ifdef __VK_TEST__
#define CC_TEST                  0xFAD1AA02
#define CC_TEST2                 0xFAD2AA02
#define CC_TEST_AID              0xFAD3AA02
#define CC_TEST_CASS             0xFAD4AA02
#define CC_TEST_CLIENT01         0xFAD5AA02
#define CC_TEST_CLIENT02         0xFAD6AA02
#endif

// Crypto Context for Client's vault
#define VAULT_CTX_VK           "This is the cryptographic contexts for VK 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_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_SSU          "This is the cryptographic contexts for SSU vault"
#ifdef __VK_TEST__
#define VAULT_CTX_TEST            "This is the cryptographic contexts for TEST vault"
#define VAULT_CTX_TEST2           "This is the cryptographic contexts for TEST2 vault"
#define VAULT_CTX_TEST_AID        "This is the cryptographic contexts for TESTAID vault"
#define VAULT_CTX_TEST_CASS       "This is the cryptographic contexts for TESTCASS vault"
#define VAULT_CTX_TEST_CLIENT01   "This is the cryptographic contexts for TESTCLIENT01 vault"
#define VAULT_CTX_TEST_CLIENT02   "This is the cryptographic contexts for TESTCLIENT02 vault"
#endif

/*
 * ============================================================
 *  REPOSITORY
 *  VAULT LEVEL 1 - STEADY
 *  VAULT LEVEL 2 - RPMB
 * ============================================================
 */
#if defined(VK_SHIPPING_API_LEVEL_R) || defined(VK_SHIPPING_API_LEVEL_S)
#ifdef __VK_TEST__
#define NUM_OF_VAULTS 23
#else
#define NUM_OF_VAULTS 16
#endif

static const vtab_rec_t VTAB[NUM_OF_VAULTS] = {
	// 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},

	// 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},

	// 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_VENDOR, VAULT_NAME_CASS, VK_NONCE_NAME_CASS, RPMB_P1, 320, 402, 82,
	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},

	// 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
	{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},

	// 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, true, false},

	// SSU
	{VAULT_LEVEL1, CLASS_EVERYMAN, CC_SSU, VAULT_CTX_SSU, PROC_NAME_SSU, VAULT_NAME_SSU, VK_NONCE_NAME_SSU, -1, -1, -1, 2,
	false, true, false},

#ifdef __VK_TEST__
	// VaultKeeper's own vault
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_VENDOR, VAULT_NAME_TEST_AID, VK_NONCE_NAME_VK, RPMB_P2, 80, 82, 2,
	true, true, false },

	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_VENDOR, VAULT_NAME_TEST_CASS, VK_NONCE_NAME_VK, RPMB_P2, 80, 162, 82,
	false, false, true},

	{ VAULT_LEVEL2, CLASS_EVERYMAN, CC_TEST_AID, VAULT_CTX_TEST_AID, PROC_NAME_TEST_AID, VAULT_NAME_TEST_AID, VK_NONCE_NAME_TEST_AID, RPMB_P2, 80, 82, 2,
	true, true, false },

	{ VAULT_LEVEL1, CLASS_CASS, CC_TEST_CASS, VAULT_CTX_TEST_CASS, PROC_NAME_TEST_CASS, VAULT_NAME_TEST_CASS, VK_NONCE_NAME_TEST_CASS, RPMB_P2, 80, 162, 82,
	false, false, true},

	{ VAULT_LEVEL1, CLASS_CASS, CC_TEST_CASS, VAULT_CTX_TEST_CASS, PROC_NAME_TEST_CASS, VAULT_NAME_AID, VK_NONCE_NAME_AID, RPMB_P2, 80, 162, 82,
	true, false, false},

	{ VAULT_LEVEL2, CLASS_EVERYMAN, CC_TEST_CLIENT01, VAULT_CTX_TEST_CLIENT01, PROC_NAME_TEST_CLIENT01, VAULT_NAME_TEST_CLIENT01, VK_NONCE_NAME_TEST_CLIENT01, RPMB_P2, 80, 90, 10,
	false, false, false},

	{ VAULT_LEVEL2, CLASS_EVERYMAN, CC_TEST_CLIENT02, VAULT_CTX_TEST_CLIENT02, PROC_NAME_TEST_CLIENT02, VAULT_NAME_TEST_CLIENT02, VK_NONCE_NAME_TEST_CLIENT02, RPMB_P2, 80, 90, 10,
	false, false, false},
#endif
};
#elif VK_SHIPPING_API_LEVEL_Q
#ifdef __VK_TEST__
#define NUM_OF_VAULTS 34
#else
#define NUM_OF_VAULTS 25
#endif

static const vtab_rec_t VTAB[NUM_OF_VAULTS] = {
	// 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},

	// 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},

	// 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_MTK_RPMB
	// 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_VENDOR, VAULT_NAME_CASS, VK_NONCE_NAME_CASS, RPMB_P1, 320, 402, 82,
	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},

	// 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
	{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},

	// 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, true, false},
#ifdef __VK_TEST__
	// VaultKeeper's own vault
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_VENDOR, VAULT_NAME_TEST_AID, VK_NONCE_NAME_VK, RPMB_P2, 80, 82, 2,
	true, true, false },

	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_VENDOR, VAULT_NAME_TEST_CASS, VK_NONCE_NAME_VK, RPMB_P2, 80, 162, 82,
	false, false, true},

	{ VAULT_LEVEL2, CLASS_KG, CC_KG, VAULT_CTX_TEST, PROC_NAME_TEST_KG, VAULT_NAME_TEST_KG, VK_NONCE_NAME_TEST,
#ifdef VK_SWD_MTK_RPMB
		RPMB_P1, 320, 360, 
#else
		RPMB_P2, 429, 469,
#endif
		40, false, true, true },

	{ VAULT_LEVEL2, CLASS_KG, CC_KG2, VAULT_CTX_TEST2, PROC_NAME_TEST_KG, VAULT_NAME_TEST_KG2, VK_NONCE_NAME_TEST2,
#ifdef VK_SWD_MTK_RPMB
		RPMB_P1, 400, 440, 
#else
		RPMB_P2, 349, 389,
#endif
		40, false, true, true },

	{ VAULT_LEVEL2, CLASS_EVERYMAN, CC_TEST_AID, VAULT_CTX_TEST_AID, PROC_NAME_TEST_AID, VAULT_NAME_TEST_AID, VK_NONCE_NAME_TEST_AID, RPMB_P2, 80, 82, 2,
	true, true, false },

	{ VAULT_LEVEL1, CLASS_CASS, CC_TEST_CASS, VAULT_CTX_TEST_CASS, PROC_NAME_TEST_CASS, VAULT_NAME_TEST_CASS, VK_NONCE_NAME_TEST_CASS, RPMB_P2, 80, 162, 82,
	false, false, true},

	{ VAULT_LEVEL1, CLASS_CASS, CC_TEST_CASS, VAULT_CTX_TEST_CASS, PROC_NAME_TEST_CASS, VAULT_NAME_AID, VK_NONCE_NAME_AID, RPMB_P2, 80, 162, 82,
	true, false, false},

	{ VAULT_LEVEL2, CLASS_EVERYMAN, CC_TEST_CLIENT01, VAULT_CTX_TEST_CLIENT01, PROC_NAME_TEST_CLIENT01, VAULT_NAME_TEST_CLIENT01, VK_NONCE_NAME_TEST_CLIENT01, RPMB_P2, 80, 90, 10,
	false, false, false},

	{ VAULT_LEVEL2, CLASS_EVERYMAN, CC_TEST_CLIENT02, VAULT_CTX_TEST_CLIENT02, PROC_NAME_TEST_CLIENT02, VAULT_NAME_TEST_CLIENT02, VK_NONCE_NAME_TEST_CLIENT02, RPMB_P2, 80, 90, 10,
	false, false, false},
#endif
};
#else // VK_SHIPPING_API_LEVEL_P
#ifdef __VK_TEST__
#define NUM_OF_VAULTS 33
#else
#define NUM_OF_VAULTS 25
#endif

static const vtab_rec_t VTAB[NUM_OF_VAULTS] = {
	// 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},

	// 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},

	// 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_MTK_RPMB
	// 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_VENDOR, VAULT_NAME_CASS, VK_NONCE_NAME_CASS, RPMB_P1, 320, 402, 82,
	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},

	// 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
	{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},

	// 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, true, false},
#ifdef __VK_TEST__
	// VaultKeeper's own vault
	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_VENDOR, VAULT_NAME_TEST_AID, VK_NONCE_NAME_VK, RPMB_P2, 80, 82, 2,
	true, true, false },

	{VAULT_LEVEL2, CLASS_EVERYMAN, CC_VK, VAULT_CTX_VK, PROC_NAME_VK_VENDOR, VAULT_NAME_TEST_CASS, VK_NONCE_NAME_VK, RPMB_P2, 80, 162, 82,
	false, false, true},

	{ VAULT_LEVEL2, CLASS_KG, CC_KG, VAULT_CTX_TEST, PROC_NAME_TEST_KG, VAULT_NAME_TEST_KG, VK_NONCE_NAME_TEST,
#ifdef VK_SWD_MTK_RPMB
		RPMB_P1, 320, 360, 
#else
		RPMB_P2, 429, 469,
#endif
		40, false, true, true },

	{ VAULT_LEVEL2, CLASS_EVERYMAN, CC_TEST_AID, VAULT_CTX_TEST_AID, PROC_NAME_TEST_AID, VAULT_NAME_TEST_AID, VK_NONCE_NAME_TEST_AID, RPMB_P2, 80, 82, 2,
	true, true, false },

	{ VAULT_LEVEL1, CLASS_CASS, CC_TEST_CASS, VAULT_CTX_TEST_CASS, PROC_NAME_TEST_CASS, VAULT_NAME_TEST_CASS, VK_NONCE_NAME_TEST_CASS, RPMB_P2, 80, 162, 82,
	false, false, true},

	{ VAULT_LEVEL1, CLASS_CASS, CC_TEST_CASS, VAULT_CTX_TEST_CASS, PROC_NAME_TEST_CASS, VAULT_NAME_AID, VK_NONCE_NAME_AID, RPMB_P2, 80, 162, 82,
	true, false, false},

	{ VAULT_LEVEL2, CLASS_EVERYMAN, CC_TEST_CLIENT01, VAULT_CTX_TEST_CLIENT01, PROC_NAME_TEST_CLIENT01, VAULT_NAME_TEST_CLIENT01, VK_NONCE_NAME_TEST_CLIENT01, RPMB_P2, 80, 90, 10,
	false, false, false},

	{ VAULT_LEVEL2, CLASS_EVERYMAN, CC_TEST_CLIENT02, VAULT_CTX_TEST_CLIENT02, PROC_NAME_TEST_CLIENT02, VAULT_NAME_TEST_CLIENT02, VK_NONCE_NAME_TEST_CLIENT02, RPMB_P2, 80, 90, 10,
	false, false, false},
#endif
};
#endif
#endif // __VK_TABLE_H__
