xref: /OK3568_Linux_fs/external/security/librkcrypto/src/rkcrypto_random.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright (c) 2022 Rockchip Electronics Co. Ltd.
3  */
4 #include <fcntl.h>
5 #include <stdlib.h>
6 #include <unistd.h>
7 #include "rkcrypto_random.h"
8 #include "rkcrypto_trace.h"
9 
10 #ifdef ANDROID
11 #define HWRNG_NODE	"/dev/hw_random"
12 #else
13 #define HWRNG_NODE	"/dev/hwrng"
14 #endif
15 
rk_get_random(uint8_t * data,uint32_t len)16 RK_RES rk_get_random(uint8_t *data, uint32_t len)
17 {
18 	RK_RES res = RK_CRYPTO_SUCCESS;
19 	int hwrng_fd = -1;
20 	int read_len = 0;
21 
22 	hwrng_fd = open(HWRNG_NODE, O_RDONLY, 0);
23 	if (hwrng_fd < 0) {
24 		E_TRACE("open %s error!", HWRNG_NODE);
25 		return RK_CRYPTO_ERR_GENERIC;
26 	}
27 
28 	read_len = read(hwrng_fd, data, len);
29 	if (read_len != len) {
30 		E_TRACE("read %s error!", HWRNG_NODE);
31 		res = RK_CRYPTO_ERR_GENERIC;
32 	}
33 
34 	close(hwrng_fd);
35 
36 	return res;
37 }
38