summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/VolumeWad.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2020-09-06 17:14:08 -0400
committerGitHub <noreply@github.com>2020-09-06 17:14:08 -0400
commite7e51756068a450b6e920c7783c81d7df4d2d133 (patch)
tree94f0bfe833986f8d35f0d2a40842807601f53b9f /Source/Core/DiscIO/VolumeWad.cpp
parent344fdabf23c048b81b8e87008a7a16837d180f55 (diff)
parentfc6c1931fa09513388f35507b724bc378a0758e1 (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.cpp19
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