diff options
| author | JosJuice <josjuice@gmail.com> | 2019-05-07 14:43:50 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-07 14:43:50 +0200 |
| commit | 91f5d577cc9718dfbfdc2243e7f757de343eaf53 (patch) | |
| tree | 47a5f097ae12377bdbde9120ca0e7fb3bae8dbd1 /Source/Core | |
| parent | 6cc1e7cfdb89a7373b843675e2c4460b6324a8f5 (diff) | |
| parent | 2740ff9a9d1207ec6d4ea34ff7bc1db2ede619a0 (diff) | |
Merge pull request #8084 from leoetlino/wiisave-sign
WiiSave: Fix save signing
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/HW/WiiSave.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/Source/Core/Core/HW/WiiSave.cpp b/Source/Core/Core/HW/WiiSave.cpp index 0f8d48c77e..dc70fdceae 100644 --- a/Source/Core/Core/HW/WiiSave.cpp +++ b/Source/Core/Core/HW/WiiSave.cpp @@ -15,6 +15,7 @@ #include <cstdio> #include <cstring> #include <mbedtls/md5.h> +#include <mbedtls/sha1.h> #include <memory> #include <optional> #include <string> @@ -403,17 +404,21 @@ private: return false; // Read data to sign. - const u32 data_size = bk_header->size_of_files + sizeof(BkHeader); - auto data = std::make_unique<u8[]>(data_size); - m_file.Seek(sizeof(Header), SEEK_SET); - if (!m_file.ReadBytes(data.get(), data_size)) - return false; + std::array<u8, 20> data_sha1; + { + const u32 data_size = bk_header->size_of_files + sizeof(BkHeader); + auto data = std::make_unique<u8[]>(data_size); + m_file.Seek(sizeof(Header), SEEK_SET); + if (!m_file.ReadBytes(data.get(), data_size)) + return false; + mbedtls_sha1(data.get(), data_size, data_sha1.data()); + } // Sign the data. IOS::CertECC ap_cert; Common::ec::Signature ap_sig; - m_iosc.Sign(ap_sig.data(), reinterpret_cast<u8*>(&ap_cert), Titles::SYSTEM_MENU, data.get(), - data_size); + m_iosc.Sign(ap_sig.data(), reinterpret_cast<u8*>(&ap_cert), Titles::SYSTEM_MENU, + data_sha1.data(), static_cast<u32>(data_sha1.size())); // Write signatures. if (!m_file.Seek(0, SEEK_END)) |
