From 8b85add711f965e3ceeed043cf8648634fe7d8a2 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Thu, 28 Mar 2024 04:43:07 -0700 Subject: [PATCH] spl: add support for new spl:es command 33 --- .../include/stratosphere/spl/impl/spl_api_impl.hpp | 1 + .../include/stratosphere/spl/impl/spl_es_interface.hpp | 3 ++- libstratosphere/source/spl/impl/spl_api_impl.cpp | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libstratosphere/include/stratosphere/spl/impl/spl_api_impl.hpp b/libstratosphere/include/stratosphere/spl/impl/spl_api_impl.hpp index db235432..1a79d67b 100644 --- a/libstratosphere/include/stratosphere/spl/impl/spl_api_impl.hpp +++ b/libstratosphere/include/stratosphere/spl/impl/spl_api_impl.hpp @@ -70,6 +70,7 @@ namespace ams::spl::impl { Result ModularExponentiateWithDrmDeviceCertKey(void *out, size_t out_size, const void *base, size_t base_size, const void *mod, size_t mod_size); Result PrepareEsArchiveKey(AccessKey *out_access_key, const void *base, size_t base_size, const void *mod, size_t mod_size, const void *label_digest, size_t label_digest_size, u32 generation); Result LoadPreparedAesKey(s32 keyslot, const AccessKey &access_key); + Result PrepareEsUnknown2Key(AccessKey *out_access_key, const void *base, size_t base_size, const void *mod, size_t mod_size, const void *label_digest, size_t label_digest_size, u32 generation); /* FS */ Result DecryptAndStoreGcKey(const void *src, size_t src_size, const AccessKey &access_key, const KeySource &key_source, u32 option); diff --git a/libstratosphere/include/stratosphere/spl/impl/spl_es_interface.hpp b/libstratosphere/include/stratosphere/spl/impl/spl_es_interface.hpp index 0fda1817..237c3124 100644 --- a/libstratosphere/include/stratosphere/spl/impl/spl_es_interface.hpp +++ b/libstratosphere/include/stratosphere/spl/impl/spl_es_interface.hpp @@ -28,6 +28,7 @@ AMS_SF_METHOD_INFO(C, H, 28, Result, DecryptAndStoreDrmDeviceCertKey, (const sf::InPointerBuffer &src, spl::AccessKey access_key, spl::KeySource key_source), (src, access_key, key_source), hos::Version_5_0_0) \ AMS_SF_METHOD_INFO(C, H, 29, Result, ModularExponentiateWithDrmDeviceCertKey, (const sf::OutPointerBuffer &out, const sf::InPointerBuffer &base, const sf::InPointerBuffer &mod), (out, base, mod), hos::Version_5_0_0) \ AMS_SF_METHOD_INFO(C, H, 31, Result, PrepareEsArchiveKey, (sf::Out out_access_key, const sf::InPointerBuffer &base, const sf::InPointerBuffer &mod, const sf::InPointerBuffer &label_digest, u32 generation), (out_access_key, base, mod, label_digest, generation), hos::Version_6_0_0) \ - AMS_SF_METHOD_INFO(C, H, 32, Result, LoadPreparedAesKey, (s32 keyslot, spl::AccessKey access_key), (keyslot, access_key), hos::Version_6_0_0) + AMS_SF_METHOD_INFO(C, H, 32, Result, LoadPreparedAesKey, (s32 keyslot, spl::AccessKey access_key), (keyslot, access_key), hos::Version_6_0_0) \ + AMS_SF_METHOD_INFO(C, H, 33, Result, PrepareEsUnknown2Key, (sf::Out out_access_key, const sf::InPointerBuffer &base, const sf::InPointerBuffer &mod, const sf::InPointerBuffer &label_digest, u32 generation), (out_access_key, base, mod, label_digest, generation), hos::Version_18_0_0) AMS_SF_DEFINE_INTERFACE_WITH_BASE(ams::spl::impl, IEsInterface, ::ams::spl::impl::IDeviceUniqueDataInterface, AMS_SPL_I_ES_INTERFACE_INTERFACE_INFO, 0x346D5001) diff --git a/libstratosphere/source/spl/impl/spl_api_impl.cpp b/libstratosphere/source/spl/impl/spl_api_impl.cpp index acec0740..c5c450b1 100644 --- a/libstratosphere/source/spl/impl/spl_api_impl.cpp +++ b/libstratosphere/source/spl/impl/spl_api_impl.cpp @@ -893,6 +893,10 @@ namespace ams::spl::impl { R_RETURN(PrepareEsDeviceUniqueKey(out_access_key, base, base_size, mod, mod_size, label_digest, label_digest_size, smc::EsDeviceUniqueKeyType::ArchiveKey, generation)); } + Result PrepareEsUnknown2Key(AccessKey *out_access_key, const void *base, size_t base_size, const void *mod, size_t mod_size, const void *label_digest, size_t label_digest_size, u32 generation) { + R_RETURN(PrepareEsDeviceUniqueKey(out_access_key, base, base_size, mod, mod_size, label_digest, label_digest_size, smc::EsDeviceUniqueKeyType::Unknown2, generation)); + } + /* FS */ Result DecryptAndStoreGcKey(const void *src, size_t src_size, const AccessKey &access_key, const KeySource &key_source, u32 option) { R_RETURN(DecryptAndStoreDeviceUniqueKey(src, src_size, access_key, key_source, option));