static void _rs_stir(void) { unsigned char rnd[KEYSZ + IVSZ]; #ifdef WITH_OPENSSL if (RAND_bytes(rnd, sizeof(rnd)) <= 0) fatal("Couldn't obtain random bytes (error %ld)", ERR_get_error()); #else getrnd(rnd, sizeof(rnd)); #endif if (!rs_initialized) { rs_initialized = 1; _rs_init(rnd, sizeof(rnd)); } else _rs_rekey(rnd, sizeof(rnd)); explicit_bzero(rnd, sizeof(rnd)); /* invalidate rs_buf */ rs_have = 0; memset(rs_buf, 0, RSBUFSZ); rs_count = 1600000; }
void init_hash () { int i, n, j; int p[12]; getrnd (); for (i = 0; i < 12; i++) p[i] = i; for (i = 0; i < 12; i++) { n = perm[i] % (12 - i); perm[i] = p[n]; for (j = 0; j < 11 - n; j++) p[n + j] = p[n + j + 1]; } }