summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2019-05-07 14:43:50 +0200
committerGitHub <noreply@github.com>2019-05-07 14:43:50 +0200
commit91f5d577cc9718dfbfdc2243e7f757de343eaf53 (patch)
tree47a5f097ae12377bdbde9120ca0e7fb3bae8dbd1 /Source/Core
parent6cc1e7cfdb89a7373b843675e2c4460b6324a8f5 (diff)
parent2740ff9a9d1207ec6d4ea34ff7bc1db2ede619a0 (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.cpp19
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))