diff options
author | ausiv4 <ausiv4@eb105b4a-77de-11de-a249-6bf219df57d5> | 2009-07-24 14:01:04 +0000 |
---|---|---|
committer | ausiv4 <ausiv4@eb105b4a-77de-11de-a249-6bf219df57d5> | 2009-07-24 14:01:04 +0000 |
commit | 67f64e7564d5eea4cb71afd719786fd7977f4b98 (patch) | |
tree | 3be51d7f78d37ab3560d4982b595842d1643ae0d /javascript/prng4.js | |
parent | 8d359f4d8e27bf5992508bc11486a482d270d6f8 (diff) |
Merge proper-random with trunk.
Diffstat (limited to 'javascript/prng4.js')
-rw-r--r-- | javascript/prng4.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/javascript/prng4.js b/javascript/prng4.js new file mode 100644 index 0000000..3034f3f --- /dev/null +++ b/javascript/prng4.js @@ -0,0 +1,45 @@ +// prng4.js - uses Arcfour as a PRNG + +function Arcfour() { + this.i = 0; + this.j = 0; + this.S = new Array(); +} + +// Initialize arcfour context from key, an array of ints, each from [0..255] +function ARC4init(key) { + var i, j, t; + for(i = 0; i < 256; ++i) + this.S[i] = i; + j = 0; + for(i = 0; i < 256; ++i) { + j = (j + this.S[i] + key[i % key.length]) & 255; + t = this.S[i]; + this.S[i] = this.S[j]; + this.S[j] = t; + } + this.i = 0; + this.j = 0; +} + +function ARC4next() { + var t; + this.i = (this.i + 1) & 255; + this.j = (this.j + this.S[this.i]) & 255; + t = this.S[this.i]; + this.S[this.i] = this.S[this.j]; + this.S[this.j] = t; + return this.S[(t + this.S[this.i]) & 255]; +} + +Arcfour.prototype.init = ARC4init; +Arcfour.prototype.next = ARC4next; + +// Plug in your RNG constructor here +function prng_newstate() { + return new Arcfour(); +} + +// Pool size must be a multiple of 4 and greater than 32. +// An array of bytes the size of the pool will be passed to init() +var rng_psize = 256; |