transition ECPair to properties over getters
This commit is contained in:
parent
fba0699dd3
commit
2fe220517f
10 changed files with 47 additions and 51 deletions
|
@ -24,18 +24,15 @@ function ECPair (d, Q, options) {
|
||||||
if (Q) this.__Q = ecc.pointCompress(Q, this.compressed)
|
if (Q) this.__Q = ecc.pointCompress(Q, this.compressed)
|
||||||
}
|
}
|
||||||
|
|
||||||
ECPair.prototype.getNetwork = function () {
|
Object.defineProperty(ECPair.prototype, 'privateKey', {
|
||||||
return this.network
|
enumerable: false,
|
||||||
}
|
get: function () { return this.__d }
|
||||||
|
})
|
||||||
|
|
||||||
ECPair.prototype.getPrivateKey = function () {
|
Object.defineProperty(ECPair.prototype, 'publicKey', { get: function () {
|
||||||
return this.__d
|
|
||||||
}
|
|
||||||
|
|
||||||
ECPair.prototype.getPublicKey = function () {
|
|
||||||
if (!this.__Q) this.__Q = ecc.pointFromScalar(this.__d, this.compressed)
|
if (!this.__Q) this.__Q = ecc.pointFromScalar(this.__d, this.compressed)
|
||||||
return this.__Q
|
return this.__Q
|
||||||
}
|
}})
|
||||||
|
|
||||||
ECPair.prototype.toWIF = function () {
|
ECPair.prototype.toWIF = function () {
|
||||||
if (!this.__d) throw new Error('Missing private key')
|
if (!this.__d) throw new Error('Missing private key')
|
||||||
|
@ -48,7 +45,7 @@ ECPair.prototype.sign = function (hash) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ECPair.prototype.verify = function (hash, signature) {
|
ECPair.prototype.verify = function (hash, signature) {
|
||||||
return ecc.verify(hash, this.getPublicKey(), signature)
|
return ecc.verify(hash, this.publicKey, signature)
|
||||||
}
|
}
|
||||||
|
|
||||||
function fromPrivateKey (buffer, options) {
|
function fromPrivateKey (buffer, options) {
|
||||||
|
|
|
@ -94,7 +94,7 @@ describe('Bitcoin-core', function () {
|
||||||
var keyPair = bitcoin.ECPair.fromWIF(string, network)
|
var keyPair = bitcoin.ECPair.fromWIF(string, network)
|
||||||
|
|
||||||
it('fromWIF imports ' + string, function () {
|
it('fromWIF imports ' + string, function () {
|
||||||
assert.strictEqual(keyPair.getPrivateKey().toString('hex'), hex)
|
assert.strictEqual(keyPair.privateKey.toString('hex'), hex)
|
||||||
assert.strictEqual(keyPair.compressed, params.isCompressed)
|
assert.strictEqual(keyPair.compressed, params.isCompressed)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ describe('ECPair', function () {
|
||||||
compressed: f.compressed
|
compressed: f.compressed
|
||||||
})
|
})
|
||||||
|
|
||||||
assert.strictEqual(keyPair.getPublicKey().toString('hex'), f.Q)
|
assert.strictEqual(keyPair.publicKey.toString('hex'), f.Q)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -85,7 +85,9 @@ describe('ECPair', function () {
|
||||||
|
|
||||||
it('calls pointFromScalar lazily', hoodwink(function () {
|
it('calls pointFromScalar lazily', hoodwink(function () {
|
||||||
assert.strictEqual(keyPair.__Q, null)
|
assert.strictEqual(keyPair.__Q, null)
|
||||||
keyPair.getPublicKey()
|
|
||||||
|
// .publicKey forces the memoization
|
||||||
|
assert.strictEqual(keyPair.publicKey.toString('hex'), '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')
|
||||||
assert.strictEqual(keyPair.__Q.toString('hex'), '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')
|
assert.strictEqual(keyPair.__Q.toString('hex'), '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')
|
||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
|
@ -96,7 +98,7 @@ describe('ECPair', function () {
|
||||||
let network = NETWORKS[f.network]
|
let network = NETWORKS[f.network]
|
||||||
let keyPair = ECPair.fromWIF(f.WIF, network)
|
let keyPair = ECPair.fromWIF(f.WIF, network)
|
||||||
|
|
||||||
assert.strictEqual(keyPair.getPrivateKey().toString('hex'), f.d)
|
assert.strictEqual(keyPair.privateKey.toString('hex'), f.d)
|
||||||
assert.strictEqual(keyPair.compressed, f.compressed)
|
assert.strictEqual(keyPair.compressed, f.compressed)
|
||||||
assert.strictEqual(keyPair.network, network)
|
assert.strictEqual(keyPair.network, network)
|
||||||
})
|
})
|
||||||
|
@ -106,7 +108,7 @@ describe('ECPair', function () {
|
||||||
it('imports ' + f.WIF + ' (via list of networks)', function () {
|
it('imports ' + f.WIF + ' (via list of networks)', function () {
|
||||||
let keyPair = ECPair.fromWIF(f.WIF, NETWORKS_LIST)
|
let keyPair = ECPair.fromWIF(f.WIF, NETWORKS_LIST)
|
||||||
|
|
||||||
assert.strictEqual(keyPair.getPrivateKey().toString('hex'), f.d)
|
assert.strictEqual(keyPair.privateKey.toString('hex'), f.d)
|
||||||
assert.strictEqual(keyPair.compressed, f.compressed)
|
assert.strictEqual(keyPair.compressed, f.compressed)
|
||||||
assert.strictEqual(keyPair.network, NETWORKS[f.network])
|
assert.strictEqual(keyPair.network, NETWORKS[f.network])
|
||||||
})
|
})
|
||||||
|
@ -202,13 +204,13 @@ describe('ECPair', function () {
|
||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('getNetwork', function () {
|
describe('.network', function () {
|
||||||
fixtures.valid.forEach(function (f) {
|
fixtures.valid.forEach(function (f) {
|
||||||
it('returns ' + f.network + ' for ' + f.WIF, function () {
|
it('returns ' + f.network + ' for ' + f.WIF, function () {
|
||||||
let network = NETWORKS[f.network]
|
let network = NETWORKS[f.network]
|
||||||
let keyPair = ECPair.fromWIF(f.WIF, NETWORKS_LIST)
|
let keyPair = ECPair.fromWIF(f.WIF, NETWORKS_LIST)
|
||||||
|
|
||||||
assert.strictEqual(keyPair.getNetwork(), network)
|
assert.strictEqual(keyPair.network, network)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -226,7 +228,7 @@ describe('ECPair', function () {
|
||||||
it('wraps tinysecp.sign', hoodwink(function () {
|
it('wraps tinysecp.sign', hoodwink(function () {
|
||||||
this.mock(tinysecp, 'sign', function (h, d) {
|
this.mock(tinysecp, 'sign', function (h, d) {
|
||||||
assert.strictEqual(h, hash)
|
assert.strictEqual(h, hash)
|
||||||
assert.strictEqual(d, keyPair.getPrivateKey())
|
assert.strictEqual(d, keyPair.privateKey)
|
||||||
return signature
|
return signature
|
||||||
}, 1)
|
}, 1)
|
||||||
|
|
||||||
|
@ -246,7 +248,7 @@ describe('ECPair', function () {
|
||||||
it('wraps tinysecp.verify', hoodwink(function () {
|
it('wraps tinysecp.verify', hoodwink(function () {
|
||||||
this.mock(tinysecp, 'verify', function (h, q, s) {
|
this.mock(tinysecp, 'verify', function (h, q, s) {
|
||||||
assert.strictEqual(h, hash)
|
assert.strictEqual(h, hash)
|
||||||
assert.strictEqual(q, keyPair.getPublicKey())
|
assert.strictEqual(q, keyPair.publicKey)
|
||||||
assert.strictEqual(s, signature)
|
assert.strictEqual(s, signature)
|
||||||
return true
|
return true
|
||||||
}, 1)
|
}, 1)
|
||||||
|
|
|
@ -72,7 +72,7 @@ let baddress = bitcoin.address
|
||||||
let bcrypto = bitcoin.crypto
|
let bcrypto = bitcoin.crypto
|
||||||
function getAddress (node, network) {
|
function getAddress (node, network) {
|
||||||
network = network || bitcoin.networks.bitcoin
|
network = network || bitcoin.networks.bitcoin
|
||||||
return baddress.toBase58Check(bcrypto.hash160(node.getPublicKey()), network.pubKeyHash)
|
return baddress.toBase58Check(bcrypto.hash160(node.publicKey), network.pubKeyHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
function randomAddress () {
|
function randomAddress () {
|
||||||
|
|
|
@ -12,7 +12,7 @@ let baddress = bitcoin.address
|
||||||
let bcrypto = bitcoin.crypto
|
let bcrypto = bitcoin.crypto
|
||||||
function getAddress (node, network) {
|
function getAddress (node, network) {
|
||||||
network = network || bitcoin.networks.bitcoin
|
network = network || bitcoin.networks.bitcoin
|
||||||
return baddress.toBase58Check(bcrypto.hash160(node.getPublicKey()), network.pubKeyHash)
|
return baddress.toBase58Check(bcrypto.hash160(node.publicKey), network.pubKeyHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('bitcoinjs-lib (addresses)', function () {
|
describe('bitcoinjs-lib (addresses)', function () {
|
||||||
|
@ -57,9 +57,8 @@ describe('bitcoinjs-lib (addresses)', function () {
|
||||||
|
|
||||||
it('can generate a SegWit address', function () {
|
it('can generate a SegWit address', function () {
|
||||||
var keyPair = bitcoin.ECPair.fromWIF('Kxr9tQED9H44gCmp6HAdmemAzU3n84H3dGkuWTKvE23JgHMW8gct')
|
var keyPair = bitcoin.ECPair.fromWIF('Kxr9tQED9H44gCmp6HAdmemAzU3n84H3dGkuWTKvE23JgHMW8gct')
|
||||||
var pubKey = keyPair.getPublicKey()
|
|
||||||
|
|
||||||
var scriptPubKey = bitcoin.script.witnessPubKeyHash.output.encode(bitcoin.crypto.hash160(pubKey))
|
var scriptPubKey = bitcoin.script.witnessPubKeyHash.output.encode(bitcoin.crypto.hash160(keyPair.publicKey))
|
||||||
var address = bitcoin.address.fromOutputScript(scriptPubKey)
|
var address = bitcoin.address.fromOutputScript(scriptPubKey)
|
||||||
|
|
||||||
assert.strictEqual(address, 'bc1qt97wqg464zrhnx23upykca5annqvwkwujjglky')
|
assert.strictEqual(address, 'bc1qt97wqg464zrhnx23upykca5annqvwkwujjglky')
|
||||||
|
@ -67,9 +66,8 @@ describe('bitcoinjs-lib (addresses)', function () {
|
||||||
|
|
||||||
it('can generate a SegWit address (via P2SH)', function () {
|
it('can generate a SegWit address (via P2SH)', function () {
|
||||||
var keyPair = bitcoin.ECPair.fromWIF('Kxr9tQED9H44gCmp6HAdmemAzU3n84H3dGkuWTKvE23JgHMW8gct')
|
var keyPair = bitcoin.ECPair.fromWIF('Kxr9tQED9H44gCmp6HAdmemAzU3n84H3dGkuWTKvE23JgHMW8gct')
|
||||||
var pubKey = keyPair.getPublicKey()
|
|
||||||
|
|
||||||
var redeemScript = bitcoin.script.witnessPubKeyHash.output.encode(bitcoin.crypto.hash160(pubKey))
|
var redeemScript = bitcoin.script.witnessPubKeyHash.output.encode(bitcoin.crypto.hash160(keyPair.publicKey))
|
||||||
var scriptPubKey = bitcoin.script.scriptHash.output.encode(bitcoin.crypto.hash160(redeemScript))
|
var scriptPubKey = bitcoin.script.scriptHash.output.encode(bitcoin.crypto.hash160(redeemScript))
|
||||||
var address = bitcoin.address.fromOutputScript(scriptPubKey)
|
var address = bitcoin.address.fromOutputScript(scriptPubKey)
|
||||||
|
|
||||||
|
|
|
@ -25,11 +25,11 @@ describe('bitcoinjs-lib (transactions w/ CLTV)', function () {
|
||||||
bitcoin.opcodes.OP_DROP,
|
bitcoin.opcodes.OP_DROP,
|
||||||
|
|
||||||
bitcoin.opcodes.OP_ELSE,
|
bitcoin.opcodes.OP_ELSE,
|
||||||
bQ.getPublicKey(),
|
bQ.publicKey,
|
||||||
bitcoin.opcodes.OP_CHECKSIGVERIFY,
|
bitcoin.opcodes.OP_CHECKSIGVERIFY,
|
||||||
bitcoin.opcodes.OP_ENDIF,
|
bitcoin.opcodes.OP_ENDIF,
|
||||||
|
|
||||||
aQ.getPublicKey(),
|
aQ.publicKey,
|
||||||
bitcoin.opcodes.OP_CHECKSIG
|
bitcoin.opcodes.OP_CHECKSIG
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,11 +26,11 @@ describe('bitcoinjs-lib (transactions w/ CSV)', function () {
|
||||||
bitcoin.opcodes.OP_DROP,
|
bitcoin.opcodes.OP_DROP,
|
||||||
|
|
||||||
bitcoin.opcodes.OP_ELSE,
|
bitcoin.opcodes.OP_ELSE,
|
||||||
bQ.getPublicKey(),
|
bQ.publicKey,
|
||||||
bitcoin.opcodes.OP_CHECKSIGVERIFY,
|
bitcoin.opcodes.OP_CHECKSIGVERIFY,
|
||||||
bitcoin.opcodes.OP_ENDIF,
|
bitcoin.opcodes.OP_ENDIF,
|
||||||
|
|
||||||
aQ.getPublicKey(),
|
aQ.publicKey,
|
||||||
bitcoin.opcodes.OP_CHECKSIG
|
bitcoin.opcodes.OP_CHECKSIG
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ let ecc = require('tiny-secp256k1')
|
||||||
let baddress = bitcoin.address
|
let baddress = bitcoin.address
|
||||||
let bcrypto = bitcoin.crypto
|
let bcrypto = bitcoin.crypto
|
||||||
function getAddress (node) {
|
function getAddress (node) {
|
||||||
return baddress.toBase58Check(bcrypto.hash160(node.getPublicKey()), bitcoin.networks.bitcoin.pubKeyHash)
|
return baddress.toBase58Check(bcrypto.hash160(node.publicKey), bitcoin.networks.bitcoin.pubKeyHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
// vG = (dG \+ sha256(e * dG)G)
|
// vG = (dG \+ sha256(e * dG)G)
|
||||||
|
@ -78,12 +78,12 @@ describe('bitcoinjs-lib (crypto)', function () {
|
||||||
var nonce = bitcoin.ECPair.fromWIF('KxVqB96pxbw1pokzQrZkQbLfVBjjHFfp2mFfEp8wuEyGenLFJhM9') // private to sender
|
var nonce = bitcoin.ECPair.fromWIF('KxVqB96pxbw1pokzQrZkQbLfVBjjHFfp2mFfEp8wuEyGenLFJhM9') // private to sender
|
||||||
|
|
||||||
// ... recipient reveals public key (recipient.Q) to sender
|
// ... recipient reveals public key (recipient.Q) to sender
|
||||||
var forSender = stealthSend(nonce.getPrivateKey(), recipient.getPublicKey())
|
var forSender = stealthSend(nonce.privateKey, recipient.publicKey)
|
||||||
assert.equal(getAddress(forSender), '1CcZWwCpACJL3AxqoDbwEt4JgDFuTHUspE')
|
assert.equal(getAddress(forSender), '1CcZWwCpACJL3AxqoDbwEt4JgDFuTHUspE')
|
||||||
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
||||||
|
|
||||||
// ... sender reveals nonce public key (nonce.Q) to recipient
|
// ... sender reveals nonce public key (nonce.Q) to recipient
|
||||||
var forRecipient = stealthReceive(recipient.getPrivateKey(), nonce.getPublicKey())
|
var forRecipient = stealthReceive(recipient.privateKey, nonce.publicKey)
|
||||||
assert.equal(getAddress(forRecipient), '1CcZWwCpACJL3AxqoDbwEt4JgDFuTHUspE')
|
assert.equal(getAddress(forRecipient), '1CcZWwCpACJL3AxqoDbwEt4JgDFuTHUspE')
|
||||||
assert.equal(forRecipient.toWIF(), 'L1yjUN3oYyCXV3LcsBrmxCNTa62bZKWCybxVJMvqjMmmfDE8yk7n')
|
assert.equal(forRecipient.toWIF(), 'L1yjUN3oYyCXV3LcsBrmxCNTa62bZKWCybxVJMvqjMmmfDE8yk7n')
|
||||||
|
|
||||||
|
@ -96,11 +96,11 @@ describe('bitcoinjs-lib (crypto)', function () {
|
||||||
var nonce = bitcoin.ECPair.makeRandom() // private to sender
|
var nonce = bitcoin.ECPair.makeRandom() // private to sender
|
||||||
|
|
||||||
// ... recipient reveals public key (recipient.Q) to sender
|
// ... recipient reveals public key (recipient.Q) to sender
|
||||||
var forSender = stealthSend(nonce.getPrivateKey(), recipient.getPublicKey())
|
var forSender = stealthSend(nonce.privateKey, recipient.publicKey)
|
||||||
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
||||||
|
|
||||||
// ... sender reveals nonce public key (nonce.Q) to recipient
|
// ... sender reveals nonce public key (nonce.Q) to recipient
|
||||||
var forRecipient = stealthReceive(recipient.getPrivateKey(), nonce.getPublicKey())
|
var forRecipient = stealthReceive(recipient.privateKey, nonce.publicKey)
|
||||||
assert.doesNotThrow(function () { forRecipient.toWIF() })
|
assert.doesNotThrow(function () { forRecipient.toWIF() })
|
||||||
|
|
||||||
// sender and recipient, both derived same address
|
// sender and recipient, both derived same address
|
||||||
|
@ -112,15 +112,15 @@ describe('bitcoinjs-lib (crypto)', function () {
|
||||||
var nonce = bitcoin.ECPair.makeRandom() // private to sender
|
var nonce = bitcoin.ECPair.makeRandom() // private to sender
|
||||||
|
|
||||||
// ... recipient reveals public key (recipient.Q) to sender
|
// ... recipient reveals public key (recipient.Q) to sender
|
||||||
var forSender = stealthSend(nonce.getPrivateKey(), recipient.getPublicKey())
|
var forSender = stealthSend(nonce.privateKey, recipient.publicKey)
|
||||||
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
||||||
|
|
||||||
// ... sender reveals nonce public key (nonce.Q) to recipient
|
// ... sender reveals nonce public key (nonce.Q) to recipient
|
||||||
var forRecipient = stealthReceive(recipient.getPrivateKey(), nonce.getPublicKey())
|
var forRecipient = stealthReceive(recipient.privateKey, nonce.publicKey)
|
||||||
assert.doesNotThrow(function () { forRecipient.toWIF() })
|
assert.doesNotThrow(function () { forRecipient.toWIF() })
|
||||||
|
|
||||||
// ... recipient accidentally leaks forRecipient.d on the blockchain
|
// ... recipient accidentally leaks forRecipient.d on the blockchain
|
||||||
var leaked = stealthRecoverLeaked(forRecipient.getPrivateKey(), nonce.getPrivateKey(), recipient.getPublicKey())
|
var leaked = stealthRecoverLeaked(forRecipient.privateKey, nonce.privateKey, recipient.publicKey)
|
||||||
assert.equal(leaked.toWIF(), recipient.toWIF())
|
assert.equal(leaked.toWIF(), recipient.toWIF())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -131,15 +131,15 @@ describe('bitcoinjs-lib (crypto)', function () {
|
||||||
var nonce = bitcoin.ECPair.fromWIF('KxVqB96pxbw1pokzQrZkQbLfVBjjHFfp2mFfEp8wuEyGenLFJhM9') // private to sender
|
var nonce = bitcoin.ECPair.fromWIF('KxVqB96pxbw1pokzQrZkQbLfVBjjHFfp2mFfEp8wuEyGenLFJhM9') // private to sender
|
||||||
|
|
||||||
// ... recipient reveals public key(s) (recipient.Q, scan.Q) to sender
|
// ... recipient reveals public key(s) (recipient.Q, scan.Q) to sender
|
||||||
var forSender = stealthDualSend(nonce.getPrivateKey(), recipient.getPublicKey(), scan.getPublicKey())
|
var forSender = stealthDualSend(nonce.privateKey, recipient.publicKey, scan.publicKey)
|
||||||
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
||||||
|
|
||||||
// ... sender reveals nonce public key (nonce.Q) to scanner
|
// ... sender reveals nonce public key (nonce.Q) to scanner
|
||||||
var forScanner = stealthDualScan(scan.getPrivateKey(), recipient.getPublicKey(), nonce.getPublicKey())
|
var forScanner = stealthDualScan(scan.privateKey, recipient.publicKey, nonce.publicKey)
|
||||||
assert.throws(function () { forScanner.toWIF() }, /Error: Missing private key/)
|
assert.throws(function () { forScanner.toWIF() }, /Error: Missing private key/)
|
||||||
|
|
||||||
// ... scanner reveals relevant transaction + nonce public key (nonce.Q) to recipient
|
// ... scanner reveals relevant transaction + nonce public key (nonce.Q) to recipient
|
||||||
var forRecipient = stealthDualReceive(scan.getPrivateKey(), recipient.getPrivateKey(), nonce.getPublicKey())
|
var forRecipient = stealthDualReceive(scan.privateKey, recipient.privateKey, nonce.publicKey)
|
||||||
assert.doesNotThrow(function () { forRecipient.toWIF() })
|
assert.doesNotThrow(function () { forRecipient.toWIF() })
|
||||||
|
|
||||||
// scanner, sender and recipient, all derived same address
|
// scanner, sender and recipient, all derived same address
|
||||||
|
@ -153,15 +153,15 @@ describe('bitcoinjs-lib (crypto)', function () {
|
||||||
var nonce = bitcoin.ECPair.makeRandom() // private to sender
|
var nonce = bitcoin.ECPair.makeRandom() // private to sender
|
||||||
|
|
||||||
// ... recipient reveals public key(s) (recipient.Q, scan.Q) to sender
|
// ... recipient reveals public key(s) (recipient.Q, scan.Q) to sender
|
||||||
var forSender = stealthDualSend(nonce.getPrivateKey(), recipient.getPublicKey(), scan.getPublicKey())
|
var forSender = stealthDualSend(nonce.privateKey, recipient.publicKey, scan.publicKey)
|
||||||
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
assert.throws(function () { forSender.toWIF() }, /Error: Missing private key/)
|
||||||
|
|
||||||
// ... sender reveals nonce public key (nonce.Q) to scanner
|
// ... sender reveals nonce public key (nonce.Q) to scanner
|
||||||
var forScanner = stealthDualScan(scan.getPrivateKey(), recipient.getPublicKey(), nonce.getPublicKey())
|
var forScanner = stealthDualScan(scan.privateKey, recipient.publicKey, nonce.publicKey)
|
||||||
assert.throws(function () { forScanner.toWIF() }, /Error: Missing private key/)
|
assert.throws(function () { forScanner.toWIF() }, /Error: Missing private key/)
|
||||||
|
|
||||||
// ... scanner reveals relevant transaction + nonce public key (nonce.Q) to recipient
|
// ... scanner reveals relevant transaction + nonce public key (nonce.Q) to recipient
|
||||||
var forRecipient = stealthDualReceive(scan.getPrivateKey(), recipient.getPrivateKey(), nonce.getPublicKey())
|
var forRecipient = stealthDualReceive(scan.privateKey, recipient.privateKey, nonce.publicKey)
|
||||||
assert.doesNotThrow(function () { forRecipient.toWIF() })
|
assert.doesNotThrow(function () { forRecipient.toWIF() })
|
||||||
|
|
||||||
// scanner, sender and recipient, all derived same address
|
// scanner, sender and recipient, all derived same address
|
||||||
|
|
|
@ -10,7 +10,7 @@ let baddress = bitcoin.address
|
||||||
let bcrypto = bitcoin.crypto
|
let bcrypto = bitcoin.crypto
|
||||||
function getAddress (node, network) {
|
function getAddress (node, network) {
|
||||||
network = network || bitcoin.networks.bitcoin
|
network = network || bitcoin.networks.bitcoin
|
||||||
return baddress.toBase58Check(bcrypto.hash160(node.getPublicKey()), network.pubKeyHash)
|
return baddress.toBase58Check(bcrypto.hash160(node.publicKey), network.pubKeyHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
function rng () {
|
function rng () {
|
||||||
|
@ -115,7 +115,7 @@ describe('bitcoinjs-lib (transactions)', function () {
|
||||||
'91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgx3cTMqe',
|
'91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgx3cTMqe',
|
||||||
'91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgx9rcrL7'
|
'91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgx9rcrL7'
|
||||||
].map(function (wif) { return bitcoin.ECPair.fromWIF(wif, regtest) })
|
].map(function (wif) { return bitcoin.ECPair.fromWIF(wif, regtest) })
|
||||||
var pubKeys = keyPairs.map(function (x) { return x.getPublicKey() })
|
var pubKeys = keyPairs.map(function (x) { return x.publicKey })
|
||||||
|
|
||||||
var redeemScript = bitcoin.script.multisig.output.encode(2, pubKeys)
|
var redeemScript = bitcoin.script.multisig.output.encode(2, pubKeys)
|
||||||
var scriptPubKey = bitcoin.script.scriptHash.output.encode(bitcoin.crypto.hash160(redeemScript))
|
var scriptPubKey = bitcoin.script.scriptHash.output.encode(bitcoin.crypto.hash160(redeemScript))
|
||||||
|
@ -150,8 +150,7 @@ describe('bitcoinjs-lib (transactions)', function () {
|
||||||
this.timeout(30000)
|
this.timeout(30000)
|
||||||
|
|
||||||
var keyPair = bitcoin.ECPair.fromWIF('cMahea7zqjxrtgAbB7LSGbcQUr1uX1ojuat9jZodMN87JcbXMTcA', regtest)
|
var keyPair = bitcoin.ECPair.fromWIF('cMahea7zqjxrtgAbB7LSGbcQUr1uX1ojuat9jZodMN87JcbXMTcA', regtest)
|
||||||
var pubKey = keyPair.getPublicKey()
|
var pubKeyHash = bitcoin.crypto.hash160(keyPair.publicKey)
|
||||||
var pubKeyHash = bitcoin.crypto.hash160(pubKey)
|
|
||||||
|
|
||||||
var redeemScript = bitcoin.script.witnessPubKeyHash.output.encode(pubKeyHash)
|
var redeemScript = bitcoin.script.witnessPubKeyHash.output.encode(pubKeyHash)
|
||||||
var redeemScriptHash = bitcoin.crypto.hash160(redeemScript)
|
var redeemScriptHash = bitcoin.crypto.hash160(redeemScript)
|
||||||
|
@ -191,7 +190,7 @@ describe('bitcoinjs-lib (transactions)', function () {
|
||||||
'cMahea7zqjxrtgAbB7LSGbcQUr1uX1ojuat9jZodMN87KcLPVfXz',
|
'cMahea7zqjxrtgAbB7LSGbcQUr1uX1ojuat9jZodMN87KcLPVfXz',
|
||||||
'cMahea7zqjxrtgAbB7LSGbcQUr1uX1ojuat9jZodMN87L7FgDCKE'
|
'cMahea7zqjxrtgAbB7LSGbcQUr1uX1ojuat9jZodMN87L7FgDCKE'
|
||||||
].map(function (wif) { return bitcoin.ECPair.fromWIF(wif, regtest) })
|
].map(function (wif) { return bitcoin.ECPair.fromWIF(wif, regtest) })
|
||||||
var pubKeys = keyPairs.map(function (x) { return x.getPublicKey() })
|
var pubKeys = keyPairs.map(function (x) { return x.publicKey })
|
||||||
|
|
||||||
var witnessScript = bitcoin.script.multisig.output.encode(3, pubKeys)
|
var witnessScript = bitcoin.script.multisig.output.encode(3, pubKeys)
|
||||||
var redeemScript = bitcoin.script.witnessScriptHash.output.encode(bitcoin.crypto.sha256(witnessScript))
|
var redeemScript = bitcoin.script.witnessScriptHash.output.encode(bitcoin.crypto.sha256(witnessScript))
|
||||||
|
@ -230,7 +229,7 @@ describe('bitcoinjs-lib (transactions)', function () {
|
||||||
'032b4c06c06c3ec0b7fa29519dfa5aae193ee2cc35ca127f29f14ec605d62fb63d',
|
'032b4c06c06c3ec0b7fa29519dfa5aae193ee2cc35ca127f29f14ec605d62fb63d',
|
||||||
'0216c92abe433106491bdeb4a261226f20f5a4ac86220cc6e37655aac6bf3c1f2a',
|
'0216c92abe433106491bdeb4a261226f20f5a4ac86220cc6e37655aac6bf3c1f2a',
|
||||||
'039e05da8b8ea4f9868ecebb25998c7701542986233f4401799551fbecf316b18f'
|
'039e05da8b8ea4f9868ecebb25998c7701542986233f4401799551fbecf316b18f'
|
||||||
].map(function (q) { return bitcoin.ECPair.fromPublicKeyBuffer(Buffer.from(q, 'hex')) })
|
].map(function (q) { return bitcoin.ECPair.fromPublicKey(Buffer.from(q, 'hex')) })
|
||||||
|
|
||||||
var tx = bitcoin.Transaction.fromHex(txHex)
|
var tx = bitcoin.Transaction.fromHex(txHex)
|
||||||
|
|
||||||
|
@ -241,7 +240,7 @@ describe('bitcoinjs-lib (transactions)', function () {
|
||||||
var ss = bitcoin.script.signature.decode(scriptSig.signature)
|
var ss = bitcoin.script.signature.decode(scriptSig.signature)
|
||||||
var hash = tx.hashForSignature(i, prevOutScript, ss.hashType)
|
var hash = tx.hashForSignature(i, prevOutScript, ss.hashType)
|
||||||
|
|
||||||
assert.strictEqual(scriptSig.pubKey.toString('hex'), keyPair.getPublicKey().toString('hex'))
|
assert.strictEqual(scriptSig.pubKey.toString('hex'), keyPair.publicKey.toString('hex'))
|
||||||
assert.strictEqual(keyPair.verify(hash, ss.signature), true)
|
assert.strictEqual(keyPair.verify(hash, ss.signature), true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -16,7 +16,7 @@ let fixtures = require('./fixtures/transaction_builder')
|
||||||
|
|
||||||
// TODO: remove
|
// TODO: remove
|
||||||
function getAddress (node) {
|
function getAddress (node) {
|
||||||
return baddress.toBase58Check(bcrypto.hash160(node.getPublicKey()), NETWORKS.bitcoin.pubKeyHash)
|
return baddress.toBase58Check(bcrypto.hash160(node.publicKey), NETWORKS.bitcoin.pubKeyHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
function construct (f, dontSign) {
|
function construct (f, dontSign) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue