Tests: Updated tests to run from sub-directories and fixed crypto and encoding related missing updates.
This commit is contained in:
parent
ac368176b7
commit
8c4301cb0a
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
browserify index.js -o browser/bitcore.js
|
browserify index.js -o browser/bitcore.js
|
||||||
ls test/*.js | xargs browserify -o browser/tests.js
|
find test/ -type f -name "*.js" | xargs browserify -o browser/tests.js
|
||||||
|
|
|
@ -4,6 +4,7 @@ var BN = require('./bn');
|
||||||
var Point = require('./point');
|
var Point = require('./point');
|
||||||
var Random = require('./random');
|
var Random = require('./random');
|
||||||
var Pubkey = require('../pubkey');
|
var Pubkey = require('../pubkey');
|
||||||
|
var Privkey = require('../privkey');
|
||||||
var Signature = require('../signature');
|
var Signature = require('../signature');
|
||||||
|
|
||||||
var ECDSA = function ECDSA(obj) {
|
var ECDSA = function ECDSA(obj) {
|
||||||
|
@ -15,24 +16,29 @@ var ECDSA = function ECDSA(obj) {
|
||||||
|
|
||||||
ECDSA.prototype.set = function(obj) {
|
ECDSA.prototype.set = function(obj) {
|
||||||
this.hashbuf = obj.hashbuf || this.hashbuf;
|
this.hashbuf = obj.hashbuf || this.hashbuf;
|
||||||
this.keypair = obj.keypair || this.keypair;
|
this.privkey = obj.privkey || this.privkey;
|
||||||
|
this.pubkey = obj.pubkey || this.pubkey;
|
||||||
this.sig = obj.sig || this.sig;
|
this.sig = obj.sig || this.sig;
|
||||||
this.k = obj.k || this.k;
|
this.k = obj.k || this.k;
|
||||||
this.verified = obj.verified || this.verified;
|
this.verified = obj.verified || this.verified;
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ECDSA.prototype.privkey2pubkey = function(){
|
||||||
|
this.pubkey = Pubkey().fromPrivkey(this.privkey);
|
||||||
|
};
|
||||||
|
|
||||||
ECDSA.prototype.calci = function() {
|
ECDSA.prototype.calci = function() {
|
||||||
for (var i = 0; i < 4; i++) {
|
for (var i = 0; i < 4; i++) {
|
||||||
this.sig.i = i;
|
this.sig.i = i;
|
||||||
|
var Qprime;
|
||||||
try {
|
try {
|
||||||
var Qprime = this.sig2pubkey();
|
Qprime = this.sig2pubkey();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (Qprime.point.eq(this.pubkey.point)) {
|
||||||
if (Qprime.point.eq(this.keypair.pubkey.point)) {
|
this.sig.compressed = this.pubkey.compressed;
|
||||||
this.sig.compressed = this.keypair.pubkey.compressed;
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,8 +51,10 @@ ECDSA.prototype.fromString = function(str) {
|
||||||
var obj = JSON.parse(str);
|
var obj = JSON.parse(str);
|
||||||
if (obj.hashbuf)
|
if (obj.hashbuf)
|
||||||
this.hashbuf = new Buffer(obj.hashbuf, 'hex');
|
this.hashbuf = new Buffer(obj.hashbuf, 'hex');
|
||||||
if (obj.keypair)
|
if (obj.pubkey)
|
||||||
this.keypair = Keypair().fromString(obj.keypair);
|
this.pubkey = Pubkey().fromString(obj.pubkey);
|
||||||
|
if (obj.privkey)
|
||||||
|
this.privkey = Privkey().fromString(obj.privkey);
|
||||||
if (obj.sig)
|
if (obj.sig)
|
||||||
this.sig = Signature().fromString(obj.sig);
|
this.sig = Signature().fromString(obj.sig);
|
||||||
if (obj.k)
|
if (obj.k)
|
||||||
|
@ -118,7 +126,7 @@ ECDSA.prototype.sigError = function() {
|
||||||
return 'hashbuf must be a 32 byte buffer';
|
return 'hashbuf must be a 32 byte buffer';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.keypair.pubkey.validate();
|
this.pubkey.validate();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return 'Invalid pubkey: ' + e;
|
return 'Invalid pubkey: ' + e;
|
||||||
}
|
}
|
||||||
|
@ -135,7 +143,7 @@ ECDSA.prototype.sigError = function() {
|
||||||
var u1 = sinv.mul(e).mod(n);
|
var u1 = sinv.mul(e).mod(n);
|
||||||
var u2 = sinv.mul(r).mod(n);
|
var u2 = sinv.mul(r).mod(n);
|
||||||
|
|
||||||
var p = Point.getG().mulAdd(u1, this.keypair.pubkey.point, u2);
|
var p = Point.getG().mulAdd(u1, this.pubkey.point, u2);
|
||||||
if (p.isInfinity())
|
if (p.isInfinity())
|
||||||
return 'p is infinity';
|
return 'p is infinity';
|
||||||
|
|
||||||
|
@ -147,7 +155,7 @@ ECDSA.prototype.sigError = function() {
|
||||||
|
|
||||||
ECDSA.prototype.sign = function() {
|
ECDSA.prototype.sign = function() {
|
||||||
var hashbuf = this.hashbuf;
|
var hashbuf = this.hashbuf;
|
||||||
var privkey = this.keypair.privkey;
|
var privkey = this.privkey;
|
||||||
var k = this.k;
|
var k = this.k;
|
||||||
var d = privkey.bn;
|
var d = privkey.bn;
|
||||||
|
|
||||||
|
@ -170,7 +178,7 @@ ECDSA.prototype.sign = function() {
|
||||||
var s = k.invm(N).mul(e.add(d.mul(r))).mod(N);
|
var s = k.invm(N).mul(e.add(d.mul(r))).mod(N);
|
||||||
} while (r.cmp(0) <= 0 || s.cmp(0) <= 0);
|
} while (r.cmp(0) <= 0 || s.cmp(0) <= 0);
|
||||||
|
|
||||||
this.sig = new Signature({r: r, s: s, compressed: this.keypair.pubkey.compressed});
|
this.sig = new Signature({r: r, s: s, compressed: this.privkey.compressed});
|
||||||
return this.sig;
|
return this.sig;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -183,6 +191,10 @@ ECDSA.prototype.toString = function() {
|
||||||
var obj = {};
|
var obj = {};
|
||||||
if (this.hashbuf)
|
if (this.hashbuf)
|
||||||
obj.hashbuf = this.hashbuf.toString('hex');
|
obj.hashbuf = this.hashbuf.toString('hex');
|
||||||
|
if (this.pubkey)
|
||||||
|
obj.pubkey = this.pubkey.toString();
|
||||||
|
if (this.privkey)
|
||||||
|
obj.privkey = this.privkey.toString();
|
||||||
if (this.keypair)
|
if (this.keypair)
|
||||||
obj.keypair = this.keypair.toString();
|
obj.keypair = this.keypair.toString();
|
||||||
if (this.sig)
|
if (this.sig)
|
||||||
|
@ -199,10 +211,10 @@ ECDSA.prototype.verify = function() {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
ECDSA.sign = function(hashbuf, keypair) {
|
ECDSA.sign = function(hashbuf, privkey) {
|
||||||
return ECDSA().set({
|
return ECDSA().set({
|
||||||
hashbuf: hashbuf,
|
hashbuf: hashbuf,
|
||||||
keypair: keypair
|
privkey: privkey
|
||||||
}).signRandomK();
|
}).signRandomK();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -210,7 +222,7 @@ ECDSA.verify = function(hashbuf, sig, pubkey) {
|
||||||
return ECDSA().set({
|
return ECDSA().set({
|
||||||
hashbuf: hashbuf,
|
hashbuf: hashbuf,
|
||||||
sig: sig,
|
sig: sig,
|
||||||
keypair: Keypair().set({pubkey: pubkey})
|
pubkey: pubkey
|
||||||
}).verify();
|
}).verify();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
"author": "BitPay <dev@bitpay.com>",
|
"author": "BitPay <dev@bitpay.com>",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "mocha --reporter spec",
|
"test": "mocha --recursive --reporter spec",
|
||||||
"coverage": "istanbul cover _mocha"
|
"coverage": "istanbul cover _mocha -- --recursive"
|
||||||
},
|
},
|
||||||
"contributors": [
|
"contributors": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var BN = bitcore.BN;
|
var BN = bitcore.crypto.BN;
|
||||||
|
|
||||||
describe('BN', function() {
|
describe('BN', function() {
|
||||||
it('should create a bn', function() {
|
it('should create a bn', function() {
|
||||||
|
|
|
@ -2,14 +2,13 @@
|
||||||
|
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var ECDSA = bitcore.ECDSA;
|
var ECDSA = bitcore.crypto.ECDSA;
|
||||||
var Hash = bitcore.Hash;
|
var Hash = bitcore.crypto.Hash;
|
||||||
var Keypair = bitcore.Keypair;
|
|
||||||
var Privkey = bitcore.Privkey;
|
var Privkey = bitcore.Privkey;
|
||||||
var Pubkey = bitcore.Pubkey;
|
var Pubkey = bitcore.Pubkey;
|
||||||
var Signature = bitcore.Signature;
|
var Signature = bitcore.Signature;
|
||||||
var BN = bitcore.BN;
|
var BN = bitcore.crypto.BN;
|
||||||
var point = bitcore.Point;
|
var point = bitcore.crypto.Point;
|
||||||
|
|
||||||
describe('ECDSA', function() {
|
describe('ECDSA', function() {
|
||||||
|
|
||||||
|
@ -20,9 +19,8 @@ describe('ECDSA', function() {
|
||||||
|
|
||||||
var ecdsa = new ECDSA();
|
var ecdsa = new ECDSA();
|
||||||
ecdsa.hashbuf = Hash.sha256(new Buffer('test data'));
|
ecdsa.hashbuf = Hash.sha256(new Buffer('test data'));
|
||||||
ecdsa.keypair = new Keypair();
|
ecdsa.privkey = new Privkey({bn: BN().fromBuffer(new Buffer('fee0a1f7afebf9d2a5a80c0c98a31c709681cce195cbcd06342b517970c0be1e', 'hex'))});
|
||||||
ecdsa.keypair.privkey = new Privkey({bn: BN().fromBuffer(new Buffer('fee0a1f7afebf9d2a5a80c0c98a31c709681cce195cbcd06342b517970c0be1e', 'hex'))});
|
ecdsa.pubkey = new Pubkey({
|
||||||
ecdsa.keypair.pubkey = new Pubkey({
|
|
||||||
point: point(BN().fromBuffer(new Buffer('ac242d242d23be966085a2b2b893d989f824e06c9ad0395a8a52f055ba39abb2', 'hex')),
|
point: point(BN().fromBuffer(new Buffer('ac242d242d23be966085a2b2b893d989f824e06c9ad0395a8a52f055ba39abb2', 'hex')),
|
||||||
BN().fromBuffer(new Buffer('4836ab292c105a711ed10fcfd30999c31ff7c02456147747e03e739ad527c380', 'hex')))
|
BN().fromBuffer(new Buffer('4836ab292c105a711ed10fcfd30999c31ff7c02456147747e03e739ad527c380', 'hex')))
|
||||||
});
|
});
|
||||||
|
@ -49,13 +47,11 @@ describe('ECDSA', function() {
|
||||||
var r = BN('71706645040721865894779025947914615666559616020894583599959600180037551395766', 10);
|
var r = BN('71706645040721865894779025947914615666559616020894583599959600180037551395766', 10);
|
||||||
var s = BN('109412465507152403114191008482955798903072313614214706891149785278625167723646', 10);
|
var s = BN('109412465507152403114191008482955798903072313614214706891149785278625167723646', 10);
|
||||||
var ecdsa = new ECDSA();
|
var ecdsa = new ECDSA();
|
||||||
ecdsa.keypair = new Keypair();
|
ecdsa.privkey = Privkey();
|
||||||
ecdsa.keypair.privkey = Privkey();
|
ecdsa.privkey.bn = BN().fromBuffer(Hash.sha256(new Buffer('test')));
|
||||||
ecdsa.keypair.privkey.bn = BN().fromBuffer(Hash.sha256(new Buffer('test')));
|
ecdsa.privkey2pubkey();
|
||||||
ecdsa.keypair.privkey2pubkey();
|
|
||||||
ecdsa.hashbuf = hashbuf;
|
ecdsa.hashbuf = hashbuf;
|
||||||
ecdsa.sig = new Signature({r: r, s: s});
|
ecdsa.sig = new Signature({r: r, s: s});
|
||||||
|
|
||||||
ecdsa.calci();
|
ecdsa.calci();
|
||||||
ecdsa.sig.i.should.equal(1);
|
ecdsa.sig.i.should.equal(1);
|
||||||
});
|
});
|
||||||
|
@ -69,7 +65,8 @@ describe('ECDSA', function() {
|
||||||
var ecdsa2 = new ECDSA();
|
var ecdsa2 = new ECDSA();
|
||||||
ecdsa2.fromString(str);
|
ecdsa2.fromString(str);
|
||||||
should.exist(ecdsa.hashbuf);
|
should.exist(ecdsa.hashbuf);
|
||||||
should.exist(ecdsa.keypair);
|
should.exist(ecdsa.pubkey);
|
||||||
|
should.exist(ecdsa.privkey);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -100,7 +97,7 @@ describe('ECDSA', function() {
|
||||||
ecdsa.sign();
|
ecdsa.sign();
|
||||||
ecdsa.sig.i = 1;
|
ecdsa.sig.i = 1;
|
||||||
var pubkey = ecdsa.sig2pubkey();
|
var pubkey = ecdsa.sig2pubkey();
|
||||||
pubkey.point.eq(ecdsa.keypair.pubkey.point).should.equal(true);
|
pubkey.point.eq(ecdsa.pubkey.point).should.equal(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -123,8 +120,7 @@ describe('ECDSA', function() {
|
||||||
ecdsa.hashbuf = Hash.sha256(new Buffer('test'));
|
ecdsa.hashbuf = Hash.sha256(new Buffer('test'));
|
||||||
var pk = new Pubkey();
|
var pk = new Pubkey();
|
||||||
pk.fromDER(new Buffer('041ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a7baad41d04514751e6851f5304fd243751703bed21b914f6be218c0fa354a341', 'hex'));
|
pk.fromDER(new Buffer('041ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a7baad41d04514751e6851f5304fd243751703bed21b914f6be218c0fa354a341', 'hex'));
|
||||||
ecdsa.keypair = new Keypair();
|
ecdsa.pubkey = pk;
|
||||||
ecdsa.keypair.pubkey = pk;
|
|
||||||
ecdsa.sig = new Signature();
|
ecdsa.sig = new Signature();
|
||||||
ecdsa.sig.r = BN(0);
|
ecdsa.sig.r = BN(0);
|
||||||
ecdsa.sig.s = BN(0);
|
ecdsa.sig.s = BN(0);
|
||||||
|
@ -151,7 +147,8 @@ describe('ECDSA', function() {
|
||||||
it('should should throw an error if hashbuf is not 32 bytes', function() {
|
it('should should throw an error if hashbuf is not 32 bytes', function() {
|
||||||
var ecdsa2 = ECDSA().set({
|
var ecdsa2 = ECDSA().set({
|
||||||
hashbuf: ecdsa.hashbuf.slice(0, 31),
|
hashbuf: ecdsa.hashbuf.slice(0, 31),
|
||||||
keypair: ecdsa.keypair
|
pubkey: ecdsa.pubkey,
|
||||||
|
privkey: ecdsa.privkey
|
||||||
});
|
});
|
||||||
ecdsa2.randomK();
|
ecdsa2.randomK();
|
||||||
(function() {
|
(function() {
|
||||||
|
@ -197,7 +194,7 @@ describe('ECDSA', function() {
|
||||||
describe('@sign', function() {
|
describe('@sign', function() {
|
||||||
|
|
||||||
it('should produce a signature', function() {
|
it('should produce a signature', function() {
|
||||||
var sig = ECDSA.sign(ecdsa.hashbuf, ecdsa.keypair);
|
var sig = ECDSA.sign(ecdsa.hashbuf, ecdsa.privkey);
|
||||||
(sig instanceof Signature).should.equal(true);
|
(sig instanceof Signature).should.equal(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -206,10 +203,10 @@ describe('ECDSA', function() {
|
||||||
describe('@verify', function() {
|
describe('@verify', function() {
|
||||||
|
|
||||||
it('should verify a valid signature, and unverify an invalid signature', function() {
|
it('should verify a valid signature, and unverify an invalid signature', function() {
|
||||||
var sig = ECDSA.sign(ecdsa.hashbuf, ecdsa.keypair);
|
var sig = ECDSA.sign(ecdsa.hashbuf, ecdsa.privkey);
|
||||||
ECDSA.verify(ecdsa.hashbuf, sig, ecdsa.keypair.pubkey).should.equal(true);
|
ECDSA.verify(ecdsa.hashbuf, sig, ecdsa.pubkey).should.equal(true);
|
||||||
var fakesig = Signature(sig.r.add(1), sig.s);
|
var fakesig = Signature(sig.r.add(1), sig.s);
|
||||||
ECDSA.verify(ecdsa.hashbuf, fakesig, ecdsa.keypair.pubkey).should.equal(false);
|
ECDSA.verify(ecdsa.hashbuf, fakesig, ecdsa.pubkey).should.equal(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
require('chai').should();
|
require('chai').should();
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var Hash = bitcore.Hash;
|
var Hash = bitcore.crypto.Hash;
|
||||||
|
|
||||||
describe('Hash', function() {
|
describe('Hash', function() {
|
||||||
var buf = new Buffer([0, 1, 2, 3, 253, 254, 255]);
|
var buf = new Buffer([0, 1, 2, 3, 253, 254, 255]);
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var point = bitcore.Point;
|
var point = bitcore.crypto.Point;
|
||||||
var BN = bitcore.BN;
|
var BN = bitcore.crypto.BN;
|
||||||
|
|
||||||
describe('Point', function() {
|
describe('Point', function() {
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var Random = bitcore.Random;
|
var Random = bitcore.crypto.Random;
|
||||||
|
|
||||||
describe('Random', function() {
|
describe('Random', function() {
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var Base58 = bitcore.Base58;
|
var Base58 = bitcore.encoding.Base58;
|
||||||
|
|
||||||
describe('Base58', function() {
|
describe('Base58', function() {
|
||||||
var buf = new Buffer([0, 1, 2, 3, 253, 254, 255]);
|
var buf = new Buffer([0, 1, 2, 3, 253, 254, 255]);
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var Base58Check = bitcore.Base58Check;
|
var Base58Check = bitcore.encoding.Base58Check;
|
||||||
var base58 = bitcore.Base58;
|
var base58 = bitcore.encoding.Base58;
|
||||||
|
|
||||||
describe('Base58Check', function() {
|
describe('Base58Check', function() {
|
||||||
var buf = new Buffer([0, 1, 2, 3, 253, 254, 255]);
|
var buf = new Buffer([0, 1, 2, 3, 253, 254, 255]);
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var BufferWriter = bitcore.BufferWriter;
|
var BufferWriter = bitcore.encoding.BufferWriter;
|
||||||
var BufferReader = bitcore.BufferReader;
|
var BufferReader = bitcore.encoding.BufferReader;
|
||||||
var BN = bitcore.BN;
|
var BN = bitcore.crypto.BN;
|
||||||
|
|
||||||
describe('BufferReader', function() {
|
describe('BufferReader', function() {
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
var BufferWriter = bitcore.BufferWriter;
|
var BufferWriter = bitcore.encoding.BufferWriter;
|
||||||
var BufferReader = bitcore.BufferReader;
|
var BufferReader = bitcore.encoding.BufferReader;
|
||||||
var BN = bitcore.BN;
|
var BN = bitcore.crypto.BN;
|
||||||
|
|
||||||
describe('BufferWriter', function() {
|
describe('BufferWriter', function() {
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
|
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
var bitcore = require('../..');
|
var bitcore = require('../..');
|
||||||
var BN = bitcore.BN;
|
var BN = bitcore.crypto.BN;
|
||||||
var BufferReader = bitcore.BufferReader;
|
var BufferReader = bitcore.encoding.BufferReader;
|
||||||
var BufferWriter = bitcore.BufferWriter;
|
var BufferWriter = bitcore.encoding.BufferWriter;
|
||||||
var Varint = bitcore.Varint;
|
var Varint = bitcore.encoding.Varint;
|
||||||
|
|
||||||
describe('Varint', function() {
|
describe('Varint', function() {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue