tfprng: expose range formula in form of macros to build custom range generators.
[tfcrypt.git] / tfprng.h
1 #ifndef _TF_PRNG_DEFINITIONS_HEADER
2 #define _TF_PRNG_DEFINITIONS_HEADER
3
4 #include <stdlib.h>
5 #include "tfdef.h"
6
7 #define TF_PRNG_KEY_SIZE TF_KEY_SIZE
8 #define TF_PRNG_SIZE_UNIT TF_SIZE_UNIT
9 #define TF_PRNG_RANGE(C, T, S, D) (S + C / ((T)~0 / (D - S + 1) + 1))
10
11 size_t tf_prng_datasize(void);
12 void tf_prng_seedkey_r(void *sdata, const void *skey);
13 void tf_prng_seedkey(const void *skey);
14 void tf_prng_genrandom_r(void *sdata, void *result, size_t need);
15 void tf_prng_genrandom(void *result, size_t need);
16 void tf_prng_seed_r(void *sdata, TF_UNIT_TYPE seed);
17 void tf_prng_seed(TF_UNIT_TYPE seed);
18 TF_UNIT_TYPE tf_prng_random_r(void *sdata);
19 TF_UNIT_TYPE tf_prng_random(void);
20 TF_UNIT_TYPE tf_prng_range_r(void *sdata, TF_UNIT_TYPE s, TF_UNIT_TYPE d);
21 TF_UNIT_TYPE tf_prng_range(TF_UNIT_TYPE s, TF_UNIT_TYPE d);
22
23 #endif