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