My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
ps.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <3ds.h>
3 
4 static Handle psHandle;
5 
7 {
8  return srvGetServiceHandle(&psHandle, "ps:ps");
9 }
10 
12 {
13  return svcCloseHandle(psHandle);
14 }
15 
16 Result PS_EncryptDecryptAes(u32 size, u8* in, u8* out, u32 aes_algo, u32 key_type, u8* iv)
17 {
18  Result ret = 0;
19  u32 *cmdbuf = getThreadCommandBuffer();
20 
21  u32 *_iv = (u32*)iv;
22 
23  cmdbuf[0] = 0x000401C4;
24  cmdbuf[1] = size;
25  cmdbuf[2] = _iv[0];
26  cmdbuf[3] = _iv[1];
27  cmdbuf[4] = _iv[2];
28  cmdbuf[5] = _iv[3];
29  cmdbuf[6] = aes_algo;
30  cmdbuf[7] = key_type;
31  cmdbuf[8] = (size << 0x8) | 0x4;
32  cmdbuf[9] = (u32)in;
33  cmdbuf[10] = (size << 0x8) | 0x14;
34  cmdbuf[11] = (u32)out;
35 
36  if((ret = svcSendSyncRequest(psHandle))!=0)return ret;
37 
38  _iv[0] = cmdbuf[2];
39  _iv[1] = cmdbuf[3];
40  _iv[2] = cmdbuf[4];
41  _iv[3] = cmdbuf[5];
42 
43  return (Result)cmdbuf[1];
44 }
45 
46 Result PS_EncryptSignDecryptVerifyAesCcm(u8* in, u32 in_size, u8* out, u32 out_size, u32 data_len, u32 mac_data_len, u32 mac_len, u32 aes_algo, u32 key_type, u8* nonce)
47 {
48  Result ret = 0;
49  u32 *cmdbuf = getThreadCommandBuffer();
50 
51  u32 *_nonce = (u32*)nonce;
52 
53  cmdbuf[0] = 0x00050284;
54  cmdbuf[1] = in_size;
55  cmdbuf[2] = out_size;
56  cmdbuf[3] = mac_data_len;
57  cmdbuf[4] = data_len;
58  cmdbuf[5] = mac_len;
59  cmdbuf[6] = _nonce[0];
60  cmdbuf[7] = _nonce[1];
61  cmdbuf[8] = _nonce[2];
62  cmdbuf[9] = aes_algo;
63  cmdbuf[10] = key_type;
64  cmdbuf[8] = (in_size << 0x8) | 0x4;
65  cmdbuf[9] = (u32)in;
66  cmdbuf[10] = (out_size << 0x8) | 0x14;
67  cmdbuf[11] = (u32)out;
68 
69  if((ret = svcSendSyncRequest(psHandle))!=0)return ret;
70 
71  return (Result)cmdbuf[1];
72 }
73 
75 {
76  Result ret = 0;
77  u32 *cmdbuf = getThreadCommandBuffer();
78 
79  cmdbuf[0] = 0x000A0000;
80 
81  if((ret = svcSendSyncRequest(psHandle))!=0)return ret;
82 
83  *seed = (u64)cmdbuf[2] | (u64)cmdbuf[3] << 32;
84 
85  return (Result)cmdbuf[1];
86 }
87 
89 {
90  Result ret = 0;
91  u32 *cmdbuf = getThreadCommandBuffer();
92 
93  cmdbuf[0] = 0x000B0000;
94 
95  if((ret = svcSendSyncRequest(psHandle))!=0)return ret;
96 
97  *device_id = cmdbuf[2];
98 
99  return (Result)cmdbuf[1];
100 }
s32 Result
Definition: types.h:42
Result PS_EncryptDecryptAes(u32 size, u8 *in, u8 *out, u32 aes_algo, u32 key_type, u8 *iv)
Definition: ps.c:16
s32 svcCloseHandle(Handle handle)
Result srvGetServiceHandle(Handle *out, const char *name)
Definition: srv.c:109
u32 Handle
Definition: types.h:41
Result PS_EncryptSignDecryptVerifyAesCcm(u8 *in, u32 in_size, u8 *out, u32 out_size, u32 data_len, u32 mac_data_len, u32 mac_len, u32 aes_algo, u32 key_type, u8 *nonce)
Definition: ps.c:46
Result PS_GetLocalFriendCodeSeed(u64 *seed)
Definition: ps.c:74
u32 * getThreadCommandBuffer(void)
uint8_t u8
Definition: types.h:21
uint64_t u64
Definition: types.h:24
uint32_t u32
Definition: types.h:23
Result psExit()
Definition: ps.c:11
Result psInit()
Definition: ps.c:6
Result PS_GetDeviceId(u32 *device_id)
Definition: ps.c:88
s32 svcSendSyncRequest(Handle session)