sjcl.random.addEntropy():
* Fixed bug: when data is a number, it is now added to this._pools * Fixed bug: throws an exception when data is an object but not an array of numbers * Removed unused variable "ty" sjcl.random._loadTimeCollector(): * Fixed bug: now passes a number into sjcl.random.addEntropy() instead of an object
This commit is contained in:
parent
ec303b26ef
commit
8bf8bbbf3c
1 changed files with 31 additions and 18 deletions
|
@ -79,10 +79,10 @@ sjcl.random = {
|
|||
source = source || "user";
|
||||
|
||||
var id,
|
||||
i, ty = 0, tmp,
|
||||
i, tmp,
|
||||
t = (new Date()).valueOf(),
|
||||
robin = this._robins[source],
|
||||
oldReady = this.isReady();
|
||||
oldReady = this.isReady(), err = 0;
|
||||
|
||||
id = this._collectorIds[source];
|
||||
if (id === undefined) { id = this._collectorIds[source] = this._collectorIdNext ++; }
|
||||
|
@ -93,23 +93,35 @@ sjcl.random = {
|
|||
switch(typeof(data)) {
|
||||
|
||||
case "number":
|
||||
data=[data];
|
||||
ty=1;
|
||||
if (estimatedEntropy === undefined) {
|
||||
estimatedEntropy = 1;
|
||||
}
|
||||
this._pools[robin].update([id,this._eventId++,1,estimatedEntropy,t,1,data|0]);
|
||||
break;
|
||||
|
||||
case "object":
|
||||
if (estimatedEntropy === undefined) {
|
||||
/* horrible entropy estimator */
|
||||
estimatedEntropy = 0;
|
||||
for (i=0; i<data.length; i++) {
|
||||
tmp= data[i];
|
||||
while (tmp>0) {
|
||||
estimatedEntropy++;
|
||||
tmp = tmp >>> 1;
|
||||
}
|
||||
if (Object.prototype.toString.call(data) !== "[object Array]") {
|
||||
err = 1;
|
||||
}
|
||||
for (i=0; i<data.length && !err; i++) {
|
||||
if (typeof(data[i]) != "number") {
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
this._pools[robin].update([id,this._eventId++,ty||2,estimatedEntropy,t,data.length].concat(data));
|
||||
if (!err) {
|
||||
if (estimatedEntropy === undefined) {
|
||||
/* horrible entropy estimator */
|
||||
estimatedEntropy = 0;
|
||||
for (i=0; i<data.length; i++) {
|
||||
tmp= data[i];
|
||||
while (tmp>0) {
|
||||
estimatedEntropy++;
|
||||
tmp = tmp >>> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
this._pools[robin].update([id,this._eventId++,2,estimatedEntropy,t,data.length].concat(data));
|
||||
}
|
||||
break;
|
||||
|
||||
case "string":
|
||||
|
@ -125,8 +137,10 @@ sjcl.random = {
|
|||
break;
|
||||
|
||||
default:
|
||||
|
||||
throw new sjcl.exception.bug("random: addEntropy only supports number, array or string");
|
||||
err=1;
|
||||
}
|
||||
if (err) {
|
||||
throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string");
|
||||
}
|
||||
|
||||
/* record the new strength */
|
||||
|
@ -342,8 +356,7 @@ sjcl.random = {
|
|||
},
|
||||
|
||||
_loadTimeCollector: function (ev) {
|
||||
var d = new Date();
|
||||
sjcl.random.addEntropy(d, 2, "loadtime");
|
||||
sjcl.random.addEntropy((new Date()).valueOf(), 2, "loadtime");
|
||||
},
|
||||
|
||||
_fireEvent: function (name, arg) {
|
||||
|
|
Loading…
Reference in a new issue