3 * This file is part of the AVR-Crypto-Lib.
4 * Copyright (C) 2006, 2007, 2008 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];
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);
57 memset(random_key+4, 0, 12);
58 memset(random_state, 0, 16);
62 void random_seed(const void* buffer){
63 memcpy(random_key, buffer, 16);
64 memset(random_state, 0, 16);
68 void random_add(const void* buffer){
70 noekeon_enc(random_state, random_key);
71 memxor(random_key, random_state, 16);
72 memxor(random_key, buffer, 16);