Merge pull request #112 from dcousens/b58
Base58 isolation and preparation for Buffers
This commit is contained in:
commit
703275f235
12 changed files with 281 additions and 150 deletions
|
@ -1,7 +1,8 @@
|
|||
var assert = require('assert')
|
||||
var Address = require('../src/address.js')
|
||||
var network = require('../src/network.js')
|
||||
var base58 = require('../src/base58.js')
|
||||
var Address = require('../src/address')
|
||||
var network = require('../src/network')
|
||||
var base58 = require('../src/base58')
|
||||
var base58check = require('../src/base58check')
|
||||
var mainnet = network.mainnet.addressVersion
|
||||
var testnet = network.testnet.addressVersion
|
||||
|
||||
|
@ -10,10 +11,10 @@ describe('Address', function() {
|
|||
var testnetP2shAddress, mainnetP2shAddress
|
||||
|
||||
beforeEach(function(){
|
||||
testnetAddress = 'mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef'
|
||||
mainnetAddress = '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'
|
||||
testnetP2shAddress = '2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7'
|
||||
testnetAddress = 'mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef'
|
||||
mainnetP2shAddress = '3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt'
|
||||
testnetP2shAddress = '2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7'
|
||||
})
|
||||
|
||||
describe('parsing', function() {
|
||||
|
@ -36,14 +37,14 @@ describe('Address', function() {
|
|||
})
|
||||
|
||||
it('works for byte input', function() {
|
||||
var hash = base58.checkDecode('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa')
|
||||
var addr = new Address(hash)
|
||||
assert.equal(addr.hash, hash)
|
||||
var hash = base58check.decode(mainnetAddress)
|
||||
var addr = new Address(hash.payload)
|
||||
assert.equal(addr.hash, hash.payload)
|
||||
assert.equal(network.mainnet.addressVersion, hash.version)
|
||||
|
||||
var hash = base58.checkDecode('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef')
|
||||
var addr = new Address(hash)
|
||||
assert.equal(addr.hash, hash)
|
||||
var hash = base58check.decode(testnetAddress)
|
||||
var addr = new Address(hash.payload)
|
||||
assert.equal(addr.hash, hash.payload)
|
||||
assert.equal(network.testnet.addressVersion, hash.version)
|
||||
})
|
||||
|
||||
|
@ -56,8 +57,8 @@ describe('Address', function() {
|
|||
|
||||
describe('getVersion', function() {
|
||||
it('returns the proper address version', function() {
|
||||
assert.equal(Address.getVersion('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'), network.mainnet.addressVersion)
|
||||
assert.equal(Address.getVersion('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef'), network.testnet.addressVersion)
|
||||
assert.equal(Address.getVersion(mainnetAddress), network.mainnet.addressVersion)
|
||||
assert.equal(Address.getVersion(testnetAddress), network.testnet.addressVersion)
|
||||
})
|
||||
})
|
||||
|
||||
|
|
|
@ -1,48 +1,50 @@
|
|||
var assert = require('assert')
|
||||
var base58 = require('../').base58
|
||||
var convert = require('../').convert
|
||||
|
||||
describe('base58', function() {
|
||||
var evec, dvec
|
||||
|
||||
beforeEach(function() {
|
||||
// base58 encoded strings
|
||||
evec = [
|
||||
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU', // 0x00 WIF
|
||||
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf', // 0x01 WIF
|
||||
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreQyNNN1W', // 0x7f WIF
|
||||
'1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm', // uncompressed 0x01 address
|
||||
'1FB8cZijTpRQp3HX8AEkNuQJBqApqfTcX7' // uncompressed 0x7f address
|
||||
]
|
||||
|
||||
// decoded equivalent of above
|
||||
dvec = [
|
||||
'8000000000000000000000000000000000000000000000000000000000000000000565fba7',
|
||||
'800000000000000000000000000000000000000000000000000000000000000001a85aa87e',
|
||||
'80000000000000000000000000000000000000000000000000000000000000007f64046be9',
|
||||
'0091b24bf9f5288532960ac687abb035127b1d28a50074ffe0',
|
||||
'009b7c46977b68474e12066a370b169ec6b9b026444d210d6e'
|
||||
].map(function(h) {
|
||||
return new Buffer(h, 'hex')
|
||||
})
|
||||
})
|
||||
|
||||
describe('decode', function() {
|
||||
it('validates known examples', function() {
|
||||
var enc = '5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ'
|
||||
var hex = '800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d'
|
||||
assert.deepEqual(base58.decode(enc), convert.hexToBytes(hex))
|
||||
it('decodes the test vectors', function() {
|
||||
evec.forEach(function(x, i) {
|
||||
var actual = base58.decode(x)
|
||||
var expected = dvec[i]
|
||||
|
||||
assert.deepEqual(expected, actual)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('encode', function() {
|
||||
it('handles known examples', function() {
|
||||
var enc = '5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ'
|
||||
var hex = '800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d'
|
||||
assert.equal(base58.encode(convert.hexToBytes(hex)), enc)
|
||||
})
|
||||
})
|
||||
it('encodes the test vectors', function() {
|
||||
dvec.forEach(function(x, i) {
|
||||
var actual = base58.encode(x)
|
||||
var expected = evec[i]
|
||||
|
||||
describe('checkEncode', function() {
|
||||
it('handles known examples', function() {
|
||||
var input = [
|
||||
171, 210, 178, 125, 2, 16, 86, 184, 248, 88, 235,
|
||||
163, 244, 160, 83, 156, 184, 186, 45, 167, 169, 164,
|
||||
67, 125, 163, 89, 106, 243, 207, 193, 149, 206
|
||||
]
|
||||
var vbyte = 239
|
||||
|
||||
assert.equal(base58.checkEncode(input, vbyte),
|
||||
'92tb9mjz6q9eKZjYvLsgk87kPrMoh7BGRumSzPeUGhmigtsfrbP')
|
||||
})
|
||||
})
|
||||
|
||||
describe('checkDecode', function() {
|
||||
it('handles known examples', function() {
|
||||
var input = '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'
|
||||
var expected = [
|
||||
98, 233, 7, 177, 92, 191, 39, 213, 66, 83,
|
||||
153, 235, 246, 240, 251, 80, 235, 184, 143, 24
|
||||
]
|
||||
expected.version = 0
|
||||
|
||||
assert.deepEqual(base58.checkDecode(input), expected)
|
||||
assert.deepEqual(expected, actual)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
76
test/base58check.js
Normal file
76
test/base58check.js
Normal file
|
@ -0,0 +1,76 @@
|
|||
var assert = require('assert')
|
||||
var base58check = require('../').base58check
|
||||
|
||||
describe('base58check', function() {
|
||||
var evec, dvec
|
||||
|
||||
beforeEach(function() {
|
||||
function fromHex(h) { return new Buffer(h, 'hex') }
|
||||
|
||||
// base58check encoded strings
|
||||
evec = [
|
||||
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU', // 0x00 WIF
|
||||
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf', // 0x01 WIF
|
||||
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreQyNNN1W', // 0x7f WIF
|
||||
'1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm', // uncompressed 0x01 address
|
||||
'1FB8cZijTpRQp3HX8AEkNuQJBqApqfTcX7' // uncompressed 0x7f address
|
||||
]
|
||||
|
||||
// decoded equivalent of above
|
||||
dvec = [
|
||||
{
|
||||
version: 0x80,
|
||||
payload: '0000000000000000000000000000000000000000000000000000000000000000',
|
||||
checksum: '0565fba7'
|
||||
},
|
||||
{
|
||||
version: 0x80,
|
||||
payload: '0000000000000000000000000000000000000000000000000000000000000001',
|
||||
checksum: 'a85aa87e',
|
||||
},
|
||||
{
|
||||
version: 0x80,
|
||||
payload: '000000000000000000000000000000000000000000000000000000000000007f',
|
||||
checksum: '64046be9',
|
||||
},
|
||||
{
|
||||
version: 0x00,
|
||||
payload: '91b24bf9f5288532960ac687abb035127b1d28a5',
|
||||
checksum: '0074ffe0',
|
||||
},
|
||||
{
|
||||
version: 0x00,
|
||||
payload: '9b7c46977b68474e12066a370b169ec6b9b02644',
|
||||
checksum: '4d210d6e'
|
||||
}
|
||||
].map(function(x) {
|
||||
return {
|
||||
version: x.version,
|
||||
payload: fromHex(x.payload),
|
||||
checksum: fromHex(x.checksum)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe('decode', function() {
|
||||
it('decodes the test vectors', function() {
|
||||
evec.forEach(function(x, i) {
|
||||
var actual = base58check.decode(x)
|
||||
var expected = dvec[i]
|
||||
|
||||
assert.deepEqual(expected, actual)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('encode', function() {
|
||||
it('encodes the test vectors', function() {
|
||||
dvec.forEach(function(x, i) {
|
||||
var actual = base58check.encode(x.payload, x.version)
|
||||
var expected = evec[i]
|
||||
|
||||
assert.deepEqual(expected, actual)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue