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)16RK_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