X-Git-Url: https://git.cryptolib.org/?p=arm-crypto-lib.git;a=blobdiff_plain;f=noekeon%2Fnoekeon_prng.c;fp=noekeon%2Fnoekeon_prng.c;h=17c71a5a3a96d22bd2598441d8e5edf4dad4ecfa;hp=0000000000000000000000000000000000000000;hb=d70d1d77bab1a5f5278227d674bc59da0378fe15;hpb=d00ed9a275c69fa3512007452e479abd98dbe745 diff --git a/noekeon/noekeon_prng.c b/noekeon/noekeon_prng.c new file mode 100644 index 0000000..17c71a5 --- /dev/null +++ b/noekeon/noekeon_prng.c @@ -0,0 +1,67 @@ +/* noekeon_prng.c */ +/* + * This file is part of the ARM-Crypto-Lib. + * Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +/** + * \author Daniel Otte + * \date 2008-08-24 + * \license GPLv3 or later + * \brief random number generator based on noekeon running in CFB-mode + * + */ + +#include "noekeon/noekeon.h" +#include "memxor/memxor.h" +#include +#include + +static uint8_t random_state[16]; +static uint8_t random_key[16]; +static uint8_t i=0; + +uint8_t random8(void){ + static uint8_t sr[16]; + + if(i==0){ + noekeon_enc(random_state, random_key); + memcpy(sr, random_state, 16); + i=15; + return sr[15]; + } + --i; + return sr[i]; +} + +void random_block(void* dest){ + i=0; + noekeon_enc(random_state, random_key); + memcpy(dest, random_state, 16); +} + +void srandom32(uint32_t seed){ + memcpy(random_key, &seed, 4); +} + +void random_seed(const void* buffer){ + memcpy(random_key, buffer, 16); +} + +void random_add(const void* buffer){ + memxor(random_key, buffer, 16); +} + +