10 struct tf_prng_data tf_prng_sdata;
12 size_t tf_prng_datasize(void)
14 return sizeof(struct tf_prng_data);
17 void tf_prng_seedkey_r(void *sdata, const void *skey)
19 TF_UNIT_TYPE k[TF_NR_KEY_UNITS];
20 struct tf_prng_data *rprng = sdata;
22 memset(rprng, 0, tf_prng_datasize());
25 memcpy(k, skey, TF_KEY_SIZE);
26 tfe_init(&rprng->tfe, k);
29 memset(k, 0, TF_KEY_SIZE);
32 void tf_prng_seedkey(const void *skey)
34 tf_prng_seedkey_r(&tf_prng_sdata, skey);
37 void tf_prng_genrandom_r(void *sdata, void *result, size_t need)
39 struct tf_prng_data *rprng = sdata;
40 memset(result, 0, need);
41 tfe_emit(result, need, &rprng->tfe);
44 void tf_prng_genrandom(void *result, size_t need)
46 tf_prng_genrandom_r(&tf_prng_sdata, result, need);
49 void tf_prng_seed_r(void *sdata, TF_UNIT_TYPE seed)
51 TF_UNIT_TYPE k[TF_NR_KEY_UNITS];
52 struct tf_prng_data *rprng = sdata;
55 memset(rprng, 0, tf_prng_datasize());
56 for (x = 0; x < TF_NR_KEY_UNITS; x++) k[x] = seed;
57 tfe_init(&rprng->tfe, k);
60 memset(k, 0, TF_KEY_SIZE);
63 void tf_prng_seed(TF_UNIT_TYPE seed)
65 tf_prng_seed_r(&tf_prng_sdata, seed);
68 TF_UNIT_TYPE tf_prng_random_r(void *sdata)
70 struct tf_prng_data *rprng = sdata;
73 if (!rprng->init) return 0;
75 tfe_emit(&r, sizeof(r), &rprng->tfe);
79 TF_UNIT_TYPE tf_prng_random(void)
81 return tf_prng_random_r(&tf_prng_sdata);
84 TF_UNIT_TYPE tf_prng_range_r(void *sdata, TF_UNIT_TYPE s, TF_UNIT_TYPE d)
86 TF_UNIT_TYPE c = tf_prng_random_r(sdata);
88 return TF_PRNG_RANGE(c, TF_UNIT_TYPE, s, d);
91 TF_UNIT_TYPE tf_prng_range(TF_UNIT_TYPE s, TF_UNIT_TYPE d)
93 return tf_prng_range_r(&tf_prng_sdata, s, d);