libnx
spl.h
Go to the documentation of this file.
1 /**
2  * @file spl.h
3  * @brief Security Processor Liaison (spl*) service IPC wrapper.
4  * @author SciresM
5  * @copyright libnx Authors
6  */
7 #pragma once
8 #include "../types.h"
9 
10 #define SPL_RSA_BUFFER_SIZE (0x100)
11 
12 typedef enum {
13  SplConfigItem_DisableProgramVerification = 1,
14  SplConfigItem_DramId = 2,
15  SplConfigItem_SecurityEngineIrqNumber = 3,
16  SplConfigItem_Version = 4,
17  SplConfigItem_HardwareType = 5,
18  SplConfigItem_IsRetail = 6,
19  SplConfigItem_IsRecoveryBoot = 7,
20  SplConfigItem_DeviceId = 8,
21  SplConfigItem_BootReason = 9,
22  SplConfigItem_MemoryArrange = 10,
23  SplConfigItem_IsDebugMode = 11,
24  SplConfigItem_KernelMemoryConfiguration = 12,
25  SplConfigItem_IsChargerHiZModeEnabled = 13,
26  SplConfigItem_IsKiosk = 14,
27  SplConfigItem_NewHardwareType = 15,
28  SplConfigItem_NewKeyGeneration = 16,
29  SplConfigItem_Package2Hash = 17,
30 } SplConfigItem;
31 
32 typedef enum {
33  RsaKeyVersion_Deprecated = 0,
34  RsaKeyVersion_Extended = 1,
35 } RsaKeyVersion;
36 
37 Result splInitialize(void);
38 void splExit(void);
39 
40 Result splCryptoInitialize(void);
41 void splCryptoExit(void);
42 
43 Result splSslInitialize(void);
44 void splSslExit(void);
45 
46 Result splEsInitialize(void);
47 void splEsExit(void);
48 
49 Result splFsInitialize(void);
50 void splFsExit(void);
51 
52 Result splManuInitialize(void);
53 void splManuExit(void);
54 
55 Result splGetConfig(SplConfigItem config_item, u64 *out_config);
56 Result splUserExpMod(const void *input, const void *modulus, const void *exp, size_t exp_size, void *dst);
57 Result splSetConfig(SplConfigItem config_item, u64 value);
58 Result splGetRandomBytes(void *out, size_t out_size);
59 Result splIsDevelopment(bool *out_is_development);
60 Result splSetSharedData(u32 value);
61 Result splGetSharedData(u32 *out_value);
62 
63 Result splCryptoGenerateAesKek(const void *wrapped_kek, u32 key_generation, u32 option, void *out_sealed_kek);
64 Result splCryptoLoadAesKey(const void *sealed_kek, const void *wrapped_key, u32 keyslot);
65 Result splCryptoGenerateAesKey(const void *sealed_kek, const void *wrapped_key, void *out_sealed_key);
66 Result splCryptoDecryptAesKey(const void *wrapped_key, u32 key_generation, u32 option, void *out_sealed_key);
67 Result splCryptoCryptAesCtr(const void *input, void *output, size_t size, const void *ctr);
68 Result splCryptoComputeCmac(const void *input, size_t size, u32 keyslot, void *out_cmac);
69 Result splCryptoLockAesEngine(u32 *out_keyslot);
70 Result splCryptoUnlockAesEngine(u32 keyslot);
71 Result splCryptoGetSecurityEngineEvent(Handle *out_event);
72 
73 Result splRsaDecryptPrivateKey(const void *sealed_kek, const void *wrapped_key, const void *wrapped_rsa_key, size_t wrapped_rsa_key_size, RsaKeyVersion version, void *dst, size_t dst_size);
74 
75 Result splSslLoadSecureExpModKey(const void *sealed_kek, const void *wrapped_key, const void *wrapped_rsa_key, size_t wrapped_rsa_key_size, RsaKeyVersion version);
76 Result splSslSecureExpMod(const void *input, const void *modulus, void *dst);
77 
78 Result splEsLoadRsaOaepKey(const void *sealed_kek, const void *wrapped_key, const void *wrapped_rsa_key, size_t wrapped_rsa_key_size, RsaKeyVersion version);
79 Result splEsUnwrapRsaOaepWrappedTitlekey(const void *rsa_wrapped_titlekey, const void *modulus, const void *label_hash, size_t label_hash_size, u32 key_generation, void *out_sealed_titlekey);
80 Result splEsUnwrapAesWrappedTitlekey(const void *aes_wrapped_titlekey, u32 key_generation, void *out_sealed_titlekey);
81 Result splEsLoadSecureExpModKey(const void *sealed_kek, const void *wrapped_key, const void *wrapped_rsa_key, size_t wrapped_rsa_key_size, RsaKeyVersion version);
82 Result splEsSecureExpMod(const void *input, const void *modulus, void *dst);
83 
84 Result splFsLoadSecureExpModKey(const void *sealed_kek, const void *wrapped_key, const void *wrapped_rsa_key, size_t wrapped_rsa_key_size, RsaKeyVersion version);
85 Result splFsSecureExpMod(const void *input, const void *modulus, void *dst);
86 Result splFsGenerateSpecificAesKey(const void *wrapped_key, u32 key_generation, u32 option, void *out_sealed_key);
87 Result splFsLoadTitlekey(const void *sealed_titlekey, u32 keyslot);
88 Result splFsGetPackage2Hash(void *out_hash);
89 
90 Result splManuEncryptRsaKeyForImport(const void *sealed_kek_pre, const void *wrapped_key_pre, const void *sealed_kek_post, const void *wrapped_kek_post, u32 option, const void *wrapped_rsa_key, void *out_wrapped_rsa_key, size_t rsa_key_size);
u32 Handle
Kernel object handle.
Definition: types.h:45
u32 Result
Function error code result type.
Definition: types.h:46
uint64_t u64
64-bit unsigned integer.
Definition: types.h:24
uint32_t u32
32-bit unsigned integer.
Definition: types.h:23