]> Chaos Git - corbenik/ctrulib.git/commitdiff
Add support for ps:ps#GenerateRandomBytes.
authorinfinicore <infinicore@protonmail.com>
Fri, 22 Jul 2016 06:24:18 +0000 (06:24 +0000)
committerinfinicore <infinicore@protonmail.com>
Fri, 22 Jul 2016 06:24:18 +0000 (06:24 +0000)
libctru/include/3ds/services/ps.h
libctru/source/services/ps.c

index 398e7fdfb5b4919ff3999af4eedef3b0197c6213..4d17fee5fc538f64a97aacdd11a3dae102190027 100644 (file)
@@ -74,3 +74,10 @@ Result PS_GetLocalFriendCodeSeed(u64* seed);
  * @param device_id Pointer to write the device ID to.
  */
 Result PS_GetDeviceId(u32* device_id);
+
+/**
+ * @brief Generates cryptographically secure random bytes.
+ * @param out Pointer to the buffer to write the bytes to.
+ * @param len Number of bytes to write.
+ */
+Result PS_GenerateRandomBytes(void* out, size_t len);
index f866ac8479e61e4058cc97d1a6f880266c21be53..ab8520eb5d3e07efebee79ddb98688ea182e8138 100644 (file)
@@ -103,3 +103,18 @@ Result PS_GetDeviceId(u32* device_id)
 
        return (Result)cmdbuf[1];
 }
+
+Result PS_GenerateRandomBytes(void* out, size_t len)
+{
+       Result ret = 0;
+       u32 *cmdbuf = getThreadCommandBuffer();
+
+       cmdbuf[0] = IPC_MakeHeader(0xD,1,2); // 0xD0042
+       cmdbuf[1] = len;
+       cmdbuf[2] = IPC_Desc_Buffer(len, IPC_BUFFER_W);
+       cmdbuf[3] = (u32)out;
+
+       if(R_FAILED(ret = svcSendSyncRequest(psHandle)))return ret;
+
+       return (Result)cmdbuf[1];
+}