pass lint; work around chromium jit bug

This commit is contained in:
Mike Hamburg
2010-10-08 16:02:09 -07:00
parent 4f316afb56
commit f7559d7535
6 changed files with 110 additions and 102 deletions

View File

@@ -50,11 +50,14 @@ sjcl.bitArray = {
* @return {Number} The requested slice.
*/
extract: function(a, bstart, blength) {
var x, sh = (-bstart-blength) & 31;
// FIXME: this Math.floor is not necessary at all, but for some reason
// seems to suppress a bug in the Chromium JIT.
var x, sh = Math.floor((-bstart-blength) & 31);
if ((bstart + blength - 1 ^ bstart) & -32) {
// it crosses a boundary
x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
} else {
// within a single word
x = a[bstart/32|0] >>> sh;
}
return x & ((1<<blength) - 1);

View File

@@ -3,7 +3,7 @@
*/
sjcl.bn = function(it) {
this.initWith(it);
}
};
sjcl.bn.prototype = {
radix: 24,
@@ -50,7 +50,7 @@ sjcl.bn.prototype = {
* Equality test is in constant time.
*/
equals: function(that) {
if (typeof that == "number") { that = new this._class(that); }
if (typeof that === "number") { that = new this._class(that); }
var difference = 0, i;
this.fullReduce();
that.fullReduce();
@@ -72,14 +72,14 @@ sjcl.bn.prototype = {
* Returns 1 if this >= that, or zero otherwise.
*/
greaterEquals: function(that) {
if (typeof that == "number") { that = new this._class(that); }
if (typeof that === "number") { that = new this._class(that); }
var less = 0, greater = 0, i, a, b;
i = Math.max(this.limbs.length, that.limbs.length) - 1;
for (; i>= 0; i--) {
a = this.getLimb(i);
b = that.getLimb(i);
greater |= (b - a) & ~less;
less |= (a - b) & ~greater
less |= (a - b) & ~greater;
}
return (greater | ~less) >>> 31;
},
@@ -122,7 +122,9 @@ sjcl.bn.prototype = {
l[i] = tmp & m;
carry = tmp >> r;
}
if (carry) l.push(carry);
if (carry) {
l.push(carry);
}
return this;
},
@@ -134,7 +136,9 @@ sjcl.bn.prototype = {
l[i] = (tmp+carry)>>1;
carry = (tmp&1) << r;
}
if (!l[l.length-1]) l.pop();
if (!l[l.length-1]) {
l.pop();
}
return this;
},
@@ -225,7 +229,7 @@ sjcl.bn.prototype = {
/** this * that. Normalizes and reduces. */
mul: function(that) {
if (typeof(that) == "number") { that = new this._class(that); }
if (typeof(that) === "number") { that = new this._class(that); }
var i, j, a = this.limbs, b = that.limbs, al = a.length, bl = b.length, out = new this._class(), c = out.limbs, ai, ii=this.maxMul;
for (i=0; i < this.limbs.length + that.limbs.length + 1; i++) {
@@ -252,12 +256,12 @@ sjcl.bn.prototype = {
/** this ^ n. Uses square-and-multiply. Normalizes and reduces. */
power: function(l) {
if (typeof(l) == "number") {
if (typeof(l) === "number") {
l = [l];
} else if (l.limbs !== undefined) {
l = l.normalize().limbs;
}
var j, out = new this._class(1), pow = this;
var i, j, out = new this._class(1), pow = this;
for (i=0; i<l.length; i++) {
for (j=0; j<this.radix; j++) {
@@ -273,7 +277,9 @@ sjcl.bn.prototype = {
trim: function() {
var l = this.limbs, p;
do { p = l.pop() } while (l.length && p == 0);
do {
p = l.pop();
} while (l.length && p === 0);
l.push(p);
return this;
},
@@ -296,7 +302,7 @@ sjcl.bn.prototype = {
m = limbs[i] = l & mask;
carry = (l-m)*ipv;
}
if (carry == -1) {
if (carry === -1) {
limbs[i-1] -= this.placeVal;
}
return this;
@@ -329,8 +335,8 @@ sjcl.bn.prototype = {
/** Return the length in bits, rounded up to the nearest byte. */
bitLength: function() {
this.fullReduce();
var out = this.radix * (this.limbs.length - 1);
var b = this.limbs[this.limbs.length - 1];
var out = this.radix * (this.limbs.length - 1),
b = this.limbs[this.limbs.length - 1];
for (; b; b >>= 1) {
out ++;
}
@@ -339,7 +345,7 @@ sjcl.bn.prototype = {
};
sjcl.bn.fromBits = function(bits) {
var out = new this(), words=[], w=sjcl.bitArray, t = this.prototype,
var Class = this, out = new Class(), words=[], w=sjcl.bitArray, t = this.prototype,
l = Math.min(this.bitLength || 0x100000000, w.bitLength(bits)), e = l % t.radix || t.radix;
words[0] = w.extract(bits, 0, e);
@@ -353,7 +359,7 @@ sjcl.bn.fromBits = function(bits) {
sjcl.bn.prototype.ipv = 1 / (sjcl.bn.prototype.placeVal = Math.pow(2,sjcl.bn.prototype.radix))
sjcl.bn.prototype.ipv = 1 / (sjcl.bn.prototype.placeVal = Math.pow(2,sjcl.bn.prototype.radix));
sjcl.bn.prototype.radixMask = (1 << sjcl.bn.prototype.radix) - 1;
/**
@@ -405,7 +411,7 @@ sjcl.bn.pseudoMersennePrime = function(exponent, coeff) {
}
i--;
if (i == 0) {
if (!i) {
limbs.push(0);
this.cnormalize();
i = this.minOffset;
@@ -416,10 +422,10 @@ sjcl.bn.pseudoMersennePrime = function(exponent, coeff) {
return this;
};
ppr._strongReduce = (ppr.fullMask == -1) ? ppr.reduce : function() {
var limbs = this.limbs, i = limbs.length - 1, l;
ppr._strongReduce = (ppr.fullMask === -1) ? ppr.reduce : function() {
var limbs = this.limbs, i = limbs.length - 1, k, l;
this.reduce();
if (i == this.modOffset - 1) {
if (i === this.modOffset - 1) {
l = limbs[i] & this.fullMask;
limbs[i] -= l;
for (k=0; k<this.fullOffset.length; k++) {
@@ -468,7 +474,7 @@ sjcl.bn.pseudoMersennePrime = function(exponent, coeff) {
p.fromBits = sjcl.bn.fromBits;
return p;
}
};
// a small Mersenne prime
sjcl.bn.prime = {
@@ -486,14 +492,14 @@ sjcl.bn.prime = {
};
sjcl.bn.random = function(modulus, paranoia) {
if (typeof modulus != "object") { modulus = new sjcl.bn(modulus); }
if (typeof modulus !== "object") { modulus = new sjcl.bn(modulus); }
var words, i, l = modulus.limbs.length, m = modulus.limbs[l-1]+1, out = new sjcl.bn();
while (true) {
// get a sequence whose first digits make sense
do {
words = sjcl.random.randomWords(l, paranoia);
if (words[l-1] < 0) { words[l-1] += 0x100000000; }
} while (Math.floor(words[l-1] / m) == Math.floor(0x100000000 / m));
} while (Math.floor(words[l-1] / m) === Math.floor(0x100000000 / m));
words[l-1] %= m;
// mask off all the limbs

View File

@@ -59,7 +59,7 @@
p.ct = sjcl.mode[p.mode].encrypt(prp, plaintext, p.iv, p.adata, p.tag);
//return j.encode(j._subtract(p, j.defaults));
return j.encode(p);
return j.encode(p);
},
/** Simple decryption function.
@@ -208,7 +208,7 @@
return out;
},
*/
*/
/** Return only the specified elements of src.
* @private

View File

@@ -92,7 +92,7 @@ sjcl.ecc.pointJac.prototype = {
* @return {sjcl.ecc.pointJac} The sum of the two points, in Jacobian coordinates.
*/
add: function(T) {
var S = this;
var S = this, sz2, c, d, c2, x1, x2, x, y1, y2, y, z;
if (S.curve !== T.curve) {
throw("sjcl.ecc.add(): Points must be on the same curve to add them!");
}
@@ -103,38 +103,33 @@ sjcl.ecc.pointJac.prototype = {
return S;
}
var
sz2 = S.z.square(),
c = T.x.mul(sz2).subM(S.x);
sz2 = S.z.square();
c = T.x.mul(sz2).subM(S.x);
if (c.equals(0)) {
if (S.y.equals(T.y.mul(sz2.mul(S.z)))) {
// same point
return S.doubl();
} else {
// inverses
// inverses
return new sjcl.ecc.pointJac(S.curve);
}
}
d = T.y.mul(sz2.mul(S.z)).subM(S.y);
c2 = c.square();
var
d = T.y.mul(sz2.mul(S.z)).subM(S.y),
c2 = c.square(),
x1 = d.square();
x2 = c.square().mul(c).addM( S.x.add(S.x).mul(c2) );
x = x1.subM(x2);
x1 = d.square(),
x2 = c.square().mul(c).addM( S.x.add(S.x).mul(c2) ),
x = x1.subM(x2),
y1 = S.x.mul(c2).subM(x).mul(d);
y2 = S.y.mul(c.square().mul(c));
y = y1.subM(y2);
y1 = S.x.mul(c2).subM(x).mul(d),
y2 = S.y.mul(c.square().mul(c)),
y = y1.subM(y2),
z = S.z.mul(c);
z = S.z.mul(c);
//return new sjcl.ecc.pointJac(this.curve,x,y,z);
var U = new sjcl.ecc.pointJac(this.curve,x,y,z);
if (!U.isValid()) { throw "FOOOOOOOO"; }
return U;
return new sjcl.ecc.pointJac(this.curve,x,y,z);
},
/**
@@ -175,7 +170,7 @@ sjcl.ecc.pointJac.prototype = {
* @return {sjcl.ecc.pointJac} The result of the multiplication, in Jacobian coordinates.
*/
mult: function(k, affine) {
if (typeof(k) == "number") {
if (typeof(k) === "number") {
k = [k];
} else if (k.limbs !== undefined) {
k = k.normalize().limbs;
@@ -201,13 +196,13 @@ sjcl.ecc.pointJac.prototype = {
* @return {sjcl.ecc.pointJac} The result of the multiplication and addition, in Jacobian coordinates.
*/
mult2: function(k1, affine, k2, affine2) {
if (typeof(k1) == "number") {
if (typeof(k1) === "number") {
k1 = [k1];
} else if (k1.limbs !== undefined) {
k1 = k1.normalize().limbs;
}
if (typeof(k2) == "number") {
if (typeof(k2) === "number") {
k2 = [k2];
} else if (k2.limbs !== undefined) {
k2 = k2.normalize().limbs;
@@ -245,18 +240,18 @@ sjcl.ecc.pointJac.prototype = {
* @param {bigInt} x The x coordinate of a base point of the curve.
* @param {bigInt} y The y coordinate of a base point of the curve.
*/
sjcl.ecc.curve = function(field, r, a, b, x, y) {
this.field = field;
this.r = field.prototype.modulus.sub(r);
this.a = new field(a);
this.b = new field(b);
this.G = new sjcl.ecc.point(this, new field(x), new field(y));
sjcl.ecc.curve = function(Field, r, a, b, x, y) {
this.field = Field;
this.r = Field.prototype.modulus.sub(r);
this.a = new Field(a);
this.b = new Field(b);
this.G = new sjcl.ecc.point(this, new Field(x), new Field(y));
};
sjcl.ecc.curve.prototype.fromBits = function (bits) {
var w = sjcl.bitArray, l = this.field.prototype.exponent + 7 & -8;
p = new sjcl.ecc.point(this, this.field.fromBits(w.bitSlice(bits, 0, l)),
this.field.fromBits(w.bitSlice(bits, l, 2*l)));
var w = sjcl.bitArray, l = this.field.prototype.exponent + 7 & -8,
p = new sjcl.ecc.point(this, this.field.fromBits(w.bitSlice(bits, 0, l)),
this.field.fromBits(w.bitSlice(bits, l, 2*l)));
if (!p.isValid()) {
throw new sjcl.exception.corrupt("not on the curve!");
}
@@ -316,7 +311,10 @@ sjcl.ecc._dh = function(cn) {
},
generateKeys: function(curve, paranoia) {
if (typeof curve == "number") {
if (curve === undefined) {
curve = 256;
}
if (typeof curve === "number") {
curve = sjcl.ecc.curves['c'+curve];
if (curve === undefined) {
throw new sjcl.exception.invalid("no such curve");
@@ -352,9 +350,9 @@ sjcl.ecc.ecdsa.secretKey.prototype = {
sign: function(hash, paranoia) {
var R = this._curve.r,
l = R.bitLength(),
k = kkkk = sjcl.bn.random(R.sub(1), paranoia).add(1),
k = sjcl.bn.random(R.sub(1), paranoia).add(1),
r = this._curve.G.mult(k).x.mod(R),
s = sjcl.bn.fromBits(hash).add(r.mul(this._exponent)).inverseMod(R).mul(kkkk).mod(R);
s = sjcl.bn.fromBits(hash).add(r.mul(this._exponent)).inverseMod(R).mul(k).mod(R);
return sjcl.bitArray.concat(r.toBits(l), s.toBits(l));
}
};
@@ -368,12 +366,11 @@ sjcl.ecc.ecdsa.publicKey.prototype = {
s = sjcl.bn.fromBits(w.bitSlice(rs,l,2*l)),
hG = sjcl.bn.fromBits(hash).mul(s).mod(R),
hA = r.mul(s).mod(R),
r2 = this._curve.G.mult2(hG, hA, this._point).x,
corrupt = sjcl.exception.corrupt;
r2 = this._curve.G.mult2(hG, hA, this._point).x;
if (r.equals(0) || s.equals(0) || r.greaterEquals(R) || s.greaterEquals(R) || !r2.equals(r)) {
throw (new corrupt("signature didn't check out"));
throw (new sjcl.exception.corrupt("signature didn't check out"));
}
return true;
}
}
};