From d470d3060f4a3ad336f213b1d737558feed95f6d Mon Sep 17 00:00:00 2001 From: pineappleEA Date: Thu, 18 Mar 2021 05:46:23 +0100 Subject: [PATCH] early-access version 1524 --- README.md | 2 +- src/core/hle/service/spl/module.cpp | 5 + src/core/hle/service/spl/spl.cpp | 152 ++++++++++++++++++++++++++-- src/core/hle/service/spl/spl.h | 30 ++++++ 4 files changed, 179 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 761ed7935..dec5152f2 100755 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ yuzu emulator early access ============= -This is the source code for early-access 1523. +This is the source code for early-access 1524. ## Legal Notice diff --git a/src/core/hle/service/spl/module.cpp b/src/core/hle/service/spl/module.cpp index dea6b0fe0..6903dd534 100755 --- a/src/core/hle/service/spl/module.cpp +++ b/src/core/hle/service/spl/module.cpp @@ -43,6 +43,11 @@ void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system auto module = std::make_shared(); std::make_shared(system, module)->InstallAsService(service_manager); std::make_shared(system, module)->InstallAsService(service_manager); + std::make_shared(system, module)->InstallAsService(service_manager); + std::make_shared(system, module)->InstallAsService(service_manager); + std::make_shared(system, module)->InstallAsService(service_manager); + std::make_shared(system, module)->InstallAsService(service_manager); + std::make_shared(system, module)->InstallAsService(service_manager); } } // namespace Service::SPL diff --git a/src/core/hle/service/spl/spl.cpp b/src/core/hle/service/spl/spl.cpp index 3fabc2c79..4e212610f 100755 --- a/src/core/hle/service/spl/spl.cpp +++ b/src/core/hle/service/spl/spl.cpp @@ -8,6 +8,79 @@ namespace Service::SPL { SPL::SPL(Core::System& system_, std::shared_ptr module_) : Interface(system_, std::move(module_), "spl:") { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "GetConfig"}, + {1, nullptr, "ModularExponentiate"}, + {5, nullptr, "SetConfig"}, + {7, &SPL::GetRandomBytes, "GetRandomBytes"}, + {11, nullptr, "IsDevelopment"}, + {24, nullptr, "SetBootReason"}, + {25, nullptr, "GetBootReason"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +SPL_MIG::SPL_MIG(Core::System& system_, std::shared_ptr module_) + : Interface(system_, std::move(module_), "spl:mig") { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "GetConfig"}, + {1, nullptr, "ModularExponentiate"}, + {2, nullptr, "GenerateAesKek"}, + {3, nullptr, "LoadAesKey"}, + {4, nullptr, "GenerateAesKey"}, + {5, nullptr, "SetConfig"}, + {7, &SPL::GetRandomBytes, "GenerateRandomBytes"}, + {11, nullptr, "IsDevelopment"}, + {14, nullptr, "DecryptAesKey"}, + {15, nullptr, "CryptAesCtr"}, + {16, nullptr, "ComputeCmac"}, + {21, nullptr, "AllocateAesKeyslot"}, + {22, nullptr, "DeallocateAesKeySlot"}, + {23, nullptr, "GetAesKeyslotAvailableEvent"}, + {24, nullptr, "SetBootReason"}, + {25, nullptr, "GetBootReason"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +SPL_FS::SPL_FS(Core::System& system_, std::shared_ptr module_) + : Interface(system_, std::move(module_), "spl:fs") { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "GetConfig"}, + {1, nullptr, "ModularExponentiate"}, + {2, nullptr, "GenerateAesKek"}, + {3, nullptr, "LoadAesKey"}, + {4, nullptr, "GenerateAesKey"}, + {5, nullptr, "SetConfig"}, + {7, &SPL::GetRandomBytes, "GenerateRandomBytes"}, + {11, nullptr, "IsDevelopment"}, + {12, nullptr, "GenerateSpecificAesKey"}, + {14, nullptr, "DecryptAesKey"}, + {15, nullptr, "CryptAesCtr"}, + {16, nullptr, "ComputeCmac"}, + {19, nullptr, "LoadTitleKey"}, + {21, nullptr, "AllocateAesKeyslot"}, + {22, nullptr, "DeallocateAesKeySlot"}, + {23, nullptr, "GetAesKeyslotAvailableEvent"}, + {24, nullptr, "SetBootReason"}, + {25, nullptr, "GetBootReason"}, + {31, nullptr, "GetPackage2Hash"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +SPL_SSL::SPL_SSL(Core::System& system_, std::shared_ptr module_) + : Interface(system_, std::move(module_), "spl:ssl") { + // clang-format off static const FunctionInfo functions[] = { {0, nullptr, "GetConfig"}, {1, nullptr, "ModularExponentiate"}, @@ -16,18 +89,11 @@ SPL::SPL(Core::System& system_, std::shared_ptr module_) {4, nullptr, "GenerateAesKey"}, {5, nullptr, "SetConfig"}, {7, &SPL::GetRandomBytes, "GetRandomBytes"}, - {9, nullptr, "ImportLotusKey"}, - {10, nullptr, "DecryptLotusMessage"}, {11, nullptr, "IsDevelopment"}, - {12, nullptr, "GenerateSpecificAesKey"}, {13, nullptr, "DecryptDeviceUniqueData"}, {14, nullptr, "DecryptAesKey"}, {15, nullptr, "CryptAesCtr"}, {16, nullptr, "ComputeCmac"}, - {17, nullptr, "ImportEsKey"}, - {18, nullptr, "UnwrapTitleKey"}, - {19, nullptr, "LoadTitleKey"}, - {20, nullptr, "PrepareEsCommonKey"}, {21, nullptr, "AllocateAesKeyslot"}, {22, nullptr, "DeallocateAesKeySlot"}, {23, nullptr, "GetAesKeyslotAvailableEvent"}, @@ -35,15 +101,83 @@ SPL::SPL(Core::System& system_, std::shared_ptr module_) {25, nullptr, "GetBootReason"}, {26, nullptr, "DecryptAndStoreSslClientCertKey"}, {27, nullptr, "ModularExponentiateWithSslClientCertKey"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +SPL_ES::SPL_ES(Core::System& system_, std::shared_ptr module_) + : Interface(system_, std::move(module_), "spl:es") { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "GetConfig"}, + {1, nullptr, "ModularExponentiate"}, + {2, nullptr, "GenerateAesKek"}, + {3, nullptr, "LoadAesKey"}, + {4, nullptr, "GenerateAesKey"}, + {5, nullptr, "SetConfig"}, + {7, &SPL::GetRandomBytes, "GenerateRandomBytes"}, + {11, nullptr, "IsDevelopment"}, + {13, nullptr, "DecryptDeviceUniqueData"}, + {14, nullptr, "DecryptAesKey"}, + {15, nullptr, "CryptAesCtr"}, + {16, nullptr, "ComputeCmac"}, + {18, nullptr, "UnwrapTitleKey"}, + {20, nullptr, "PrepareEsCommonKey"}, + {21, nullptr, "AllocateAesKeyslot"}, + {22, nullptr, "DeallocateAesKeySlot"}, + {23, nullptr, "GetAesKeyslotAvailableEvent"}, + {24, nullptr, "SetBootReason"}, + {25, nullptr, "GetBootReason"}, {28, nullptr, "DecryptAndStoreDrmDeviceCertKey"}, {29, nullptr, "ModularExponentiateWithDrmDeviceCertKey"}, - {30, nullptr, "ReencryptDeviceUniqueData "}, - {31, nullptr, "PrepareEsArchiveKey"}, // This is also GetPackage2Hash? + {31, nullptr, "PrepareEsArchiveKey"}, {32, nullptr, "LoadPreparedAesKey"}, }; + // clang-format on + + RegisterHandlers(functions); +} + +SPL_MANU::SPL_MANU(Core::System& system_, std::shared_ptr module_) + : Interface(system_, std::move(module_), "spl:manu") { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "GetConfig"}, + {1, nullptr, "ModularExponentiate"}, + {2, nullptr, "GenerateAesKek"}, + {3, nullptr, "LoadAesKey"}, + {4, nullptr, "GenerateAesKey"}, + {5, nullptr, "SetConfig"}, + {7, &SPL::GetRandomBytes, "GetRandomBytes"}, + {11, nullptr, "IsDevelopment"}, + {13, nullptr, "DecryptDeviceUniqueData"}, + {14, nullptr, "DecryptAesKey"}, + {15, nullptr, "CryptAesCtr"}, + {16, nullptr, "ComputeCmac"}, + {21, nullptr, "AllocateAesKeyslot"}, + {22, nullptr, "DeallocateAesKeySlot"}, + {23, nullptr, "GetAesKeyslotAvailableEvent"}, + {24, nullptr, "SetBootReason"}, + {25, nullptr, "GetBootReason"}, + {30, nullptr, "ReencryptDeviceUniqueData"}, + }; + // clang-format on + RegisterHandlers(functions); } SPL::~SPL() = default; +SPL_MIG::~SPL_MIG() = default; + +SPL_FS::~SPL_FS() = default; + +SPL_SSL::~SPL_SSL() = default; + +SPL_ES::~SPL_ES() = default; + +SPL_MANU::~SPL_MANU() = default; + } // namespace Service::SPL diff --git a/src/core/hle/service/spl/spl.h b/src/core/hle/service/spl/spl.h index d27d16b86..9b35012ed 100755 --- a/src/core/hle/service/spl/spl.h +++ b/src/core/hle/service/spl/spl.h @@ -18,4 +18,34 @@ public: ~SPL() override; }; +class SPL_MIG final : public Module::Interface { +public: + explicit SPL_MIG(Core::System& system_, std::shared_ptr module_); + ~SPL_MIG() override; +}; + +class SPL_FS final : public Module::Interface { +public: + explicit SPL_FS(Core::System& system_, std::shared_ptr module_); + ~SPL_FS() override; +}; + +class SPL_SSL final : public Module::Interface { +public: + explicit SPL_SSL(Core::System& system_, std::shared_ptr module_); + ~SPL_SSL() override; +}; + +class SPL_ES final : public Module::Interface { +public: + explicit SPL_ES(Core::System& system_, std::shared_ptr module_); + ~SPL_ES() override; +}; + +class SPL_MANU final : public Module::Interface { +public: + explicit SPL_MANU(Core::System& system_, std::shared_ptr module_); + ~SPL_MANU() override; +}; + } // namespace Service::SPL