From f2ecbeb90f0b1b4dd2e0af2a33d9e8eb1510dbfc Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Sat, 13 Aug 2016 11:42:53 +1000 Subject: [PATCH] tests/integration: separate crypto tests --- test/integration/crypto.js | 41 +------------------------------ test/integration/stealth.js | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 40 deletions(-) create mode 100644 test/integration/stealth.js diff --git a/test/integration/crypto.js b/test/integration/crypto.js index c3cb237..0644129 100644 --- a/test/integration/crypto.js +++ b/test/integration/crypto.js @@ -11,46 +11,7 @@ var ecurve = require('ecurve') var secp256k1 = ecurve.getCurveByName('secp256k1') describe('bitcoinjs-lib (crypto)', function () { - it('can generate a single-key stealth address', function () { - var G = secp256k1.G - var n = secp256k1.n - - function stealthSend (Q) { - var noncePair = bitcoin.ECPair.makeRandom() - var e = noncePair.d - var eQ = Q.multiply(e) // shared secret - var c = bigi.fromBuffer(bitcoin.crypto.sha256(eQ.getEncoded())) - var cG = G.multiply(c) - var Qprime = Q.add(cG) - - return { - shared: new bitcoin.ECPair(null, Qprime), - nonce: noncePair.Q - } - } - - function stealthReceive (d, P) { - var dP = P.multiply(d) // shared secret - var c = bigi.fromBuffer(bitcoin.crypto.sha256(dP.getEncoded())) - return new bitcoin.ECPair(d.add(c).mod(n)) - } - - // receiver private key - var receiver = bitcoin.ECPair.fromWIF('5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss') - - var stealthS = stealthSend(receiver.Q) // public, done by sender - // ... sender now reveals nonce to receiver - - var stealthR = stealthReceive(receiver.d, stealthS.nonce) // private, done by receiver - - // and check that we derived both sides correctly - assert.equal(stealthS.shared.getAddress(), stealthR.getAddress()) - }) - - // 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 () { + it('can recover a BIP32 parent private key from the parent public key, and a derived, non-hardened child private key', function () { function recoverParent (master, child) { assert(!master.keyPair.d, 'You already have the parent private key') assert(child.keyPair.d, 'Missing child private key') diff --git a/test/integration/stealth.js b/test/integration/stealth.js new file mode 100644 index 0000000..e7b27ad --- /dev/null +++ b/test/integration/stealth.js @@ -0,0 +1,49 @@ +/* global describe, it */ + +var assert = require('assert') +var bigi = require('bigi') +var bitcoin = require('../../') + +var ecurve = require('ecurve') +var secp256k1 = ecurve.getCurveByName('secp256k1') + +describe('bitcoinjs-lib (crypto)', function () { + it('can generate a single-key stealth address', function () { + var G = secp256k1.G + var n = secp256k1.n + + function stealthSend (Q) { + var noncePair = bitcoin.ECPair.makeRandom() + var e = noncePair.d + var eQ = Q.multiply(e) // shared secret + var c = bigi.fromBuffer(bitcoin.crypto.sha256(eQ.getEncoded())) + var cG = G.multiply(c) + var Qprime = Q.add(cG) + + return { + shared: new bitcoin.ECPair(null, Qprime), + nonce: noncePair.Q + } + } + + function stealthReceive (d, P) { + var dP = P.multiply(d) // shared secret + var c = bigi.fromBuffer(bitcoin.crypto.sha256(dP.getEncoded())) + return new bitcoin.ECPair(d.add(c).mod(n)) + } + + // receiver private key + var receiver = bitcoin.ECPair.fromWIF('5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss') + + var stealthS = stealthSend(receiver.Q) // public, done by sender + // ... sender now reveals nonce to receiver + + var stealthR = stealthReceive(receiver.d, stealthS.nonce) // private, done by receiver + + // and check that we derived both sides correctly + assert.equal(stealthS.shared.getAddress(), stealthR.getAddress()) + }) + + // TODO + it.skip('can generate a dual-key stealth address', function () {}) +})