# File lib/crypt-isaac.rb, line 102
102:                 def randinit(flag)
103:                         i = 0
104:                         a = 0
105:                         b = 0
106:                         c = 0
107:                         d = 0
108:                         e = 0
109:                         f = 0
110:                         g = 0
111:                         @aa = @bb = @cc = 0
112:                         a = b = c = d = e = f = g = h = 0x9e3779b9
113: 
114:                         while (i < 4) do
115:                                 a ^= b<<1; d += a; b += c
116:                                 b ^= 0x3fffffff & (c>>2); e += b; c += d
117:                                 c ^= d << 8; f += c; d += e
118:                                 d ^= 0x0000ffff & (e >> 16); g += d; e += f
119:                                 e ^= f << 10; h += e; f += g
120:                                 f ^= 0x0fffffff & (g >> 4); a += f; g += h
121:                                 g ^= h << 8; b += g; h += a
122:                                 h ^= 0x007fffff & (a >> 9); c += h; a += b
123:                                 i += 1
124:                         end
125: 
126:                         i = 0
127:                         while (i < 256) do
128:                                 if (flag)
129:                                         a+=@randrsl[i  ].to_i; b+=@randrsl[i+1].to_i;
130:                                         c+=@randrsl[i+2]; d+=@randrsl[i+3];
131:                                         e+=@randrsl[i+4]; f+=@randrsl[i+5];
132:                                         g+=@randrsl[i+6]; h+=@randrsl[i+7];
133:                                 end
134: 
135:                                 a^=b<<11; d+=a; b+=c;
136:                                 b^=0x3fffffff & (c>>2);  e+=b; c+=d;
137:                                 c^=d<<8;  f+=c; d+=e;
138:                                 d^=0x0000ffff & (e>>16); g+=d; e+=f;
139:                                 e^=f<<10; h+=e; f+=g;
140:                                 f^=0x0fffffff & (g>>4);  a+=f; g+=h;
141:                                 g^=h<<8;  b+=g; h+=a;
142:                                 h^=0x007fffff & (a>>9);  c+=h; a+=b;
143:                                 @mm[i]=a;@mm[i+1]=b; @mm[i+2]=c; @mm[i+3]=d;
144:                                 @mm[i+4]=e; @mm[i+5]=f; @mm[i+6]=g; @mm[i+7]=h;
145:                                 i += 8
146:                         end
147: 
148:                         if flag
149:                                 i = 0
150:                                 while (i < 256)
151:                                         a+=@mm[i  ]; b+=@mm[i+1]; c+=@mm[i+2]; d+=@mm[i+3];
152:                                         e+=@mm[i+4]; f+=@mm[i+5]; g+=@mm[i+6]; h+=@mm[i+7];
153:                                         a^=b<<11; d+=a; b+=c;
154:                                         b^=0x3fffffff & (c>>2);  e+=b; c+=d;
155:                                         c^=d<<8;  f+=c; d+=e;
156:                                         d^=0x0000ffff & (e>>16); g+=d; e+=f;
157:                                         e^=f<<10; h+=e; f+=g;
158:                                         f^=0x0fffffff & (g>>4);  a+=f; g+=h;
159:                                         g^=h<<8;  b+=g; h+=a;
160:                                         h^=0x007fffff & (a>>9);  c+=h; a+=b;
161:                                         @mm[i  ]=a; @mm[i+1]=b; @mm[i+2]=c; @mm[i+3]=d;
162:                                         @mm[i+4]=e; @mm[i+5]=f; @mm[i+6]=g; @mm[i+7]=h;
163:                                         i += 8
164:                                 end
165:                         end
166: 
167:                 isaac()
168:                 @randcnt=256;        # /* prepare to use the first set of results */
169:                 end