ГОСТ Р ИСО 28640 - 2012
void init_gfsr (unsigned long s)
<
int i, j.
k:
static unsigned long x |P| ;
s &= OxffffffffUL:
for (i=0 : i<P ; i++) {
x [i) = s » 3 1 ;
s = 1664525UL * s + 1UL ;
s &= OxffffffffUL ;
for (k=0. i=0 ; i<P ; i++){
state |i] = OUL :
for <j=0 ;j<\V ; j++) |
state [i| « = 1 :
state (ij 1= x |k | ;
x | к| л= x [ (k+Q) %P\ :
k++;
if (k==P) к = 0 ;
)
)
statc_i = 0 ;
}
unsigned long gfsr (void)
int i ;
unsigned long *р(). *pl :
if (state_i >= P) (
state_i - 0 ;
p() = state :
pi = state + Q :
for (i=() ; i<(P-Q) ; i++)
ep0++ л= *pl++ ;
pi = state :
for ( ; i<P : i++)
wp0++ л= -*pl++ ;
)
return state [statc_i++J :
I
/* (W -1)-битовос целое */
long gfsr_3l (void)
{
return (long) (gfsr( ) >>1) :
20