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 #include #include +#include #include #include #include @@ -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(data_size); - m_file.Seek(sizeof(Header), SEEK_SET); - if (!m_file.ReadBytes(data.get(), data_size)) - return false; + std::array data_sha1; + { + const u32 data_size = bk_header->size_of_files + sizeof(BkHeader); + auto data = std::make_unique(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(&ap_cert), Titles::SYSTEM_MENU, data.get(), - data_size); + m_iosc.Sign(ap_sig.data(), reinterpret_cast(&ap_cert), Titles::SYSTEM_MENU, + data_sha1.data(), static_cast(data_sha1.size())); // Write signatures. if (!m_file.Seek(0, SEEK_END))