diff --git a/test/integration/advanced.js b/test/integration/advanced.js index be6af1f..a6479f3 100644 --- a/test/integration/advanced.js +++ b/test/integration/advanced.js @@ -1,5 +1,4 @@ var assert = require('assert') -var bigi = require('bigi') var bitcoin = require('../../') var helloblock = require('helloblock-js')({ network: 'testnet' @@ -22,41 +21,6 @@ describe('bitcoinjs-lib (advanced)', function() { assert(bitcoin.Message.verify(address, signature, message)) }) - it('can generate a single-key stealth address', function() { - var receiver = bitcoin.ECKey.fromWIF('5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss') - - // XXX: ephemeral, must be random (and secret to sender) to preserve privacy - var sender = bitcoin.ECKey.fromWIF('Kxr9tQED9H44gCmp6HAdmemAzU3n84H3dGkuWTKvE23JgHMW8gct') - - var G = bitcoin.ECKey.curve.G - var d = receiver.d // secret (receiver only) - var Q = receiver.pub.Q // shared - - var e = sender.d // secret (sender only) - var P = sender.pub.Q // shared - - // derived shared secret - var eQ = Q.multiply(e) // sender - var dP = P.multiply(d) // receiver - assert.deepEqual(eQ.getEncoded(), dP.getEncoded()) - - var c = bigi.fromBuffer(bitcoin.crypto.sha256(eQ.getEncoded())) - var cG = G.multiply(c) - - // derived public key - var QprimeS = Q.add(cG) - var QprimeR = G.multiply(d.add(c)) - assert.deepEqual(QprimeR.getEncoded(), QprimeS.getEncoded()) - - // derived shared-secret address - var address = new bitcoin.ECPubKey(QprimeS).getAddress().toString() - - assert.equal(address, '1EwCNJNZM5q58YPPTnjR1H5BvYRNeyZi47') - }) - - // TODO - it.skip('can generate a dual-key stealth address', function() {}) - it('can create an OP_RETURN transaction', function(done) { this.timeout(20000) diff --git a/test/integration/crypto.js b/test/integration/crypto.js index 38389b7..7d53602 100644 --- a/test/integration/crypto.js +++ b/test/integration/crypto.js @@ -4,6 +4,41 @@ var bitcoin = require('../../') var crypto = require('crypto') describe('bitcoinjs-lib (crypto)', function() { + it('can generate a single-key stealth address', function() { + var receiver = bitcoin.ECKey.fromWIF('5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss') + + // XXX: ephemeral, must be random (and secret to sender) to preserve privacy + var sender = bitcoin.ECKey.fromWIF('Kxr9tQED9H44gCmp6HAdmemAzU3n84H3dGkuWTKvE23JgHMW8gct') + + var G = bitcoin.ECKey.curve.G + var d = receiver.d // secret (receiver only) + var Q = receiver.pub.Q // shared + + var e = sender.d // secret (sender only) + var P = sender.pub.Q // shared + + // derived shared secret + var eQ = Q.multiply(e) // sender + var dP = P.multiply(d) // receiver + assert.deepEqual(eQ.getEncoded(), dP.getEncoded()) + + var c = bigi.fromBuffer(bitcoin.crypto.sha256(eQ.getEncoded())) + var cG = G.multiply(c) + + // derived public key + var QprimeS = Q.add(cG) + var QprimeR = G.multiply(d.add(c)) + assert.deepEqual(QprimeR.getEncoded(), QprimeS.getEncoded()) + + // derived shared-secret address + var address = new bitcoin.ECPubKey(QprimeS).getAddress().toString() + + assert.equal(address, '1EwCNJNZM5q58YPPTnjR1H5BvYRNeyZi47') + }) + + // TODO + it.skip('can generate a dual-key stealth address', function() {}) + it('can recover a parent private key from the parent\'s public key and a derived non-hardened child private key', function() { function recoverParent(master, child) { assert(!master.privKey, 'You already have the parent private key')