diff options
| author | Zach Hilman <zachhilman@gmail.com> | 2019-04-10 12:07:29 -0400 |
|---|---|---|
| committer | Zach Hilman <zachhilman@gmail.com> | 2019-09-21 16:43:10 -0400 |
| commit | 3a1899d143b6b50da6c1ed4fcc03390ef210df75 (patch) | |
| tree | a7b0d364e6e601f8d10a98e01b467b6e8ba337e4 /src/core/file_sys/bis_factory.cpp | |
| parent | 97b8c9d2c380f11c41b038b6e16466f1fe95526f (diff) | |
bis_factory: Add accessors for BIS partitions
Diffstat (limited to 'src/core/file_sys/bis_factory.cpp')
| -rw-r--r-- | src/core/file_sys/bis_factory.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/core/file_sys/bis_factory.cpp b/src/core/file_sys/bis_factory.cpp index e29f70b3a..70a04f6a0 100644 --- a/src/core/file_sys/bis_factory.cpp +++ b/src/core/file_sys/bis_factory.cpp @@ -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 |
