Browse Source

Reformat all tests for more modern mocha syntax (describe, it)

hk-custom-address
Andreas Brekken 11 years ago
parent
commit
f591cc0111
  1. 48
      test/address.js
  2. 15
      test/base58.js
  3. 82
      test/bip32.js
  4. 32
      test/convert.js
  5. 7
      test/ec.js
  6. 44
      test/eckey.js
  7. 18
      test/jsbn.js
  8. 26
      test/message.js
  9. 62
      test/misc.js

48
test/address.js

@ -1,20 +1,25 @@
/* global describe, it */
var assert = require('assert'); var assert = require('assert');
var Address = require('..').Address; var Address = require('../src/address.js');
test('string', function() { describe('Address', function() {
describe('toString', function() {
it('defaults to base58', function() {
var addr = '18fN1QTGWmHWCA9r2dyDH6FbMEyc7XHmQQ'; var addr = '18fN1QTGWmHWCA9r2dyDH6FbMEyc7XHmQQ';
assert.equal((new Address(addr)).toString(), addr); assert.equal((new Address(addr)).toString(), addr);
}); })
})
test('valid', function() { describe('validate', function() {
function validate(addr, type) { it('validates known good addresses', function() {
assert.ok(Address.validate(addr, type)); function validate(addr) {
}; assert.ok(Address.validate(addr));
}
validate('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'); validate('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa');
validate('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa', 'prod'); // validate('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa', 'prod');
validate('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef'); validate('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef');
validate('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'testnet'); // validate('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'testnet');
validate('12KYrjTdVGjFMtaxERSk3gphreJ5US8aUP'); validate('12KYrjTdVGjFMtaxERSk3gphreJ5US8aUP');
validate('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y'); validate('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y');
@ -24,23 +29,24 @@ test('valid', function() {
// p2sh addresses // p2sh addresses
validate('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt'); validate('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt');
validate('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'prod'); // validate('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'prod');
validate('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7'); validate('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7');
validate('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'testnet'); // validate('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'testnet');
}); })
it('does not validate illegal examples', function() {
test('invalid', function() { function invalid(addr) {
function invalid(addr, type) { assert.ok(!Address.validate(addr));
assert.ok(!Address.validate(addr, type)); }
};
invalid(''); invalid('');
invalid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhe'); invalid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhe');
invalid('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa', 'testnet');
invalid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'prod'); // invalid('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa', 'testnet');
// invalid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'prod');
// invalid base58 string // invalid base58 string
invalid('%%@'); invalid('%%@');
}); })
})
})

15
test/base58.js

@ -1,15 +1,22 @@
/* global describe, it */
var assert = require('assert'); var assert = require('assert');
var base58 = require('../').base58; var base58 = require('../').base58;
var conv = require('../').convert; var conv = require('../').convert;
test('decode base58', function() { describe('base58', function() {
describe('decode', function() {
it('validates known examples', function() {
var enc = '5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ'; var enc = '5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ';
var hex = '800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d'; var hex = '800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d';
assert.deepEqual(base58.decode(enc), conv.hexToBytes(hex)); assert.deepEqual(base58.decode(enc), conv.hexToBytes(hex));
}); })
})
test('encode base58', function() { describe('encode', function() {
it('handles known examples', function() {
var enc = '5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ'; var enc = '5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ';
var hex = '800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d'; var hex = '800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d';
assert.equal(base58.encode(conv.hexToBytes(hex)), enc); assert.equal(base58.encode(conv.hexToBytes(hex)), enc);
}); })
})
})

82
test/bip32.js

@ -1,10 +1,9 @@
// Tests from https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#Test_Vectors /* global describe, it */
var assert = require('assert'); var assert = require('assert');
var BIP32key = require('..').BIP32key; var BIP32key = require('../src/bip32.js');
var convert = require('../src/convert.js')
var hexToBytes = require('../').convert.hexToBytes; var hexToBytes = convert.hexToBytes;
var bytesToString = require('../').convert.bytesToString; var bytesToString = convert.bytesToString;
var BIP32_PRIME = 0x80000000; var BIP32_PRIME = 0x80000000;
@ -13,86 +12,89 @@ function checkKey(key, extPriv, extPub) {
assert.equal(key.getPub().serialize(), extPub); assert.equal(key.getPub().serialize(), extPub);
} }
test("BIP32 Test vector 1", function () { describe('BIP32key', function() {
describe('BIP-0032 Test Vectors', function() {
// Extracted from https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#Test_Vectors
it('handles vector 1', function() {
var seed_str = '000102030405060708090a0b0c0d0e0f'; var seed_str = '000102030405060708090a0b0c0d0e0f';
var seed = bytesToString(hexToBytes(seed_str)); var seed = bytesToString(hexToBytes(seed_str));
var key = new BIP32key(seed); var key = new BIP32key(seed);
checkKey(key, checkKey(key,
"xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", 'xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi',
"xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"); 'xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8');
var branch = key.ckd(0+BIP32_PRIME); var branch = key.ckd(0 + BIP32_PRIME);
checkKey(branch, checkKey(branch,
"xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7", 'xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7',
"xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw"); 'xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw');
var branch2 = branch.ckd(1); var branch2 = branch.ckd(1);
checkKey(branch2, checkKey(branch2,
"xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs", 'xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs',
"xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ"); 'xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ');
var branch3 = branch2.ckd(2+BIP32_PRIME); var branch3 = branch2.ckd(2 + BIP32_PRIME);
checkKey(branch3, checkKey(branch3,
"xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM", 'xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM',
"xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5"); 'xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5');
var branch4 = branch3.ckd(2); var branch4 = branch3.ckd(2);
checkKey(branch4, checkKey(branch4,
"xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334", 'xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334',
"xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV"); 'xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV');
var branch5 = branch4.ckd(1000000000); var branch5 = branch4.ckd(1000000000);
checkKey(branch5, checkKey(branch5,
"xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76", 'xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76',
"xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy"); 'xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy');
})
}); it('handles vector 2', function() {
test("BIP32 Test vector 2", function () {
var seed_str = 'fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542'; var seed_str = 'fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542';
var seed = bytesToString(hexToBytes(seed_str)); var seed = bytesToString(hexToBytes(seed_str));
var key = new BIP32key(seed); var key = new BIP32key(seed);
checkKey(key, checkKey(key,
"xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U", 'xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U',
"xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB"); 'xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB');
var branch = key.ckd(0); var branch = key.ckd(0);
checkKey(branch, checkKey(branch,
"xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt", 'xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt',
"xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH"); 'xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH');
var branch2 = branch.ckd(2147483647+BIP32_PRIME); var branch2 = branch.ckd(2147483647 + BIP32_PRIME);
checkKey(branch2, checkKey(branch2,
"xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9", 'xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9',
"xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a"); 'xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a');
var branch3 = branch2.ckd(1); var branch3 = branch2.ckd(1);
checkKey(branch3, checkKey(branch3,
"xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef", 'xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef',
"xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon"); 'xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon');
var branch4 = branch3.ckd(2147483646+BIP32_PRIME); var branch4 = branch3.ckd(2147483646 + BIP32_PRIME);
checkKey(branch4, checkKey(branch4,
"xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc", 'xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc',
"xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL"); 'xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL');
var branch5 = branch4.ckd(2); var branch5 = branch4.ckd(2);
checkKey(branch5, checkKey(branch5,
"xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j", 'xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j',
"xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt"); 'xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt');
}); })
})
})

32
test/convert.js

@ -1,24 +1,28 @@
/* global describe, it */
var assert = require('assert'); var assert = require('assert');
var conv = require('../').convert; var convert = require('../src/convert.js');
var bytesToHex = conv.bytesToHex; describe('convert', function() {
var hexToBytes = conv.hexToBytes; describe('bytesToHex', function() {
it('handles example 1', function() {
assert.equal(convert.bytesToHex([0, 1, 2, 255]), '000102ff');
})
})
test('bytesToHex', function() { describe('hexToBytes', function() {
assert.equal(bytesToHex([0, 1, 2, 255]), '000102ff'); it('handles example 1', function() {
}); assert.deepEqual(convert.hexToBytes('000102ff'), [0, 1, 2, 255]);
})
})
test('hexToBytes', function() { it('converts from bytes to hex and back', function() {
assert.deepEqual(hexToBytes('000102ff'), [0, 1, 2, 255]);
});
test('bytesToHex - hexToBytes', function() {
var bytes = []; var bytes = [];
for (var i=0 ; i<256 ; ++i) { for (var i=0 ; i<256 ; ++i) {
bytes.push(i); bytes.push(i);
} }
var hex = bytesToHex(bytes); var hex = convert.bytesToHex(bytes);
assert.equal(hex.length, 512); assert.equal(hex.length, 512);
assert.deepEqual(hexToBytes(hex), bytes); assert.deepEqual(convert.hexToBytes(hex), bytes);
}); })
})

7
test/ec.js

@ -1,10 +1,12 @@
/* global describe, it */
var assert = require('assert'); var assert = require('assert');
var sec = require('../src/jsbn/sec'); var sec = require('../src/jsbn/sec');
var ecdsa = require('../').ecdsa; var ecdsa = require('../').ecdsa;
var ecparams = sec('secp256k1'); var ecparams = sec('secp256k1');
test("Point multiplication", function () { describe('ecdsa', function() {
it('handles point ultiplication', function() {
var G = ecparams.getG(); var G = ecparams.getG();
var n = ecparams.getN(); var n = ecparams.getN();
@ -17,4 +19,5 @@ test("Point multiplication", function () {
assert.ok(P.multiply(n).isInfinity(), "kGn is infinite"); assert.ok(P.multiply(n).isInfinity(), "kGn is infinite");
assert.ok(P.validate(), "kG validates as a public key"); assert.ok(P.validate(), "kG validates as a public key");
}); })
})

44
test/eckey.js

@ -1,35 +1,43 @@
/* global describe, it */
var assert = require('assert'); var assert = require('assert');
var Key = require('../').Key; var ECKey = require('../src/eckey.js').ECKey;
var bytesToHex = require('../').convert.bytesToHex; var convert = require('../src/convert.js');
var hexToBytes = require('../').convert.hexToBytes; var bytesToHex = convert.bytesToHex;
var base58 = require('../').base58; var hexToBytes = convert.hexToBytes;
// get public key from private key describe('ECKey', function() {
test('from private base58', function() { describe('constructor (base58 private)', function() {
it('parses case 1', function() {
var priv = '18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725'; var priv = '18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725';
var pub = '0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6'; var pub = '0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b235' +
var key = Key(hexToBytes(priv)); '22cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6';
var key = new ECKey(hexToBytes(priv));
assert.equal(bytesToHex(key.getPub()), pub); assert.equal(bytesToHex(key.getPub()['export']('bytes')), pub);
assert.equal(key.compressed, false); assert.equal(key.compressed, false);
})
it('parses case 2', function() {
var priv = '5HwoXVkHoRM8sL2KmNRS217n1g8mPPBomrY7yehCuXC1115WWsh'; var priv = '5HwoXVkHoRM8sL2KmNRS217n1g8mPPBomrY7yehCuXC1115WWsh';
var pub = '044f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1'; var pub = '044f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0' +
'f0b704075871aa385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1';
var addr = '1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a'; var addr = '1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a';
var key = Key(priv); var key = new ECKey(priv);
assert.equal(key.compressed, false); assert.equal(key.compressed, false);
assert.equal(bytesToHex(key.getPub()), pub); assert.equal(bytesToHex(key.getPub()['export']('bytes')), pub);
assert.equal(key.getBitcoinAddress().toString(), addr); assert.equal(key.getBitcoinAddress().toString(), addr);
})
it('parses case 3', function() {
var priv = 'KwntMbt59tTsj8xqpqYqRRWufyjGunvhSyeMo3NTYpFYzZbXJ5Hp'; var priv = 'KwntMbt59tTsj8xqpqYqRRWufyjGunvhSyeMo3NTYpFYzZbXJ5Hp';
var pub = '034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa' var pub = '034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa'
var addr = '1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9'; var addr = '1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9';
var key = Key(priv); var key = new ECKey(priv);
assert.equal(key.compressed, true); assert.equal(key.compressed, true);
assert.equal(bytesToHex(key.getPub()), pub); assert.equal(bytesToHex(key.getPub()['export']('bytes')), pub);
assert.equal(key.getBitcoinAddress().toString(), addr); assert.equal(key.getBitcoinAddress().toString(), addr);
}); })
})
})

18
test/jsbn.js

@ -1,12 +1,15 @@
/* global describe, it */
var assert = require('assert'); var assert = require('assert');
var BigInteger = require('../').BigInteger; var BigInteger = require('../src/jsbn/jsbn.js')
var bytesToHex = require('../').convert.bytesToHex; var bytesToHex = require('../src/convert.js').bytesToHex;
test('toByteArraySigned', function() { describe('BigInteger', function() {
describe('toByteArraySigned', function() {
it('handles examples', function() {
function hex(num) { function hex(num) {
var bytes = BigInteger.valueOf(num).toByteArraySigned(); var bytes = BigInteger.valueOf(num).toByteArraySigned();
var hex = bytesToHex(bytes); var h = bytesToHex(bytes);
return '0x' + hex; return '0x' + h;
} }
assert.equal(hex( 0), '0x'); assert.equal(hex( 0), '0x');
@ -20,5 +23,6 @@ test('toByteArraySigned', function() {
assert.equal(hex(-16300), '0xbfac'); assert.equal(hex(-16300), '0xbfac');
assert.equal(hex( 62300), '0x00f35c'); assert.equal(hex( 62300), '0x00f35c');
assert.equal(hex(-62300), '0x80f35c'); assert.equal(hex(-62300), '0x80f35c');
}); })
})
})

26
test/message.js

@ -1,28 +1,34 @@
/* global describe, it */
var assert = require('assert'); var assert = require('assert');
var Message = require('../').Message; var Message = require('../src/message.js');
var Key = require('../').Key; var ECKey = require('../src/eckey.js').ECKey;
var hexToBytes = require('../').convert.hexToBytes; var hexToBytes = require('../src/convert.js').hexToBytes;
var priv = '18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725'; var priv = '18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725';
var addr = '16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM'; var addr = '16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM';
var msg = 'foobar'; var msg = 'foobar';
test('create', function() { describe('Message', function() {
var key = Key(hexToBytes(priv)); describe('verify', function() {
it('passes case 1', function() {
var key = new ECKey(hexToBytes(priv));
assert.equal(key.getBitcoinAddress().toString(), addr); assert.equal(key.getBitcoinAddress().toString(), addr);
var sig = Message.signMessage(key, msg); var sig = Message.signMessage(key, msg);
assert.ok(Message.verifyMessage(addr, sig, msg)); assert.ok(Message.verifyMessage(addr, sig, msg));
// wrong message // wrong message
assert.ok(!Message.verifyMessage(addr, sig, 'not foobar')); assert.ok(!Message.verifyMessage(addr, sig, 'not foobar'));
// wrong address // wrong address
assert.ok(!Message.verifyMessage('1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a', sig, msg)); assert.ok(!Message.verifyMessage('1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a', sig, msg));
}); })
test('incorrect signature', function() { it('passes case 2', function() {
// wrong signature
var priv = '5HwoXVkHoRM8sL2KmNRS217n1g8mPPBomrY7yehCuXC1115WWsh'; var priv = '5HwoXVkHoRM8sL2KmNRS217n1g8mPPBomrY7yehCuXC1115WWsh';
var key = Key(hexToBytes(priv)); var key = new ECKey(hexToBytes(priv));
var sig = Message.signMessage(key, msg); var sig = Message.signMessage(key, msg);
assert.ok(!Message.verifyMessage(addr, sig, msg)); assert.ok(!Message.verifyMessage(addr, sig, msg));
}); })
})
})

62
test/misc.js

@ -1,9 +1,9 @@
/* global it */
var assert = require('assert'); var assert = require('assert');
var bitcoinjs = require('../'); var bitcoinjs = require('../');
var sec = require('../src/jsbn/sec'); var sec = require('../src/jsbn/sec');
var BigInteger = require('../src/jsbn/jsbn'); var BigInteger = require('../src/jsbn/jsbn.js');
var Crypto = require('../src/crypto-js/crypto.js');
var Crypto = require('../src/crypto-js/crypto');
var SecureRandom = require('../src/jsbn/rng'); var SecureRandom = require('../src/jsbn/rng');
var rng = new SecureRandom(); var rng = new SecureRandom();
@ -11,9 +11,8 @@ var rng = new SecureRandom();
var ecparams = sec('secp256k1'); var ecparams = sec('secp256k1');
var ECPointFp = bitcoinjs.ECPointFp; var ECPointFp = bitcoinjs.ECPointFp;
test("Keys & Key Management", function () { it('Keys & Key Management', function () {
var p1 = bitcoinjs.Key().getPub()['export']('bytes');
var p1 = bitcoinjs.Key().getPub();
assert.equal(p1.length, 65); assert.equal(p1.length, 65);
var p1_q = ECPointFp.decodeFrom(ecparams.getCurve(), p1); var p1_q = ECPointFp.decodeFrom(ecparams.getCurve(), p1);
@ -21,46 +20,49 @@ test("Keys & Key Management", function () {
assert.ok(p1_q.validate()); assert.ok(p1_q.validate());
var p2 = bitcoinjs.convert.hexToBytes( var p2 = bitcoinjs.convert.hexToBytes(
"0486f356006a38b847bedec1bf47013776925d939d5a35a97a4d1263e550c7f1a" + '0486f356006a38b847bedec1bf47013776925d939d5a35a97a4d1263e550c7f1a' +
"b5aba44ab74d22892097a0e851addf07ba97e33416df5affaceeb35d5607cd23c" 'b5aba44ab74d22892097a0e851addf07ba97e33416df5affaceeb35d5607cd23c');
);
var p2_q = ECPointFp.decodeFrom(ecparams.getCurve(), p2); var p2_q = ECPointFp.decodeFrom(ecparams.getCurve(), p2);
assert.ok(p2_q); assert.ok(p2_q);
assert.ok(p2_q.validate()); assert.ok(p2_q.validate());
}); });
test("Signing and Verifying", function () { it('Signing and Verifying', function () {
var s1 = bitcoinjs.Key(); var s1 = bitcoinjs.Key();
var sig_a = s1.sign(BigInteger.ZERO); var sig_a = s1.sign(BigInteger.ZERO);
assert.ok(sig_a, "Sign null"); assert.ok(sig_a, 'Sign null');
assert.ok(s1.verify(BigInteger.ZERO, sig_a)); assert.ok(s1.verify(BigInteger.ZERO, sig_a));
var message = new BigInteger(1024, rng).toByteArrayUnsigned(); var message = new BigInteger(1024, rng).toByteArrayUnsigned();
var hash = Crypto.SHA256(message, {asBytes: true}); var hash = Crypto.SHA256(message, {
asBytes: true
});
var sig_b = s1.sign(hash); var sig_b = s1.sign(hash);
assert.ok(sig_b, "Sign random string"); assert.ok(sig_b, 'Sign random string');
assert.ok(s1.verify(hash, sig_b)); assert.ok(s1.verify(hash, sig_b));
var message2 = bitcoinjs.convert.hexToBytes( var message2 = bitcoinjs.convert.hexToBytes(
"12dce2c169986b3346827ffb2305cf393984627f5f9722a1b1368e933c8d" + '12dce2c169986b3346827ffb2305cf393984627f5f9722a1b1368e933c8d' +
"d296653fbe5d7ac031c4962ad0eb1c4298c3b91d244e1116b4a76a130c13" + 'd296653fbe5d7ac031c4962ad0eb1c4298c3b91d244e1116b4a76a130c13' +
"1e7aec7fa70184a71a2e66797052831511b93c6e8d72ae58a1980eaacb66" + '1e7aec7fa70184a71a2e66797052831511b93c6e8d72ae58a1980eaacb66' +
"8a33f50d7cefb96a5dab897b5efcb99cbafb0d777cb83fc9b2115b69c0fa" + '8a33f50d7cefb96a5dab897b5efcb99cbafb0d777cb83fc9b2115b69c0fa' +
"3d82507b932b84e4" '3d82507b932b84e4');
);
var hash2 = Crypto.SHA256(message2, {asBytes: true}); var hash2 = Crypto.SHA256(message2, {
asBytes: true
});
var sig_c = bitcoinjs.convert.hexToBytes( var sig_c = bitcoinjs.convert.hexToBytes(
"3044022038d9b8dd5c9fbf330565c1f51d72a59ba869aeb2c2001be959d3" + '3044022038d9b8dd5c9fbf330565c1f51d72a59ba869aeb2c2001be959d3' +
"79e861ec71960220a73945f32cf90d03127d2c3410d16cee120fa1a4b4c3" + '79e861ec71960220a73945f32cf90d03127d2c3410d16cee120fa1a4b4c3' +
"f273ab082801a95506c4" 'f273ab082801a95506c4');
);
var s2 = bitcoinjs.convert.hexToBytes( var s2 = bitcoinjs.convert.hexToBytes(
"045a1594316e433fb91f35ef4874610d22177c3f1a1060f6c1e70a609d51" + '045a1594316e433fb91f35ef4874610d22177c3f1a1060f6c1e70a609d51' +
"b20be5795cd2a5eae0d6b872ba42db95e9afaeea3fbb89e98099575b6828" + 'b20be5795cd2a5eae0d6b872ba42db95e9afaeea3fbb89e98099575b6828' +
"609a978528" '609a978528');
);
assert.ok(bitcoinjs.ecdsa.verify(hash2, sig_c, s2), "Verify constant signature"); assert.ok(bitcoinjs.ecdsa.verify(hash2, sig_c, s2), 'Verify constant signature');
}); });

Loading…
Cancel
Save