static void init_rand_state(struct frandom_state *state, int seedflag) { unsigned int i, j, k; u8 *S; u8 *seed = state->buf; if (seedflag == INTERNAL_SEED) erandom_get_random_bytes(seed, 256); else get_random_bytes(seed, 256); S = state->S; for (i=0; i<256; i++) *S++=i; j=0; S = state->S; for (i=0; i<256; i++) { j = (j + S[i] + *seed++) & 0xff; swap_byte(&S[i], &S[j]); } /* It's considered good practice to discard the first 256 bytes generated. So we do it: */ i=0; j=0; for (k=0; k<256; k++) { i = (i + 1) & 0xff; j = (j + S[i]) & 0xff; swap_byte(&S[i], &S[j]); } state->i = i; /* Save state */ state->j = j; }
static void init_rand_state(struct frandom_state *state, int seedflag) { unsigned int i, j, k; u8 *S; u8 *seed = state->buf; if (seedflag == INTERNAL_SEED) erandom_get_random_bytes(seed, 256); else get_random_bytes(seed, 256); S = state->S; for (i=0; i<256; i++) *S++=i; j=0; S = state->S; for (i=0; i<256; i++) { j = (j + S[i] + *seed++) & 0xff; swap_byte(&S[i], &S[j]); } i=0; j=0; for (k=0; k<256; k++) { i = (i + 1) & 0xff; j = (j + S[i]) & 0xff; swap_byte(&S[i], &S[j]); } state->i = i; state->j = j; }