Merge pull request #60 from Sc00bz/master
sjcl.random.addEntropy() and sjcl.random._loadTimeCollector() are broken
This commit is contained in:
commit
45d99e5dd9
|
@ -79,10 +79,10 @@ sjcl.random = {
|
||||||
source = source || "user";
|
source = source || "user";
|
||||||
|
|
||||||
var id,
|
var id,
|
||||||
i, ty = 0, tmp,
|
i, tmp,
|
||||||
t = (new Date()).valueOf(),
|
t = (new Date()).valueOf(),
|
||||||
robin = this._robins[source],
|
robin = this._robins[source],
|
||||||
oldReady = this.isReady();
|
oldReady = this.isReady(), err = 0;
|
||||||
|
|
||||||
id = this._collectorIds[source];
|
id = this._collectorIds[source];
|
||||||
if (id === undefined) { id = this._collectorIds[source] = this._collectorIdNext ++; }
|
if (id === undefined) { id = this._collectorIds[source] = this._collectorIdNext ++; }
|
||||||
|
@ -93,23 +93,44 @@ sjcl.random = {
|
||||||
switch(typeof(data)) {
|
switch(typeof(data)) {
|
||||||
|
|
||||||
case "number":
|
case "number":
|
||||||
data=[data];
|
if (estimatedEntropy === undefined) {
|
||||||
ty=1;
|
estimatedEntropy = 1;
|
||||||
|
}
|
||||||
|
this._pools[robin].update([id,this._eventId++,1,estimatedEntropy,t,1,data|0]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "object":
|
case "object":
|
||||||
if (estimatedEntropy === undefined) {
|
var objName = Object.prototype.toString.call(data);
|
||||||
/* horrible entropy estimator */
|
if (objName === "[object Uint32Array]") {
|
||||||
estimatedEntropy = 0;
|
tmp = [];
|
||||||
for (i=0; i<data.length; i++) {
|
for (i = 0; i < data.length; i++) {
|
||||||
tmp= data[i];
|
tmp.push(data[i]);
|
||||||
while (tmp>0) {
|
}
|
||||||
estimatedEntropy++;
|
data = tmp;
|
||||||
tmp = tmp >>> 1;
|
} else {
|
||||||
|
if (objName !== "[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;
|
break;
|
||||||
|
|
||||||
case "string":
|
case "string":
|
||||||
|
@ -125,8 +146,10 @@ sjcl.random = {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
err=1;
|
||||||
throw new sjcl.exception.bug("random: addEntropy only supports number, array or string");
|
}
|
||||||
|
if (err) {
|
||||||
|
throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* record the new strength */
|
/* record the new strength */
|
||||||
|
@ -342,8 +365,7 @@ sjcl.random = {
|
||||||
},
|
},
|
||||||
|
|
||||||
_loadTimeCollector: function (ev) {
|
_loadTimeCollector: function (ev) {
|
||||||
var d = new Date();
|
sjcl.random.addEntropy((new Date()).valueOf(), 2, "loadtime");
|
||||||
sjcl.random.addEntropy(d, 2, "loadtime");
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_fireEvent: function (name, arg) {
|
_fireEvent: function (name, arg) {
|
||||||
|
|
Loading…
Reference in New Issue