Skip to content

Commit 4689abb

Browse files
committed
Merge pull request bitcoinjs#117 from dcousens/rmjsbn
Removal of JSBN
2 parents eb6225b + ae60e6e commit 4689abb

File tree

15 files changed

+67
-1405
lines changed

15 files changed

+67
-1405
lines changed

README.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,6 @@ BitcoinJS (c) 2011-2012 Stefan Thomas
122122
Released under MIT license
123123
http://bitcoinjs.org/
124124

125-
JSBN (c) 2003-2005 Tom Wu
126-
Released under BSD license
127-
http://www-cs-students.stanford.edu/~tjw/jsbn/
128-
129125
CryptoJS (c) 2009–2012 by Jeff Mott
130126
Released under New BSD license
131127
http://code.google.com/p/crypto-js/
132-

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"compile": "./node_modules/.bin/browserify ./src/index.js -s Bitcoin | ./node_modules/.bin/uglifyjs > bitcoinjs-min.js"
4343
},
4444
"dependencies": {
45+
"bigi": "0.2.0",
4546
"crypto-js": "3.1.2-3",
4647
"secure-random": "0.2.1"
4748
}

src/base58.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// Merged Buffer refactorings from base58-native by Stephen Pair
66
// Copyright (c) 2013 BitPay Inc
77

8-
var BigInteger = require('./jsbn/jsbn')
8+
var BigInteger = require('./bigi')
99

1010
var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
1111
var ALPHABET_BUF = new Buffer(ALPHABET, 'ascii')
@@ -16,7 +16,7 @@ for(var i = 0; i < ALPHABET.length; i++) {
1616
var BASE = BigInteger.valueOf(58)
1717

1818
function encode(buffer) {
19-
var bi = BigInteger.fromByteArrayUnsigned(buffer)
19+
var bi = BigInteger.fromBuffer(buffer)
2020
var result = new Buffer(buffer.length << 1)
2121

2222
var i = result.length - 1

src/bigi.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
var assert = require('assert')
2+
var BigInteger = require('bigi')
3+
4+
BigInteger.fromBuffer = function(buffer) {
5+
// FIXME: Transitionary
6+
if (Buffer.isBuffer(buffer)) {
7+
buffer = Array.prototype.slice.call(buffer)
8+
}
9+
10+
return BigInteger.fromByteArrayUnsigned(buffer)
11+
}
12+
13+
module.exports = BigInteger

src/jsbn/ec.js renamed to src/ec.js

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,8 @@
22
// Ported loosely from BouncyCastle's Java EC code
33
// Only Fp curves implemented for now
44

5-
var BigInteger = require('./jsbn'),
6-
sec = require('./sec');
5+
var BigInteger = require('./bigi')
76

8-
// ----------------
9-
// ECFieldElementFp
10-
11-
// constructor
127
function ECFieldElementFp(q,x) {
138
this.x = x;
149
// TODO if(x.compareTo(q) >= 0) error
@@ -343,12 +338,12 @@ ECPointFp.decodeFrom = function (curve, enc) {
343338
if (type == 4) {
344339
var xBa = enc.slice(1, 1 + dataLen/2),
345340
yBa = enc.slice(1 + dataLen/2, 1 + dataLen),
346-
x = BigInteger.fromByteArrayUnsigned(xBa),
347-
y = BigInteger.fromByteArrayUnsigned(yBa);
341+
x = BigInteger.fromBuffer(xBa),
342+
y = BigInteger.fromBuffer(yBa);
348343
}
349344
else {
350345
var xBa = enc.slice(1),
351-
x = BigInteger.fromByteArrayUnsigned(xBa),
346+
x = BigInteger.fromBuffer(xBa),
352347
p = curve.getQ(),
353348
xCubedPlus7 = x.multiply(x).multiply(x).add(new BigInteger('7')).mod(p),
354349
pPlus1Over4 = p.add(new BigInteger('1'))

src/ecdsa.js

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
var sec = require('./jsbn/sec')
2-
var rng = require('secure-random')
3-
var BigInteger = require('./jsbn/jsbn')
1+
var BigInteger = require('./bigi')
2+
var ECPointFp = require('./ec').ECPointFp
3+
44
var convert = require('./convert')
55
var HmacSHA256 = require('crypto-js/hmac-sha256')
6-
var ECPointFp = require('./jsbn/ec').ECPointFp
6+
7+
var sec = require('./sec')
78
var ecparams = sec("secp256k1")
9+
810
var P_OVER_FOUR = null
911

1012
function implShamirsTrick(P, k, Q, l) {
@@ -48,19 +50,14 @@ function deterministicGenerateK(hash,key) {
4850
v = HmacSHA256(v,k)
4951
v = HmacSHA256(v,k)
5052
vArr = convert.wordArrayToBytes(v)
51-
return BigInteger.fromByteArrayUnsigned(vArr)
53+
return BigInteger.fromBuffer(vArr)
5254
}
5355

5456
var ecdsa = {
55-
getBigRandom: function (limit) {
56-
return new BigInteger(limit.bitLength(), rng).
57-
mod(limit.subtract(BigInteger.ONE)).
58-
add(BigInteger.ONE)
59-
},
6057
sign: function (hash, priv) {
6158
var d = priv
6259
var n = ecparams.getN()
63-
var e = BigInteger.fromByteArrayUnsigned(hash)
60+
var e = BigInteger.fromBuffer(hash)
6461

6562
var k = deterministicGenerateK(hash,priv.toByteArrayUnsigned())
6663
var G = ecparams.getG()
@@ -98,7 +95,7 @@ var ecdsa = {
9895
} else {
9996
throw new Error("Invalid format for pubkey value, must be byte array or ECPointFp")
10097
}
101-
var e = BigInteger.fromByteArrayUnsigned(hash)
98+
var e = BigInteger.fromBuffer(hash)
10299

103100
return ecdsa.verifyRaw(e, r, s, Q)
104101
},
@@ -188,8 +185,8 @@ var ecdsa = {
188185
//if (cursor != sig.length)
189186
// throw new Error("Extra bytes in signature")
190187

191-
var r = BigInteger.fromByteArrayUnsigned(rBa)
192-
var s = BigInteger.fromByteArrayUnsigned(sBa)
188+
var r = BigInteger.fromBuffer(rBa)
189+
var s = BigInteger.fromBuffer(sBa)
193190

194191
return {r: r, s: s}
195192
},
@@ -207,8 +204,8 @@ var ecdsa = {
207204
}
208205

209206
var n = ecparams.getN()
210-
var r = BigInteger.fromByteArrayUnsigned(sig.slice(1, 33)).mod(n)
211-
var s = BigInteger.fromByteArrayUnsigned(sig.slice(33, 65)).mod(n)
207+
var r = BigInteger.fromBuffer(sig.slice(1, 33)).mod(n)
208+
var s = BigInteger.fromBuffer(sig.slice(33, 65)).mod(n)
212209

213210
return {r: r, s: s, i: i}
214211
},
@@ -262,7 +259,7 @@ var ecdsa = {
262259
R.validate()
263260

264261
// 1.5 Compute e from M
265-
var e = BigInteger.fromByteArrayUnsigned(hash)
262+
var e = BigInteger.fromBuffer(hash)
266263
var eNeg = BigInteger.ZERO.subtract(e).mod(n)
267264

268265
// 1.6 Compute Q = r^-1 (sR - eG)

src/eckey.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ var secureRandom = require('secure-random')
77
var Address = require('./address')
88
var crypto = require('./crypto')
99

10-
var sec = require('./jsbn/sec')
10+
var sec = require('./sec')
1111
var ecparams = sec('secp256k1')
1212

13-
var BigInteger = require('./jsbn/jsbn')
14-
var ECPointFp = require('./jsbn/ec').ECPointFp
13+
var BigInteger = require('./bigi')
14+
var ECPointFp = require('./ec').ECPointFp
1515

1616
function ECKey(D, compressed) {
1717
assert(D.compareTo(BigInteger.ZERO) > 0, 'Private key must be greater than 0')
@@ -28,7 +28,7 @@ ECKey.fromBuffer = function(buffer, compressed) {
2828
assert(Buffer.isBuffer(buffer), 'First argument must be a Buffer')
2929
assert.strictEqual(buffer.length, 32, 'Invalid buffer length')
3030

31-
var D = BigInteger.fromByteArrayUnsigned(buffer)
31+
var D = BigInteger.fromBuffer(buffer)
3232
return new ECKey(D, compressed)
3333
}
3434
ECKey.fromHex = function(hex, compressed) {
@@ -52,7 +52,7 @@ ECKey.makeRandom = function(compressed, rng) {
5252
rng = rng || secureRandom
5353

5454
var buffer = new Buffer(rng(32))
55-
var D = BigInteger.fromByteArrayUnsigned(buffer)
55+
var D = BigInteger.fromBuffer(buffer)
5656
D = D.mod(ecparams.getN())
5757

5858
return new ECKey(D, compressed)

src/hdwallet.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ var base58 = require('./base58')
33
var convert = require('./convert')
44

55
var Address = require('./address')
6-
var BigInteger = require('./jsbn/jsbn')
6+
var BigInteger = require('./bigi')
77
var CJS = require('crypto-js')
88
var crypto = require('./crypto')
99
var ECKey = require('./eckey').ECKey
1010
var ECPubKey = require('./eckey').ECPubKey
1111
var Network = require('./network')
1212

13-
var sec = require('./jsbn/sec')
13+
var sec = require('./sec')
1414
var ecparams = sec("secp256k1")
1515

1616
function HmacSHA512(buffer, secret) {
@@ -215,7 +215,7 @@ HDWallet.prototype.derive = function(i) {
215215
var hd = new HDWallet()
216216
hd.network = this.network
217217

218-
var IL = BigInteger.fromByteArrayUnsigned(ILb)
218+
var IL = BigInteger.fromBuffer(ILb)
219219

220220
if (this.priv) {
221221
// ki = IL + kpar (mod n).

src/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
1+
var ec = require('./ec')
12
var Key = require('./eckey')
23
var T = require('./transaction')
34

45
module.exports = {
56
Address: require('./address'),
67
base58: require('./base58'),
78
base58check: require('./base58check'),
8-
BigInteger: require('./jsbn/jsbn'),
9+
BigInteger: require('./bigi'),
910
convert: require('./convert'),
1011
crypto: require('./crypto'),
12+
ec: ec,
1113
ecdsa: require('./ecdsa'),
1214
ECKey: Key.ECKey,
13-
ECPointFp: require('./jsbn/ec').ECPointFp,
15+
ECPointFp: ec.ECPointFp,
1416
ECPubKey: Key.ECPubKey,
1517
Message: require('./message'),
1618
Opcode: require('./opcode'),
1719
HDWallet: require('./hdwallet'),
1820
Script: require('./script'),
21+
sec: require('./sec'),
1922
Transaction: T.Transaction,
2023
TransactionIn: T.TransactionIn,
2124
TransactionOut: T.TransactionOut,

0 commit comments

Comments
 (0)