mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-26 18:41:31 +00:00
Move AES code to Common/Crypto
This commit is contained in:
parent
c1a139e8ac
commit
5104caf6a6
@ -30,6 +30,7 @@ set(SRCS Analytics.cpp
|
|||||||
x64ABI.cpp
|
x64ABI.cpp
|
||||||
x64Emitter.cpp
|
x64Emitter.cpp
|
||||||
MD5.cpp
|
MD5.cpp
|
||||||
|
Crypto/AES.cpp
|
||||||
Crypto/bn.cpp
|
Crypto/bn.cpp
|
||||||
Crypto/ec.cpp
|
Crypto/ec.cpp
|
||||||
Logging/LogManager.cpp)
|
Logging/LogManager.cpp)
|
||||||
|
@ -139,6 +139,7 @@
|
|||||||
<ClInclude Include="x64ABI.h" />
|
<ClInclude Include="x64ABI.h" />
|
||||||
<ClInclude Include="x64Emitter.h" />
|
<ClInclude Include="x64Emitter.h" />
|
||||||
<ClInclude Include="x64Reg.h" />
|
<ClInclude Include="x64Reg.h" />
|
||||||
|
<ClInclude Include="Crypto\AES.h" />
|
||||||
<ClInclude Include="Crypto\bn.h" />
|
<ClInclude Include="Crypto\bn.h" />
|
||||||
<ClInclude Include="Crypto\ec.h" />
|
<ClInclude Include="Crypto\ec.h" />
|
||||||
<ClInclude Include="Logging\ConsoleListener.h" />
|
<ClInclude Include="Logging\ConsoleListener.h" />
|
||||||
@ -188,6 +189,7 @@
|
|||||||
<ClCompile Include="x64CPUDetect.cpp" />
|
<ClCompile Include="x64CPUDetect.cpp" />
|
||||||
<ClCompile Include="x64Emitter.cpp" />
|
<ClCompile Include="x64Emitter.cpp" />
|
||||||
<ClCompile Include="x64FPURoundMode.cpp" />
|
<ClCompile Include="x64FPURoundMode.cpp" />
|
||||||
|
<ClCompile Include="Crypto\AES.cpp" />
|
||||||
<ClCompile Include="Crypto\bn.cpp" />
|
<ClCompile Include="Crypto\bn.cpp" />
|
||||||
<ClCompile Include="Crypto\ec.cpp" />
|
<ClCompile Include="Crypto\ec.cpp" />
|
||||||
<ClCompile Include="Logging\LogManager.cpp" />
|
<ClCompile Include="Logging\LogManager.cpp" />
|
||||||
|
@ -75,6 +75,9 @@
|
|||||||
<ClInclude Include="Logging\LogManager.h">
|
<ClInclude Include="Logging\LogManager.h">
|
||||||
<Filter>Logging</Filter>
|
<Filter>Logging</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Crypto\AES.h">
|
||||||
|
<Filter>Crypto</Filter>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="Crypto\ec.h">
|
<ClInclude Include="Crypto\ec.h">
|
||||||
<Filter>Crypto</Filter>
|
<Filter>Crypto</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@ -259,6 +262,9 @@
|
|||||||
<ClCompile Include="x64CPUDetect.cpp" />
|
<ClCompile Include="x64CPUDetect.cpp" />
|
||||||
<ClCompile Include="x64Emitter.cpp" />
|
<ClCompile Include="x64Emitter.cpp" />
|
||||||
<ClCompile Include="x64FPURoundMode.cpp" />
|
<ClCompile Include="x64FPURoundMode.cpp" />
|
||||||
|
<ClCompile Include="Crypto\AES.cpp">
|
||||||
|
<Filter>Crypto</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="Crypto\bn.cpp">
|
<ClCompile Include="Crypto\bn.cpp">
|
||||||
<Filter>Crypto</Filter>
|
<Filter>Crypto</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
24
Source/Core/Common/Crypto/AES.cpp
Normal file
24
Source/Core/Common/Crypto/AES.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Copyright 2017 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2+
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include <mbedtls/aes.h>
|
||||||
|
|
||||||
|
#include "Common/Crypto/AES.h"
|
||||||
|
|
||||||
|
namespace Common
|
||||||
|
{
|
||||||
|
namespace AES
|
||||||
|
{
|
||||||
|
std::vector<u8> Decrypt(const u8* key, u8* iv, const u8* src, size_t size)
|
||||||
|
{
|
||||||
|
mbedtls_aes_context aes_ctx;
|
||||||
|
std::vector<u8> buffer(size);
|
||||||
|
|
||||||
|
mbedtls_aes_setkey_dec(&aes_ctx, key, 128);
|
||||||
|
mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, size, iv, src, buffer.data());
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
} // namespace AES
|
||||||
|
} // namespace Common
|
18
Source/Core/Common/Crypto/AES.h
Normal file
18
Source/Core/Common/Crypto/AES.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright 2017 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2+
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
|
namespace Common
|
||||||
|
{
|
||||||
|
namespace AES
|
||||||
|
{
|
||||||
|
std::vector<u8> Decrypt(const u8* key, u8* iv, const u8* src, size_t size);
|
||||||
|
} // namespace AES
|
||||||
|
} // namespace Common
|
@ -10,11 +10,10 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <mbedtls/aes.h>
|
|
||||||
|
|
||||||
#include "Common/ChunkFile.h"
|
#include "Common/ChunkFile.h"
|
||||||
#include "Common/CommonFuncs.h"
|
#include "Common/CommonFuncs.h"
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
#include "Common/Crypto/AES.h"
|
||||||
|
|
||||||
namespace IOS
|
namespace IOS
|
||||||
{
|
{
|
||||||
@ -22,17 +21,6 @@ namespace ES
|
|||||||
{
|
{
|
||||||
constexpr size_t CONTENT_VIEW_SIZE = 0x10;
|
constexpr size_t CONTENT_VIEW_SIZE = 0x10;
|
||||||
|
|
||||||
std::vector<u8> AESDecode(const u8* key, u8* iv, const u8* src, u32 size)
|
|
||||||
{
|
|
||||||
mbedtls_aes_context aes_ctx;
|
|
||||||
std::vector<u8> buffer(size);
|
|
||||||
|
|
||||||
mbedtls_aes_setkey_dec(&aes_ctx, key, 128);
|
|
||||||
mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, size, iv, src, buffer.data());
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
TMDReader::TMDReader(const std::vector<u8>& bytes) : m_bytes(bytes)
|
TMDReader::TMDReader(const std::vector<u8>& bytes) : m_bytes(bytes)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -264,7 +252,8 @@ std::vector<u8> TicketReader::GetTitleKey() const
|
|||||||
0x48, 0xd9, 0xc5, 0x45, 0x73, 0x81, 0xaa, 0xf7};
|
0x48, 0xd9, 0xc5, 0x45, 0x73, 0x81, 0xaa, 0xf7};
|
||||||
u8 iv[16] = {};
|
u8 iv[16] = {};
|
||||||
std::copy_n(&m_bytes[GetOffset() + offsetof(Ticket, title_id)], sizeof(Ticket::title_id), iv);
|
std::copy_n(&m_bytes[GetOffset() + offsetof(Ticket, title_id)], sizeof(Ticket::title_id), iv);
|
||||||
return AESDecode(common_key, iv, &m_bytes[GetOffset() + offsetof(Ticket, title_key)], 16);
|
return Common::AES::Decrypt(common_key, iv, &m_bytes[GetOffset() + offsetof(Ticket, title_key)],
|
||||||
|
16);
|
||||||
}
|
}
|
||||||
} // namespace ES
|
} // namespace ES
|
||||||
} // namespace IOS
|
} // namespace IOS
|
||||||
|
@ -101,8 +101,6 @@ struct Ticket
|
|||||||
static_assert(sizeof(Ticket) == 356, "Ticket has the wrong size");
|
static_assert(sizeof(Ticket) == 356, "Ticket has the wrong size");
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
std::vector<u8> AESDecode(const u8* key, u8* iv, const u8* src, u32 size);
|
|
||||||
|
|
||||||
class TMDReader final
|
class TMDReader final
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "Common/Align.h"
|
#include "Common/Align.h"
|
||||||
#include "Common/CommonFuncs.h"
|
#include "Common/CommonFuncs.h"
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
#include "Common/Crypto/AES.h"
|
||||||
#include "Common/FileUtil.h"
|
#include "Common/FileUtil.h"
|
||||||
#include "Common/Logging/Log.h"
|
#include "Common/Logging/Log.h"
|
||||||
#include "Common/MsgHandler.h"
|
#include "Common/MsgHandler.h"
|
||||||
@ -239,7 +240,7 @@ void CNANDContentLoader::InitializeContentEntries(const std::vector<u8>& data_ap
|
|||||||
|
|
||||||
u32 rounded_size = Common::AlignUp(static_cast<u32>(content.size), 0x40);
|
u32 rounded_size = Common::AlignUp(static_cast<u32>(content.size), 0x40);
|
||||||
|
|
||||||
m_Content[i].m_Data = std::make_unique<CNANDContentDataBuffer>(IOS::ES::AESDecode(
|
m_Content[i].m_Data = std::make_unique<CNANDContentDataBuffer>(Common::AES::Decrypt(
|
||||||
title_key.data(), iv.data(), &data_app[data_app_offset], rounded_size));
|
title_key.data(), iv.data(), &data_app[data_app_offset], rounded_size));
|
||||||
data_app_offset += rounded_size;
|
data_app_offset += rounded_size;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user