#pragma once #include "aes.h" #include "utils.h" enum SELF_KEY_TYPE { KEY_LV0 = 1, KEY_LV1, KEY_LV2, KEY_APP, KEY_ISO, KEY_LDR, KEY_UNK7, KEY_NPDRM }; struct SELF_KEY { u64 version; u16 revision; u32 self_type; u8 erk[0x20]; u8 riv[0x10]; u8 pub[0x28]; u8 priv[0x15]; u32 curve_type; SELF_KEY(u64 ver, u16 rev, u32 type, wxString e, wxString r, wxString pb, wxString pr, u32 ct) { version = ver; revision = rev; self_type = type; hex_to_bytes(erk, e.c_str()); hex_to_bytes(riv, r.c_str()); hex_to_bytes(pub, pb.c_str()); hex_to_bytes(priv, pr.c_str()); curve_type = ct; } }; static const u8 PKG_AES_KEY[0x10] = { 0x2e, 0x7b, 0x71, 0xd7, 0xc9, 0xc9, 0xa1, 0x4e, 0xa3, 0x22, 0x1f, 0x18, 0x88, 0x28, 0xb8, 0xf8 }; static const u8 NP_IDPS[0x10] = { 0x5E, 0x06, 0xE0, 0x4F, 0xD9, 0x4A, 0x71, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }; static const u8 NP_KLIC_FREE[0x10] = { 0x72, 0xF9, 0x90, 0x78, 0x8F, 0x9C, 0xFF, 0x74, 0x57, 0x25, 0xF0, 0x8E, 0x4C, 0x12, 0x83, 0x87 }; static const u8 NP_KLIC_KEY[0x10] = { 0xF2, 0xFB, 0xCA, 0x7A, 0x75, 0xB0, 0x4E, 0xDC, 0x13, 0x90, 0x63, 0x8C, 0xCD, 0xFD, 0xD1, 0xEE }; static const u8 NP_RIF_KEY[0x10] = { 0xDA, 0x7D, 0x4B, 0x5E, 0x49, 0x9A, 0x4F, 0x53, 0xB1, 0xC1, 0xA1, 0x4A, 0x74, 0x84, 0x44, 0x3B }; static const u8 RAP_KEY[0x10] = { 0x86, 0x9F, 0x77, 0x45, 0xC1, 0x3F, 0xD8, 0x90, 0xCC, 0xF2, 0x91, 0x88, 0xE3, 0xCC, 0x3E, 0xDF }; static const u8 RAP_PBOX[0x10] = { 0x0C, 0x03, 0x06, 0x04, 0x01, 0x0B, 0x0F, 0x08, 0x02, 0x07, 0x00, 0x05, 0x0A, 0x0E, 0x0D, 0x09 }; static const u8 RAP_E1[0x10] = { 0xA9, 0x3E, 0x1F, 0xD6, 0x7C, 0x55, 0xA3, 0x29, 0xB7, 0x5F, 0xDD, 0xA6, 0x2A, 0x95, 0xC7, 0xA5 }; static const u8 RAP_E2[0x10] = { 0x67, 0xD4, 0x5D, 0xA3, 0x29, 0x6D, 0x00, 0x6A, 0x4E, 0x7C, 0x53, 0x7B, 0xF5, 0x53, 0x8C, 0x74 }; class KeyVault { Array sk_LV0_arr; Array sk_LV1_arr; Array sk_LV2_arr; Array sk_APP_arr; Array sk_ISO_arr; Array sk_LDR_arr; Array sk_UNK7_arr; Array sk_NPDRM_arr; u8 klicensee_key[0x10]; public: KeyVault(); SELF_KEY FindSelfKey(u32 type, u16 revision, u64 version); void SetKlicenseeKey(u8 *key); u8 *GetKlicenseeKey(); void RapToRif(unsigned char* rap, unsigned char* rif); private: void LoadSelfLV0Keys(); void LoadSelfLDRKeys(); void LoadSelfLV1Keys(); void LoadSelfLV2Keys(); void LoadSelfISOKeys(); void LoadSelfAPPKeys(); void LoadSelfUNK7Keys(); void LoadSelfNPDRMKeys(); SELF_KEY GetSelfLV0Key(); SELF_KEY GetSelfLDRKey(); SELF_KEY GetSelfLV1Key(u64 version); SELF_KEY GetSelfLV2Key(u64 version); SELF_KEY GetSelfISOKey(u16 revision, u64 version); SELF_KEY GetSelfAPPKey(u16 revision); SELF_KEY GetSelfUNK7Key(u64 version); SELF_KEY GetSelfNPDRMKey(u16 revision); };