bool SELFDecrypter::GetKeyFromRap(u8 *content_id, u8 *npdrm_key) { // Set empty RAP key. u8 rap_key[0x10]; memset(rap_key, 0, 0x10); // Try to find a matching RAP file under exdata folder. std::string ci_str((const char *)content_id); std::string pf_str("00000001"); // TODO: Allow multiple profiles. Use default for now. std::string rap_path("dev_hdd0/home/" + pf_str + "/exdata/" + ci_str + ".rap"); // Check if we have a valid RAP file. if (!fs::is_file(rap_path)) { LOG_ERROR(LOADER, "This application requires a valid RAP file for decryption!"); return false; } // Open the RAP file and read the key. fs::file rap_file(rap_path); if (!rap_file) { LOG_ERROR(LOADER, "Failed to load RAP file!"); return false; } LOG_NOTICE(LOADER, "Loading RAP file %s.rap", ci_str); rap_file.read(rap_key, 0x10); // Convert the RAP key. rap_to_rif(rap_key, npdrm_key); return true; }
bool SELFDecrypter::GetKeyFromRap(u8* content_id, u8* npdrm_key) { // Set empty RAP key. u8 rap_key[0x10]; memset(rap_key, 0, 0x10); // Try to find a matching RAP file under exdata folder. const std::string ci_str = reinterpret_cast<const char*>(content_id); const std::string rap_path = "/dev_hdd0/home/" + Emu.GetUsr() + "/exdata/" + ci_str + ".rap"; // Open the RAP file and read the key. const fs::file rap_file(vfs::get(rap_path)); if (!rap_file) { LOG_FATAL(LOADER, "Failed to load RAP file: %s", rap_path); return false; } LOG_NOTICE(LOADER, "Loading RAP file %s.rap", ci_str); rap_file.read(rap_key, 0x10); // Convert the RAP key. rap_to_rif(rap_key, npdrm_key); return true; }
bool SELFDecrypter::GetKeyFromRap(u8 *content_id, u8 *npdrm_key) { // Set empty RAP key. u8 rap_key[0x10]; memset(rap_key, 0, 0x10); // Try to find a matching RAP file under dev_usb000. std::string ci_str((const char *)content_id); std::string rap_path(fmt::ToUTF8(wxGetCwd()) + "/dev_usb000/" + ci_str + ".rap"); // Check if we have a valid RAP file. if (!wxFile::Exists(fmt::FromUTF8(rap_path))) { ConLog.Error("This application requires a valid RAP file for decryption!"); return false; } // Open the RAP file and read the key. wxFile rap_file(fmt::FromUTF8(rap_path), wxFile::read); if (!rap_file.IsOpened()) { ConLog.Error("Failed to load RAP file!"); return false; } ConLog.Write("Loading RAP file %s", (ci_str + ".rap").c_str()); rap_file.Read(rap_key, 0x10); rap_file.Close(); // Convert the RAP key. rap_to_rif(rap_key, npdrm_key); return true; }
std::array<u8, 0x10> GetEdatRifKeyFromRapFile(const fs::file& rap_file) { std::array<u8, 0x10> rapkey{ 0 }; std::array<u8, 0x10> rifkey{ 0 }; rap_file.read<std::array<u8, 0x10>>(rapkey); rap_to_rif(rapkey.data(), rifkey.data()); return rifkey; }
bool SELFDecrypter::GetKeyFromRap(u8 *content_id, u8 *npdrm_key) { // Set empty RAP key. u8 rap_key[0x10]; memset(rap_key, 0, 0x10); // Try to find a matching RAP file under dev_usb000. std::string ci_str((const char *)content_id); // TODO: This shouldn't use current dir std::string rap_path("./dev_usb000/" + ci_str + ".rap"); // Check if we have a valid RAP file. if (!rExists(rap_path)) { LOG_ERROR(LOADER, "This application requires a valid RAP file for decryption!"); return false; } // Open the RAP file and read the key. rFile rap_file(rap_path, rFile::read); if (!rap_file.IsOpened()) { LOG_ERROR(LOADER, "Failed to load RAP file!"); return false; } LOG_NOTICE(LOADER, "Loading RAP file %s", (ci_str + ".rap").c_str()); rap_file.Read(rap_key, 0x10); rap_file.Close(); // Convert the RAP key. rap_to_rif(rap_key, npdrm_key); return true; }