VolumeWad.h 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // Copyright 2008 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <map>
  5. #include <memory>
  6. #include <optional>
  7. #include <string>
  8. #include <vector>
  9. #include "Common/CommonTypes.h"
  10. #include "Core/IOS/ES/Formats.h"
  11. #include "DiscIO/Volume.h"
  12. namespace DiscIO
  13. {
  14. class BlobReader;
  15. enum class BlobType;
  16. enum class Country;
  17. class FileSystem;
  18. enum class Language;
  19. enum class Region;
  20. enum class Platform;
  21. class VolumeWAD : public Volume
  22. {
  23. public:
  24. VolumeWAD(std::unique_ptr<BlobReader> reader);
  25. bool Read(u64 offset, u64 length, u8* buffer,
  26. const Partition& partition = PARTITION_NONE) const override;
  27. const FileSystem* GetFileSystem(const Partition& partition = PARTITION_NONE) const override;
  28. std::optional<u64> GetTitleID(const Partition& partition = PARTITION_NONE) const override;
  29. const IOS::ES::TicketReader&
  30. GetTicket(const Partition& partition = PARTITION_NONE) const override;
  31. const IOS::ES::TMDReader& GetTMD(const Partition& partition = PARTITION_NONE) const override;
  32. const std::vector<u8>&
  33. GetCertificateChain(const Partition& partition = PARTITION_NONE) const override;
  34. std::vector<u8> GetContent(u16 index) const override;
  35. std::vector<u64> GetContentOffsets() const override;
  36. bool CheckContentIntegrity(const IOS::ES::Content& content, const std::vector<u8>& encrypted_data,
  37. const IOS::ES::TicketReader& ticket) const override;
  38. IOS::ES::TicketReader GetTicketWithFixedCommonKey() const override;
  39. std::string GetGameID(const Partition& partition = PARTITION_NONE) const override;
  40. std::string GetGameTDBID(const Partition& partition = PARTITION_NONE) const override;
  41. std::string GetMakerID(const Partition& partition = PARTITION_NONE) const override;
  42. std::optional<u16> GetRevision(const Partition& partition = PARTITION_NONE) const override;
  43. std::string GetInternalName(const Partition& partition = PARTITION_NONE) const override
  44. {
  45. return "";
  46. }
  47. std::map<Language, std::string> GetLongNames() const override;
  48. std::vector<u32> GetBanner(u32* width, u32* height) const override;
  49. std::string GetApploaderDate(const Partition& partition = PARTITION_NONE) const override
  50. {
  51. return "";
  52. }
  53. Platform GetVolumeType() const override;
  54. bool IsDatelDisc() const override;
  55. bool IsNKit() const override;
  56. Region GetRegion() const override;
  57. Country GetCountry(const Partition& partition = PARTITION_NONE) const override;
  58. BlobType GetBlobType() const override;
  59. u64 GetDataSize() const override;
  60. DataSizeType GetDataSizeType() const override;
  61. u64 GetRawSize() const override;
  62. const BlobReader& GetBlobReader() const override;
  63. std::array<u8, 20> GetSyncHash() const override;
  64. private:
  65. std::unique_ptr<BlobReader> m_reader;
  66. IOS::ES::TicketReader m_ticket;
  67. IOS::ES::TMDReader m_tmd;
  68. std::vector<u8> m_cert_chain;
  69. u32 m_cert_chain_offset = 0;
  70. u32 m_ticket_offset = 0;
  71. u32 m_tmd_offset = 0;
  72. u32 m_data_offset = 0;
  73. u32 m_opening_bnr_offset = 0;
  74. u32 m_hdr_size = 0;
  75. u32 m_cert_chain_size = 0;
  76. u32 m_ticket_size = 0;
  77. u32 m_tmd_size = 0;
  78. u32 m_data_size = 0;
  79. u32 m_opening_bnr_size = 0;
  80. };
  81. } // namespace DiscIO