From 8bf8bbbf3ceeab6e106da8849a6da8b7ad2307b3 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 23 Jul 2012 21:03:04 -0500 Subject: [PATCH] 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 --- core/random.js | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/core/random.js b/core/random.js index 09ae7f2..1c5d704 100644 --- a/core/random.js +++ b/core/random.js @@ -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; i0) { - estimatedEntropy++; - tmp = tmp >>> 1; - } + if (Object.prototype.toString.call(data) !== "[object Array]") { + err = 1; + } + for (i=0; i0) { + 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) {