Merge pull request #298 from ryanxcharles/feature/bignum
Move bignumber.js to internal
This commit is contained in:
commit
1959ce953c
14
bitcore.js
14
bitcore.js
|
@ -10,8 +10,16 @@ var requireWhenAccessed = function(name, file) {
|
|||
Object.defineProperty(module.exports, name, {get: function() {return require(file)}});
|
||||
};
|
||||
|
||||
requireWhenAccessed('bignum', 'bignum');
|
||||
requireWhenAccessed('base58', 'base58-native');
|
||||
requireWhenAccessed('Bignum', './lib/Bignum');
|
||||
Object.defineProperty(module.exports, 'bignum', {get: function() {
|
||||
console.log('bignum (with a lower-case "b") is deprecated. Use bitcore.Bignum (capital "B") instead.');
|
||||
return require('./lib/Bignum');
|
||||
}});
|
||||
requireWhenAccessed('Base58', './lib/Base58');
|
||||
Object.defineProperty(module.exports, 'base58', {get: function() {
|
||||
console.log('base58 (with a lower-case "b") is deprecated. Use bitcore.Base58 (capital "B") instead.');
|
||||
return require('./lib/Base58');
|
||||
}});
|
||||
requireWhenAccessed('bufferput', 'bufferput');
|
||||
requireWhenAccessed('buffertools', 'buffertools');
|
||||
requireWhenAccessed('Buffers.monkey', './patches/Buffers.monkey');
|
||||
|
@ -56,6 +64,6 @@ module.exports.Buffer = Buffer;
|
|||
|
||||
if (typeof process.versions === 'undefined') {
|
||||
// Browser specific
|
||||
module.exports.bignum.config({EXPONENTIAL_AT: 9999999, DECIMAL_PLACES: 0, ROUNDING_MODE: 1});
|
||||
module.exports.Bignum.config({EXPONENTIAL_AT: 9999999, DECIMAL_PLACES: 0, ROUNDING_MODE: 1});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
require('bignum').config({
|
||||
EXPONENTIAL_AT: 9999999,
|
||||
DECIMAL_PLACES: 0,
|
||||
ROUNDING_MODE: 1,
|
||||
});
|
||||
|
|
@ -24,6 +24,8 @@ var pack = function (params) {
|
|||
|
||||
var modules = [
|
||||
'lib/Address',
|
||||
'lib/Base58',
|
||||
'lib/Bignum',
|
||||
'lib/BIP32',
|
||||
'lib/Block',
|
||||
'lib/Bloom',
|
||||
|
@ -94,18 +96,12 @@ var createBitcore = function(opts) {
|
|||
};
|
||||
var b = browserify(bopts);
|
||||
|
||||
b.require(opts.dir + 'browserify-bignum/bignumber.js', {
|
||||
expose: 'bignum'
|
||||
});
|
||||
b.require(opts.dir + 'browserify-buffertools/buffertools.js', {
|
||||
expose: 'buffertools'
|
||||
});
|
||||
b.require(opts.dir + 'bufferput', {
|
||||
expose: 'bufferput'
|
||||
});
|
||||
b.require(opts.dir + 'base58-native', {
|
||||
expose: 'base58-native'
|
||||
});
|
||||
b.require(opts.dir + 'buffers', {
|
||||
expose: 'buffers'
|
||||
});
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
var imports = require('soop').imports();
|
||||
var base58 = imports.base58 || require('base58-native').base58;
|
||||
var base58 = imports.base58 || require('./Base58').base58;
|
||||
var coinUtil = imports.coinUtil || require('../util');
|
||||
var Key = imports.Key || require('./Key');
|
||||
var Point = imports.Point || require('./Point');
|
||||
var SecureRandom = imports.SecureRandom || require('./SecureRandom');
|
||||
var bignum = imports.bignum || require('bignum');
|
||||
var crypto = require('crypto');
|
||||
var bignum = imports.bignum || require('./Bignum');
|
||||
var networks = require('../networks');
|
||||
|
||||
var secp256k1_n = new bignum("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16);
|
||||
|
|
|
@ -0,0 +1,116 @@
|
|||
var crypto = require('crypto');
|
||||
var bignum = require('./Bignum');
|
||||
|
||||
var globalBuffer = new Buffer(1024);
|
||||
var zerobuf = new Buffer(0);
|
||||
var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
||||
var ALPHABET_ZERO = ALPHABET[0];
|
||||
var ALPHABET_BUF = new Buffer(ALPHABET, 'ascii');
|
||||
var ALPHABET_INV = {};
|
||||
for(var i=0; i < ALPHABET.length; i++) {
|
||||
ALPHABET_INV[ALPHABET[i]] = i;
|
||||
};
|
||||
|
||||
// Vanilla Base58 Encoding
|
||||
var base58 = {
|
||||
encode: function(buf) {
|
||||
var str;
|
||||
var x = bignum.fromBuffer(buf);
|
||||
var r;
|
||||
|
||||
if(buf.length < 512) {
|
||||
str = globalBuffer;
|
||||
} else {
|
||||
str = new Buffer(buf.length << 1);
|
||||
}
|
||||
var i = str.length - 1;
|
||||
while(x.gt(0)) {
|
||||
r = x.mod(58);
|
||||
x = x.div(58);
|
||||
str[i] = ALPHABET_BUF[r.toNumber()];
|
||||
i--;
|
||||
}
|
||||
|
||||
// deal with leading zeros
|
||||
var j=0;
|
||||
while(buf[j] == 0) {
|
||||
str[i] = ALPHABET_BUF[0];
|
||||
j++; i--;
|
||||
}
|
||||
|
||||
return str.slice(i+1,str.length).toString('ascii');
|
||||
},
|
||||
|
||||
decode: function(str) {
|
||||
if(str.length == 0) return zerobuf;
|
||||
var answer = bignum(0);
|
||||
for(var i=0; i<str.length; i++) {
|
||||
answer.mul(58)
|
||||
answer = answer.mul(58);
|
||||
answer = answer.add(ALPHABET_INV[str[i]]);
|
||||
};
|
||||
var i = 0;
|
||||
while(i < str.length && str[i] == ALPHABET_ZERO) {
|
||||
i++;
|
||||
}
|
||||
if(i > 0) {
|
||||
var zb = new Buffer(i);
|
||||
zb.fill(0);
|
||||
if(i == str.length) return zb;
|
||||
answer = answer.toBuffer();
|
||||
return Buffer.concat([zb, answer], i+answer.length);
|
||||
} else {
|
||||
return answer.toBuffer();
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// Base58Check Encoding
|
||||
function sha256(data) {
|
||||
return new Buffer(crypto.createHash('sha256').update(data).digest('binary'), 'binary');
|
||||
};
|
||||
|
||||
function doubleSHA256(data) {
|
||||
return sha256(sha256(data));
|
||||
};
|
||||
|
||||
var base58Check = {
|
||||
encode: function(buf) {
|
||||
var checkedBuf = new Buffer(buf.length + 4);
|
||||
var hash = doubleSHA256(buf);
|
||||
buf.copy(checkedBuf);
|
||||
hash.copy(checkedBuf, buf.length);
|
||||
return base58.encode(checkedBuf);
|
||||
},
|
||||
|
||||
decode: function(s) {
|
||||
var buf = base58.decode(s);
|
||||
if (buf.length < 4) {
|
||||
throw new Error("invalid input: too short");
|
||||
}
|
||||
|
||||
var data = buf.slice(0, -4);
|
||||
var csum = buf.slice(-4);
|
||||
|
||||
var hash = doubleSHA256(data);
|
||||
var hash4 = hash.slice(0, 4);
|
||||
|
||||
if (csum.toString() != hash4.toString()) {
|
||||
throw new Error("checksum mismatch");
|
||||
}
|
||||
|
||||
return data;
|
||||
},
|
||||
};
|
||||
|
||||
// if you frequently do base58 encodings with data larger
|
||||
// than 512 bytes, you can use this method to expand the
|
||||
// size of the reusable buffer
|
||||
exports.setBuffer = function(buf) {
|
||||
globalBuffer = buf;
|
||||
};
|
||||
|
||||
exports.base58 = base58;
|
||||
exports.base58Check = base58Check;
|
||||
exports.encode = base58.encode;
|
||||
exports.decode = base58.decode;
|
|
@ -0,0 +1,5 @@
|
|||
if (process.versions) {
|
||||
module.exports = require('bignum');
|
||||
return;
|
||||
}
|
||||
module.exports = require('./browser/Bignum');
|
|
@ -3,7 +3,7 @@ var imports = require('soop').imports();
|
|||
var util = imports.util || require('../util');
|
||||
var Debug1 = imports.Debug1 || function() {};
|
||||
var Script = imports.Script || require('./Script');
|
||||
var Bignum = imports.Bignum || require('bignum');
|
||||
var Bignum = imports.Bignum || require('./Bignum');
|
||||
var Binary = imports.Binary || require('binary');
|
||||
var Step = imports.Step || require('step');
|
||||
var buffertools = imports.buffertools || require('buffertools');
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
"use strict";
|
||||
var imports = require('soop');
|
||||
var bignum = imports.bignum || require('bignum');
|
||||
var bignum = imports.bignum || require('./Bignum');
|
||||
var Point = imports.Point || require('./Point');
|
||||
|
||||
var n = bignum.fromBuffer(new Buffer("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 'hex'), {size: 32});
|
||||
|
|
|
@ -2,7 +2,7 @@ var Key = require('./Key'),
|
|||
Point = require('./Point'),
|
||||
twoSha256 = require('../util').twoSha256,
|
||||
buffertools = require('buffertools'),
|
||||
bignum = require('bignum');
|
||||
bignum = require('./Bignum');
|
||||
|
||||
/**
|
||||
* Pre-BIP32 Electrum public key derivation (electrum <2.0)
|
||||
|
|
|
@ -4,7 +4,7 @@ var log = imports.log || require('../util/log');
|
|||
var util = imports.util || require('../util');
|
||||
var Opcode = imports.Opcode || require('./Opcode');
|
||||
var buffertools = imports.buffertools || require('buffertools');
|
||||
var bignum = imports.bignum || require('bignum');
|
||||
var bignum = imports.bignum || require('./Bignum');
|
||||
var Util = imports.Util || require('../util');
|
||||
var Script = require('./Script');
|
||||
var Key = require('./Key');
|
||||
|
|
|
@ -5,7 +5,7 @@ var Address = imports.Address || require('./Address');
|
|||
var Script = imports.Script || require('./Script');
|
||||
var ScriptInterpreter = imports.ScriptInterpreter || require('./ScriptInterpreter');
|
||||
var util = imports.util || require('../util');
|
||||
var bignum = imports.bignum || require('bignum');
|
||||
var bignum = imports.bignum || require('./Bignum');
|
||||
var Put = imports.Put || require('bufferput');
|
||||
var Parser = imports.Parser || require('../util/BinaryParser');
|
||||
var Step = imports.Step || require('step');
|
||||
|
|
|
@ -54,7 +54,7 @@ var imports = require('soop').imports();
|
|||
var Address = imports.Address || require('./Address');
|
||||
var Script = imports.Script || require('./Script');
|
||||
var util = imports.util || require('../util');
|
||||
var bignum = imports.bignum || require('bignum');
|
||||
var bignum = imports.bignum || require('./Bignum');
|
||||
var buffertools = imports.buffertools || require('buffertools');
|
||||
var networks = imports.networks || require('../networks');
|
||||
var WalletKey = imports.WalletKey || require('./WalletKey');
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,7 @@
|
|||
var ECKey = require('../../browser/vendor-bundle.js').ECKey;
|
||||
var SecureRandom = require('../SecureRandom');
|
||||
var Curve = require('../Curve');
|
||||
var bignum = require('bignum');
|
||||
var bignum = require('../Bignum');
|
||||
|
||||
var Key = function() {
|
||||
this._pub = null;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
var imports = require('soop').imports();
|
||||
var Key = imports.Key || require('./Key');
|
||||
var bignum = imports.bignum || require('bignum');
|
||||
var bignum = imports.bignum || require('../Bignum');
|
||||
var assert = require('assert');
|
||||
var ECPointFp = require('../../browser/vendor-bundle.js').ECPointFp;
|
||||
var ECFieldElementFp = require('../../browser/vendor-bundle.js').ECFieldElementFp;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"use strict";
|
||||
|
||||
var imports = require('soop').imports();
|
||||
var bignum = imports.bignum || require('bignum');
|
||||
var bignum = imports.bignum || require('../Bignum');
|
||||
var CPPKey = imports.CPPKey || require('bindings')('KeyModule').Key;
|
||||
var assert = require('assert');
|
||||
|
||||
|
|
|
@ -54,7 +54,6 @@
|
|||
"dependencies": {
|
||||
"jssha": "=1.5.0",
|
||||
"soop": "=0.1.5",
|
||||
"base58-native": "=0.1.3",
|
||||
"bindings": "=1.1.1",
|
||||
"bufferput": "git://github.com/bitpay/node-bufferput.git",
|
||||
"bignum": "=0.6.2",
|
||||
|
@ -65,7 +64,6 @@
|
|||
"browserify": "=3.40.0",
|
||||
"browser-pack": "=2.0.1",
|
||||
"commander": "=2.1.0",
|
||||
"browserify-bignum": "git://github.com/maraoz/browserify-bignum.git",
|
||||
"browserify-buffertools": "git://github.com/maraoz/browserify-buffertools.git",
|
||||
"socks5-client": "~0.3.6",
|
||||
"brfs": "=1.0.0",
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
var assert = require('assert');
|
||||
var base58 = require('../lib/Base58').base58;
|
||||
var base58Check = require('../lib/Base58').base58Check;
|
||||
|
||||
var testData = [
|
||||
["61", "2g", "C2dGTwc"],
|
||||
["626262", "a3gV", "4jF5uERJAK"],
|
||||
["636363", "aPEr", "4mT4krqUYJ"],
|
||||
["73696d706c792061206c6f6e6720737472696e67", "2cFupjhnEsSn59qHXstmK2ffpLv2", "BXF1HuEUCqeVzZdrKeJjG74rjeXxqJ7dW"],
|
||||
["00eb15231dfceb60925886b67d065299925915aeb172c06647", "1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L", "13REmUhe2ckUKy1FvM7AMCdtyYq831yxM3QeyEu4"],
|
||||
["516b6fcd0f", "ABnLTmg", "237LSrY9NUUas"],
|
||||
["bf4f89001e670274dd", "3SEo3LWLoPntC", "GwDDDeduj1jpykc27e"],
|
||||
["572e4794", "3EFU7m", "FamExfqCeza"],
|
||||
["ecac89cad93923c02321", "EJDM8drfXA6uyA", "2W1Yd5Zu6WGyKVtHGMrH"],
|
||||
["10c8511e", "Rt5zm", "3op3iuGMmhs"],
|
||||
["00000000000000000000", "1111111111", "111111111146Momb"],
|
||||
["", "", "3QJmnh"]
|
||||
];
|
||||
|
||||
//suite('basic');
|
||||
|
||||
test('allData', function() {
|
||||
base58.encodeTest = function(raw, b58str) {
|
||||
assert.equal(base58.encode(raw), b58str);
|
||||
};
|
||||
|
||||
base58.decodeTest = function(raw, b58str) {
|
||||
assert.equal(raw.toString('hex'), base58.decode(b58str).toString('hex'));
|
||||
};
|
||||
|
||||
base58Check.encodeTest = function(raw, b58str) {
|
||||
assert.equal(base58Check.encode(raw), b58str);
|
||||
};
|
||||
|
||||
base58Check.decodeTest = function(raw, b58str) {
|
||||
assert.equal(raw.toString('hex'), base58Check.decode(b58str).toString('hex'));
|
||||
};
|
||||
|
||||
testData.forEach(function(datum) {
|
||||
var raw = new Buffer(datum[0], 'hex');
|
||||
var b58 = datum[1];
|
||||
var b58Check = datum[2];
|
||||
|
||||
base58.encodeTest(raw, b58);
|
||||
base58.decodeTest(raw, b58);
|
||||
base58Check.encodeTest(raw, b58Check);
|
||||
base58Check.decodeTest(raw, b58Check);
|
||||
});
|
||||
});
|
|
@ -4,7 +4,7 @@ var chai = chai || require('chai');
|
|||
var bitcore = bitcore || require('../bitcore');
|
||||
var coinUtil = coinUtil || bitcore.util;
|
||||
var buffertools = require('buffertools');
|
||||
var bignum = require('bignum');
|
||||
var bignum = bitcore.Bignum;
|
||||
|
||||
var should = chai.should();
|
||||
var assert = chai.assert;
|
||||
|
|
|
@ -8,7 +8,7 @@ var assert = chai.assert;
|
|||
|
||||
var Key = bitcore.Key;
|
||||
var Point = bitcore.Point;
|
||||
var bignum = require('bignum');
|
||||
var bignum = bitcore.Bignum;
|
||||
|
||||
describe('Key', function() {
|
||||
it('should initialize the main object', function() {
|
||||
|
|
|
@ -4,7 +4,7 @@ var chai = chai || require('chai');
|
|||
var bitcore = bitcore || require('../bitcore');
|
||||
var coinUtil = coinUtil || bitcore.util;
|
||||
var buffertools = require('buffertools');
|
||||
var bignum = require('bignum');
|
||||
var bignum = bitcore.Bignum;
|
||||
|
||||
var should = chai.should();
|
||||
var assert = chai.assert;
|
||||
|
|
|
@ -9,8 +9,8 @@ var should = chai.should();
|
|||
|
||||
var testdata = testdata || require('./testdata');
|
||||
|
||||
var bignum = bitcore.bignum;
|
||||
var base58 = bitcore.base58;
|
||||
var bignum = bitcore.Bignum;
|
||||
var base58 = bitcore.Base58;
|
||||
var base58Check = base58.base58Check;
|
||||
|
||||
var Address = bitcore.Address;
|
||||
|
@ -81,7 +81,7 @@ describe('Miscelaneous stuff', function() {
|
|||
});
|
||||
// bignum
|
||||
it('should initialze the bignum object', function() {
|
||||
should.exist(bitcore.bignum);
|
||||
should.exist(bitcore.Bignum);
|
||||
});
|
||||
it('should create a bignum from string', function() {
|
||||
var n = bignum('9832087987979879879879879879879879879879879879');
|
||||
|
@ -96,7 +96,7 @@ describe('Miscelaneous stuff', function() {
|
|||
|
||||
// base58
|
||||
it('should initialze the base58 object', function() {
|
||||
should.exist(bitcore.base58);
|
||||
should.exist(bitcore.Base58);
|
||||
});
|
||||
it('should obtain the same string in base58 roundtrip', function() {
|
||||
var m = 'mqqa8xSMVDyf9QxihGnPtap6Mh6qemUkcu';
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var imports = require('soop').imports();
|
||||
var base58 = imports.base58 || require('base58-native').base58Check;
|
||||
var base58 = imports.base58 || require('../lib/Base58').base58Check;
|
||||
|
||||
|
||||
// Constructor. Takes the following forms:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var imports = require('soop').imports();
|
||||
var base58 = imports.base58 || require('base58-native').base58Check;
|
||||
var base58 = imports.base58 || require('../lib/Base58').base58Check;
|
||||
var parent = imports.parent || require('./EncodedData');
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var crypto = require('crypto');
|
||||
var bignum = require('bignum');
|
||||
var bignum = require('../lib/Bignum');
|
||||
var Binary = require('binary');
|
||||
var Put = require('bufferput');
|
||||
var buffertools = require('buffertools');
|
||||
|
|
Loading…
Reference in New Issue