libctru v2.5.0
Loading...
Searching...
No Matches
ps.h
Go to the documentation of this file.
1/**
2 * @file ps.h
3 * @brief PS service.
4 */
5#pragma once
6
7/// PS AES algorithms.
8typedef enum
9{
10 PS_ALGORITHM_CBC_ENC, ///< CBC encryption.
11 PS_ALGORITHM_CBC_DEC, ///< CBC decryption.
12 PS_ALGORITHM_CTR_ENC, ///< CTR encryption.
13 PS_ALGORITHM_CTR_DEC, ///< CTR decryption(same as PS_ALGORITHM_CTR_ENC).
14 PS_ALGORITHM_CCM_ENC, ///< CCM encryption.
15 PS_ALGORITHM_CCM_DEC, ///< CCM decryption.
17
18/// PS key slots.
19typedef enum
20{
21 PS_KEYSLOT_0D, ///< Key slot 0x0D.
22 PS_KEYSLOT_2D, ///< Key slot 0x2D.
23 PS_KEYSLOT_31, ///< Key slot 0x31.
24 PS_KEYSLOT_38, ///< Key slot 0x38.
25 PS_KEYSLOT_32, ///< Key slot 0x32.
26 PS_KEYSLOT_39_DLP, ///< Key slot 0x39. (DLP)
27 PS_KEYSLOT_2E, ///< Key slot 0x2E.
28 PS_KEYSLOT_INVALID, ///< Invalid key slot.
29 PS_KEYSLOT_36, ///< Key slot 0x36.
30 PS_KEYSLOT_39_NFC ///< Key slot 0x39. (NFC)
32
33/// RSA context.
34typedef struct {
35 u8 modulo[0x100];
36 u8 exponent[0x100];
37 u32 rsa_bitsize;//The signature byte size is rsa_bitsize>>3.
38 u32 unk;//Normally zero?
40
41/// Initializes PS.
43
44/**
45 * @brief Initializes PS with the specified session handle.
46 * @param handle Session handle.
47 */
49
50/// Exits PS.
51void psExit(void);
52
53/// Returns the PS session handle.
55
56/**
57 * @brief Signs a RSA signature.
58 * @param hash SHA256 hash to sign.
59 * @param ctx RSA context.
60 * @param signature RSA signature.
61 */
62Result PS_SignRsaSha256(u8 *hash, psRSAContext *ctx, u8 *signature);
63
64/**
65 * @brief Verifies a RSA signature.
66 * @param hash SHA256 hash to compare with.
67 * @param ctx RSA context.
68 * @param signature RSA signature.
69 */
70Result PS_VerifyRsaSha256(u8 *hash, psRSAContext *ctx, u8 *signature);
71
72/**
73 * @brief Encrypts/Decrypts AES data. Does not support AES CCM.
74 * @param size Size of the data.
75 * @param in Input buffer.
76 * @param out Output buffer.
77 * @param aes_algo AES algorithm to use.
78 * @param key_type Key type to use.
79 * @param iv Pointer to the CTR/IV. The output CTR/IV is also written here.
80 */
81Result PS_EncryptDecryptAes(u32 size, u8* in, u8* out, PS_AESAlgorithm aes_algo, PS_AESKeyType key_type, u8* iv);
82
83/**
84 * @brief Encrypts/Decrypts signed AES CCM data.
85 * When decrypting, if the MAC is invalid, 0xC9010401 is returned. After encrypting the MAC is located at inputbufptr.
86 * @param in Input buffer.
87 * @param in_size Size of the input buffer. Must include MAC size when decrypting.
88 * @param out Output buffer.
89 * @param out_size Size of the output buffer. Must include MAC size when encrypting.
90 * @param data_len Length of the data to be encrypted/decrypted.
91 * @param mac_data_len Length of the MAC data.
92 * @param mac_len Length of the MAC.
93 * @param aes_algo AES algorithm to use.
94 * @param key_type Key type to use.
95 * @param nonce Pointer to the nonce.
96 */
97Result PS_EncryptSignDecryptVerifyAesCcm(u8* in, u32 in_size, u8* out, u32 out_size, u32 data_len, u32 mac_data_len, u32 mac_len, PS_AESAlgorithm aes_algo, PS_AESKeyType key_type, u8* nonce);
98
99/**
100 * @brief Gets the 64-bit console friend code seed.
101 * @param seed Pointer to write the friend code seed to.
102 */
104
105/**
106 * @brief Gets the 32-bit device ID.
107 * @param device_id Pointer to write the device ID to.
108 */
110
111/**
112 * @brief Generates cryptographically secure random bytes.
113 * @param out Pointer to the buffer to write the bytes to.
114 * @param len Number of bytes to write.
115 */
116Result PS_GenerateRandomBytes(void* out, size_t len);
Result PS_GetLocalFriendCodeSeed(u64 *seed)
Gets the 64-bit console friend code seed.
Result PS_GenerateRandomBytes(void *out, size_t len)
Generates cryptographically secure random bytes.
PS_AESKeyType
PS key slots.
Definition ps.h:20
@ PS_KEYSLOT_2E
Key slot 0x2E.
Definition ps.h:27
@ PS_KEYSLOT_31
Key slot 0x31.
Definition ps.h:23
@ PS_KEYSLOT_38
Key slot 0x38.
Definition ps.h:24
@ PS_KEYSLOT_0D
Key slot 0x0D.
Definition ps.h:21
@ PS_KEYSLOT_36
Key slot 0x36.
Definition ps.h:29
@ PS_KEYSLOT_39_NFC
Key slot 0x39. (NFC)
Definition ps.h:30
@ PS_KEYSLOT_32
Key slot 0x32.
Definition ps.h:25
@ PS_KEYSLOT_INVALID
Invalid key slot.
Definition ps.h:28
@ PS_KEYSLOT_39_DLP
Key slot 0x39. (DLP)
Definition ps.h:26
@ PS_KEYSLOT_2D
Key slot 0x2D.
Definition ps.h:22
Result PS_EncryptSignDecryptVerifyAesCcm(u8 *in, u32 in_size, u8 *out, u32 out_size, u32 data_len, u32 mac_data_len, u32 mac_len, PS_AESAlgorithm aes_algo, PS_AESKeyType key_type, u8 *nonce)
Encrypts/Decrypts signed AES CCM data.
void psExit(void)
Exits PS.
Result psInitHandle(Handle handle)
Initializes PS with the specified session handle.
PS_AESAlgorithm
PS AES algorithms.
Definition ps.h:9
@ PS_ALGORITHM_CBC_ENC
CBC encryption.
Definition ps.h:10
@ PS_ALGORITHM_CTR_DEC
CTR decryption(same as PS_ALGORITHM_CTR_ENC).
Definition ps.h:13
@ PS_ALGORITHM_CTR_ENC
CTR encryption.
Definition ps.h:12
@ PS_ALGORITHM_CBC_DEC
CBC decryption.
Definition ps.h:11
@ PS_ALGORITHM_CCM_DEC
CCM decryption.
Definition ps.h:15
@ PS_ALGORITHM_CCM_ENC
CCM encryption.
Definition ps.h:14
Result psInit(void)
Initializes PS.
Result PS_GetDeviceId(u32 *device_id)
Gets the 32-bit device ID.
Handle psGetSessionHandle(void)
Returns the PS session handle.
Result PS_VerifyRsaSha256(u8 *hash, psRSAContext *ctx, u8 *signature)
Verifies a RSA signature.
Result PS_EncryptDecryptAes(u32 size, u8 *in, u8 *out, PS_AESAlgorithm aes_algo, PS_AESKeyType key_type, u8 *iv)
Encrypts/Decrypts AES data.
Result PS_SignRsaSha256(u8 *hash, psRSAContext *ctx, u8 *signature)
Signs a RSA signature.
RSA context.
Definition ps.h:34
uint64_t u64
64-bit unsigned integer
Definition types.h:24
uint8_t u8
would be nice if newlib had this already
Definition types.h:21
u32 Handle
Resource handle.
Definition types.h:41
s32 Result
Function result.
Definition types.h:42
uint32_t u32
32-bit unsigned integer
Definition types.h:23