diff --git a/stratosphere/boot/source/boot_boot_reason.cpp b/stratosphere/boot/source/boot_boot_reason.cpp index fdad4f068..d78ef8a4c 100644 --- a/stratosphere/boot/source/boot_boot_reason.cpp +++ b/stratosphere/boot/source/boot_boot_reason.cpp @@ -14,10 +14,11 @@ * along with this program. If not, see . */ +#include + #include "boot_boot_reason.hpp" #include "boot_pmic_driver.hpp" #include "boot_rtc_driver.hpp" -#include "boot_spl_utils.hpp" namespace sts::boot { diff --git a/stratosphere/boot/source/boot_display.cpp b/stratosphere/boot/source/boot_display.cpp index eb3994f99..45bd1284b 100644 --- a/stratosphere/boot/source/boot_display.cpp +++ b/stratosphere/boot/source/boot_display.cpp @@ -15,11 +15,11 @@ */ #include +#include #include "boot_display.hpp" #include "boot_i2c_utils.hpp" #include "boot_pmc_wrapper.hpp" -#include "boot_spl_utils.hpp" #include "boot_registers_clkrst.hpp" #include "boot_registers_di.hpp" diff --git a/stratosphere/boot/source/boot_fan_enable.cpp b/stratosphere/boot/source/boot_fan_enable.cpp index 190c0b600..d235cc518 100644 --- a/stratosphere/boot/source/boot_fan_enable.cpp +++ b/stratosphere/boot/source/boot_fan_enable.cpp @@ -14,8 +14,9 @@ * along with this program. If not, see . */ +#include + #include "boot_fan_enable.hpp" -#include "boot_spl_utils.hpp" #include "gpio/gpio_utils.hpp" diff --git a/stratosphere/boot/source/boot_main.cpp b/stratosphere/boot/source/boot_main.cpp index a28b72a09..f7b120cb7 100644 --- a/stratosphere/boot/source/boot_main.cpp +++ b/stratosphere/boot/source/boot_main.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "boot_boot_reason.hpp" #include "boot_change_voltage.hpp" @@ -37,7 +38,6 @@ #include "pinmux/pinmux_initial_configuration.hpp" #include "boot_power_utils.hpp" -#include "boot_spl_utils.hpp" using namespace sts; diff --git a/stratosphere/boot/source/boot_repair_boot_images.cpp b/stratosphere/boot/source/boot_repair_boot_images.cpp index 78fd8fa27..e2ae290b7 100644 --- a/stratosphere/boot/source/boot_repair_boot_images.cpp +++ b/stratosphere/boot/source/boot_repair_boot_images.cpp @@ -14,9 +14,10 @@ * along with this program. If not, see . */ +#include + #include "boot_power_utils.hpp" #include "boot_repair_boot_images.hpp" -#include "boot_spl_utils.hpp" #include "updater/updater_api.hpp" diff --git a/stratosphere/boot/source/boot_spl_utils.cpp b/stratosphere/boot/source/boot_spl_utils.cpp deleted file mode 100644 index d5e60e1bd..000000000 --- a/stratosphere/boot/source/boot_spl_utils.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2018-2019 Atmosphère-NX - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "boot_spl_utils.hpp" - -namespace sts::spl { - - spl::HardwareType GetHardwareType() { - u64 out_val = 0; - R_ASSERT(splGetConfig(SplConfigItem_HardwareType, &out_val)); - return static_cast(out_val); - } - - bool IsRecoveryBoot() { - u64 val = 0; - R_ASSERT(splGetConfig(SplConfigItem_IsRecoveryBoot, &val)); - return val != 0; - } - - bool IsMariko() { - const auto hw_type = GetHardwareType(); - switch (hw_type) { - case spl::HardwareType::Icosa: - case spl::HardwareType::Copper: - return false; - case spl::HardwareType::Hoag: - case spl::HardwareType::Iowa: - return true; - default: - std::abort(); - } - } - -} diff --git a/stratosphere/boot/source/boot_spl_utils.hpp b/stratosphere/boot/source/boot_spl_utils.hpp deleted file mode 100644 index a12171fca..000000000 --- a/stratosphere/boot/source/boot_spl_utils.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2018-2019 Atmosphère-NX - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#include -#include - -namespace sts::spl { - - enum class HardwareType { - Icosa = 0, - Copper = 1, - Hoag = 2, - Iowa = 3, - }; - - /* SPL Utilities. */ - HardwareType GetHardwareType(); - bool IsRecoveryBoot(); - bool IsMariko(); - -} \ No newline at end of file diff --git a/stratosphere/boot/source/boot_wake_pins.cpp b/stratosphere/boot/source/boot_wake_pins.cpp index 9df434f7e..c32c2d19f 100644 --- a/stratosphere/boot/source/boot_wake_pins.cpp +++ b/stratosphere/boot/source/boot_wake_pins.cpp @@ -14,8 +14,9 @@ * along with this program. If not, see . */ +#include + #include "boot_pmc_wrapper.hpp" -#include "boot_spl_utils.hpp" #include "boot_wake_pins.hpp" #include "boot_registers_pmc.hpp" diff --git a/stratosphere/boot/source/gpio/gpio_initial_configuration.cpp b/stratosphere/boot/source/gpio/gpio_initial_configuration.cpp index c516be829..d16e5802d 100644 --- a/stratosphere/boot/source/gpio/gpio_initial_configuration.cpp +++ b/stratosphere/boot/source/gpio/gpio_initial_configuration.cpp @@ -14,12 +14,11 @@ * along with this program. If not, see . */ +#include + #include "gpio_initial_configuration.hpp" #include "gpio_utils.hpp" -/* TODO: Better way? */ -#include "../boot_spl_utils.hpp" - namespace sts::gpio { namespace { diff --git a/stratosphere/boot/source/pinmux/pinmux_initial_configuration.cpp b/stratosphere/boot/source/pinmux/pinmux_initial_configuration.cpp index 091c55f1a..507693272 100644 --- a/stratosphere/boot/source/pinmux/pinmux_initial_configuration.cpp +++ b/stratosphere/boot/source/pinmux/pinmux_initial_configuration.cpp @@ -14,13 +14,11 @@ * along with this program. If not, see . */ +#include #include "pinmux_initial_configuration.hpp" #include "pinmux_utils.hpp" -/* TODO: Better way? */ -#include "../boot_spl_utils.hpp" - namespace sts::pinmux { namespace { diff --git a/stratosphere/boot/source/updater/updater_api.hpp b/stratosphere/boot/source/updater/updater_api.hpp index fcca1da52..1baa7e961 100644 --- a/stratosphere/boot/source/updater/updater_api.hpp +++ b/stratosphere/boot/source/updater/updater_api.hpp @@ -17,6 +17,7 @@ #pragma once #include #include +#include #include "updater_types.hpp" diff --git a/stratosphere/boot/source/updater/updater_types.hpp b/stratosphere/boot/source/updater/updater_types.hpp index 5c3f9c0a2..6abd7cd8d 100644 --- a/stratosphere/boot/source/updater/updater_types.hpp +++ b/stratosphere/boot/source/updater/updater_types.hpp @@ -18,9 +18,6 @@ #include #include -/* TODO: Better way to do this? */ -#include "../boot_spl_utils.hpp" - namespace sts::updater { /* Types. */ diff --git a/stratosphere/libstratosphere b/stratosphere/libstratosphere index 13e3f517c..ca344e1d1 160000 --- a/stratosphere/libstratosphere +++ b/stratosphere/libstratosphere @@ -1 +1 @@ -Subproject commit 13e3f517cb5db1053e01fb21ec189728d5b9d6db +Subproject commit ca344e1d19267779a59b6a212683792538bb76af diff --git a/stratosphere/spl/source/spl_api.cpp b/stratosphere/spl/source/spl_api_impl.cpp similarity index 99% rename from stratosphere/spl/source/spl_api.cpp rename to stratosphere/spl/source/spl_api_impl.cpp index b43eccab9..e6f67a5c4 100644 --- a/stratosphere/spl/source/spl_api.cpp +++ b/stratosphere/spl/source/spl_api_impl.cpp @@ -16,13 +16,13 @@ #include #include +#include -#include "spl_api.hpp" -#include "spl_smc.hpp" +#include "spl_api_impl.hpp" #include "spl_ctr_drbg.hpp" -namespace sts::spl { +namespace sts::spl::impl { namespace { @@ -59,7 +59,7 @@ namespace sts::spl { } ~ScopedAesKeyslot() { if (has_slot) { - spl::FreeAesKeyslot(slot, this); + FreeAesKeyslot(slot, this); } } @@ -68,7 +68,7 @@ namespace sts::spl { } Result Allocate() { - R_TRY(spl::AllocateAesKeyslot(&this->slot, this)); + R_TRY(AllocateAesKeyslot(&this->slot, this)); this->has_slot = true; return ResultSuccess; } diff --git a/stratosphere/spl/source/spl_api.hpp b/stratosphere/spl/source/spl_api_impl.hpp similarity index 98% rename from stratosphere/spl/source/spl_api.hpp rename to stratosphere/spl/source/spl_api_impl.hpp index 63aaaed67..8ef033fb8 100644 --- a/stratosphere/spl/source/spl_api.hpp +++ b/stratosphere/spl/source/spl_api_impl.hpp @@ -17,10 +17,9 @@ #pragma once #include #include +#include -#include "spl_types.hpp" - -namespace sts::spl { +namespace sts::spl::impl { /* Initialization. */ void Initialize(); diff --git a/stratosphere/spl/source/spl_crypto_service.cpp b/stratosphere/spl/source/spl_crypto_service.cpp index 86e445eea..8dacd4ba6 100644 --- a/stratosphere/spl/source/spl_crypto_service.cpp +++ b/stratosphere/spl/source/spl_crypto_service.cpp @@ -17,50 +17,50 @@ #include #include +#include "spl_api_impl.hpp" #include "spl_crypto_service.hpp" -#include "spl_api.hpp" namespace sts::spl { CryptoService::~CryptoService() { /* Free any keyslots this service is using. */ - spl::FreeAesKeyslots(this); + impl::FreeAesKeyslots(this); } Result CryptoService::GenerateAesKek(Out out_access_key, KeySource key_source, u32 generation, u32 option) { - return spl::GenerateAesKek(out_access_key.GetPointer(), key_source, generation, option); + return impl::GenerateAesKek(out_access_key.GetPointer(), key_source, generation, option); } Result CryptoService::LoadAesKey(u32 keyslot, AccessKey access_key, KeySource key_source) { - return spl::LoadAesKey(keyslot, this, access_key, key_source); + return impl::LoadAesKey(keyslot, this, access_key, key_source); } Result CryptoService::GenerateAesKey(Out out_key, AccessKey access_key, KeySource key_source) { - return spl::GenerateAesKey(out_key.GetPointer(), access_key, key_source); + return impl::GenerateAesKey(out_key.GetPointer(), access_key, key_source); } Result CryptoService::DecryptAesKey(Out out_key, KeySource key_source, u32 generation, u32 option) { - return spl::DecryptAesKey(out_key.GetPointer(), key_source, generation, option); + return impl::DecryptAesKey(out_key.GetPointer(), key_source, generation, option); } Result CryptoService::CryptAesCtr(OutBuffer out_buf, u32 keyslot, InBuffer in_buf, IvCtr iv_ctr) { - return spl::CryptAesCtr(out_buf.buffer, out_buf.num_elements, keyslot, this, in_buf.buffer, in_buf.num_elements, iv_ctr); + return impl::CryptAesCtr(out_buf.buffer, out_buf.num_elements, keyslot, this, in_buf.buffer, in_buf.num_elements, iv_ctr); } Result CryptoService::ComputeCmac(Out out_cmac, u32 keyslot, InPointer in_buf) { - return spl::ComputeCmac(out_cmac.GetPointer(), keyslot, this, in_buf.pointer, in_buf.num_elements); + return impl::ComputeCmac(out_cmac.GetPointer(), keyslot, this, in_buf.pointer, in_buf.num_elements); } Result CryptoService::AllocateAesKeyslot(Out out_keyslot) { - return spl::AllocateAesKeyslot(out_keyslot.GetPointer(), this); + return impl::AllocateAesKeyslot(out_keyslot.GetPointer(), this); } Result CryptoService::FreeAesKeyslot(u32 keyslot) { - return spl::FreeAesKeyslot(keyslot, this); + return impl::FreeAesKeyslot(keyslot, this); } void CryptoService::GetAesKeyslotAvailableEvent(Out out_hnd) { - out_hnd.SetValue(spl::GetAesKeyslotAvailableEventHandle()); + out_hnd.SetValue(impl::GetAesKeyslotAvailableEventHandle()); } } diff --git a/stratosphere/spl/source/spl_crypto_service.hpp b/stratosphere/spl/source/spl_crypto_service.hpp index 3acfb1f1d..c5ad23b1c 100644 --- a/stratosphere/spl/source/spl_crypto_service.hpp +++ b/stratosphere/spl/source/spl_crypto_service.hpp @@ -17,8 +17,8 @@ #pragma once #include #include +#include -#include "spl_types.hpp" #include "spl_general_service.hpp" namespace sts::spl { diff --git a/stratosphere/spl/source/spl_ctr_drbg.cpp b/stratosphere/spl/source/spl_ctr_drbg.cpp index c9bc73271..72ad9f7d2 100644 --- a/stratosphere/spl/source/spl_ctr_drbg.cpp +++ b/stratosphere/spl/source/spl_ctr_drbg.cpp @@ -16,8 +16,8 @@ #include #include +#include -#include "spl_types.hpp" #include "spl_ctr_drbg.hpp" namespace sts::spl { diff --git a/stratosphere/spl/source/spl_ctr_drbg.hpp b/stratosphere/spl/source/spl_ctr_drbg.hpp index 462c3c2e6..2bbff9d1a 100644 --- a/stratosphere/spl/source/spl_ctr_drbg.hpp +++ b/stratosphere/spl/source/spl_ctr_drbg.hpp @@ -17,8 +17,7 @@ #pragma once #include #include - -#include "spl_types.hpp" +#include namespace sts::spl { diff --git a/stratosphere/spl/source/spl_deprecated_service.cpp b/stratosphere/spl/source/spl_deprecated_service.cpp index 5aa7234f0..21bcff2e6 100644 --- a/stratosphere/spl/source/spl_deprecated_service.cpp +++ b/stratosphere/spl/source/spl_deprecated_service.cpp @@ -17,109 +17,109 @@ #include #include +#include "spl_api_impl.hpp" #include "spl_deprecated_service.hpp" -#include "spl_api.hpp" namespace sts::spl { Result DeprecatedService::GetConfig(Out out, u32 which) { - return spl::GetConfig(out.GetPointer(), static_cast(which)); + return impl::GetConfig(out.GetPointer(), static_cast(which)); } Result DeprecatedService::ExpMod(OutPointerWithClientSize out, InPointer base, InPointer exp, InPointer mod) { - return spl::ExpMod(out.pointer, out.num_elements, base.pointer, base.num_elements, exp.pointer, exp.num_elements, mod.pointer, mod.num_elements); + return impl::ExpMod(out.pointer, out.num_elements, base.pointer, base.num_elements, exp.pointer, exp.num_elements, mod.pointer, mod.num_elements); } Result DeprecatedService::GenerateAesKek(Out out_access_key, KeySource key_source, u32 generation, u32 option) { - return spl::GenerateAesKek(out_access_key.GetPointer(), key_source, generation, option); + return impl::GenerateAesKek(out_access_key.GetPointer(), key_source, generation, option); } Result DeprecatedService::LoadAesKey(u32 keyslot, AccessKey access_key, KeySource key_source) { - return spl::LoadAesKey(keyslot, this, access_key, key_source); + return impl::LoadAesKey(keyslot, this, access_key, key_source); } Result DeprecatedService::GenerateAesKey(Out out_key, AccessKey access_key, KeySource key_source) { - return spl::GenerateAesKey(out_key.GetPointer(), access_key, key_source); + return impl::GenerateAesKey(out_key.GetPointer(), access_key, key_source); } Result DeprecatedService::SetConfig(u32 which, u64 value) { - return spl::SetConfig(static_cast(which), value); + return impl::SetConfig(static_cast(which), value); } Result DeprecatedService::GenerateRandomBytes(OutPointerWithClientSize out) { - return spl::GenerateRandomBytes(out.pointer, out.num_elements); + return impl::GenerateRandomBytes(out.pointer, out.num_elements); } Result DeprecatedService::ImportLotusKey(InPointer src, AccessKey access_key, KeySource key_source, u32 option) { - return spl::ImportLotusKey(src.pointer, src.num_elements, access_key, key_source, option); + return impl::ImportLotusKey(src.pointer, src.num_elements, access_key, key_source, option); } Result DeprecatedService::DecryptLotusMessage(Out out_size, OutPointerWithClientSize out, InPointer base, InPointer mod, InPointer label_digest) { - return spl::DecryptLotusMessage(out_size.GetPointer(), out.pointer, out.num_elements, base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements); + return impl::DecryptLotusMessage(out_size.GetPointer(), out.pointer, out.num_elements, base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements); } Result DeprecatedService::IsDevelopment(Out is_dev) { - return spl::IsDevelopment(is_dev.GetPointer()); + return impl::IsDevelopment(is_dev.GetPointer()); } Result DeprecatedService::GenerateSpecificAesKey(Out out_key, KeySource key_source, u32 generation, u32 which) { - return spl::GenerateSpecificAesKey(out_key.GetPointer(), key_source, generation, which); + return impl::GenerateSpecificAesKey(out_key.GetPointer(), key_source, generation, which); } Result DeprecatedService::DecryptRsaPrivateKey(OutPointerWithClientSize dst, InPointer src, AccessKey access_key, KeySource key_source, u32 option) { - return spl::DecryptRsaPrivateKey(dst.pointer, dst.num_elements, src.pointer, src.num_elements, access_key, key_source, option); + return impl::DecryptRsaPrivateKey(dst.pointer, dst.num_elements, src.pointer, src.num_elements, access_key, key_source, option); } Result DeprecatedService::DecryptAesKey(Out out_key, KeySource key_source, u32 generation, u32 option) { - return spl::DecryptAesKey(out_key.GetPointer(), key_source, generation, option); + return impl::DecryptAesKey(out_key.GetPointer(), key_source, generation, option); } Result DeprecatedService::CryptAesCtrDeprecated(OutBuffer out_buf, u32 keyslot, InBuffer in_buf, IvCtr iv_ctr) { - return spl::CryptAesCtr(out_buf.buffer, out_buf.num_elements, keyslot, this, in_buf.buffer, in_buf.num_elements, iv_ctr); + return impl::CryptAesCtr(out_buf.buffer, out_buf.num_elements, keyslot, this, in_buf.buffer, in_buf.num_elements, iv_ctr); } Result DeprecatedService::CryptAesCtr(OutBuffer out_buf, u32 keyslot, InBuffer in_buf, IvCtr iv_ctr) { - return spl::CryptAesCtr(out_buf.buffer, out_buf.num_elements, keyslot, this, in_buf.buffer, in_buf.num_elements, iv_ctr); + return impl::CryptAesCtr(out_buf.buffer, out_buf.num_elements, keyslot, this, in_buf.buffer, in_buf.num_elements, iv_ctr); } Result DeprecatedService::ComputeCmac(Out out_cmac, u32 keyslot, InPointer in_buf) { - return spl::ComputeCmac(out_cmac.GetPointer(), keyslot, this, in_buf.pointer, in_buf.num_elements); + return impl::ComputeCmac(out_cmac.GetPointer(), keyslot, this, in_buf.pointer, in_buf.num_elements); } Result DeprecatedService::ImportEsKey(InPointer src, AccessKey access_key, KeySource key_source, u32 option) { - return spl::ImportEsKey(src.pointer, src.num_elements, access_key, key_source, option); + return impl::ImportEsKey(src.pointer, src.num_elements, access_key, key_source, option); } Result DeprecatedService::UnwrapTitleKey(Out out_access_key, InPointer base, InPointer mod, InPointer label_digest, u32 generation) { - return spl::UnwrapTitleKey(out_access_key.GetPointer(), base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements, generation); + return impl::UnwrapTitleKey(out_access_key.GetPointer(), base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements, generation); } Result DeprecatedService::LoadTitleKey(u32 keyslot, AccessKey access_key) { - return spl::LoadTitleKey(keyslot, this, access_key); + return impl::LoadTitleKey(keyslot, this, access_key); } Result DeprecatedService::UnwrapCommonTitleKey(Out out_access_key, KeySource key_source, u32 generation) { - return spl::UnwrapCommonTitleKey(out_access_key.GetPointer(), key_source, generation); + return impl::UnwrapCommonTitleKey(out_access_key.GetPointer(), key_source, generation); } Result DeprecatedService::AllocateAesKeyslot(Out out_keyslot) { - return spl::AllocateAesKeyslot(out_keyslot.GetPointer(), this); + return impl::AllocateAesKeyslot(out_keyslot.GetPointer(), this); } Result DeprecatedService::FreeAesKeyslot(u32 keyslot) { - return spl::FreeAesKeyslot(keyslot, this); + return impl::FreeAesKeyslot(keyslot, this); } void DeprecatedService::GetAesKeyslotAvailableEvent(Out out_hnd) { - out_hnd.SetValue(spl::GetAesKeyslotAvailableEventHandle()); + out_hnd.SetValue(impl::GetAesKeyslotAvailableEventHandle()); } Result DeprecatedService::SetBootReason(BootReasonValue boot_reason) { - return spl::SetBootReason(boot_reason); + return impl::SetBootReason(boot_reason); } Result DeprecatedService::GetBootReason(Out out) { - return spl::GetBootReason(out.GetPointer()); + return impl::GetBootReason(out.GetPointer()); } } diff --git a/stratosphere/spl/source/spl_deprecated_service.hpp b/stratosphere/spl/source/spl_deprecated_service.hpp index d78bb7282..ee5e4695e 100644 --- a/stratosphere/spl/source/spl_deprecated_service.hpp +++ b/stratosphere/spl/source/spl_deprecated_service.hpp @@ -17,8 +17,7 @@ #pragma once #include #include - -#include "spl_types.hpp" +#include namespace sts::spl { diff --git a/stratosphere/spl/source/spl_es_service.cpp b/stratosphere/spl/source/spl_es_service.cpp index 14f4c45fc..96aa8a15b 100644 --- a/stratosphere/spl/source/spl_es_service.cpp +++ b/stratosphere/spl/source/spl_es_service.cpp @@ -17,37 +17,37 @@ #include #include +#include "spl_api_impl.hpp" #include "spl_es_service.hpp" -#include "spl_api.hpp" namespace sts::spl { Result EsService::ImportEsKey(InPointer src, AccessKey access_key, KeySource key_source, u32 option) { - return spl::ImportEsKey(src.pointer, src.num_elements, access_key, key_source, option); + return impl::ImportEsKey(src.pointer, src.num_elements, access_key, key_source, option); } Result EsService::UnwrapTitleKey(Out out_access_key, InPointer base, InPointer mod, InPointer label_digest, u32 generation) { - return spl::UnwrapTitleKey(out_access_key.GetPointer(), base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements, generation); + return impl::UnwrapTitleKey(out_access_key.GetPointer(), base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements, generation); } Result EsService::UnwrapCommonTitleKey(Out out_access_key, KeySource key_source, u32 generation) { - return spl::UnwrapCommonTitleKey(out_access_key.GetPointer(), key_source, generation); + return impl::UnwrapCommonTitleKey(out_access_key.GetPointer(), key_source, generation); } Result EsService::ImportDrmKey(InPointer src, AccessKey access_key, KeySource key_source) { - return spl::ImportDrmKey(src.pointer, src.num_elements, access_key, key_source); + return impl::ImportDrmKey(src.pointer, src.num_elements, access_key, key_source); } Result EsService::DrmExpMod(OutPointerWithClientSize out, InPointer base, InPointer mod) { - return spl::DrmExpMod(out.pointer, out.num_elements, base.pointer, base.num_elements, mod.pointer, mod.num_elements); + return impl::DrmExpMod(out.pointer, out.num_elements, base.pointer, base.num_elements, mod.pointer, mod.num_elements); } Result EsService::UnwrapElicenseKey(Out out_access_key, InPointer base, InPointer mod, InPointer label_digest, u32 generation) { - return spl::UnwrapElicenseKey(out_access_key.GetPointer(), base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements, generation); + return impl::UnwrapElicenseKey(out_access_key.GetPointer(), base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements, generation); } Result EsService::LoadElicenseKey(u32 keyslot, AccessKey access_key) { - return spl::LoadElicenseKey(keyslot, this, access_key); + return impl::LoadElicenseKey(keyslot, this, access_key); } } diff --git a/stratosphere/spl/source/spl_es_service.hpp b/stratosphere/spl/source/spl_es_service.hpp index e9828d4af..34564c373 100644 --- a/stratosphere/spl/source/spl_es_service.hpp +++ b/stratosphere/spl/source/spl_es_service.hpp @@ -17,8 +17,8 @@ #pragma once #include #include +#include -#include "spl_types.hpp" #include "spl_rsa_service.hpp" namespace sts::spl { diff --git a/stratosphere/spl/source/spl_fs_service.cpp b/stratosphere/spl/source/spl_fs_service.cpp index 95d75c489..a550bdffb 100644 --- a/stratosphere/spl/source/spl_fs_service.cpp +++ b/stratosphere/spl/source/spl_fs_service.cpp @@ -17,29 +17,29 @@ #include #include +#include "spl_api_impl.hpp" #include "spl_fs_service.hpp" -#include "spl_api.hpp" namespace sts::spl { Result FsService::ImportLotusKey(InPointer src, AccessKey access_key, KeySource key_source, u32 option) { - return spl::ImportLotusKey(src.pointer, src.num_elements, access_key, key_source, option); + return impl::ImportLotusKey(src.pointer, src.num_elements, access_key, key_source, option); } Result FsService::DecryptLotusMessage(Out out_size, OutPointerWithClientSize out, InPointer base, InPointer mod, InPointer label_digest) { - return spl::DecryptLotusMessage(out_size.GetPointer(), out.pointer, out.num_elements, base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements); + return impl::DecryptLotusMessage(out_size.GetPointer(), out.pointer, out.num_elements, base.pointer, base.num_elements, mod.pointer, mod.num_elements, label_digest.pointer, label_digest.num_elements); } Result FsService::GenerateSpecificAesKey(Out out_key, KeySource key_source, u32 generation, u32 which) { - return spl::GenerateSpecificAesKey(out_key.GetPointer(), key_source, generation, which); + return impl::GenerateSpecificAesKey(out_key.GetPointer(), key_source, generation, which); } Result FsService::LoadTitleKey(u32 keyslot, AccessKey access_key) { - return spl::LoadTitleKey(keyslot, this, access_key); + return impl::LoadTitleKey(keyslot, this, access_key); } Result FsService::GetPackage2Hash(OutPointerWithClientSize dst) { - return spl::GetPackage2Hash(dst.pointer, dst.num_elements); + return impl::GetPackage2Hash(dst.pointer, dst.num_elements); } } diff --git a/stratosphere/spl/source/spl_fs_service.hpp b/stratosphere/spl/source/spl_fs_service.hpp index e19d98c02..11ce4452b 100644 --- a/stratosphere/spl/source/spl_fs_service.hpp +++ b/stratosphere/spl/source/spl_fs_service.hpp @@ -17,8 +17,8 @@ #pragma once #include #include +#include -#include "spl_types.hpp" #include "spl_crypto_service.hpp" namespace sts::spl { diff --git a/stratosphere/spl/source/spl_general_service.cpp b/stratosphere/spl/source/spl_general_service.cpp index 4d1e644e5..fc70c7ae9 100644 --- a/stratosphere/spl/source/spl_general_service.cpp +++ b/stratosphere/spl/source/spl_general_service.cpp @@ -17,37 +17,37 @@ #include #include +#include "spl_api_impl.hpp" #include "spl_general_service.hpp" -#include "spl_api.hpp" namespace sts::spl { Result GeneralService::GetConfig(Out out, u32 which) { - return spl::GetConfig(out.GetPointer(), static_cast(which)); + return impl::GetConfig(out.GetPointer(), static_cast(which)); } Result GeneralService::ExpMod(OutPointerWithClientSize out, InPointer base, InPointer exp, InPointer mod) { - return spl::ExpMod(out.pointer, out.num_elements, base.pointer, base.num_elements, exp.pointer, exp.num_elements, mod.pointer, mod.num_elements); + return impl::ExpMod(out.pointer, out.num_elements, base.pointer, base.num_elements, exp.pointer, exp.num_elements, mod.pointer, mod.num_elements); } Result GeneralService::SetConfig(u32 which, u64 value) { - return spl::SetConfig(static_cast(which), value); + return impl::SetConfig(static_cast(which), value); } Result GeneralService::GenerateRandomBytes(OutPointerWithClientSize out) { - return spl::GenerateRandomBytes(out.pointer, out.num_elements); + return impl::GenerateRandomBytes(out.pointer, out.num_elements); } Result GeneralService::IsDevelopment(Out is_dev) { - return spl::IsDevelopment(is_dev.GetPointer()); + return impl::IsDevelopment(is_dev.GetPointer()); } Result GeneralService::SetBootReason(BootReasonValue boot_reason) { - return spl::SetBootReason(boot_reason); + return impl::SetBootReason(boot_reason); } Result GeneralService::GetBootReason(Out out) { - return spl::GetBootReason(out.GetPointer()); + return impl::GetBootReason(out.GetPointer()); } } diff --git a/stratosphere/spl/source/spl_general_service.hpp b/stratosphere/spl/source/spl_general_service.hpp index a181d9127..d6c2f0a3a 100644 --- a/stratosphere/spl/source/spl_general_service.hpp +++ b/stratosphere/spl/source/spl_general_service.hpp @@ -17,8 +17,7 @@ #pragma once #include #include - -#include "spl_types.hpp" +#include namespace sts::spl { diff --git a/stratosphere/spl/source/spl_main.cpp b/stratosphere/spl/source/spl_main.cpp index bceb4cdcc..93973d87d 100644 --- a/stratosphere/spl/source/spl_main.cpp +++ b/stratosphere/spl/source/spl_main.cpp @@ -22,6 +22,8 @@ #include #include +#include "spl_api_impl.hpp" + #include "spl_random_service.hpp" #include "spl_general_service.hpp" #include "spl_crypto_service.hpp" @@ -32,8 +34,6 @@ #include "spl_deprecated_service.hpp" -#include "spl_api.hpp" - extern "C" { extern u32 __start__; @@ -91,7 +91,7 @@ struct SplServerOptions { int main(int argc, char **argv) { /* Initialize global context. */ - sts::spl::Initialize(); + sts::spl::impl::Initialize(); /* Create server manager. */ static auto s_server_manager = WaitableManager(1); diff --git a/stratosphere/spl/source/spl_manu_service.cpp b/stratosphere/spl/source/spl_manu_service.cpp index d7168a6e0..1ee4bfccc 100644 --- a/stratosphere/spl/source/spl_manu_service.cpp +++ b/stratosphere/spl/source/spl_manu_service.cpp @@ -17,13 +17,13 @@ #include #include +#include "spl_api_impl.hpp" #include "spl_manu_service.hpp" -#include "spl_api.hpp" namespace sts::spl { Result ManuService::ReEncryptRsaPrivateKey(OutPointerWithClientSize out, InPointer src, AccessKey access_key_dec, KeySource source_dec, AccessKey access_key_enc, KeySource source_enc, u32 option) { - return spl::ReEncryptRsaPrivateKey(out.pointer, out.num_elements, src.pointer, src.num_elements, access_key_dec, source_dec, access_key_enc, source_enc, option); + return impl::ReEncryptRsaPrivateKey(out.pointer, out.num_elements, src.pointer, src.num_elements, access_key_dec, source_dec, access_key_enc, source_enc, option); } } diff --git a/stratosphere/spl/source/spl_manu_service.hpp b/stratosphere/spl/source/spl_manu_service.hpp index 044d8da80..3c1c6f9a8 100644 --- a/stratosphere/spl/source/spl_manu_service.hpp +++ b/stratosphere/spl/source/spl_manu_service.hpp @@ -17,8 +17,8 @@ #pragma once #include #include +#include -#include "spl_types.hpp" #include "spl_rsa_service.hpp" namespace sts::spl { diff --git a/stratosphere/spl/source/spl_random_service.cpp b/stratosphere/spl/source/spl_random_service.cpp index 919112a35..9127209d9 100644 --- a/stratosphere/spl/source/spl_random_service.cpp +++ b/stratosphere/spl/source/spl_random_service.cpp @@ -17,13 +17,13 @@ #include #include +#include "spl_api_impl.hpp" #include "spl_random_service.hpp" -#include "spl_api.hpp" namespace sts::spl { Result RandomService::GenerateRandomBytes(OutBuffer out) { - return spl::GenerateRandomBytes(out.buffer, out.num_elements); + return impl::GenerateRandomBytes(out.buffer, out.num_elements); } } diff --git a/stratosphere/spl/source/spl_random_service.hpp b/stratosphere/spl/source/spl_random_service.hpp index 7fc3bf96b..e89e92bf5 100644 --- a/stratosphere/spl/source/spl_random_service.hpp +++ b/stratosphere/spl/source/spl_random_service.hpp @@ -17,8 +17,7 @@ #pragma once #include #include - -#include "spl_types.hpp" +#include namespace sts::spl { diff --git a/stratosphere/spl/source/spl_rsa_service.cpp b/stratosphere/spl/source/spl_rsa_service.cpp index da81ae814..e075fa7da 100644 --- a/stratosphere/spl/source/spl_rsa_service.cpp +++ b/stratosphere/spl/source/spl_rsa_service.cpp @@ -17,17 +17,17 @@ #include #include +#include "spl_api_impl.hpp" #include "spl_rsa_service.hpp" -#include "spl_api.hpp" namespace sts::spl { Result RsaService::DecryptRsaPrivateKeyDeprecated(OutPointerWithClientSize dst, InPointer src, AccessKey access_key, KeySource key_source, u32 option) { - return spl::DecryptRsaPrivateKey(dst.pointer, dst.num_elements, src.pointer, src.num_elements, access_key, key_source, option); + return impl::DecryptRsaPrivateKey(dst.pointer, dst.num_elements, src.pointer, src.num_elements, access_key, key_source, option); } Result RsaService::DecryptRsaPrivateKey(OutPointerWithClientSize dst, InPointer src, AccessKey access_key, KeySource key_source) { - return spl::DecryptRsaPrivateKey(dst.pointer, dst.num_elements, src.pointer, src.num_elements, access_key, key_source, static_cast(smc::DecryptOrImportMode::DecryptRsaPrivateKey)); + return impl::DecryptRsaPrivateKey(dst.pointer, dst.num_elements, src.pointer, src.num_elements, access_key, key_source, static_cast(smc::DecryptOrImportMode::DecryptRsaPrivateKey)); } } diff --git a/stratosphere/spl/source/spl_rsa_service.hpp b/stratosphere/spl/source/spl_rsa_service.hpp index f9cd57a77..7b0933a5e 100644 --- a/stratosphere/spl/source/spl_rsa_service.hpp +++ b/stratosphere/spl/source/spl_rsa_service.hpp @@ -17,8 +17,8 @@ #pragma once #include #include +#include -#include "spl_types.hpp" #include "spl_crypto_service.hpp" namespace sts::spl { diff --git a/stratosphere/spl/source/spl_smc.cpp b/stratosphere/spl/source/spl_smc.cpp deleted file mode 100644 index c969afe7e..000000000 --- a/stratosphere/spl/source/spl_smc.cpp +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Copyright (c) 2018-2019 Atmosphère-NX - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include - -#include "spl_smc.hpp" - -namespace sts::spl::smc { - - Result SetConfig(SplConfigItem which, const u64 *value, size_t num_qwords) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::SetConfig); - args.X[1] = which; - args.X[2] = 0; - for (size_t i = 0; i < std::min(size_t(4), num_qwords); i++) { - args.X[3 + i] = value[i]; - } - svcCallSecureMonitor(&args); - - return static_cast(args.X[0]); - } - - Result GetConfig(u64 *out, size_t num_qwords, SplConfigItem which) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::GetConfig); - args.X[1] = which; - svcCallSecureMonitor(&args); - - for (size_t i = 0; i < std::min(size_t(4), num_qwords); i++) { - out[i] = args.X[1 + i]; - } - return static_cast(args.X[0]); - } - - Result CheckStatus(Result *out, AsyncOperationKey op) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::CheckStatus); - args.X[1] = op.value; - svcCallSecureMonitor(&args); - - *out = static_cast(args.X[1]); - return static_cast(args.X[0]); - } - - Result GetResult(Result *out, void *out_buf, size_t out_buf_size, AsyncOperationKey op) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::GetResult); - args.X[1] = op.value; - args.X[2] = reinterpret_cast(out_buf); - args.X[3] = out_buf_size; - svcCallSecureMonitor(&args); - - *out = static_cast(args.X[1]); - return static_cast(args.X[0]); - } - - Result ExpMod(AsyncOperationKey *out_op, const void *base, const void *exp, size_t exp_size, const void *mod) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::ExpMod); - args.X[1] = reinterpret_cast(base); - args.X[2] = reinterpret_cast(exp); - args.X[3] = reinterpret_cast(mod); - args.X[4] = exp_size; - svcCallSecureMonitor(&args); - - out_op->value = args.X[1]; - return static_cast(args.X[0]); - } - - Result GenerateRandomBytes(void *out, size_t size) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::GenerateRandomBytes); - args.X[1] = size; - svcCallSecureMonitor(&args); - - if (args.X[0] == static_cast(Result::Success) && (size <= sizeof(args) - sizeof(args.X[0]))) { - std::memcpy(out, &args.X[1], size); - } - return static_cast(args.X[0]); - } - - Result GenerateAesKek(AccessKey *out, const KeySource &source, u32 generation, u32 option) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::GenerateAesKek); - args.X[1] = source.data64[0]; - args.X[2] = source.data64[1]; - args.X[3] = generation; - args.X[4] = option; - svcCallSecureMonitor(&args); - - out->data64[0] = args.X[1]; - out->data64[1] = args.X[2]; - return static_cast(args.X[0]); - } - - Result LoadAesKey(u32 keyslot, const AccessKey &access_key, const KeySource &source) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::LoadAesKey); - args.X[1] = keyslot; - args.X[2] = access_key.data64[0]; - args.X[3] = access_key.data64[1]; - args.X[4] = source.data64[0]; - args.X[5] = source.data64[1]; - svcCallSecureMonitor(&args); - - return static_cast(args.X[0]); - } - - Result CryptAes(AsyncOperationKey *out_op, u32 mode, const IvCtr &iv_ctr, u32 dst_addr, u32 src_addr, size_t size) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::CryptAes); - args.X[1] = mode; - args.X[2] = iv_ctr.data64[0]; - args.X[3] = iv_ctr.data64[1]; - args.X[4] = src_addr; - args.X[5] = dst_addr; - args.X[6] = size; - svcCallSecureMonitor(&args); - - out_op->value = args.X[1]; - return static_cast(args.X[0]); - } - - Result GenerateSpecificAesKey(AesKey *out_key, const KeySource &source, u32 generation, u32 which) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::GenerateSpecificAesKey); - args.X[1] = source.data64[0]; - args.X[2] = source.data64[1]; - args.X[3] = generation; - args.X[4] = which; - svcCallSecureMonitor(&args); - - out_key->data64[0] = args.X[1]; - out_key->data64[1] = args.X[2]; - return static_cast(args.X[0]); - } - - Result ComputeCmac(Cmac *out_mac, u32 keyslot, const void *data, size_t size) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::ComputeCmac); - args.X[1] = keyslot; - args.X[2] = reinterpret_cast(data); - args.X[3] = size; - svcCallSecureMonitor(&args); - - out_mac->data64[0] = args.X[1]; - out_mac->data64[1] = args.X[2]; - return static_cast(args.X[0]); - } - - Result ReEncryptRsaPrivateKey(void *data, size_t size, const AccessKey &access_key_dec, const KeySource &source_dec, const AccessKey &access_key_enc, const KeySource &source_enc, u32 option) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::ReEncryptRsaPrivateKey); - args.X[1] = reinterpret_cast(&access_key_dec); - args.X[2] = reinterpret_cast(&access_key_enc); - args.X[3] = option; - args.X[4] = reinterpret_cast(data); - args.X[5] = size; - args.X[6] = reinterpret_cast(&source_dec); - args.X[7] = reinterpret_cast(&source_enc); - svcCallSecureMonitor(&args); - - return static_cast(args.X[0]); - } - - Result DecryptOrImportRsaPrivateKey(void *data, size_t size, const AccessKey &access_key, const KeySource &source, DecryptOrImportMode mode) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::DecryptOrImportRsaPrivateKey); - args.X[1] = access_key.data64[0]; - args.X[2] = access_key.data64[1]; - args.X[3] = static_cast(mode); - args.X[4] = reinterpret_cast(data); - args.X[5] = size; - args.X[6] = source.data64[0]; - args.X[7] = source.data64[1]; - svcCallSecureMonitor(&args); - - return static_cast(args.X[0]); - } - - Result SecureExpMod(AsyncOperationKey *out_op, const void *base, const void *mod, SecureExpModMode mode) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::SecureExpMod); - args.X[1] = reinterpret_cast(base); - args.X[2] = reinterpret_cast(mod); - args.X[3] = static_cast(mode); - svcCallSecureMonitor(&args); - - out_op->value = args.X[1]; - return static_cast(args.X[0]); - } - - Result UnwrapTitleKey(AsyncOperationKey *out_op, const void *base, const void *mod, const void *label_digest, size_t label_digest_size, u32 option) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::UnwrapTitleKey); - args.X[1] = reinterpret_cast(base); - args.X[2] = reinterpret_cast(mod); - std::memset(&args.X[3], 0, 4 * sizeof(args.X[3])); - std::memcpy(&args.X[3], label_digest, std::min(size_t(4 * sizeof(args.X[3])), label_digest_size)); - args.X[7] = option; - svcCallSecureMonitor(&args); - - out_op->value = args.X[1]; - return static_cast(args.X[0]); - } - - Result LoadTitleKey(u32 keyslot, const AccessKey &access_key) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::LoadTitleKey); - args.X[1] = keyslot; - args.X[2] = access_key.data64[0]; - args.X[3] = access_key.data64[1]; - svcCallSecureMonitor(&args); - - return static_cast(args.X[0]); - } - - Result UnwrapCommonTitleKey(AccessKey *out, const KeySource &source, u32 generation) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::UnwrapCommonTitleKey); - args.X[1] = source.data64[0]; - args.X[2] = source.data64[1]; - args.X[3] = generation; - svcCallSecureMonitor(&args); - - out->data64[0] = args.X[1]; - out->data64[1] = args.X[2]; - return static_cast(args.X[0]); - } - - - /* Deprecated functions. */ - Result ImportEsKey(const void *data, size_t size, const AccessKey &access_key, const KeySource &source, u32 option) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::ImportEsKey); - args.X[1] = access_key.data64[0]; - args.X[2] = access_key.data64[1]; - args.X[3] = option; - args.X[4] = reinterpret_cast(data); - args.X[5] = size; - args.X[6] = source.data64[0]; - args.X[7] = source.data64[1]; - svcCallSecureMonitor(&args); - - return static_cast(args.X[0]); - } - - Result DecryptRsaPrivateKey(size_t *out_size, void *data, size_t size, const AccessKey &access_key, const KeySource &source, u32 option) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::DecryptRsaPrivateKey); - args.X[1] = access_key.data64[0]; - args.X[2] = access_key.data64[1]; - args.X[3] = option; - args.X[4] = reinterpret_cast(data); - args.X[5] = size; - args.X[6] = source.data64[0]; - args.X[7] = source.data64[1]; - svcCallSecureMonitor(&args); - - *out_size = static_cast(args.X[1]); - return static_cast(args.X[0]); - } - - Result ImportSecureExpModKey(const void *data, size_t size, const AccessKey &access_key, const KeySource &source, u32 option) { - SecmonArgs args; - - args.X[0] = static_cast(FunctionId::ImportSecureExpModKey); - args.X[1] = access_key.data64[0]; - args.X[2] = access_key.data64[1]; - args.X[3] = option; - args.X[4] = reinterpret_cast(data); - args.X[5] = size; - args.X[6] = source.data64[0]; - args.X[7] = source.data64[1]; - svcCallSecureMonitor(&args); - - return static_cast(args.X[0]); - } - -} diff --git a/stratosphere/spl/source/spl_smc.hpp b/stratosphere/spl/source/spl_smc.hpp deleted file mode 100644 index df0af4c98..000000000 --- a/stratosphere/spl/source/spl_smc.hpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2018-2019 Atmosphère-NX - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#include -#include - -#include "spl_types.hpp" - -namespace sts::spl::smc { - - /* Helpers for converting arguments. */ - inline u32 GetCryptAesMode(CipherMode mode, u32 keyslot) { - return static_cast((static_cast(mode) << 4) | (keyslot & 7)); - } - - inline u32 GetUnwrapEsKeyOption(EsKeyType type, u32 generation) { - return static_cast((static_cast(type) << 6) | (generation & 0x3F)); - } - - /* Functions. */ - Result SetConfig(SplConfigItem which, const u64 *value, size_t num_qwords); - Result GetConfig(u64 *out, size_t num_qwords, SplConfigItem which); - Result CheckStatus(Result *out, AsyncOperationKey op); - Result GetResult(Result *out, void *out_buf, size_t out_buf_size, AsyncOperationKey op); - Result ExpMod(AsyncOperationKey *out_op, const void *base, const void *exp, size_t exp_size, const void *mod); - Result GenerateRandomBytes(void *out, size_t size); - Result GenerateAesKek(AccessKey *out, const KeySource &source, u32 generation, u32 option); - Result LoadAesKey(u32 keyslot, const AccessKey &access_key, const KeySource &source); - Result CryptAes(AsyncOperationKey *out_op, u32 mode, const IvCtr &iv_ctr, u32 dst_addr, u32 src_addr, size_t size); - Result GenerateSpecificAesKey(AesKey *out_key, const KeySource &source, u32 generation, u32 which); - Result ComputeCmac(Cmac *out_mac, u32 keyslot, const void *data, size_t size); - Result ReEncryptRsaPrivateKey(void *data, size_t size, const AccessKey &access_key_dec, const KeySource &source_dec, const AccessKey &access_key_enc, const KeySource &source_enc, u32 option); - Result DecryptOrImportRsaPrivateKey(void *data, size_t size, const AccessKey &access_key, const KeySource &source, DecryptOrImportMode mode); - Result SecureExpMod(AsyncOperationKey *out_op, const void *base, const void *mod, SecureExpModMode mode); - Result UnwrapTitleKey(AsyncOperationKey *out_op, const void *base, const void *mod, const void *label_digest, size_t label_digest_size, u32 option); - Result LoadTitleKey(u32 keyslot, const AccessKey &access_key); - Result UnwrapCommonTitleKey(AccessKey *out, const KeySource &source, u32 generation); - - /* Deprecated functions. */ - Result ImportEsKey(const void *data, size_t size, const AccessKey &access_key, const KeySource &source, u32 option); - Result DecryptRsaPrivateKey(size_t *out_size, void *data, size_t size, const AccessKey &access_key, const KeySource &source, u32 option); - Result ImportSecureExpModKey(const void *data, size_t size, const AccessKey &access_key, const KeySource &source, u32 option); - -} diff --git a/stratosphere/spl/source/spl_ssl_service.cpp b/stratosphere/spl/source/spl_ssl_service.cpp index d1754203f..3c6d1a399 100644 --- a/stratosphere/spl/source/spl_ssl_service.cpp +++ b/stratosphere/spl/source/spl_ssl_service.cpp @@ -17,17 +17,17 @@ #include #include +#include "spl_api_impl.hpp" #include "spl_ssl_service.hpp" -#include "spl_api.hpp" namespace sts::spl { Result SslService::ImportSslKey(InPointer src, AccessKey access_key, KeySource key_source) { - return spl::ImportSslKey(src.pointer, src.num_elements, access_key, key_source); + return impl::ImportSslKey(src.pointer, src.num_elements, access_key, key_source); } Result SslService::SslExpMod(OutPointerWithClientSize out, InPointer base, InPointer mod) { - return spl::SslExpMod(out.pointer, out.num_elements, base.pointer, base.num_elements, mod.pointer, mod.num_elements); + return impl::SslExpMod(out.pointer, out.num_elements, base.pointer, base.num_elements, mod.pointer, mod.num_elements); } } diff --git a/stratosphere/spl/source/spl_ssl_service.hpp b/stratosphere/spl/source/spl_ssl_service.hpp index 73adfeabe..2a2fbf6b3 100644 --- a/stratosphere/spl/source/spl_ssl_service.hpp +++ b/stratosphere/spl/source/spl_ssl_service.hpp @@ -17,8 +17,8 @@ #pragma once #include #include +#include -#include "spl_types.hpp" #include "spl_rsa_service.hpp" namespace sts::spl { diff --git a/stratosphere/spl/source/spl_types.hpp b/stratosphere/spl/source/spl_types.hpp deleted file mode 100644 index d44b8b126..000000000 --- a/stratosphere/spl/source/spl_types.hpp +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2018-2019 Atmosphère-NX - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#include -#include -#include -#include -#include - -namespace sts::spl { - - namespace smc { - - enum class FunctionId : u32 { - SetConfig = 0xC3000401, - GetConfig = 0xC3000002, - CheckStatus = 0xC3000003, - GetResult = 0xC3000404, - ExpMod = 0xC3000E05, - GenerateRandomBytes = 0xC3000006, - GenerateAesKek = 0xC3000007, - LoadAesKey = 0xC3000008, - CryptAes = 0xC3000009, - GenerateSpecificAesKey = 0xC300000A, - ComputeCmac = 0xC300040B, - ReEncryptRsaPrivateKey = 0xC300D60C, - DecryptOrImportRsaPrivateKey = 0xC300100D, - - SecureExpMod = 0xC300060F, - UnwrapTitleKey = 0xC3000610, - LoadTitleKey = 0xC3000011, - UnwrapCommonTitleKey = 0xC3000012, - - /* Deprecated functions. */ - ImportEsKey = 0xC300100C, - DecryptRsaPrivateKey = 0xC300100D, - ImportSecureExpModKey = 0xC300100E, - }; - - enum class Result { - Success = 0, - NotImplemented = 1, - InvalidArgument = 2, - InProgress = 3, - NoAsyncOperation = 4, - InvalidAsyncOperation = 5, - Blacklisted = 6, - - Max = 99, - }; - - inline ::Result ConvertResult(Result result) { - if (result == Result::Success) { - return ResultSuccess; - } - if (result < Result::Max) { - return MAKERESULT(Module_Spl, static_cast(result)); - } - return ResultSplUnknownSmcResult; - } - - enum class CipherMode { - CbcEncrypt = 0, - CbcDecrypt = 1, - Ctr = 2, - }; - - enum class DecryptOrImportMode { - DecryptRsaPrivateKey = 0, - ImportLotusKey = 1, - ImportEsKey = 2, - ImportSslKey = 3, - ImportDrmKey = 4, - }; - - enum class SecureExpModMode { - Lotus = 0, - Ssl = 1, - Drm = 2, - }; - - enum class EsKeyType { - TitleKey = 0, - ElicenseKey = 1, - }; - - struct AsyncOperationKey { - u64 value; - }; - } - - struct BootReasonValue { - u8 power_intr; - u8 rtc_intr; - u8 nv_erc; - u8 boot_reason; - }; - static_assert(sizeof(BootReasonValue) == sizeof(u32), "BootReasonValue definition!"); - - #pragma pack(push, 1) - struct AesKey { - union { - u8 data[AES_128_KEY_SIZE]; - u64 data64[AES_128_KEY_SIZE / sizeof(u64)]; - }; - }; - static_assert(alignof(AesKey) == alignof(u8), "AesKey definition!"); - - struct IvCtr { - union { - u8 data[AES_128_KEY_SIZE]; - u64 data64[AES_128_KEY_SIZE / sizeof(u64)]; - }; - }; - static_assert(alignof(IvCtr) == alignof(u8), "IvCtr definition!"); - - struct Cmac { - union { - u8 data[AES_128_KEY_SIZE]; - u64 data64[AES_128_KEY_SIZE / sizeof(u64)]; - }; - }; - static_assert(alignof(Cmac) == alignof(u8), "Cmac definition!"); - - struct AccessKey { - union { - u8 data[AES_128_KEY_SIZE]; - u64 data64[AES_128_KEY_SIZE / sizeof(u64)]; - }; - }; - static_assert(alignof(AccessKey) == alignof(u8), "AccessKey definition!"); - - struct KeySource { - union { - u8 data[AES_128_KEY_SIZE]; - u64 data64[AES_128_KEY_SIZE / sizeof(u64)]; - }; - }; - static_assert(alignof(AccessKey) == alignof(u8), "KeySource definition!"); - #pragma pack(pop) - -}