blob: 92c2356b07f61ee7d612888d90e5b3f4709440b0 [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.math.random.Secure"]){
dojo._hasResource["dojox.math.random.Secure"]=true;
dojo.provide("dojox.math.random.Secure");
dojo.declare("dojox.math.random.Secure",null,{constructor:function(_1,_2){
this.prng=_1;
var p=this.pool=new Array(_1.size);
this.pptr=0;
for(var i=0,_3=_1.size;i<_3;){
var t=Math.floor(65536*Math.random());
p[i++]=t>>>8;
p[i++]=t&255;
}
this.seedTime();
if(!_2){
this.h=[dojo.connect(dojo.body(),"onclick",this,"seedTime"),dojo.connect(dojo.body(),"onkeypress",this,"seedTime")];
}
},destroy:function(){
if(this.h){
dojo.forEach(this.h,dojo.disconnect);
}
},nextBytes:function(_4){
var _5=this.state;
if(!_5){
this.seedTime();
_5=this.state=this.prng();
_5.init(this.pool);
for(var p=this.pool,i=0,_6=p.length;i<_6;p[i++]=0){
}
this.pptr=0;
}
for(var i=0,_6=_4.length;i<_6;++i){
_4[i]=_5.next();
}
},seedTime:function(){
this._seed_int(new Date().getTime());
},_seed_int:function(x){
var p=this.pool,i=this.pptr;
p[i++]^=x&255;
p[i++]^=(x>>8)&255;
p[i++]^=(x>>16)&255;
p[i++]^=(x>>24)&255;
if(i>=this.prng.size){
i-=this.prng.size;
}
this.pptr=i;
}});
}