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)
-
-}