do not handle negative zero for twos compliment.

This commit is contained in:
Christopher Jeffrey 2016-04-19 08:38:32 -07:00
parent 90fb650d12
commit 608fb8777e
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -1278,31 +1278,6 @@ utils.nonce = function nonce() {
// IN THE SOFTWARE.
//
/**
* Test whether a script number is negative zero.
* @param {Buffer} bytes
* @param {String} order - `le` or `be`.
* @returns {Boolean}
*/
utils.isNegZero = function isNegZero(bytes, order) {
var s = 0;
var b, res;
if (order === 'le')
s = bytes.length - 1;
if (bytes[s] & 0x80) {
b = bytes[s];
bytes[s] &= ~0x80;
res = new bn(bytes, order).cmpn(0) === 0;
bytes[s] = b;
return res;
}
return false;
};
/**
* Read uint8.
* @param {Buffer} arr
@ -1487,14 +1462,8 @@ utils.read64 = function read64(arr, off) {
num = arr.slice(off, off + 8);
// If we are signed, do (~num + 1) to get
// the positive counterpart and set bn's
// negative flag.
if (num[num.length - 1] & 0x80) {
if (utils.isNegZero(num, 'le'))
return new bn(0);
if (num[num.length - 1] & 0x80)
return new bn(num, 'le').notn(64).addn(1).neg();
}
return new bn(num, 'le');
};
@ -1513,14 +1482,8 @@ utils.read64BE = function read64BE(arr, off) {
num = arr.slice(off, off + 8);
// If we are signed, do (~num + 1) to get
// the positive counterpart and set bn's
// negative flag.
if (num[0] & 0x80) {
if (utils.isNegZero(num, 'be'))
return new bn(0);
if (num[0] & 0x80)
return new bn(num, 'be').notn(64).addn(1).neg();
}
return new bn(num, 'be');
};
@ -1980,14 +1943,8 @@ utils.write64 = function write64(dst, num, off) {
off = off >>> 0;
// Convert the number to the
// negative byte representation.
if (num.isNeg()) {
if (num.cmpn(0) === 0)
num = new bn(0);
else
num = num.neg().notn(64).addn(1);
}
if (num.isNeg())
num = num.neg().notn(64).addn(1);
if (num.bitLength() > 64)
num = num.uand(utils.U64);
@ -2016,14 +1973,8 @@ utils.write64BE = function write64BE(dst, num, off) {
off = off >>> 0;
// Convert the number to the
// negative byte representation.
if (num.isNeg()) {
if (num.cmpn(0) === 0)
num = new bn(0);
else
num = num.neg().notn(64).addn(1);
}
if (num.isNeg())
num = num.neg().notn(64).addn(1);
if (num.bitLength() > 64)
num = num.uand(utils.U64);