/* Hardware Random Number Generator Functions * * For documentation, see http://esp8266-re.foogod.com/wiki/Random_Number_Generator * * Part of esp-open-rtos * Copyright (C) 2015 Angus Gratton * BSD Licensed as described in the file LICENSE */ #include #include #include /* Return a random 32-bit number. * * This is also used as a substitute for rand() called from * lmac.a:sdk_lmacTxFrame to avoid touching the newlib reent structures within * the NMI and the NMI code needs to be in IRAM. */ uint32_t IRAM hwrand(void) { return WDEV.HWRNG; } /* Fill a variable size buffer with data from the Hardware RNG */ void hwrand_fill(uint8_t *buf, size_t len) { for(size_t i = 0; i < len; i+=4) { uint32_t random = WDEV.HWRNG; /* using memcpy here in case 'buf' is unaligned */ memcpy(buf + i, &random, (i+4 <= len) ? 4 : (len % 4)); } }