From 8c4301cb0a778dde39b51ac8222572ca11bafeba Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Tue, 25 Nov 2014 14:20:43 -0500 Subject: [PATCH] Tests: Updated tests to run from sub-directories and fixed crypto and encoding related missing updates. --- browser/build | 2 +- lib/crypto/ecdsa.js | 40 ++++++++++++++++++++++------------ package.json | 4 ++-- test/crypto/bn.js | 2 +- test/crypto/ecdsa.js | 41 ++++++++++++++++------------------- test/crypto/hash.js | 2 +- test/crypto/point.js | 4 ++-- test/crypto/random.js | 2 +- test/encoding/base58.js | 2 +- test/encoding/base58check.js | 4 ++-- test/encoding/bufferreader.js | 6 ++--- test/encoding/bufferwriter.js | 6 ++--- test/encoding/varint.js | 8 +++---- 13 files changed, 66 insertions(+), 57 deletions(-) diff --git a/browser/build b/browser/build index fca4b1116..fc2d706ca 100755 --- a/browser/build +++ b/browser/build @@ -1,4 +1,4 @@ #!/bin/bash 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 diff --git a/lib/crypto/ecdsa.js b/lib/crypto/ecdsa.js index 886af0240..24ae00ce2 100644 --- a/lib/crypto/ecdsa.js +++ b/lib/crypto/ecdsa.js @@ -4,6 +4,7 @@ var BN = require('./bn'); var Point = require('./point'); var Random = require('./random'); var Pubkey = require('../pubkey'); +var Privkey = require('../privkey'); var Signature = require('../signature'); var ECDSA = function ECDSA(obj) { @@ -15,24 +16,29 @@ var ECDSA = function ECDSA(obj) { ECDSA.prototype.set = function(obj) { 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.k = obj.k || this.k; this.verified = obj.verified || this.verified; return this; }; +ECDSA.prototype.privkey2pubkey = function(){ + this.pubkey = Pubkey().fromPrivkey(this.privkey); +}; + ECDSA.prototype.calci = function() { for (var i = 0; i < 4; i++) { this.sig.i = i; + var Qprime; try { - var Qprime = this.sig2pubkey(); + Qprime = this.sig2pubkey(); } catch (e) { continue; } - - if (Qprime.point.eq(this.keypair.pubkey.point)) { - this.sig.compressed = this.keypair.pubkey.compressed; + if (Qprime.point.eq(this.pubkey.point)) { + this.sig.compressed = this.pubkey.compressed; return this; } } @@ -45,8 +51,10 @@ ECDSA.prototype.fromString = function(str) { var obj = JSON.parse(str); if (obj.hashbuf) this.hashbuf = new Buffer(obj.hashbuf, 'hex'); - if (obj.keypair) - this.keypair = Keypair().fromString(obj.keypair); + if (obj.pubkey) + this.pubkey = Pubkey().fromString(obj.pubkey); + if (obj.privkey) + this.privkey = Privkey().fromString(obj.privkey); if (obj.sig) this.sig = Signature().fromString(obj.sig); if (obj.k) @@ -118,7 +126,7 @@ ECDSA.prototype.sigError = function() { return 'hashbuf must be a 32 byte buffer'; try { - this.keypair.pubkey.validate(); + this.pubkey.validate(); } catch (e) { return 'Invalid pubkey: ' + e; } @@ -135,7 +143,7 @@ ECDSA.prototype.sigError = function() { var u1 = sinv.mul(e).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()) return 'p is infinity'; @@ -147,7 +155,7 @@ ECDSA.prototype.sigError = function() { ECDSA.prototype.sign = function() { var hashbuf = this.hashbuf; - var privkey = this.keypair.privkey; + var privkey = this.privkey; var k = this.k; 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); } 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; }; @@ -183,6 +191,10 @@ ECDSA.prototype.toString = function() { var obj = {}; if (this.hashbuf) 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) obj.keypair = this.keypair.toString(); if (this.sig) @@ -199,10 +211,10 @@ ECDSA.prototype.verify = function() { return false; }; -ECDSA.sign = function(hashbuf, keypair) { +ECDSA.sign = function(hashbuf, privkey) { return ECDSA().set({ hashbuf: hashbuf, - keypair: keypair + privkey: privkey }).signRandomK(); }; @@ -210,7 +222,7 @@ ECDSA.verify = function(hashbuf, sig, pubkey) { return ECDSA().set({ hashbuf: hashbuf, sig: sig, - keypair: Keypair().set({pubkey: pubkey}) + pubkey: pubkey }).verify(); }; diff --git a/package.json b/package.json index 2085ec451..0d0c91616 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "author": "BitPay ", "main": "index.js", "scripts": { - "test": "mocha --reporter spec", - "coverage": "istanbul cover _mocha" + "test": "mocha --recursive --reporter spec", + "coverage": "istanbul cover _mocha -- --recursive" }, "contributors": [ { diff --git a/test/crypto/bn.js b/test/crypto/bn.js index 7a72b5d27..298c8d4c5 100644 --- a/test/crypto/bn.js +++ b/test/crypto/bn.js @@ -2,7 +2,7 @@ var should = require('chai').should(); var bitcore = require('../..'); -var BN = bitcore.BN; +var BN = bitcore.crypto.BN; describe('BN', function() { it('should create a bn', function() { diff --git a/test/crypto/ecdsa.js b/test/crypto/ecdsa.js index f9436a30f..48d66da84 100644 --- a/test/crypto/ecdsa.js +++ b/test/crypto/ecdsa.js @@ -2,14 +2,13 @@ var should = require('chai').should(); var bitcore = require('../..'); -var ECDSA = bitcore.ECDSA; -var Hash = bitcore.Hash; -var Keypair = bitcore.Keypair; +var ECDSA = bitcore.crypto.ECDSA; +var Hash = bitcore.crypto.Hash; var Privkey = bitcore.Privkey; var Pubkey = bitcore.Pubkey; var Signature = bitcore.Signature; -var BN = bitcore.BN; -var point = bitcore.Point; +var BN = bitcore.crypto.BN; +var point = bitcore.crypto.Point; describe('ECDSA', function() { @@ -20,9 +19,8 @@ describe('ECDSA', function() { var ecdsa = new ECDSA(); ecdsa.hashbuf = Hash.sha256(new Buffer('test data')); - ecdsa.keypair = new Keypair(); - ecdsa.keypair.privkey = new Privkey({bn: BN().fromBuffer(new Buffer('fee0a1f7afebf9d2a5a80c0c98a31c709681cce195cbcd06342b517970c0be1e', 'hex'))}); - ecdsa.keypair.pubkey = new Pubkey({ + ecdsa.privkey = new Privkey({bn: BN().fromBuffer(new Buffer('fee0a1f7afebf9d2a5a80c0c98a31c709681cce195cbcd06342b517970c0be1e', 'hex'))}); + ecdsa.pubkey = new Pubkey({ point: point(BN().fromBuffer(new Buffer('ac242d242d23be966085a2b2b893d989f824e06c9ad0395a8a52f055ba39abb2', 'hex')), BN().fromBuffer(new Buffer('4836ab292c105a711ed10fcfd30999c31ff7c02456147747e03e739ad527c380', 'hex'))) }); @@ -49,13 +47,11 @@ describe('ECDSA', function() { var r = BN('71706645040721865894779025947914615666559616020894583599959600180037551395766', 10); var s = BN('109412465507152403114191008482955798903072313614214706891149785278625167723646', 10); var ecdsa = new ECDSA(); - ecdsa.keypair = new Keypair(); - ecdsa.keypair.privkey = Privkey(); - ecdsa.keypair.privkey.bn = BN().fromBuffer(Hash.sha256(new Buffer('test'))); - ecdsa.keypair.privkey2pubkey(); + ecdsa.privkey = Privkey(); + ecdsa.privkey.bn = BN().fromBuffer(Hash.sha256(new Buffer('test'))); + ecdsa.privkey2pubkey(); ecdsa.hashbuf = hashbuf; ecdsa.sig = new Signature({r: r, s: s}); - ecdsa.calci(); ecdsa.sig.i.should.equal(1); }); @@ -69,7 +65,8 @@ describe('ECDSA', function() { var ecdsa2 = new ECDSA(); ecdsa2.fromString(str); 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.sig.i = 1; 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')); var pk = new Pubkey(); pk.fromDER(new Buffer('041ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a7baad41d04514751e6851f5304fd243751703bed21b914f6be218c0fa354a341', 'hex')); - ecdsa.keypair = new Keypair(); - ecdsa.keypair.pubkey = pk; + ecdsa.pubkey = pk; ecdsa.sig = new Signature(); ecdsa.sig.r = 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() { var ecdsa2 = ECDSA().set({ hashbuf: ecdsa.hashbuf.slice(0, 31), - keypair: ecdsa.keypair + pubkey: ecdsa.pubkey, + privkey: ecdsa.privkey }); ecdsa2.randomK(); (function() { @@ -197,7 +194,7 @@ describe('ECDSA', function() { describe('@sign', 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); }); @@ -206,10 +203,10 @@ describe('ECDSA', function() { describe('@verify', function() { it('should verify a valid signature, and unverify an invalid signature', function() { - var sig = ECDSA.sign(ecdsa.hashbuf, ecdsa.keypair); - ECDSA.verify(ecdsa.hashbuf, sig, ecdsa.keypair.pubkey).should.equal(true); + var sig = ECDSA.sign(ecdsa.hashbuf, ecdsa.privkey); + ECDSA.verify(ecdsa.hashbuf, sig, ecdsa.pubkey).should.equal(true); 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); }); }); diff --git a/test/crypto/hash.js b/test/crypto/hash.js index 816aa6b4f..34d0f99a6 100644 --- a/test/crypto/hash.js +++ b/test/crypto/hash.js @@ -2,7 +2,7 @@ require('chai').should(); var bitcore = require('../..'); -var Hash = bitcore.Hash; +var Hash = bitcore.crypto.Hash; describe('Hash', function() { var buf = new Buffer([0, 1, 2, 3, 253, 254, 255]); diff --git a/test/crypto/point.js b/test/crypto/point.js index b8d2406a0..43b5ed51b 100644 --- a/test/crypto/point.js +++ b/test/crypto/point.js @@ -2,8 +2,8 @@ var should = require('chai').should(); var bitcore = require('../..'); -var point = bitcore.Point; -var BN = bitcore.BN; +var point = bitcore.crypto.Point; +var BN = bitcore.crypto.BN; describe('Point', function() { diff --git a/test/crypto/random.js b/test/crypto/random.js index e92afcc98..1dc7eaf36 100644 --- a/test/crypto/random.js +++ b/test/crypto/random.js @@ -2,7 +2,7 @@ var should = require('chai').should(); var bitcore = require('../..'); -var Random = bitcore.Random; +var Random = bitcore.crypto.Random; describe('Random', function() { diff --git a/test/encoding/base58.js b/test/encoding/base58.js index a99a2c71e..adf7c831b 100644 --- a/test/encoding/base58.js +++ b/test/encoding/base58.js @@ -2,7 +2,7 @@ var should = require('chai').should(); var bitcore = require('../..'); -var Base58 = bitcore.Base58; +var Base58 = bitcore.encoding.Base58; describe('Base58', function() { var buf = new Buffer([0, 1, 2, 3, 253, 254, 255]); diff --git a/test/encoding/base58check.js b/test/encoding/base58check.js index 04dd21a6f..5f15a010b 100644 --- a/test/encoding/base58check.js +++ b/test/encoding/base58check.js @@ -2,8 +2,8 @@ var should = require('chai').should(); var bitcore = require('../..'); -var Base58Check = bitcore.Base58Check; -var base58 = bitcore.Base58; +var Base58Check = bitcore.encoding.Base58Check; +var base58 = bitcore.encoding.Base58; describe('Base58Check', function() { var buf = new Buffer([0, 1, 2, 3, 253, 254, 255]); diff --git a/test/encoding/bufferreader.js b/test/encoding/bufferreader.js index f92f59c29..8372c376e 100644 --- a/test/encoding/bufferreader.js +++ b/test/encoding/bufferreader.js @@ -2,9 +2,9 @@ var should = require('chai').should(); var bitcore = require('../..'); -var BufferWriter = bitcore.BufferWriter; -var BufferReader = bitcore.BufferReader; -var BN = bitcore.BN; +var BufferWriter = bitcore.encoding.BufferWriter; +var BufferReader = bitcore.encoding.BufferReader; +var BN = bitcore.crypto.BN; describe('BufferReader', function() { diff --git a/test/encoding/bufferwriter.js b/test/encoding/bufferwriter.js index e944a430b..bc5bcc990 100644 --- a/test/encoding/bufferwriter.js +++ b/test/encoding/bufferwriter.js @@ -2,9 +2,9 @@ var bitcore = require('../..'); var should = require('chai').should(); -var BufferWriter = bitcore.BufferWriter; -var BufferReader = bitcore.BufferReader; -var BN = bitcore.BN; +var BufferWriter = bitcore.encoding.BufferWriter; +var BufferReader = bitcore.encoding.BufferReader; +var BN = bitcore.crypto.BN; describe('BufferWriter', function() { diff --git a/test/encoding/varint.js b/test/encoding/varint.js index dd67a501a..9a8bb8440 100644 --- a/test/encoding/varint.js +++ b/test/encoding/varint.js @@ -2,10 +2,10 @@ var should = require('chai').should(); var bitcore = require('../..'); -var BN = bitcore.BN; -var BufferReader = bitcore.BufferReader; -var BufferWriter = bitcore.BufferWriter; -var Varint = bitcore.Varint; +var BN = bitcore.crypto.BN; +var BufferReader = bitcore.encoding.BufferReader; +var BufferWriter = bitcore.encoding.BufferWriter; +var Varint = bitcore.encoding.Varint; describe('Varint', function() {