mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 05:40:01 -06:00
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.
This commit is contained in:
@ -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))
|
||||
|
Reference in New Issue
Block a user