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