3 * This file is part of the ARM-Crypto-Lib.
4 * Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de)
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 * \license GPLv3 or later
23 * \brief random number generator based on noekeon running in CFB-mode
32 static uint8_t random_state[16];
33 static uint8_t random_key[16];
34 static volatile uint8_t i=0;
36 uint8_t random8(void){
37 static uint8_t sr[16];
40 noekeon_enc(random_state, random_key);
41 memcpy(sr, random_state, 16);
49 void random_block(void* dest){
51 noekeon_enc(random_state, random_key);
52 memcpy(dest, random_state, 16);
55 void srandom32(uint32_t seed){
56 memcpy(random_key, &seed, 4);
59 void random_seed(const void* buffer){
60 memcpy(random_key, buffer, 16);
63 void random_add(const void* buffer){
64 memxor(random_key, buffer, 16);