1 #if defined(ED25519_TEST)
8 typedef struct isaacp_state_t {
10 unsigned char buffer[1024];
15 #define isaacp_step(offset, mix) \
17 a = (a ^ (mix)) + (mm[(i + offset + 128) & 0xff]); \
18 y = (a ^ b) + mm[(x >> 2) & 0xff]; \
20 b = (x + a) ^ mm[(y >> 10) & 0xff]; \
21 U32TO8_LE(out + (i + offset) * 4, b);
24 isaacp_mix(isaacp_state *st) {
28 unsigned char *
out = st->buffer;
33 for (i = 0; i < 256; i += 4) {
47 isaacp_random(isaacp_state *st,
void *p,
size_t len) {
49 unsigned char *c = (
unsigned char *)p;
51 use = (len > st->left) ? st->left : len;
52 memcpy(c, st->buffer + (
sizeof(st->buffer) - st->left), use);
65 static int initialized = 0;
66 static isaacp_state rng;
69 memset(&rng, 0,
sizeof(rng));
75 isaacp_random(&rng, p, len);
77 #elif defined(ED25519_CUSTOMRANDOM)
83 #include <openssl/rand.h>
88 RAND_bytes(p, (
int) len);
void ED25519_FN() ed25519_randombytes_unsafe(void *p, size_t len)
void * memcpy(void *a, const void *b, size_t c)
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a