From e34c650103cd35e9ee627f6fff19d5adfbce2278 Mon Sep 17 00:00:00 2001 From: ITotalJustice <47043333+ITotalJustice@users.noreply.github.com> Date: Mon, 16 Dec 2019 11:23:50 +0000 Subject: [PATCH] Add structs, move function locations. --- nx/include/switch/services/set.h | 104 ++++++++++++++++++++++--------- nx/source/services/set.c | 98 ++++++++++++++--------------- 2 files changed, 123 insertions(+), 79 deletions(-) diff --git a/nx/include/switch/services/set.h b/nx/include/switch/services/set.h index 0ba0f920..1a06f9b1 100644 --- a/nx/include/switch/services/set.h +++ b/nx/include/switch/services/set.h @@ -262,6 +262,50 @@ typedef struct { u32 extra_color; ///< Extra Color. } SetSysHomeMenuScheme; +typedef struct { + u32 size; ///< Size of the data. +} SetCalContainer; + +typedef struct { + SetCalContainer container; ///< \ref SetCalContainer. + u8 key[0x130]; +} SetCalSslKey; + +typedef struct { + u32 offset; ///< Relative to current position. + u8 cert[0x800]; +} SetCalSslCertificate; + +typedef struct { + SetCalContainer container; ///< \ref SetCalContainer. + u8 key[0x130]; +} SetCalGameCardKey; + +typedef struct { + u8 cert[0x400]; +} SetCalGameCardCertificate; + +typedef struct { + u8 key[0x50]; + u32 pad; ///< Used on fw 5.0.0+ +} SetCalEccB233DeviceKey; + +typedef struct { + u32 offset; ///< Relative to current position. + u8 cert[0x17C]; +} SetCalEccB233DeviceCertificate; + +typedef struct { + SetCalContainer container; ///< \ref SetCalContainer. + u8 key[0x240]; +} SetCalRsa2048DeviceKey; + +typedef struct { + u32 offset; ///< Relative to current position. + u8 cert[0x23C]; +} SetCalRsa2048DeviceCertificate; + + /// Initialize set. Result setInitialize(void); @@ -271,36 +315,6 @@ void setExit(void); /// Gets the Service object for the actual set service session. Service* setGetServiceSession(void); -/// Initialize setcal. -Result setcalInitialize(void); - -/// Exit setcal. -void setcalExit(void); - -/// Gets the Service object for the actual setcal service session. -Service* setcalGetServiceSession(void); - -/// Gets EciDeviceCertificate of size 0x180. -Result setcalGetEciDeviceCertificate(void *certificate, size_t size); - -/// Gets EticketDeviceCertificate of size 0x240. -Result setcalGetEticketDeviceCertificate(void *certificate, size_t size); - -/// Gets SslKey of size 0x134. -Result setcalGetSslKey(void *key, size_t size); - -/// Gets SslCertificate of size 0x804. -Result setcalGetSslCertificate(void *certificate, size_t size); - -/// Gets GameCardKey of size 0x134. -Result setcalGetGameCardKey(void *key, size_t size); - -/// Gets GameCardCertificate of size 0x404. -Result setcalGetGameCardCertificate(void *certificate, size_t size); - -/// Gets EticketDeviceKey of size 0x244. -Result setcalGetEticketDeviceKey(void *key, size_t size); - /// Converts LanguageCode to \ref SetLanguage. Result setMakeLanguage(u64 LanguageCode, SetLanguage *Language); @@ -915,3 +929,33 @@ Result setsysGetTouchScreenMode(SetSysTouchScreenMode *out); * @param[in] mode \ref SetSysTouchScreenMode */ Result setsysSetTouchScreenMode(SetSysTouchScreenMode mode); + +/// Initialize setcal. +Result setcalInitialize(void); + +/// Exit setcal. +void setcalExit(void); + +/// Gets the Service object for the actual setcal service session. +Service* setcalGetServiceSession(void); + +/// Gets EciDeviceCertificate of size 0x180. +Result setcalGetEciDeviceCertificate(SetCalEccB233DeviceCertificate *out); + +/// Gets EticketDeviceCertificate of size 0x240. +Result setcalGetEticketDeviceCertificate(SetCalRsa2048DeviceCertificate *out); + +/// Gets SslKey of size 0x134. +Result setcalGetSslKey(SetCalSslKey *out); + +/// Gets SslCertificate of size 0x804. +Result setcalGetSslCertificate(SetCalSslCertificate *out); + +/// Gets GameCardKey of size 0x134. +Result setcalGetGameCardKey(SetCalGameCardKey *out); + +/// Gets GameCardCertificate of size 0x404. +Result setcalGetGameCardCertificate(SetCalGameCardCertificate *out); + +/// Gets EticketDeviceKey of size 0x244. +Result setcalGetEticketDeviceKey(SetCalRsa2048DeviceKey *out); diff --git a/nx/source/services/set.c b/nx/source/services/set.c index 5eb7d7b0..3655e81f 100644 --- a/nx/source/services/set.c +++ b/nx/source/services/set.c @@ -114,55 +114,6 @@ static Result _setCmdInU64NoOut(Service* srv, u64 inval, u32 cmd_id) { return serviceDispatchIn(srv, cmd_id, inval); } -Result setcalGetEciDeviceCertificate(void *certificate, size_t size) { - return serviceDispatch(&g_setcalSrv, 14, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, - .buffers = { { certificate, size } }, - ); -} - -Result setcalGetEticketDeviceCertificate(void *certificate, size_t size) { - return serviceDispatch(&g_setcalSrv, 15, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, - .buffers = { { certificate, size } }, - ); -} - -Result setcalGetSslKey(void *key, size_t size) { - return serviceDispatch(&g_setcalSrv, 16, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, - .buffers = { { key, size } }, - ); -} - -Result setcalGetSslCertificate(void *certificate, size_t size) { - return serviceDispatch(&g_setcalSrv, 17, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, - .buffers = { { certificate, size } }, - ); -} - -Result setcalGetGameCardKey(void *key, size_t size) { - return serviceDispatch(&g_setcalSrv, 18, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, - .buffers = { { key, size } }, - ); -} - -Result setcalGetGameCardCertificate(void *certificate, size_t size) { - return serviceDispatch(&g_setcalSrv, 19, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, - .buffers = { { certificate, size } }, - ); -} - -Result setcalGetEticketDeviceKey(void *key, size_t size) { - return serviceDispatch(&g_setcalSrv, 21, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, - .buffers = { { key, size } }, - ); -} - static Result setInitializeLanguageCodesCache(void) { if (g_setLanguageCodesInitialized) return 0; Result rc = 0; @@ -829,3 +780,52 @@ Result setsysSetTouchScreenMode(SetSysTouchScreenMode mode) { return _setCmdInU32NoOut(&g_setsysSrv, mode, 188); } + +Result setcalGetEciDeviceCertificate(SetCalEccB233DeviceCertificate *out) { + return serviceDispatch(&g_setcalSrv, 14, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { out, sizeof(SetCalEccB233DeviceCertificate) } }, + ); +} + +Result setcalGetEticketDeviceCertificate(SetCalRsa2048DeviceCertificate *out) { + return serviceDispatch(&g_setcalSrv, 15, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { out, sizeof(SetCalRsa2048DeviceCertificate) } }, + ); +} + +Result setcalGetSslKey(SetCalSslKey *out) { + return serviceDispatch(&g_setcalSrv, 16, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { out, sizeof(SetCalSslKey) } }, + ); +} + +Result setcalGetSslCertificate(SetCalSslCertificate *out) { + return serviceDispatch(&g_setcalSrv, 17, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { out, sizeof(SetCalSslCertificate) } }, + ); +} + +Result setcalGetGameCardKey(SetCalGameCardKey *out) { + return serviceDispatch(&g_setcalSrv, 18, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { out, sizeof(SetCalGameCardKey) } }, + ); +} + +Result setcalGetGameCardCertificate(SetCalGameCardCertificate *out) { + return serviceDispatch(&g_setcalSrv, 19, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { out, sizeof(SetCalGameCardCertificate) } }, + ); +} + +Result setcalGetEticketDeviceKey(SetCalRsa2048DeviceKey *out) { + return serviceDispatch(&g_setcalSrv, 21, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { out, sizeof(SetCalRsa2048DeviceKey) } }, + ); +}