Daniel Cousens
9 years ago
2 changed files with 50 additions and 40 deletions
@ -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 () {}) |
|||
}) |
Loading…
Reference in new issue