Migrates ECKey to stricter API
This commit is contained in:
parent
669444cb10
commit
b4f70dcdde
11 changed files with 213 additions and 261 deletions
|
@ -27,7 +27,7 @@ describe('ec', function() {
|
|||
|
||||
describe('decodeFrom', function() {
|
||||
it('decodes valid ECPoints', function() {
|
||||
var p1 = ECKey().getPub().toBytes()
|
||||
var p1 = ECKey.makeRandom(false).pub.toBuffer()
|
||||
assert.equal(p1.length, 65)
|
||||
|
||||
var p1_q = ECPointFp.decodeFrom(ecparams.getCurve(), p1)
|
||||
|
|
|
@ -25,17 +25,17 @@ describe('ecdsa', function() {
|
|||
|
||||
describe('sign/verify', function() {
|
||||
it('Signing and Verifying', function () {
|
||||
var s1 = new ECKey()
|
||||
var s1 = ECKey.makeRandom()
|
||||
var sig_a = s1.sign(BigInteger.ZERO)
|
||||
|
||||
assert.ok(sig_a, 'Sign null')
|
||||
assert.ok(s1.verify(BigInteger.ZERO, sig_a))
|
||||
assert.ok(s1.pub.verify(BigInteger.ZERO, sig_a))
|
||||
|
||||
var message = new BigInteger(1024, rng).toByteArrayUnsigned()
|
||||
var message = new Buffer(1024) // More or less random :P
|
||||
var hash = crypto.sha256(message)
|
||||
var sig_b = s1.sign(hash)
|
||||
assert.ok(sig_b, 'Sign random string')
|
||||
assert.ok(s1.verify(hash, sig_b))
|
||||
assert.ok(s1.pub.verify(hash, sig_b))
|
||||
|
||||
var message2 = new Buffer(
|
||||
'12dce2c169986b3346827ffb2305cf393984627f5f9722a1b1368e933c8d' +
|
||||
|
@ -60,7 +60,7 @@ describe('ecdsa', function() {
|
|||
})
|
||||
|
||||
it('should sign with low S value', function() {
|
||||
var priv = new ECKey('ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458')
|
||||
var priv = ECKey.fromHex('ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458')
|
||||
var message = 'Vires in numeris'
|
||||
var signature = priv.sign(message)
|
||||
var parsed = ecdsa.parseSig(signature)
|
||||
|
@ -69,7 +69,7 @@ describe('ecdsa', function() {
|
|||
// https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki#low-s-values-in-signatures
|
||||
assert.ok(parsed.s.compareTo(ecparams.getN().divide(BigInteger.valueOf(2))) <= 0)
|
||||
|
||||
assert.ok(priv.verify(message, signature))
|
||||
assert.ok(priv.pub.verify(message, signature))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
var assert = require('assert')
|
||||
var Address = require('../src/address.js')
|
||||
var ECKey = require('../src/eckey.js').ECKey
|
||||
var ECPubKey = require('../src/eckey.js').ECPubKey
|
||||
var convert = require('../src/convert.js')
|
||||
var bytesToHex = convert.bytesToHex
|
||||
var hexToBytes = convert.hexToBytes
|
||||
var Address = require('../src/address')
|
||||
var Network = require('../src/network')
|
||||
var testnet = Network.testnet.pubKeyHash
|
||||
|
@ -14,20 +13,10 @@ describe('ECKey', function() {
|
|||
var priv = '18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725'
|
||||
var pub = '0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b235' +
|
||||
'22cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6'
|
||||
var key = new ECKey(priv)
|
||||
var key = ECKey.fromHex(priv, false)
|
||||
|
||||
assert.equal(key.getPub().toHex(), pub)
|
||||
assert.equal(key.compressed, false)
|
||||
})
|
||||
|
||||
it('parses base64', function() {
|
||||
var priv = 'VYdB+iv47y5FaUVIPdQInkgATrABeuD1lACUoM4x7tU='
|
||||
var pub = '042f43c16c08849fed20a35bb7b1947bbf0923c52d613ee13b5c665a1e10d24b2' +
|
||||
'8be909a70f5f87c1adb79fbcd1b3f17d20aa91c04fc355112dba2ce9b1cbf013b'
|
||||
var key = new ECKey(priv)
|
||||
|
||||
assert.equal(key.getPub().toHex(), pub)
|
||||
assert.equal(key.compressed, false)
|
||||
assert.equal(key.pub.toHex(), pub)
|
||||
assert.equal(key.pub.compressed, false)
|
||||
})
|
||||
|
||||
it('parses WIF', function() {
|
||||
|
@ -35,32 +24,32 @@ describe('ECKey', function() {
|
|||
var pub = '044f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0' +
|
||||
'f0b704075871aa385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1'
|
||||
var addr = '1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a'
|
||||
var key = new ECKey(priv)
|
||||
var key = ECKey.fromWIF(priv)
|
||||
|
||||
assert.equal(key.compressed, false)
|
||||
assert.equal(key.getPub().toHex(), pub)
|
||||
assert.equal(key.getAddress().toString(), addr)
|
||||
assert.equal(key.pub.compressed, false)
|
||||
assert.equal(key.pub.toHex(), pub)
|
||||
assert.equal(key.pub.getAddress().toString(), addr)
|
||||
})
|
||||
|
||||
it('parses compressed WIF', function() {
|
||||
var priv = 'KwntMbt59tTsj8xqpqYqRRWufyjGunvhSyeMo3NTYpFYzZbXJ5Hp'
|
||||
var pub = '034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa'
|
||||
var addr = '1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9'
|
||||
var key = new ECKey(priv)
|
||||
var key = ECKey.fromWIF(priv)
|
||||
|
||||
assert.equal(key.compressed, true)
|
||||
assert.equal(key.getPub().toHex(), pub)
|
||||
assert.equal(key.getAddress().toString(), addr)
|
||||
assert.equal(key.pub.compressed, true)
|
||||
assert.equal(key.pub.toHex(), pub)
|
||||
assert.equal(key.pub.getAddress().toString(), addr)
|
||||
})
|
||||
|
||||
it('alternative constructor syntax', function() {
|
||||
var priv = 'ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458'
|
||||
var pub = '044b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea81199' +
|
||||
'283fbec990dad6fb98f93f712d50cb874dd717de6a184158d63886dda3090f566'
|
||||
var key = ECKey(priv, false)
|
||||
var key = ECKey.fromHex(priv, false)
|
||||
|
||||
assert.equal(key.getPub().toHex(), pub)
|
||||
assert.equal(key.compressed, false)
|
||||
assert.equal(key.pub.toHex(), pub)
|
||||
assert.equal(key.pub.compressed, false)
|
||||
assert.equal(key.toHex(), priv)
|
||||
})
|
||||
})
|
||||
|
@ -80,7 +69,9 @@ describe('ECKey', function() {
|
|||
]
|
||||
|
||||
var pubkeys = cpubkeys.map(function(x) {
|
||||
return ECPubKey(x).toHex(false)
|
||||
var pk = ECPubKey.fromHex(x)
|
||||
pk.compressed = false
|
||||
return pk.toHex()
|
||||
})
|
||||
|
||||
it('bitcoin', function() {
|
||||
|
@ -96,14 +87,13 @@ describe('ECKey', function() {
|
|||
]
|
||||
|
||||
for (var i = 0; i < addresses.length; ++i) {
|
||||
var priv = new ECKey(privkeys[i], false)
|
||||
var pub = new ECPubKey(pubkeys[i], false)
|
||||
var cpub = new ECPubKey(cpubkeys[i], true)
|
||||
var pub = ECPubKey.fromHex(pubkeys[i])
|
||||
var cpub = ECPubKey.fromHex(cpubkeys[i])
|
||||
cpub.compressed = true
|
||||
|
||||
var addr = addresses[i]
|
||||
var caddr = compressedAddresses[i]
|
||||
|
||||
assert.equal(priv.getAddress().toString(), addr)
|
||||
assert.equal(pub.getAddress().toString(), addr)
|
||||
assert.equal(cpub.getAddress().toString(), caddr)
|
||||
}
|
||||
|
@ -122,14 +112,13 @@ describe('ECKey', function() {
|
|||
]
|
||||
|
||||
for (var i = 0; i < addresses.length; ++i) {
|
||||
var priv = new ECKey(privkeys[i], false)
|
||||
var pub = new ECPubKey(pubkeys[i], false)
|
||||
var cpub = new ECPubKey(cpubkeys[i], true)
|
||||
var pub = ECPubKey.fromHex(pubkeys[i])
|
||||
var cpub = ECPubKey.fromHex(cpubkeys[i])
|
||||
cpub.compressed = true
|
||||
|
||||
var addr = addresses[i]
|
||||
var caddr = compressedAddresses[i]
|
||||
|
||||
assert.equal(priv.getAddress().toString(), addr)
|
||||
assert.equal(pub.getAddress().toString(), addr)
|
||||
assert.equal(cpub.getAddress().toString(), caddr)
|
||||
}
|
||||
|
@ -142,27 +131,27 @@ describe('ECKey', function() {
|
|||
var message = 'Vires in numeris'
|
||||
|
||||
it('should verify against the private key', function() {
|
||||
var priv = new ECKey(hpriv)
|
||||
var priv = ECKey.fromHex(hpriv)
|
||||
var signature = priv.sign(message)
|
||||
|
||||
assert(priv.verify(message, signature))
|
||||
assert(priv.pub.verify(message, signature))
|
||||
})
|
||||
|
||||
it('should verify against the public key', function() {
|
||||
var priv = new ECKey(hpriv)
|
||||
var pub = new ECPubKey(hcpub, true)
|
||||
var priv = ECKey.fromHex(hpriv)
|
||||
var pub = ECPubKey.fromHex(hcpub, true)
|
||||
var signature = priv.sign(message)
|
||||
|
||||
assert(pub.verify(message, signature))
|
||||
})
|
||||
|
||||
it('should not verify against the wrong private key', function() {
|
||||
var priv1 = new ECKey(hpriv)
|
||||
var priv2 = new ECKey('1111111111111111111111111111111111111111111111111111111111111111')
|
||||
var priv1 = ECKey.fromHex(hpriv)
|
||||
var priv2 = ECKey.fromHex('1111111111111111111111111111111111111111111111111111111111111111')
|
||||
|
||||
var signature = priv1.sign(message)
|
||||
|
||||
assert(!priv2.verify(message, signature))
|
||||
assert(!priv2.pub.verify(message, signature))
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -171,17 +160,17 @@ describe('ECKey', function() {
|
|||
var hpub = '044b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea81199283fbec990dad6fb98f93f712d50cb874dd717de6a184158d63886dda3090f566'
|
||||
|
||||
it('using toHex should support compression', function() {
|
||||
var pub = new ECPubKey(hpub)
|
||||
var pub = ECPubKey.fromHex(hcpub)
|
||||
|
||||
assert.equal(pub.toHex(true), hcpub)
|
||||
assert.equal(pub.toHex(false), hpub)
|
||||
assert.equal(pub.toHex(), hcpub)
|
||||
assert.equal(pub.compressed, true)
|
||||
})
|
||||
|
||||
it('using toBytes should support compression', function() {
|
||||
var pub = new ECPubKey(hpub)
|
||||
it('using toHex should support uncompressed', function() {
|
||||
var pub = ECPubKey.fromHex(hpub)
|
||||
|
||||
assert.equal(bytesToHex(pub.toBytes(true)), hcpub)
|
||||
assert.equal(bytesToHex(pub.toBytes(false)), hpub)
|
||||
assert.equal(pub.toHex(), hpub)
|
||||
assert.equal(pub.compressed, false)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -32,7 +32,7 @@ describe('HDWallet', function() {
|
|||
})
|
||||
|
||||
describe('constructor & seed deserialization', function() {
|
||||
var expectedPrivateKey = '0fd71c652e847ba7ea7956e3cf3fc0a0985871846b1b2c23b9c6a29a38cee86001'
|
||||
var expectedPrivateKey = '0fd71c652e847ba7ea7956e3cf3fc0a0985871846b1b2c23b9c6a29a38cee860'
|
||||
var seed = new Buffer([
|
||||
99, 114, 97, 122, 121, 32, 104, 111, 114, 115, 101, 32, 98,
|
||||
97, 116, 116, 101, 114, 121, 32, 115, 116, 97, 112, 108, 101
|
||||
|
@ -63,8 +63,8 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getIdentifier()), '3442193e1bb70916e914552172cd4e2dbc9df811')
|
||||
assert.equal(b2h(hd.getFingerprint()), '3442193e')
|
||||
assert.equal(hd.getAddress().toString(), '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma')
|
||||
assert.equal(hd.priv.toHex(), 'e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b3501')
|
||||
assert.equal(hd.priv.toWif(), 'L52XzL2cMkHxqxBXRyEpnPQZGUs3uKiL3R11XbAdHigRzDozKZeW')
|
||||
assert.equal(hd.priv.toHex(), 'e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35')
|
||||
assert.equal(hd.priv.toWIF(), 'L52XzL2cMkHxqxBXRyEpnPQZGUs3uKiL3R11XbAdHigRzDozKZeW')
|
||||
assert.equal(hd.pub.toHex(), '0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2')
|
||||
assert.equal(b2h(hd.chaincode), '873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508')
|
||||
assert.equal(hd.toHex(false), '0488b21e000000000000000000873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d5080339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2')
|
||||
|
@ -78,7 +78,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), '5c1bd648')
|
||||
assert.equal(hd.getAddress().toString(), '19Q2WoS5hSS6T8GjhK8KZLMgmWaq4neXrh')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), 'edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea')
|
||||
assert.equal(hd.priv.toWif(), 'L5BmPijJjrKbiUfG4zbiFKNqkvuJ8usooJmzuD7Z8dkRoTThYnAT')
|
||||
assert.equal(hd.priv.toWIF(), 'L5BmPijJjrKbiUfG4zbiFKNqkvuJ8usooJmzuD7Z8dkRoTThYnAT')
|
||||
assert.equal(hd.pub.toHex(), '035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56')
|
||||
assert.equal(b2h(hd.chaincode), '47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141')
|
||||
assert.equal(hd.toHex(false), '0488b21e013442193e8000000047fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56')
|
||||
|
@ -92,7 +92,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), 'bef5a2f9')
|
||||
assert.equal(hd.getAddress().toString(), '1JQheacLPdM5ySCkrZkV66G2ApAXe1mqLj')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), '3c6cb8d0f6a264c91ea8b5030fadaa8e538b020f0a387421a12de9319dc93368')
|
||||
assert.equal(hd.priv.toWif(), 'KyFAjQ5rgrKvhXvNMtFB5PCSKUYD1yyPEe3xr3T34TZSUHycXtMM')
|
||||
assert.equal(hd.priv.toWIF(), 'KyFAjQ5rgrKvhXvNMtFB5PCSKUYD1yyPEe3xr3T34TZSUHycXtMM')
|
||||
assert.equal(hd.pub.toHex(), '03501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c')
|
||||
assert.equal(b2h(hd.chaincode), '2a7857631386ba23dacac34180dd1983734e444fdbf774041578e9b6adb37c19')
|
||||
assert.equal(hd.toHex(false), '0488b21e025c1bd648000000012a7857631386ba23dacac34180dd1983734e444fdbf774041578e9b6adb37c1903501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c')
|
||||
|
@ -106,7 +106,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), 'ee7ab90c')
|
||||
assert.equal(hd.getAddress().toString(), '1NjxqbA9aZWnh17q1UW3rB4EPu79wDXj7x')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), 'cbce0d719ecf7431d88e6a89fa1483e02e35092af60c042b1df2ff59fa424dca')
|
||||
assert.equal(hd.priv.toWif(), 'L43t3od1Gh7Lj55Bzjj1xDAgJDcL7YFo2nEcNaMGiyRZS1CidBVU')
|
||||
assert.equal(hd.priv.toWIF(), 'L43t3od1Gh7Lj55Bzjj1xDAgJDcL7YFo2nEcNaMGiyRZS1CidBVU')
|
||||
assert.equal(hd.pub.toHex(), '0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2')
|
||||
assert.equal(b2h(hd.chaincode), '04466b9cc8e161e966409ca52986c584f07e9dc81f735db683c3ff6ec7b1503f')
|
||||
assert.equal(hd.toHex(false), '0488b21e03bef5a2f98000000204466b9cc8e161e966409ca52986c584f07e9dc81f735db683c3ff6ec7b1503f0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2')
|
||||
|
@ -120,7 +120,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), 'd880d7d8')
|
||||
assert.equal(hd.getAddress().toString(), '1LjmJcdPnDHhNTUgrWyhLGnRDKxQjoxAgt')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), '0f479245fb19a38a1954c5c7c0ebab2f9bdfd96a17563ef28a6a4b1a2a764ef4')
|
||||
assert.equal(hd.priv.toWif(), 'KwjQsVuMjbCP2Zmr3VaFaStav7NvevwjvvkqrWd5Qmh1XVnCteBR')
|
||||
assert.equal(hd.priv.toWIF(), 'KwjQsVuMjbCP2Zmr3VaFaStav7NvevwjvvkqrWd5Qmh1XVnCteBR')
|
||||
assert.equal(hd.pub.toHex(), '02e8445082a72f29b75ca48748a914df60622a609cacfce8ed0e35804560741d29')
|
||||
assert.equal(b2h(hd.chaincode), 'cfb71883f01676f587d023cc53a35bc7f88f724b1f8c2892ac1275ac822a3edd')
|
||||
assert.equal(hd.toHex(false), '0488b21e04ee7ab90c00000002cfb71883f01676f587d023cc53a35bc7f88f724b1f8c2892ac1275ac822a3edd02e8445082a72f29b75ca48748a914df60622a609cacfce8ed0e35804560741d29')
|
||||
|
@ -134,7 +134,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), 'd69aa102')
|
||||
assert.equal(hd.getAddress().toString(), '1LZiqrop2HGR4qrH1ULZPyBpU6AUP49Uam')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), '471b76e389e528d6de6d816857e012c5455051cad6660850e58372a6c3e6e7c8')
|
||||
assert.equal(hd.priv.toWif(), 'Kybw8izYevo5xMh1TK7aUr7jHFCxXS1zv8p3oqFz3o2zFbhRXHYs')
|
||||
assert.equal(hd.priv.toWIF(), 'Kybw8izYevo5xMh1TK7aUr7jHFCxXS1zv8p3oqFz3o2zFbhRXHYs')
|
||||
assert.equal(hd.pub.toHex(), '022a471424da5e657499d1ff51cb43c47481a03b1e77f951fe64cec9f5a48f7011')
|
||||
assert.equal(b2h(hd.chaincode), 'c783e67b921d2beb8f6b389cc646d7263b4145701dadd2161548a8b078e65e9e')
|
||||
assert.equal(hd.toHex(false), '0488b21e05d880d7d83b9aca00c783e67b921d2beb8f6b389cc646d7263b4145701dadd2161548a8b078e65e9e022a471424da5e657499d1ff51cb43c47481a03b1e77f951fe64cec9f5a48f7011')
|
||||
|
@ -151,7 +151,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), 'bd16bee5')
|
||||
assert.equal(hd.getAddress().toString(), '1JEoxevbLLG8cVqeoGKQiAwoWbNYSUyYjg')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), '4b03d6fc340455b363f51020ad3ecca4f0850280cf436c70c727923f6db46c3e')
|
||||
assert.equal(hd.priv.toWif(), 'KyjXhyHF9wTphBkfpxjL8hkDXDUSbE3tKANT94kXSyh6vn6nKaoy')
|
||||
assert.equal(hd.priv.toWIF(), 'KyjXhyHF9wTphBkfpxjL8hkDXDUSbE3tKANT94kXSyh6vn6nKaoy')
|
||||
assert.equal(hd.pub.toHex(), '03cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7')
|
||||
assert.equal(b2h(hd.chaincode), '60499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd9689')
|
||||
assert.equal(hd.toHex(false), '0488b21e00000000000000000060499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd968903cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7')
|
||||
|
@ -165,7 +165,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), '5a61ff8e')
|
||||
assert.equal(hd.getAddress().toString(), '19EuDJdgfRkwCmRzbzVBHZWQG9QNWhftbZ')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), 'abe74a98f6c7eabee0428f53798f0ab8aa1bd37873999041703c742f15ac7e1e')
|
||||
assert.equal(hd.priv.toWif(), 'L2ysLrR6KMSAtx7uPqmYpoTeiRzydXBattRXjXz5GDFPrdfPzKbj')
|
||||
assert.equal(hd.priv.toWIF(), 'L2ysLrR6KMSAtx7uPqmYpoTeiRzydXBattRXjXz5GDFPrdfPzKbj')
|
||||
assert.equal(hd.pub.toHex(), '02fc9e5af0ac8d9b3cecfe2a888e2117ba3d089d8585886c9c826b6b22a98d12ea')
|
||||
assert.equal(b2h(hd.chaincode), 'f0909affaa7ee7abe5dd4e100598d4dc53cd709d5a5c2cac40e7412f232f7c9c')
|
||||
assert.equal(hd.toHex(false), '0488b21e01bd16bee500000000f0909affaa7ee7abe5dd4e100598d4dc53cd709d5a5c2cac40e7412f232f7c9c02fc9e5af0ac8d9b3cecfe2a888e2117ba3d089d8585886c9c826b6b22a98d12ea')
|
||||
|
@ -179,7 +179,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), 'd8ab4937')
|
||||
assert.equal(hd.getAddress().toString(), '1Lke9bXGhn5VPrBuXgN12uGUphrttUErmk')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), '877c779ad9687164e9c2f4f0f4ff0340814392330693ce95a58fe18fd52e6e93')
|
||||
assert.equal(hd.priv.toWif(), 'L1m5VpbXmMp57P3knskwhoMTLdhAAaXiHvnGLMribbfwzVRpz2Sr')
|
||||
assert.equal(hd.priv.toWIF(), 'L1m5VpbXmMp57P3knskwhoMTLdhAAaXiHvnGLMribbfwzVRpz2Sr')
|
||||
assert.equal(hd.pub.toHex(), '03c01e7425647bdefa82b12d9bad5e3e6865bee0502694b94ca58b666abc0a5c3b')
|
||||
assert.equal(b2h(hd.chaincode), 'be17a268474a6bb9c61e1d720cf6215e2a88c5406c4aee7b38547f585c9a37d9')
|
||||
assert.equal(hd.toHex(false), '0488b21e025a61ff8effffffffbe17a268474a6bb9c61e1d720cf6215e2a88c5406c4aee7b38547f585c9a37d903c01e7425647bdefa82b12d9bad5e3e6865bee0502694b94ca58b666abc0a5c3b')
|
||||
|
@ -193,7 +193,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), '78412e3a')
|
||||
assert.equal(hd.getAddress().toString(), '1BxrAr2pHpeBheusmd6fHDP2tSLAUa3qsW')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), '704addf544a06e5ee4bea37098463c23613da32020d604506da8c0518e1da4b7')
|
||||
assert.equal(hd.priv.toWif(), 'KzyzXnznxSv249b4KuNkBwowaN3akiNeEHy5FWoPCJpStZbEKXN2')
|
||||
assert.equal(hd.priv.toWIF(), 'KzyzXnznxSv249b4KuNkBwowaN3akiNeEHy5FWoPCJpStZbEKXN2')
|
||||
assert.equal(hd.pub.toHex(), '03a7d1d856deb74c508e05031f9895dab54626251b3806e16b4bd12e781a7df5b9')
|
||||
assert.equal(b2h(hd.chaincode), 'f366f48f1ea9f2d1d3fe958c95ca84ea18e4c4ddb9366c336c927eb246fb38cb')
|
||||
assert.equal(hd.toHex(false), '0488b21e03d8ab493700000001f366f48f1ea9f2d1d3fe958c95ca84ea18e4c4ddb9366c336c927eb246fb38cb03a7d1d856deb74c508e05031f9895dab54626251b3806e16b4bd12e781a7df5b9')
|
||||
|
@ -207,7 +207,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), '31a507b8')
|
||||
assert.equal(hd.getAddress().toString(), '15XVotxCAV7sRx1PSCkQNsGw3W9jT9A94R')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), 'f1c7c871a54a804afe328b4c83a1c33b8e5ff48f5087273f04efa83b247d6a2d')
|
||||
assert.equal(hd.priv.toWif(), 'L5KhaMvPYRW1ZoFmRjUtxxPypQ94m6BcDrPhqArhggdaTbbAFJEF')
|
||||
assert.equal(hd.priv.toWIF(), 'L5KhaMvPYRW1ZoFmRjUtxxPypQ94m6BcDrPhqArhggdaTbbAFJEF')
|
||||
assert.equal(hd.pub.toHex(), '02d2b36900396c9282fa14628566582f206a5dd0bcc8d5e892611806cafb0301f0')
|
||||
assert.equal(b2h(hd.chaincode), '637807030d55d01f9a0cb3a7839515d796bd07706386a6eddf06cc29a65a0e29')
|
||||
assert.equal(hd.toHex(false), '0488b21e0478412e3afffffffe637807030d55d01f9a0cb3a7839515d796bd07706386a6eddf06cc29a65a0e2902d2b36900396c9282fa14628566582f206a5dd0bcc8d5e892611806cafb0301f0')
|
||||
|
@ -221,7 +221,7 @@ describe('HDWallet', function() {
|
|||
assert.equal(b2h(hd.getFingerprint()), '26132fdb')
|
||||
assert.equal(hd.getAddress().toString(), '14UKfRV9ZPUp6ZC9PLhqbRtxdihW9em3xt')
|
||||
assert.equal(hd.priv.toHex().slice(0, 64), 'bb7d39bdb83ecf58f2fd82b6d918341cbef428661ef01ab97c28a4842125ac23')
|
||||
assert.equal(hd.priv.toWif(), 'L3WAYNAZPxx1fr7KCz7GN9nD5qMBnNiqEJNJMU1z9MMaannAt4aK')
|
||||
assert.equal(hd.priv.toWIF(), 'L3WAYNAZPxx1fr7KCz7GN9nD5qMBnNiqEJNJMU1z9MMaannAt4aK')
|
||||
assert.equal(hd.pub.toHex(), '024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c')
|
||||
assert.equal(b2h(hd.chaincode), '9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271')
|
||||
assert.equal(hd.toHex(false), '0488b21e0531a507b8000000029452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c')
|
||||
|
|
|
@ -2,7 +2,6 @@ var assert = require('assert')
|
|||
var convert = require('../').convert
|
||||
var ECKey = require('../src/eckey').ECKey
|
||||
var Message = require('../').Message
|
||||
var testnet = require('../').network.testnet.pubKeyHash
|
||||
|
||||
describe('Message', function() {
|
||||
var msg
|
||||
|
@ -54,14 +53,14 @@ describe('Message', function() {
|
|||
describe('signing', function() {
|
||||
describe('using the uncompressed public key', function(){
|
||||
it('gives same signature as a compressed public key', function() {
|
||||
var key = new ECKey(null) // uncompressed
|
||||
var key = ECKey.makeRandom(false) // uncompressed
|
||||
var sig = Message.sign(key, msg)
|
||||
|
||||
var compressedKey = new ECKey(key, true) // compressed clone
|
||||
var csig = Message.sign(compressedKey, msg) // FIXME: bad compression support
|
||||
var compressedKey = new ECKey(key.D, true) // compressed clone
|
||||
var csig = Message.sign(compressedKey, msg)
|
||||
|
||||
var addr = key.getPub().getAddress()
|
||||
var caddr = compressedKey.getPub().getAddress()
|
||||
var addr = key.pub.getAddress()
|
||||
var caddr = compressedKey.pub.getAddress()
|
||||
assert.ok(Message.verify(addr, sig, msg))
|
||||
assert.ok(Message.verify(caddr, csig, msg))
|
||||
assert.notDeepEqual(sig.slice(0, 2), csig.slice(0, 2)) // unequal compression flags
|
||||
|
@ -71,10 +70,12 @@ describe('Message', function() {
|
|||
|
||||
describe('testnet address', function(){
|
||||
it('works', function(){
|
||||
var key = new ECKey(null)
|
||||
var testnet = require('../').network.testnet
|
||||
|
||||
var key = ECKey.makeRandom()
|
||||
var sig = Message.sign(key, msg)
|
||||
|
||||
var addr = key.getAddress(testnet)
|
||||
var addr = key.pub.getAddress(testnet.pubKeyHash)
|
||||
assert(Message.verify(addr, sig, msg))
|
||||
})
|
||||
})
|
||||
|
|
|
@ -166,10 +166,10 @@ describe('Transaction', function() {
|
|||
tx.addOutput("15mMHKL96tWAUtqF3tbVf99Z8arcmnJrr3:40000")
|
||||
tx.addOutput("1Bu3bhwRmevHLAy1JrRB6AfcxfgDG2vXRd:50000")
|
||||
|
||||
var key = new ECKey('L44f7zxJ5Zw4EK9HZtyAnzCYz2vcZ5wiJf9AuwhJakiV4xVkxBeb')
|
||||
var key = ECKey.fromWIF('L44f7zxJ5Zw4EK9HZtyAnzCYz2vcZ5wiJf9AuwhJakiV4xVkxBeb')
|
||||
tx.sign(0, key)
|
||||
|
||||
var pub = key.getPub().toBytes()
|
||||
var pub = key.pub.toBuffer()
|
||||
var script = prevTx.outs[0].script.buffer
|
||||
var sig = tx.ins[0].script.chunks[0]
|
||||
|
||||
|
@ -185,8 +185,8 @@ describe('Transaction', function() {
|
|||
})
|
||||
|
||||
it('returns true for valid signature', function(){
|
||||
var key = new ECKey('L44f7zxJ5Zw4EK9HZtyAnzCYz2vcZ5wiJf9AuwhJakiV4xVkxBeb')
|
||||
var pub = key.getPub().toBytes()
|
||||
var key = ECKey.fromWIF('L44f7zxJ5Zw4EK9HZtyAnzCYz2vcZ5wiJf9AuwhJakiV4xVkxBeb')
|
||||
var pub = key.pub.toBuffer()
|
||||
var script = prevTx.outs[0].script.buffer
|
||||
var sig = validTx.ins[0].script.chunks[0]
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue