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;
169: end