|
|
@@ -39,4 +39,45 @@ VirtualDir BISFactory::GetModificationDumpRoot(u64 title_id) const {
|
|
|
return GetOrCreateDirectoryRelative(dump_root, fmt::format("/{:016X}", title_id));
|
|
|
}
|
|
|
|
|
|
+VirtualDir BISFactory::OpenPartition(BisPartitionId id) const {
|
|
|
+ switch (id) {
|
|
|
+ case BisPartitionId::CalibrationFile:
|
|
|
+ return GetOrCreateDirectoryRelative(nand_root, "/prodinfof");
|
|
|
+ case BisPartitionId::SafeMode:
|
|
|
+ return GetOrCreateDirectoryRelative(nand_root, "/safe");
|
|
|
+ case BisPartitionId::System:
|
|
|
+ return GetOrCreateDirectoryRelative(nand_root, "/system");
|
|
|
+ case BisPartitionId::User:
|
|
|
+ return GetOrCreateDirectoryRelative(nand_root, "/user");
|
|
|
+ default:
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+VirtualFile BISFactory::OpenPartitionStorage(BisPartitionId id) const {
|
|
|
+ Core::Crypto::KeyManager keys;
|
|
|
+ Core::Crypto::PartitionDataManager pdm{
|
|
|
+ Core::System::GetInstance().GetFilesystem()->OpenDirectory(
|
|
|
+ FileUtil::GetUserPath(FileUtil::UserPath::SysDataDir), Mode::Read)};
|
|
|
+ keys.PopulateFromPartitionData(pdm);
|
|
|
+
|
|
|
+ switch (id) {
|
|
|
+ case BisPartitionId::CalibrationBinary:
|
|
|
+ return pdm.GetDecryptedProdInfo();
|
|
|
+ case BisPartitionId::BootConfigAndPackage2Part1:
|
|
|
+ case BisPartitionId::BootConfigAndPackage2Part2:
|
|
|
+ case BisPartitionId::BootConfigAndPackage2Part3:
|
|
|
+ case BisPartitionId::BootConfigAndPackage2Part4:
|
|
|
+ case BisPartitionId::BootConfigAndPackage2Part5:
|
|
|
+ case BisPartitionId::BootConfigAndPackage2Part6: {
|
|
|
+ const auto new_id = static_cast<u8>(id) -
|
|
|
+ static_cast<u8>(BisPartitionId::BootConfigAndPackage2Part1) +
|
|
|
+ static_cast<u8>(Core::Crypto::Package2Type::NormalMain);
|
|
|
+ return pdm.GetPackage2Raw(static_cast<Core::Crypto::Package2Type>(new_id));
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
} // namespace FileSys
|