aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/prng4.js
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@gmail.com>2011-05-19 02:31:04 -0400
committerGuillaume Horel <guillaume.horel@gmail.com>2011-05-19 02:31:04 -0400
commitaf055136c23652f1cf1ef0beac1b94d79cc1ddb6 (patch)
treec4de7f3bfe91303423e19552f850d432b03133c6 /crypto/prng4.js
parent53fb8167efe4100bf20df3bec5d6b844f4bf1617 (diff)
downloadalias-af055136c23652f1cf1ef0beac1b94d79cc1ddb6.tar.gz
Started to play around with js crypto code
test.js implements the basic functionality (recommand to load it in v8 (d8 test.js --shell)
Diffstat (limited to 'crypto/prng4.js')
-rw-r--r--crypto/prng4.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/crypto/prng4.js b/crypto/prng4.js
new file mode 100644
index 0000000..3034f3f
--- /dev/null
+++ b/crypto/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;