diff options
| author | Léo Lam <leo@innovatetechnologi.es> | 2019-05-07 01:02:38 +0200 |
|---|---|---|
| committer | Léo Lam <leo@innovatetechnologi.es> | 2019-05-07 01:09:48 +0200 |
| commit | 2740ff9a9d1207ec6d4ea34ff7bc1db2ede619a0 (patch) | |
| tree | d1b5555fe542f9ccd137a30f7b4b744584ad5ac9 /Source/Core | |
| parent | 6f6c7e5df06b29cb87f90a85d215d7bd948f2669 (diff) | |
WiiSave: Fix save signing
The system menu is passing the SHA1 hash of the save data to ES
to sign, not the save data itself.
Fixes save import in the System Menu for saves that were exported
by Dolphin.
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)) |
