diff options
| author | JMC47 <JMC4789@gmail.com> | 2020-09-06 17:14:08 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-06 17:14:08 -0400 |
| commit | e7e51756068a450b6e920c7783c81d7df4d2d133 (patch) | |
| tree | 94f0bfe833986f8d35f0d2a40842807601f53b9f /Source/Core/DiscIO/VolumeWad.cpp | |
| parent | 344fdabf23c048b81b8e87008a7a16837d180f55 (diff) | |
| parent | fc6c1931fa09513388f35507b724bc378a0758e1 (diff) | |
Merge pull request #8861 from JosJuice/netplay-hash
Make netplay's "same game" check more robust
Diffstat (limited to 'Source/Core/DiscIO/VolumeWad.cpp')
| -rw-r--r-- | Source/Core/DiscIO/VolumeWad.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Source/Core/DiscIO/VolumeWad.cpp b/Source/Core/DiscIO/VolumeWad.cpp index b7b8fa35cd..86aebb20b6 100644 --- a/Source/Core/DiscIO/VolumeWad.cpp +++ b/Source/Core/DiscIO/VolumeWad.cpp @@ -40,6 +40,7 @@ VolumeWAD::VolumeWAD(std::unique_ptr<BlobReader> reader) : m_reader(std::move(re m_ticket_size = m_reader->ReadSwapped<u32>(0x10).value_or(0); m_tmd_size = m_reader->ReadSwapped<u32>(0x14).value_or(0); m_data_size = m_reader->ReadSwapped<u32>(0x18).value_or(0); + m_opening_bnr_size = m_reader->ReadSwapped<u32>(0x1C).value_or(0); m_cert_chain_offset = Common::AlignUp(m_hdr_size, 0x40); m_ticket_offset = m_cert_chain_offset + Common::AlignUp(m_cert_chain_size, 0x40); @@ -342,4 +343,22 @@ const BlobReader& VolumeWAD::GetBlobReader() const return *m_reader; } +std::array<u8, 20> VolumeWAD::GetSyncHash() const +{ + // We can skip hashing the contents since the TMD contains hashes of the contents. + // We specifically don't hash the ticket, since its console ID can differ without any problems. + + mbedtls_sha1_context context; + mbedtls_sha1_init(&context); + mbedtls_sha1_starts_ret(&context); + + AddTMDToSyncHash(&context, PARTITION_NONE); + + ReadAndAddToSyncHash(&context, m_opening_bnr_offset, m_opening_bnr_size, PARTITION_NONE); + + std::array<u8, 20> hash; + mbedtls_sha1_finish_ret(&context, hash.data()); + return hash; +} + } // namespace DiscIO |
