16e954a6eSJens Wiklander // SPDX-License-Identifier: BSD-2-Clause 26e954a6eSJens Wiklander /* Copyright (c) 2018, Linaro Limited */ 36e954a6eSJens Wiklander 46e954a6eSJens Wiklander #include <compiler.h> 56e954a6eSJens Wiklander #include <crypto/crypto.h> 6*60296dffSAndrew Davis #include <kernel/panic.h> 7ea6cd913SJens Wiklander #include <rng_support.h> 86e954a6eSJens Wiklander #include <tee/tee_cryp_utl.h> 96e954a6eSJens Wiklander #include <types_ext.h> 106e954a6eSJens Wiklander 11*60296dffSAndrew Davis /* 12*60296dffSAndrew Davis * This is only here to keep the compiler happy while we convert over 13*60296dffSAndrew Davis * platforms. Either hw_get_random_bytes() is overridden or this 14*60296dffSAndrew Davis * function is, in either case this is never called. 15*60296dffSAndrew Davis */ 16*60296dffSAndrew Davis uint8_t __weak hw_get_random_byte(void) 17*60296dffSAndrew Davis { 18*60296dffSAndrew Davis panic(); 19*60296dffSAndrew Davis return 4; // chosen by fair dice roll. 20*60296dffSAndrew Davis // guaranteed to be random. 21*60296dffSAndrew Davis } 22*60296dffSAndrew Davis 23391a3854SAndrew Davis TEE_Result __weak hw_get_random_bytes(void *buf, size_t blen) 24391a3854SAndrew Davis { 25391a3854SAndrew Davis uint8_t *b = buf; 26391a3854SAndrew Davis size_t n = 0; 27391a3854SAndrew Davis 28391a3854SAndrew Davis for (n = 0; n < blen; n++) 29391a3854SAndrew Davis b[n] = hw_get_random_byte(); 30391a3854SAndrew Davis 31391a3854SAndrew Davis return TEE_SUCCESS; 32391a3854SAndrew Davis } 33391a3854SAndrew Davis 34391a3854SAndrew Davis /* This is a HW RNG, no need for seeding */ 356e954a6eSJens Wiklander TEE_Result __weak crypto_rng_init(const void *data __unused, 366e954a6eSJens Wiklander size_t dlen __unused) 376e954a6eSJens Wiklander { 386e954a6eSJens Wiklander return TEE_SUCCESS; 396e954a6eSJens Wiklander } 406e954a6eSJens Wiklander 41391a3854SAndrew Davis /* This is a HW RNG, no need to add entropy */ 426e954a6eSJens Wiklander void __weak crypto_rng_add_event(enum crypto_rng_src sid __unused, 436e954a6eSJens Wiklander unsigned int *pnum __unused, 446e954a6eSJens Wiklander const void *data __unused, 456e954a6eSJens Wiklander size_t dlen __unused) 466e954a6eSJens Wiklander { 476e954a6eSJens Wiklander } 486e954a6eSJens Wiklander 496e954a6eSJens Wiklander TEE_Result __weak crypto_rng_read(void *buf, size_t blen) 506e954a6eSJens Wiklander { 51391a3854SAndrew Davis if (!buf) 52ea6cd913SJens Wiklander return TEE_ERROR_BAD_PARAMETERS; 53ea6cd913SJens Wiklander 54391a3854SAndrew Davis return hw_get_random_bytes(buf, blen); 556e954a6eSJens Wiklander } 56