committed by
GitHub
10 changed files with 176 additions and 0 deletions
-
1src/common/logging/backend.cpp
-
1src/common/logging/log.h
-
6src/core/CMakeLists.txt
-
2src/core/hle/service/service.cpp
-
18src/core/hle/service/spl/csrng.cpp
-
18src/core/hle/service/spl/csrng.h
-
42src/core/hle/service/spl/module.cpp
-
29src/core/hle/service/spl/module.h
-
41src/core/hle/service/spl/spl.cpp
-
18src/core/hle/service/spl/spl.h
@ -0,0 +1,18 @@ |
|||
// Copyright 2018 yuzu emulator team
|
|||
// Licensed under GPLv2 or any later version
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include "core/hle/service/spl/csrng.h"
|
|||
|
|||
namespace Service { |
|||
namespace SPL { |
|||
|
|||
CSRNG::CSRNG(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "csrng") { |
|||
static const FunctionInfo functions[] = { |
|||
{0, &CSRNG::GetRandomBytes, "GetRandomBytes"}, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
|
|||
} // namespace SPL
|
|||
} // namespace Service
|
|||
@ -0,0 +1,18 @@ |
|||
// Copyright 2018 yuzu emulator team |
|||
// Licensed under GPLv2 or any later version |
|||
// Refer to the license.txt file included. |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/spl/module.h" |
|||
|
|||
namespace Service { |
|||
namespace SPL { |
|||
|
|||
class CSRNG final : public Module::Interface { |
|||
public: |
|||
explicit CSRNG(std::shared_ptr<Module> module); |
|||
}; |
|||
|
|||
} // namespace SPL |
|||
} // namespace Service |
|||
@ -0,0 +1,42 @@ |
|||
// Copyright 2018 yuzu emulator team
|
|||
// Licensed under GPLv2 or any later version
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include <algorithm>
|
|||
#include <cstdlib>
|
|||
#include <vector>
|
|||
#include "common/logging/log.h"
|
|||
#include "core/hle/ipc_helpers.h"
|
|||
#include "core/hle/service/spl/csrng.h"
|
|||
#include "core/hle/service/spl/module.h"
|
|||
#include "core/hle/service/spl/spl.h"
|
|||
|
|||
namespace Service { |
|||
namespace SPL { |
|||
|
|||
Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) |
|||
: ServiceFramework(name), module(std::move(module)) {} |
|||
|
|||
void Module::Interface::GetRandomBytes(Kernel::HLERequestContext& ctx) { |
|||
IPC::RequestParser rp{ctx}; |
|||
|
|||
size_t size = ctx.GetWriteBufferSize(); |
|||
|
|||
std::vector<u8> data(size); |
|||
std::generate(data.begin(), data.end(), std::rand); |
|||
|
|||
ctx.WriteBuffer(data); |
|||
|
|||
IPC::ResponseBuilder rb{ctx, 2}; |
|||
rb.Push(RESULT_SUCCESS); |
|||
LOG_DEBUG(Service_SPL, "called"); |
|||
} |
|||
|
|||
void InstallInterfaces(SM::ServiceManager& service_manager) { |
|||
auto module = std::make_shared<Module>(); |
|||
std::make_shared<CSRNG>(module)->InstallAsService(service_manager); |
|||
std::make_shared<SPL>(module)->InstallAsService(service_manager); |
|||
} |
|||
|
|||
} // namespace SPL
|
|||
} // namespace Service
|
|||
@ -0,0 +1,29 @@ |
|||
// Copyright 2018 yuzu emulator team |
|||
// Licensed under GPLv2 or any later version |
|||
// Refer to the license.txt file included. |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/service.h" |
|||
|
|||
namespace Service { |
|||
namespace SPL { |
|||
|
|||
class Module final { |
|||
public: |
|||
class Interface : public ServiceFramework<Interface> { |
|||
public: |
|||
Interface(std::shared_ptr<Module> module, const char* name); |
|||
|
|||
void GetRandomBytes(Kernel::HLERequestContext& ctx); |
|||
|
|||
protected: |
|||
std::shared_ptr<Module> module; |
|||
}; |
|||
}; |
|||
|
|||
/// Registers all SPL services with the specified service manager. |
|||
void InstallInterfaces(SM::ServiceManager& service_manager); |
|||
|
|||
} // namespace SPL |
|||
} // namespace Service |
|||
@ -0,0 +1,41 @@ |
|||
// Copyright 2018 yuzu emulator team
|
|||
// Licensed under GPLv2 or any later version
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include "core/hle/service/spl/spl.h"
|
|||
|
|||
namespace Service { |
|||
namespace SPL { |
|||
|
|||
SPL::SPL(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "spl:") { |
|||
static const FunctionInfo functions[] = { |
|||
{0, nullptr, "GetConfig"}, |
|||
{1, nullptr, "UserExpMod"}, |
|||
{2, nullptr, "GenerateAesKek"}, |
|||
{3, nullptr, "LoadAesKey"}, |
|||
{4, nullptr, "GenerateAesKey"}, |
|||
{5, nullptr, "SetConfig"}, |
|||
{7, &SPL::GetRandomBytes, "GetRandomBytes"}, |
|||
{9, nullptr, "LoadSecureExpModKey"}, |
|||
{10, nullptr, "SecureExpMod"}, |
|||
{11, nullptr, "IsDevelopment"}, |
|||
{12, nullptr, "GenerateSpecificAesKey"}, |
|||
{13, nullptr, "DecryptPrivk"}, |
|||
{14, nullptr, "DecryptAesKey"}, |
|||
{15, nullptr, "DecryptAesCtr"}, |
|||
{16, nullptr, "ComputeCmac"}, |
|||
{17, nullptr, "LoadRsaOaepKey"}, |
|||
{18, nullptr, "UnwrapRsaOaepWrappedTitleKey"}, |
|||
{19, nullptr, "LoadTitleKey"}, |
|||
{20, nullptr, "UnwrapAesWrappedTitleKey"}, |
|||
{21, nullptr, "LockAesEngine"}, |
|||
{22, nullptr, "UnlockAesEngine"}, |
|||
{23, nullptr, "GetSplWaitEvent"}, |
|||
{24, nullptr, "SetSharedData"}, |
|||
{25, nullptr, "GetSharedData"}, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
|
|||
} // namespace SPL
|
|||
} // namespace Service
|
|||
@ -0,0 +1,18 @@ |
|||
// Copyright 2018 yuzu emulator team |
|||
// Licensed under GPLv2 or any later version |
|||
// Refer to the license.txt file included. |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/spl/module.h" |
|||
|
|||
namespace Service { |
|||
namespace SPL { |
|||
|
|||
class SPL final : public Module::Interface { |
|||
public: |
|||
explicit SPL(std::shared_ptr<Module> module); |
|||
}; |
|||
|
|||
} // namespace SPL |
|||
} // namespace Service |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue