webui-aria2/js/libs/dojox/math/random/prng4.js.uncompressed.js
2012-05-01 19:52:07 +08:00

61 lines
1.3 KiB
JavaScript

//>>built
// AMD-ID "dojox/math/random/prng4"
define("dojox/math/random/prng4", ["dojo", "dojox"], function(dojo, dojox) {
dojo.getObject("math.random.prng4", true, dojox);
// Copyright (c) 2005 Tom Wu
// All Rights Reserved.
// See "LICENSE-BigInteger" for details.
// prng4.js - uses Arcfour as a PRNG
function Arcfour() {
this.i = 0;
this.j = 0;
this.S = new Array(256);
}
dojo.extend(Arcfour, {
init: function(key){
// summary:
// Initialize arcfour context
// key: Array:
// an array of ints, each from [0..255]
var i, j, t, S = this.S, len = key.length;
for(i = 0; i < 256; ++i){
S[i] = i;
}
j = 0;
for(i = 0; i < 256; ++i){
j = (j + S[i] + key[i % len]) & 255;
t = S[i];
S[i] = S[j];
S[j] = t;
}
this.i = 0;
this.j = 0;
},
next: function(){
var t, i, j, S = this.S;
this.i = i = (this.i + 1) & 255;
this.j = j = (this.j + S[i]) & 255;
t = S[i];
S[i] = S[j];
S[j] = t;
return S[(t + S[i]) & 255];
}
});
dojox.math.random.prng4 = function(){
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()
dojox.math.random.prng4.size = 256;
return dojox.math.random.prng4;
});