start to split into node commonjs style modules
- no longer is the global Bitcoin used for modules - cleaner and more maintainable code - add more tests
This commit is contained in:
parent
a6f05fb505
commit
0faac29134
35 changed files with 3401 additions and 3169 deletions
src
122
src/util.js
122
src/util.js
|
@ -1,117 +1,7 @@
|
|||
// BigInteger monkey patching
|
||||
BigInteger.valueOf = nbv;
|
||||
var BigInteger = require('./jsbn/jsbn');
|
||||
var Crypto = require('./crypto-js/crypto');
|
||||
|
||||
/**
|
||||
* Returns a byte array representation of the big integer.
|
||||
*
|
||||
* This returns the absolute of the contained value in big endian
|
||||
* form. A value of zero results in an empty array.
|
||||
*/
|
||||
BigInteger.prototype.toByteArrayUnsigned = function () {
|
||||
var ba = this.abs().toByteArray();
|
||||
if (ba.length) {
|
||||
if (ba[0] == 0) {
|
||||
ba = ba.slice(1);
|
||||
}
|
||||
return ba.map(function (v) {
|
||||
return (v < 0) ? v + 256 : v;
|
||||
});
|
||||
} else {
|
||||
// Empty array, nothing to do
|
||||
return ba;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Turns a byte array into a big integer.
|
||||
*
|
||||
* This function will interpret a byte array as a big integer in big
|
||||
* endian notation and ignore leading zeros.
|
||||
*/
|
||||
BigInteger.fromByteArrayUnsigned = function (ba) {
|
||||
if (!ba.length) {
|
||||
return ba.valueOf(0);
|
||||
} else if (ba[0] & 0x80) {
|
||||
// Prepend a zero so the BigInteger class doesn't mistake this
|
||||
// for a negative integer.
|
||||
return new BigInteger([0].concat(ba));
|
||||
} else {
|
||||
return new BigInteger(ba);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts big integer to signed byte representation.
|
||||
*
|
||||
* The format for this value uses a the most significant bit as a sign
|
||||
* bit. If the most significant bit is already occupied by the
|
||||
* absolute value, an extra byte is prepended and the sign bit is set
|
||||
* there.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* 0 => 0x00
|
||||
* 1 => 0x01
|
||||
* -1 => 0x81
|
||||
* 127 => 0x7f
|
||||
* -127 => 0xff
|
||||
* 128 => 0x0080
|
||||
* -128 => 0x8080
|
||||
* 255 => 0x00ff
|
||||
* -255 => 0x80ff
|
||||
* 16300 => 0x3fac
|
||||
* -16300 => 0xbfac
|
||||
* 62300 => 0x00f35c
|
||||
* -62300 => 0x80f35c
|
||||
*/
|
||||
BigInteger.prototype.toByteArraySigned = function () {
|
||||
var val = this.abs().toByteArrayUnsigned();
|
||||
var neg = this.compareTo(BigInteger.ZERO) < 0;
|
||||
|
||||
if (neg) {
|
||||
if (val[0] & 0x80) {
|
||||
val.unshift(0x80);
|
||||
} else {
|
||||
val[0] |= 0x80;
|
||||
}
|
||||
} else {
|
||||
if (val[0] & 0x80) {
|
||||
val.unshift(0x00);
|
||||
}
|
||||
}
|
||||
|
||||
return val;
|
||||
};
|
||||
|
||||
/**
|
||||
* Parse a signed big integer byte representation.
|
||||
*
|
||||
* For details on the format please see BigInteger.toByteArraySigned.
|
||||
*/
|
||||
BigInteger.fromByteArraySigned = function (ba) {
|
||||
// Check for negative value
|
||||
if (ba[0] & 0x80) {
|
||||
// Remove sign bit
|
||||
ba[0] &= 0x7f;
|
||||
|
||||
return BigInteger.fromByteArrayUnsigned(ba).negate();
|
||||
} else {
|
||||
return BigInteger.fromByteArrayUnsigned(ba);
|
||||
}
|
||||
};
|
||||
|
||||
// Console ignore
|
||||
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
|
||||
"dirxml", "group", "groupEnd", "time", "timeEnd", "count",
|
||||
"trace", "profile", "profileEnd"];
|
||||
|
||||
if ("undefined" == typeof window.console) window.console = {};
|
||||
for (var i = 0; i < names.length; ++i)
|
||||
if ("undefined" == typeof window.console[names[i]])
|
||||
window.console[names[i]] = function() {};
|
||||
|
||||
// Bitcoin utility functions
|
||||
Bitcoin.Util = {
|
||||
module.exports = {
|
||||
/**
|
||||
* Cross-browser compatibility version of Array.isArray.
|
||||
*/
|
||||
|
@ -220,9 +110,3 @@ Bitcoin.Util = {
|
|||
return Crypto.RIPEMD160(Crypto.SHA256(data, {asBytes: true}), {asBytes: true});
|
||||
}
|
||||
};
|
||||
|
||||
for (var i in Crypto.util) {
|
||||
if (Crypto.util.hasOwnProperty(i)) {
|
||||
Bitcoin.Util[i] = Crypto.util[i];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue