ec: extract BigInteger constants
This commit is contained in:
parent
d9ce4bee6b
commit
1e54c521d5
1 changed files with 11 additions and 11 deletions
22
src/ec.js
22
src/ec.js
|
@ -5,6 +5,11 @@
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var BigInteger = require('bigi')
|
var BigInteger = require('bigi')
|
||||||
|
|
||||||
|
// constants
|
||||||
|
var TWO = BigInteger.valueOf(2)
|
||||||
|
var THREE = BigInteger.valueOf(3)
|
||||||
|
var SEVEN = BigInteger.valueOf(7)
|
||||||
|
|
||||||
function ECFieldElementFp(q,x) {
|
function ECFieldElementFp(q,x) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
// TODO if(x.compareTo(q) >= 0) error
|
// TODO if(x.compareTo(q) >= 0) error
|
||||||
|
@ -125,7 +130,6 @@ function pointFpAdd(b) {
|
||||||
return this.curve.getInfinity(); // this = -b, so infinity
|
return this.curve.getInfinity(); // this = -b, so infinity
|
||||||
}
|
}
|
||||||
|
|
||||||
var THREE = new BigInteger("3");
|
|
||||||
var x1 = this.x.toBigInteger();
|
var x1 = this.x.toBigInteger();
|
||||||
var y1 = this.y.toBigInteger();
|
var y1 = this.y.toBigInteger();
|
||||||
var x2 = b.x.toBigInteger();
|
var x2 = b.x.toBigInteger();
|
||||||
|
@ -150,8 +154,6 @@ function pointFpTwice() {
|
||||||
if(this.isInfinity()) return this;
|
if(this.isInfinity()) return this;
|
||||||
if(this.y.toBigInteger().signum() === 0) return this.curve.getInfinity();
|
if(this.y.toBigInteger().signum() === 0) return this.curve.getInfinity();
|
||||||
|
|
||||||
// TODO: optimized handling of constants
|
|
||||||
var THREE = new BigInteger("3");
|
|
||||||
var x1 = this.x.toBigInteger();
|
var x1 = this.x.toBigInteger();
|
||||||
var y1 = this.y.toBigInteger();
|
var y1 = this.y.toBigInteger();
|
||||||
|
|
||||||
|
@ -182,7 +184,7 @@ function pointFpMultiply(k) {
|
||||||
if(k.signum() === 0) return this.curve.getInfinity()
|
if(k.signum() === 0) return this.curve.getInfinity()
|
||||||
|
|
||||||
var e = k;
|
var e = k;
|
||||||
var h = e.multiply(new BigInteger("3"));
|
var h = e.multiply(THREE)
|
||||||
|
|
||||||
var neg = this.negate();
|
var neg = this.negate();
|
||||||
var R = this;
|
var R = this;
|
||||||
|
@ -327,8 +329,6 @@ ECPointFp.prototype.getEncoded = function(compressed) {
|
||||||
return buffer
|
return buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
var SEVEN = BigInteger.valueOf(7)
|
|
||||||
|
|
||||||
ECPointFp.decodeFrom = function (curve, buffer) {
|
ECPointFp.decodeFrom = function (curve, buffer) {
|
||||||
var type = buffer.readUInt8(0)
|
var type = buffer.readUInt8(0)
|
||||||
var compressed = type !== 0x04
|
var compressed = type !== 0x04
|
||||||
|
@ -398,11 +398,11 @@ ECPointFp.prototype.twice2D = function () {
|
||||||
return this.curve.getInfinity();
|
return this.curve.getInfinity();
|
||||||
}
|
}
|
||||||
|
|
||||||
var TWO = this.curve.fromBigInteger(BigInteger.valueOf(2));
|
var FpTWO = this.curve.fromBigInteger(TWO);
|
||||||
var THREE = this.curve.fromBigInteger(BigInteger.valueOf(3));
|
var FpTHREE = this.curve.fromBigInteger(THREE)
|
||||||
var gamma = this.x.square().multiply(THREE).add(this.curve.a).divide(this.y.multiply(TWO));
|
var gamma = this.x.square().multiply(FpTHREE).add(this.curve.a).divide(this.y.multiply(FpTWO));
|
||||||
|
|
||||||
var x3 = gamma.square().subtract(this.x.multiply(TWO));
|
var x3 = gamma.square().subtract(this.x.multiply(FpTWO));
|
||||||
var y3 = gamma.multiply(this.x.subtract(x3)).subtract(this.y);
|
var y3 = gamma.multiply(this.x.subtract(x3)).subtract(this.y);
|
||||||
|
|
||||||
return new ECPointFp(this.curve, x3, y3);
|
return new ECPointFp(this.curve, x3, y3);
|
||||||
|
@ -413,7 +413,7 @@ ECPointFp.prototype.multiply2D = function (k) {
|
||||||
if (k.signum() === 0) return this.curve.getInfinity()
|
if (k.signum() === 0) return this.curve.getInfinity()
|
||||||
|
|
||||||
var e = k;
|
var e = k;
|
||||||
var h = e.multiply(new BigInteger("3"));
|
var h = e.multiply(THREE)
|
||||||
|
|
||||||
var neg = this.negate();
|
var neg = this.negate();
|
||||||
var R = this;
|
var R = this;
|
||||||
|
|
Loading…
Add table
Reference in a new issue