Andreas Brekken
11 years ago
9 changed files with 314 additions and 272 deletions
@ -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); |
||||
}); |
}) |
||||
|
}) |
||||
|
}) |
||||
|
@ -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); |
||||
}); |
}) |
||||
|
}) |
||||
|
@ -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); |
||||
}); |
}) |
||||
|
}) |
||||
|
}) |
||||
|
@ -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)); |
||||
}); |
}) |
||||
|
}) |
||||
|
}) |
||||
|
Loading…
Reference in new issue