mirror of
https://github.com/yuzu-emu/yuzu.git
synced 2024-11-22 15:05:43 +01:00
externals: update mbedtls to 3.5.1
This commit is contained in:
parent
e04368ad7c
commit
4a66b48a7e
2
.gitmodules
vendored
2
.gitmodules
vendored
@ -24,7 +24,7 @@
|
|||||||
url = https://github.com/yuzu-emu/sirit.git
|
url = https://github.com/yuzu-emu/sirit.git
|
||||||
[submodule "mbedtls"]
|
[submodule "mbedtls"]
|
||||||
path = externals/mbedtls
|
path = externals/mbedtls
|
||||||
url = https://github.com/yuzu-emu/mbedtls.git
|
url = https://github.com/Mbed-TLS/mbedtls.git
|
||||||
[submodule "xbyak"]
|
[submodule "xbyak"]
|
||||||
path = externals/xbyak
|
path = externals/xbyak
|
||||||
url = https://github.com/herumi/xbyak.git
|
url = https://github.com/herumi/xbyak.git
|
||||||
|
@ -295,6 +295,7 @@ find_package(enet 1.3 MODULE)
|
|||||||
find_package(fmt 9 REQUIRED)
|
find_package(fmt 9 REQUIRED)
|
||||||
find_package(LLVM 17.0.2 MODULE COMPONENTS Demangle)
|
find_package(LLVM 17.0.2 MODULE COMPONENTS Demangle)
|
||||||
find_package(lz4 REQUIRED)
|
find_package(lz4 REQUIRED)
|
||||||
|
find_package(MbedTLS 3 CONFIG)
|
||||||
find_package(nlohmann_json 3.8 REQUIRED)
|
find_package(nlohmann_json 3.8 REQUIRED)
|
||||||
find_package(Opus 1.3 MODULE)
|
find_package(Opus 1.3 MODULE)
|
||||||
find_package(RenderDoc MODULE)
|
find_package(RenderDoc MODULE)
|
||||||
|
15
externals/CMakeLists.txt
vendored
15
externals/CMakeLists.txt
vendored
@ -39,12 +39,15 @@ endif()
|
|||||||
add_subdirectory(glad)
|
add_subdirectory(glad)
|
||||||
|
|
||||||
# mbedtls
|
# mbedtls
|
||||||
add_subdirectory(mbedtls)
|
if (NOT TARGET MbedTLS::mbedcrypto)
|
||||||
target_include_directories(mbedtls PUBLIC ./mbedtls/include)
|
set(ENABLE_PROGRAMS OFF)
|
||||||
if (NOT MSVC)
|
set(ENABLE_TESTING OFF)
|
||||||
target_compile_options(mbedcrypto PRIVATE
|
add_subdirectory(mbedtls)
|
||||||
-Wno-unused-but-set-variable
|
if (NOT MSVC)
|
||||||
-Wno-string-concatenation)
|
target_compile_options(mbedcrypto PRIVATE
|
||||||
|
-Wno-unused-but-set-variable
|
||||||
|
-Wno-string-concatenation)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# MicroProfile
|
# MicroProfile
|
||||||
|
2
externals/mbedtls
vendored
2
externals/mbedtls
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 8c88150ca139e06aa2aae8349df8292a88148ea1
|
Subproject commit edb8fec9882084344a314368ac7fd957a187519c
|
@ -901,7 +901,7 @@ endif()
|
|||||||
create_target_directory_groups(core)
|
create_target_directory_groups(core)
|
||||||
|
|
||||||
target_link_libraries(core PUBLIC common PRIVATE audio_core hid_core network video_core nx_tzdb tz)
|
target_link_libraries(core PUBLIC common PRIVATE audio_core hid_core network video_core nx_tzdb tz)
|
||||||
target_link_libraries(core PUBLIC Boost::headers PRIVATE fmt::fmt nlohmann_json::nlohmann_json mbedtls RenderDoc::API)
|
target_link_libraries(core PUBLIC Boost::headers PRIVATE fmt::fmt nlohmann_json::nlohmann_json MbedTLS::mbedcrypto RenderDoc::API)
|
||||||
if (MINGW)
|
if (MINGW)
|
||||||
target_link_libraries(core PRIVATE ${MSWSOCK_LIBRARY})
|
target_link_libraries(core PRIVATE ${MSWSOCK_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
|
@ -16,7 +16,7 @@ struct CipherContext;
|
|||||||
enum class Mode {
|
enum class Mode {
|
||||||
CTR = 11,
|
CTR = 11,
|
||||||
ECB = 2,
|
ECB = 2,
|
||||||
XTS = 70,
|
XTS = 74,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class Op {
|
enum class Op {
|
||||||
|
@ -532,7 +532,7 @@ static std::array<u8, target_size> MGF1(const std::array<u8, in_size>& seed) {
|
|||||||
while (out.size() < target_size) {
|
while (out.size() < target_size) {
|
||||||
out.resize(out.size() + 0x20);
|
out.resize(out.size() + 0x20);
|
||||||
seed_exp[in_size + 3] = static_cast<u8>(i);
|
seed_exp[in_size + 3] = static_cast<u8>(i);
|
||||||
mbedtls_sha256_ret(seed_exp.data(), seed_exp.size(), out.data() + out.size() - 0x20, 0);
|
mbedtls_sha256(seed_exp.data(), seed_exp.size(), out.data() + out.size() - 0x20, 0);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ std::array<u8, key_size> FindKeyFromHex(const std::vector<u8>& binary,
|
|||||||
|
|
||||||
std::array<u8, 0x20> temp{};
|
std::array<u8, 0x20> temp{};
|
||||||
for (size_t i = 0; i < binary.size() - key_size; ++i) {
|
for (size_t i = 0; i < binary.size() - key_size; ++i) {
|
||||||
mbedtls_sha256_ret(binary.data() + i, key_size, temp.data(), 0);
|
mbedtls_sha256(binary.data() + i, key_size, temp.data(), 0);
|
||||||
|
|
||||||
if (temp != hash)
|
if (temp != hash)
|
||||||
continue;
|
continue;
|
||||||
@ -206,7 +206,7 @@ static std::array<Key128, 0x20> FindEncryptedMasterKeyFromHex(const std::vector<
|
|||||||
AESCipher<Key128> cipher(key, Mode::ECB);
|
AESCipher<Key128> cipher(key, Mode::ECB);
|
||||||
for (size_t i = 0; i < binary.size() - 0x10; ++i) {
|
for (size_t i = 0; i < binary.size() - 0x10; ++i) {
|
||||||
cipher.Transcode(binary.data() + i, dec_temp.size(), dec_temp.data(), Op::Decrypt);
|
cipher.Transcode(binary.data() + i, dec_temp.size(), dec_temp.data(), Op::Decrypt);
|
||||||
mbedtls_sha256_ret(dec_temp.data(), dec_temp.size(), temp.data(), 0);
|
mbedtls_sha256(dec_temp.data(), dec_temp.size(), temp.data(), 0);
|
||||||
|
|
||||||
for (size_t k = 0; k < out.size(); ++k) {
|
for (size_t k = 0; k < out.size(); ++k) {
|
||||||
if (temp == master_key_hashes[k]) {
|
if (temp == master_key_hashes[k]) {
|
||||||
|
@ -64,7 +64,7 @@ static std::string GetRelativePathFromNcaID(const std::array<u8, 16>& nca_id, bo
|
|||||||
}
|
}
|
||||||
|
|
||||||
Core::Crypto::SHA256Hash hash{};
|
Core::Crypto::SHA256Hash hash{};
|
||||||
mbedtls_sha256_ret(nca_id.data(), nca_id.size(), hash.data(), 0);
|
mbedtls_sha256(nca_id.data(), nca_id.size(), hash.data(), 0);
|
||||||
|
|
||||||
const auto format_str =
|
const auto format_str =
|
||||||
fmt::runtime(cnmt_suffix ? "/000000{:02X}/{}.cnmt.nca" : "/000000{:02X}/{}.nca");
|
fmt::runtime(cnmt_suffix ? "/000000{:02X}/{}.cnmt.nca" : "/000000{:02X}/{}.nca");
|
||||||
@ -146,7 +146,7 @@ bool PlaceholderCache::Create(const NcaID& id, u64 size) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Core::Crypto::SHA256Hash hash{};
|
Core::Crypto::SHA256Hash hash{};
|
||||||
mbedtls_sha256_ret(id.data(), id.size(), hash.data(), 0);
|
mbedtls_sha256(id.data(), id.size(), hash.data(), 0);
|
||||||
const auto dirname = fmt::format("000000{:02X}", hash[0]);
|
const auto dirname = fmt::format("000000{:02X}", hash[0]);
|
||||||
|
|
||||||
const auto dir2 = GetOrCreateDirectoryRelative(dir, dirname);
|
const auto dir2 = GetOrCreateDirectoryRelative(dir, dirname);
|
||||||
@ -170,7 +170,7 @@ bool PlaceholderCache::Delete(const NcaID& id) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Core::Crypto::SHA256Hash hash{};
|
Core::Crypto::SHA256Hash hash{};
|
||||||
mbedtls_sha256_ret(id.data(), id.size(), hash.data(), 0);
|
mbedtls_sha256(id.data(), id.size(), hash.data(), 0);
|
||||||
const auto dirname = fmt::format("000000{:02X}", hash[0]);
|
const auto dirname = fmt::format("000000{:02X}", hash[0]);
|
||||||
|
|
||||||
const auto dir2 = GetOrCreateDirectoryRelative(dir, dirname);
|
const auto dir2 = GetOrCreateDirectoryRelative(dir, dirname);
|
||||||
@ -665,7 +665,7 @@ InstallResult RegisteredCache::InstallEntry(const NCA& nca, TitleType type,
|
|||||||
const OptionalHeader opt_header{0, 0};
|
const OptionalHeader opt_header{0, 0};
|
||||||
ContentRecord c_rec{{}, {}, {}, GetCRTypeFromNCAType(nca.GetType()), {}};
|
ContentRecord c_rec{{}, {}, {}, GetCRTypeFromNCAType(nca.GetType()), {}};
|
||||||
const auto& data = nca.GetBaseFile()->ReadBytes(0x100000);
|
const auto& data = nca.GetBaseFile()->ReadBytes(0x100000);
|
||||||
mbedtls_sha256_ret(data.data(), data.size(), c_rec.hash.data(), 0);
|
mbedtls_sha256(data.data(), data.size(), c_rec.hash.data(), 0);
|
||||||
std::memcpy(&c_rec.nca_id, &c_rec.hash, 16);
|
std::memcpy(&c_rec.nca_id, &c_rec.hash, 16);
|
||||||
const CNMT new_cnmt(header, opt_header, {c_rec}, {});
|
const CNMT new_cnmt(header, opt_header, {c_rec}, {});
|
||||||
if (!RawInstallYuzuMeta(new_cnmt)) {
|
if (!RawInstallYuzuMeta(new_cnmt)) {
|
||||||
@ -776,7 +776,7 @@ InstallResult RegisteredCache::RawInstallNCA(const NCA& nca, const VfsCopyFuncti
|
|||||||
id = *override_id;
|
id = *override_id;
|
||||||
} else {
|
} else {
|
||||||
const auto& data = in->ReadBytes(0x100000);
|
const auto& data = in->ReadBytes(0x100000);
|
||||||
mbedtls_sha256_ret(data.data(), data.size(), hash.data(), 0);
|
mbedtls_sha256(data.data(), data.size(), hash.data(), 0);
|
||||||
memcpy(id.data(), hash.data(), 16);
|
memcpy(id.data(), hash.data(), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ NAX::NAX(VirtualFile file_, std::array<u8, 0x10> nca_id)
|
|||||||
: header(std::make_unique<NAXHeader>()),
|
: header(std::make_unique<NAXHeader>()),
|
||||||
file(std::move(file_)), keys{Core::Crypto::KeyManager::Instance()} {
|
file(std::move(file_)), keys{Core::Crypto::KeyManager::Instance()} {
|
||||||
Core::Crypto::SHA256Hash hash{};
|
Core::Crypto::SHA256Hash hash{};
|
||||||
mbedtls_sha256_ret(nca_id.data(), nca_id.size(), hash.data(), 0);
|
mbedtls_sha256(nca_id.data(), nca_id.size(), hash.data(), 0);
|
||||||
status = Parse(fmt::format("/registered/000000{:02X}/{}.nca", hash[0],
|
status = Parse(fmt::format("/registered/000000{:02X}/{}.nca", hash[0],
|
||||||
Common::HexToString(nca_id, false)));
|
Common::HexToString(nca_id, false)));
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ u64 GetCurrentBuildID(const Core::System::CurrentBuildProcessID& id) {
|
|||||||
BCATDigest DigestFile(const FileSys::VirtualFile& file) {
|
BCATDigest DigestFile(const FileSys::VirtualFile& file) {
|
||||||
BCATDigest out{};
|
BCATDigest out{};
|
||||||
const auto bytes = file->ReadAllBytes();
|
const auto bytes = file->ReadAllBytes();
|
||||||
mbedtls_md5_ret(bytes.data(), bytes.size(), out.data());
|
mbedtls_md5(bytes.data(), bytes.size(), out.data());
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ struct ProcessContext {
|
|||||||
std::vector<u8> nro_data(size);
|
std::vector<u8> nro_data(size);
|
||||||
m_process->GetMemory().ReadBlock(base_address, nro_data.data(), size);
|
m_process->GetMemory().ReadBlock(base_address, nro_data.data(), size);
|
||||||
|
|
||||||
mbedtls_sha256_ret(nro_data.data(), size, hash.data(), 0);
|
mbedtls_sha256(nro_data.data(), size, hash.data(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < MaxNrrInfos; i++) {
|
for (size_t i = 0; i < MaxNrrInfos; i++) {
|
||||||
|
@ -115,7 +115,7 @@ ResultStatus AppLoader_NCA::VerifyIntegrity(std::function<bool(size_t, size_t)>
|
|||||||
// Initialize sha256 verification context.
|
// Initialize sha256 verification context.
|
||||||
mbedtls_sha256_context ctx;
|
mbedtls_sha256_context ctx;
|
||||||
mbedtls_sha256_init(&ctx);
|
mbedtls_sha256_init(&ctx);
|
||||||
mbedtls_sha256_starts_ret(&ctx, 0);
|
mbedtls_sha256_starts(&ctx, 0);
|
||||||
|
|
||||||
// Ensure we maintain a clean state on exit.
|
// Ensure we maintain a clean state on exit.
|
||||||
SCOPE_EXIT({ mbedtls_sha256_free(&ctx); });
|
SCOPE_EXIT({ mbedtls_sha256_free(&ctx); });
|
||||||
@ -131,7 +131,7 @@ ResultStatus AppLoader_NCA::VerifyIntegrity(std::function<bool(size_t, size_t)>
|
|||||||
const size_t read_size = file->Read(buffer.data(), intended_read_size, processed_size);
|
const size_t read_size = file->Read(buffer.data(), intended_read_size, processed_size);
|
||||||
|
|
||||||
// Update the hash function with the buffer contents.
|
// Update the hash function with the buffer contents.
|
||||||
mbedtls_sha256_update_ret(&ctx, buffer.data(), read_size);
|
mbedtls_sha256_update(&ctx, buffer.data(), read_size);
|
||||||
|
|
||||||
// Update counters.
|
// Update counters.
|
||||||
processed_size += read_size;
|
processed_size += read_size;
|
||||||
@ -144,7 +144,7 @@ ResultStatus AppLoader_NCA::VerifyIntegrity(std::function<bool(size_t, size_t)>
|
|||||||
|
|
||||||
// Finalize context and compute the output hash.
|
// Finalize context and compute the output hash.
|
||||||
std::array<u8, NcaSha256HashLength> output_hash;
|
std::array<u8, NcaSha256HashLength> output_hash;
|
||||||
mbedtls_sha256_finish_ret(&ctx, output_hash.data());
|
mbedtls_sha256_finish(&ctx, output_hash.data());
|
||||||
|
|
||||||
// Compare to expected.
|
// Compare to expected.
|
||||||
if (std::memcmp(input_hash.data(), output_hash.data(), NcaSha256HalfHashLength) != 0) {
|
if (std::memcmp(input_hash.data(), output_hash.data(), NcaSha256HalfHashLength) != 0) {
|
||||||
|
@ -15,7 +15,7 @@ if (ENABLE_WEB_SERVICE)
|
|||||||
target_link_libraries(yuzu-room PRIVATE web_service)
|
target_link_libraries(yuzu-room PRIVATE web_service)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(yuzu-room PRIVATE mbedtls mbedcrypto)
|
target_link_libraries(yuzu-room PRIVATE MbedTLS::mbedcrypto)
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
target_link_libraries(yuzu-room PRIVATE getopt)
|
target_link_libraries(yuzu-room PRIVATE getopt)
|
||||||
endif()
|
endif()
|
||||||
|
Loading…
Reference in New Issue
Block a user