support for compressed pub key import
This commit is contained in:
parent
2ae2fcb1d9
commit
5acb847e53
|
@ -2286,26 +2286,37 @@ ECPointFp.prototype.getEncoded = function (compressed) {
|
||||||
return enc;
|
return enc;
|
||||||
};
|
};
|
||||||
|
|
||||||
ECPointFp.decodeFrom = function (curve, enc) {
|
ECPointFp.decodeFrom = function (ecparams, enc) {
|
||||||
var type = enc[0];
|
var type = enc[0];
|
||||||
var dataLen = enc.length-1;
|
var dataLen = enc.length-1;
|
||||||
|
|
||||||
// Extract x and y as byte arrays
|
// Extract x and y as byte arrays
|
||||||
var xBa = enc.slice(1, 1 + dataLen/2);
|
if (type == 4) {
|
||||||
var yBa = enc.slice(1 + dataLen/2, 1 + dataLen);
|
var xBa = enc.slice(1, 1 + dataLen/2),
|
||||||
|
yBa = enc.slice(1 + dataLen/2, 1 + dataLen),
|
||||||
// Prepend zero byte to prevent interpretation as negative integer
|
x = BigInteger.fromByteArrayUnsigned(xBa),
|
||||||
xBa.unshift(0);
|
y = BigInteger.fromByteArrayUnsigned(yBa);
|
||||||
yBa.unshift(0);
|
}
|
||||||
|
else {
|
||||||
// Convert to BigIntegers
|
var xBa = enc.slice(1),
|
||||||
var x = new BigInteger(xBa);
|
x = BigInteger.fromByteArrayUnsigned(xBa),
|
||||||
var y = new BigInteger(yBa);
|
p = ecparams.getQ(),
|
||||||
|
xCubedPlus7 = x.multiply(x).multiply(x).add(new BigInteger('7')).mod(p),
|
||||||
|
pPlus1Over4 = p.add(new BigInteger('1'))
|
||||||
|
.divide(new BigInteger('4')),
|
||||||
|
y = xCubedPlus7.modPow(pPlus1Over4,p);
|
||||||
|
if (y.mod(new BigInteger('2')).toString() != ''+(type % 2)) {
|
||||||
|
y = p.subtract(y)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Return point
|
// Return point
|
||||||
return new ECPointFp(curve, curve.fromBigInteger(x), curve.fromBigInteger(y));
|
return new ECPointFp(ecparams,
|
||||||
|
ecparams.fromBigInteger(x),
|
||||||
|
ecparams.fromBigInteger(y));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
ECPointFp.prototype.add2D = function (b) {
|
ECPointFp.prototype.add2D = function (b) {
|
||||||
if(this.isInfinity()) return b;
|
if(this.isInfinity()) return b;
|
||||||
if(b.isInfinity()) return this;
|
if(b.isInfinity()) return this;
|
||||||
|
|
Loading…
Reference in New Issue