diff --git a/build/visualstudio/nstool/nstool.vcxproj b/build/visualstudio/nstool/nstool.vcxproj index 05e9c1e..7eeb132 100644 --- a/build/visualstudio/nstool/nstool.vcxproj +++ b/build/visualstudio/nstool/nstool.vcxproj @@ -154,8 +154,10 @@ + + @@ -181,18 +183,12 @@ + - - - - - - - diff --git a/build/visualstudio/nstool/nstool.vcxproj.filters b/build/visualstudio/nstool/nstool.vcxproj.filters index 4aa666c..7358652 100644 --- a/build/visualstudio/nstool/nstool.vcxproj.filters +++ b/build/visualstudio/nstool/nstool.vcxproj.filters @@ -15,39 +15,33 @@ - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - Header Files Header Files + + Header Files + Header Files Header Files + + Header Files + Header Files Header Files + + Header Files + Header Files @@ -84,20 +78,20 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + - - Source Files - - - Source Files - - - Source Files - - - Source Files - Source Files @@ -110,36 +104,24 @@ Source Files + + Source Files + Source Files - + Source Files - - Source Files - - + Source Files Source Files - - Source Files - - - Source Files - - - Source Files - Source Files - - Source Files - Source Files @@ -152,5 +134,11 @@ Source Files + + Source Files + + + Source Files + \ No newline at end of file diff --git a/deps/libnintendo-hac b/deps/libnintendo-hac index e2fb1f3..6a6f57c 160000 --- a/deps/libnintendo-hac +++ b/deps/libnintendo-hac @@ -1 +1 @@ -Subproject commit e2fb1f3ad788533631d8855d484d14bec33ac961 +Subproject commit 6a6f57c66b56daeebc1631e639ea88e474965cb7 diff --git a/deps/libtoolchain b/deps/libtoolchain index 7948f58..3d15a0e 160000 --- a/deps/libtoolchain +++ b/deps/libtoolchain @@ -1 +1 @@ -Subproject commit 7948f581d32ebbfdf5a872b96c37938690f665e7 +Subproject commit 3d15a0eb1eff3c36fb4ac8a64196627e46e105ab diff --git a/src/FsProcess.cpp b/src/FsProcess.cpp index 78e2aee..d148336 100644 --- a/src/FsProcess.cpp +++ b/src/FsProcess.cpp @@ -137,7 +137,7 @@ void nstool::FsProcess::extractFs() continue; - } catch (tc::io::DirectoryNotFoundException& e) { + } catch (tc::io::DirectoryNotFoundException&) { // acceptable exception, just means directory didn't exist } @@ -168,7 +168,7 @@ void nstool::FsProcess::extractFs() writeStreamToFile(file_stream, itr->extract_path, mDataCache); continue; - } catch (tc::io::DirectoryNotFoundException& e) { + } catch (tc::io::DirectoryNotFoundException&) { // acceptable exception, just means the parent directory didn't exist } @@ -178,7 +178,7 @@ void nstool::FsProcess::extractFs() tc::io::PathUtil::pathToUnixUTF8(itr->extract_path, literal_extract_path_str); fmt::print("[WARNING] Extract path was invalid, and was skipped: {:s}\n", literal_extract_path_str); continue; - } catch (tc::io::FileNotFoundException& e) { + } catch (tc::io::FileNotFoundException&) { // acceptable exception, just means file didn't exist } @@ -195,7 +195,7 @@ void nstool::FsProcess::extractFs() // directory extract successful, continue to next job continue; - } catch (tc::io::DirectoryNotFoundException& e) { + } catch (tc::io::DirectoryNotFoundException&) { // acceptable exception, just means directory didn't exist } diff --git a/src/KeyBag.cpp b/src/KeyBag.cpp index 684ddf1..3938e5a 100644 --- a/src/KeyBag.cpp +++ b/src/KeyBag.cpp @@ -153,7 +153,7 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa const std::string kPrivateStr = "private"; std::vector kNcaKeyAreaKeyIndexStr = { "application", "ocean", "system" }; - static const size_t kMasterKeyMax = 0x20; + static const size_t kKeyGenerationNum = 0x100; /**/ // import key data @@ -162,11 +162,11 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa /* internal key sources */ if (name_idx < kMasterBase.size()) { - for (size_t mkey_rev = 0; mkey_rev < kMasterKeyMax; mkey_rev++) + for (size_t keygen_rev = 0; keygen_rev < kKeyGenerationNum; keygen_rev++) { // std::map master_key; - //fmt::print("{:s}_key_{:02x}\n", kMasterBase[name_idx], mkey_rev); - _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kMasterBase[name_idx], kKeyStr, mkey_rev), master_key[mkey_rev]); + //fmt::print("{:s}_key_{:02x}\n", kMasterBase[name_idx], keygen_rev); + _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kMasterBase[name_idx], kKeyStr, keygen_rev), master_key[(byte_t)keygen_rev]); } } @@ -227,10 +227,10 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa // package1_key_xx if (name_idx < kPkg1Base.size()) { - for (size_t mkey_rev = 0; mkey_rev < kMasterKeyMax; mkey_rev++) + for (size_t keygen_rev = 0; keygen_rev < kKeyGenerationNum; keygen_rev++) { - //fmt::print("{:s}_key_{:02x}\n", kPkg1Base[name_idx], mkey_rev); - _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kPkg1Base[name_idx], kKeyStr, mkey_rev), pkg1_key[mkey_rev]); + //fmt::print("{:s}_key_{:02x}\n", kPkg1Base[name_idx], keygen_rev); + _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kPkg1Base[name_idx], kKeyStr, keygen_rev), pkg1_key[(byte_t)keygen_rev]); } } @@ -238,10 +238,10 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa if (name_idx < kPkg2Base.size()) { // package2_key_xx - for (size_t mkey_rev = 0; mkey_rev < kMasterKeyMax; mkey_rev++) + for (size_t keygen_rev = 0; keygen_rev < kKeyGenerationNum; keygen_rev++) { - //fmt::print("{:s}_key_{:02x}\n", kPkg2Base[name_idx], mkey_rev); - _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kPkg2Base[name_idx], kKeyStr, mkey_rev), pkg2_key[mkey_rev]); + //fmt::print("{:s}_key_{:02x}\n", kPkg2Base[name_idx], keygen_rev); + _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kPkg2Base[name_idx], kKeyStr, keygen_rev), pkg2_key[(byte_t)keygen_rev]); } // package2_sign_key @@ -254,10 +254,10 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa // ticket common key if (name_idx < kTicketCommonKeyBase.size()) { - for (size_t mkey_rev = 0; mkey_rev < kMasterKeyMax; mkey_rev++) + for (size_t keygen_rev = 0; keygen_rev < kKeyGenerationNum; keygen_rev++) { - //fmt::print("{:s}_{:02x}\n", kTicketCommonKeyBase[name_idx], mkey_rev); - _SAVE_AES128KEY(fmt::format("{:s}_{:02x}", kTicketCommonKeyBase[name_idx], mkey_rev), etik_common_key[mkey_rev]); + //fmt::print("{:s}_{:02x}\n", kTicketCommonKeyBase[name_idx], keygen_rev); + _SAVE_AES128KEY(fmt::format("{:s}_{:02x}", kTicketCommonKeyBase[name_idx], keygen_rev), etik_common_key[(byte_t)keygen_rev]); } } @@ -269,11 +269,11 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa //_SAVE_AES128XTSKEY(fmt::format("{:s}_{:s}", kContentArchiveHeaderBase[name_idx], kKeyStr), nca_header_key); // nca header sign0 key (generations) - for (size_t mkey_rev = 0; mkey_rev < kMasterKeyMax; mkey_rev++) + for (size_t keygen_rev = 0; keygen_rev < kKeyGenerationNum; keygen_rev++) { - //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kContentArchiveHeaderBase[name_idx], kSignKey, mkey_rev, kPrivateStr); - //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kContentArchiveHeaderBase[name_idx], kSignKey, mkey_rev, kModulusStr); - _SAVE_RSAKEY(fmt::format("{:s}_{:s}_{:02x}", kContentArchiveHeaderBase[name_idx], kSignKey, mkey_rev), nca_header_sign0_key[mkey_rev], 2048); + //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kContentArchiveHeaderBase[name_idx], kSignKey, keygen_rev, kPrivateStr); + //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kContentArchiveHeaderBase[name_idx], kSignKey, keygen_rev, kModulusStr); + _SAVE_RSAKEY(fmt::format("{:s}_{:s}_{:02x}", kContentArchiveHeaderBase[name_idx], kSignKey, keygen_rev), nca_header_sign0_key[(byte_t)keygen_rev], 2048); } // nca header sign0 key (generation 0) //fmt::print("{:s}_{:s}_{:s}\n", kContentArchiveHeaderBase[name_idx], kSignKey, kPrivateStr); @@ -287,24 +287,24 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa // nca key area encryption keys if (name_idx < kNcaKeyAreaEncKeyBase.size()) { - for (size_t mkey_rev = 0; mkey_rev < kMasterKeyMax; mkey_rev++) + for (size_t keygen_rev = 0; keygen_rev < kKeyGenerationNum; keygen_rev++) { for (size_t keak_idx = 0; keak_idx < kNcaKeyAreaKeyIndexStr.size(); keak_idx++) { - //fmt::print("{:s}_{:s}_{:02x}\n", kNcaKeyAreaEncKeyBase[name_idx], kNcaKeyAreaKeyIndexStr[keak_idx], mkey_rev); - _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kNcaKeyAreaEncKeyBase[name_idx], kNcaKeyAreaKeyIndexStr[keak_idx], mkey_rev), nca_key_area_encryption_key[keak_idx][mkey_rev]); + //fmt::print("{:s}_{:s}_{:02x}\n", kNcaKeyAreaEncKeyBase[name_idx], kNcaKeyAreaKeyIndexStr[keak_idx], keygen_rev); + _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kNcaKeyAreaEncKeyBase[name_idx], kNcaKeyAreaKeyIndexStr[keak_idx], keygen_rev), nca_key_area_encryption_key[keak_idx][(byte_t)keygen_rev]); } } } // nca key area "hw" encryption keys if (name_idx < kNcaKeyAreaEncKeyHwBase.size()) { - for (size_t mkey_rev = 0; mkey_rev < kMasterKeyMax; mkey_rev++) + for (size_t keygen_rev = 0; keygen_rev < kKeyGenerationNum; keygen_rev++) { for (size_t keak_idx = 0; keak_idx < kNcaKeyAreaKeyIndexStr.size(); keak_idx++) { - //fmt::print("{:s}_{:s}_{:02x}\n", kNcaKeyAreaEncKeyHwBase[name_idx], kNcaKeyAreaKeyIndexStr[keak_idx], mkey_rev); - _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kNcaKeyAreaEncKeyHwBase[name_idx], kNcaKeyAreaKeyIndexStr[keak_idx], mkey_rev), nca_key_area_encryption_key_hw[keak_idx][mkey_rev]); + //fmt::print("{:s}_{:s}_{:02x}\n", kNcaKeyAreaEncKeyHwBase[name_idx], kNcaKeyAreaKeyIndexStr[keak_idx], keygen_rev); + _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kNcaKeyAreaEncKeyHwBase[name_idx], kNcaKeyAreaKeyIndexStr[keak_idx], keygen_rev), nca_key_area_encryption_key_hw[keak_idx][(byte_t)keygen_rev]); } } } @@ -313,11 +313,11 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa if (name_idx < kAcidBase.size()) { // acid sign key (generations) - for (size_t mkey_rev = 0; mkey_rev < kMasterKeyMax; mkey_rev++) + for (size_t keygen_rev = 0; keygen_rev < kKeyGenerationNum; keygen_rev++) { - //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kAcidBase[name_idx], kSignKey, mkey_rev, kPrivateStr); - //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kAcidBase[name_idx], kSignKey, mkey_rev, kModulusStr); - _SAVE_RSAKEY(fmt::format("{:s}_{:s}_{:02x}", kAcidBase[name_idx], kSignKey, mkey_rev), acid_sign_key[mkey_rev], 2048); + //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kAcidBase[name_idx], kSignKey, keygen_rev, kPrivateStr); + //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kAcidBase[name_idx], kSignKey, keygen_rev, kModulusStr); + _SAVE_RSAKEY(fmt::format("{:s}_{:s}_{:02x}", kAcidBase[name_idx], kSignKey, keygen_rev), acid_sign_key[(byte_t)keygen_rev], 2048); } // acid sign key (generation 0) //fmt::print("{:s}_{:s}_{:s}\n", kAcidBase[name_idx], kSignKey, kPrivateStr); @@ -329,11 +329,11 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa if (name_idx < kNrrCertBase.size()) { // nrr certificate sign key (generations) - for (size_t mkey_rev = 0; mkey_rev < kMasterKeyMax; mkey_rev++) + for (size_t keygen_rev = 0; keygen_rev < kKeyGenerationNum; keygen_rev++) { - //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kNrrCertBase[name_idx], kSignKey, mkey_rev, kPrivateStr); - //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kNrrCertBase[name_idx], kSignKey, mkey_rev, kModulusStr); - _SAVE_RSAKEY(fmt::format("{:s}_{:s}_{:02x}", kNrrCertBase[name_idx], kSignKey, mkey_rev), nrr_certificate_sign_key[mkey_rev], 2048); + //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kNrrCertBase[name_idx], kSignKey, keygen_rev, kPrivateStr); + //fmt::print("{:s}_{:s}_{:02x}_{:s}\n", kNrrCertBase[name_idx], kSignKey, keygen_rev, kModulusStr); + _SAVE_RSAKEY(fmt::format("{:s}_{:s}_{:02x}", kNrrCertBase[name_idx], kSignKey, keygen_rev), nrr_certificate_sign_key[(byte_t)keygen_rev], 2048); } // nrr certificate sign key (generation 0) //fmt::print("{:s}_{:s}_{:s}\n", kNrrCertBase[name_idx], kSignKey, kPrivateStr); @@ -345,7 +345,7 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa if (name_idx < kXciHeaderBase.size()) { // xci header key (based on index) - for (size_t kek_index = 0; kek_index < 8; kek_index++) + for (byte_t kek_index = 0; kek_index < 8; kek_index++) { //fmt::print("{:s}_{:s}_{:02x}\n", kXciHeaderBase[name_idx], kKeyStr, kek_index); _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kXciHeaderBase[name_idx], kKeyStr, kek_index), xci_header_key[kek_index]); @@ -364,7 +364,7 @@ void nstool::KeyBagInitializer::importBaseKeyFile(const tc::io::Path& keyfile_pa if (name_idx < kXciInitialDataBase.size()) { // xci initial data key (based on index) - for (size_t kek_index = 0; kek_index < 8; kek_index++) + for (byte_t kek_index = 0; kek_index < 8; kek_index++) { //fmt::print("{:s}_{:s}_{:02x}\n", kXciInitialDataBase[name_idx], kKekStr, kek_index); _SAVE_AES128KEY(fmt::format("{:s}_{:s}_{:02x}", kXciInitialDataBase[name_idx], kKekStr, kek_index), xci_initial_data_kek[kek_index]);