18 int32_t r[4 * batch_len];
19 uint8_t ells[numkeys];
23 for (
long long j = 0;
j < batch_len; ++
j)
25 for (
long long j = 0;
j < numkeys; ++
j)
29 long long collision = 0;
30 for (
long long j = 1;
j < numkeys; ++
j)
31 collision |= int32mask_zero((r[
j] ^ r[
j - 1]) & ~1);
33#ifdef ENABLE_CT_TESTING
34 VALGRIND_MAKE_MEM_DEFINED(&collision,
sizeof(collision));
39 for (int32_t
j = 0;
j < numkeys; ++
j)
42 for (int32_t
j = 0;
j < batch_len; ++
j)
45 for (int32_t
i = 0;
i < numkeys; ++
i)
47 for (int32_t
j =
i;
j < batch_len; ++
j)
50 int32_t updatemask = int32mask_zero(ells[
i]) & int32mask_nonzero(r[
j]);
51 r[
j] ^= (1 & updatemask);
52 ells[
i] |= (updatemask & (
j + 1));
56 for (int32_t
i = 0;
i < numkeys; ++
i)
84 const long long rnum = S + w;
92 for (
long long j = 0;
j < rnum; ++
j)
94 for (
long long j = 0;
j < w; ++
j)
97 long long collision = 0;
98 for (
long long j = 1;
j < w; ++
j)
99 collision |= int32mask_zero((r[
j] ^ r[
j - 1]) & ~1);
105 for (
long long j = 0;
j < rnum; ++
j)
109 for (
long long j = 1;
j < rnum; ++
j)
114 for (
long long i = 0;
i < w; ++
i)
117 for (
long long j = 0;
j < rnum; ++
j)
118 numi -= int32mask_equal(r[
j],
i);
126 for (
long long i = 1;
i < w; ++
i)
144 long long counter = w - S;
147 long long reject = 0;
148 for (
long long i = 0;
i < w; ++
i)
150 int32_t rbit = 1 & (r[
i / 32] >> (
i & 31));
151 int32_t eizeromask = int32mask_zero(e[
i]);
152 counter += eizeromask;
153 reject |= int32mask_negative(counter) & eizeromask & rbit;
163 for (
long long i = 0;
i < w; ++
i)
165 int32_t rbit = 1 & (r[
i / 32] >> (
i & 31));
172 int negative = 0, positive = 0;
173 for (
long long i = 0;
i < w; ++
i)
175 negative += int32mask_negative(e[
i]) & e[
i];
176 positive += ~int32mask_negative(e[
i]) & e[
i];
179 if ((negative < -(S >> 1)) || (positive > (S >> 1)))
void random_wombats(uint8_t *key, const long long numkeys, const long long batch_start, const long long batch_stop, const long long batch_sumykeys)