xref: /OK3568_Linux_fs/external/security/rk_tee_user/v2/ta/rk_test/rktest_trng.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 // SPDX-License-Identifier: BSD-2-Clause
2 /*
3  * Copyright (c) 2021 Rockchip Electronics Co. Ltd.
4  */
5 #include <stdio.h>
6 #include <tee_internal_api.h>
7 #include "rktest_handle.h"
8 #include "../rk_public_api/rk_trng_api.h"
9 
10 
ta_dump_hex(const char * name,const uint8_t * array,uint32_t len)11 void ta_dump_hex(const char *name, const uint8_t *array, uint32_t len)
12 {
13 	uint32_t i;
14 	char buffer[256];
15 	char *p;
16 
17 	IMSG("=================== %s [%u] ================", name, len);
18 
19 	p = buffer;
20 	for (i = 0; i < len; i++) {
21 		if (i % 16 == 0 && i != 0) {
22 			IMSG("%s", buffer);
23 			p = buffer;
24 			TEE_MemFill(buffer, 0x00, sizeof(buffer));
25 		}
26 		p += snprintf(p, 256, "%02x ", array[i]);
27 	}
28 	IMSG("%s\n", buffer);
29 }
30 
handle_trng_read(void)31 TEE_Result handle_trng_read(void)
32 {
33 	TEE_Result res = TEE_SUCCESS;
34 	uint32_t read_len = 256;
35 	uint8_t *read_data;
36 
37 	read_data = TEE_Malloc(read_len, 0);
38 	if (!read_data) {
39 		EMSG("Malloc context memory FAILED!");
40 		return TEE_ERROR_OUT_OF_MEMORY;
41 	}
42 
43 	res = rk_get_trng(read_data, read_len);
44 	if (res != TEE_SUCCESS)
45 		EMSG("rk_get_trng failed with code 0x%x", res);
46 	else
47 		ta_dump_hex("rk_get_trng success with data:", read_data, read_len);
48 
49 	TEE_Free(read_data);
50 	return res;
51 }
52 
53