Skip to content

Commit 1349ab2

Browse files
committed
Merge pull request bitcoinjs#144 from dcousens/b58clean
Base58 test cleanup and extracted vectors
2 parents 7f8dcd5 + 231ccdd commit 1349ab2

File tree

5 files changed

+238
-105
lines changed

5 files changed

+238
-105
lines changed

test/address.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
var assert = require('assert')
22
var Address = require('..').Address
3+
4+
var b58fixtures = require('./fixtures/base58')
35
var fixtures = require('./fixtures/address')
46

57
describe('Address', function() {
@@ -19,9 +21,9 @@ describe('Address', function() {
1921

2022
describe('fromBase58Check', function() {
2123
it('throws on invalid base58check', function() {
22-
fixtures.malformed.forEach(function(f) {
24+
b58fixtures.invalid.forEach(function(f) {
2325
assert.throws(function() {
24-
Address.fromBase58Check(f.base58check)
26+
Address.fromBase58Check(f)
2527
})
2628
})
2729
})

test/base58.js

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,27 @@
11
var assert = require('assert')
22
var base58 = require('../').base58
33

4-
describe('base58', function() {
5-
var evec, dvec
6-
7-
beforeEach(function() {
8-
// base58 encoded strings
9-
evec = [
10-
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU', // 0x00 WIF
11-
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf', // 0x01 WIF
12-
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreQyNNN1W', // 0x7f WIF
13-
'1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm', // uncompressed 0x01 address
14-
'1FB8cZijTpRQp3HX8AEkNuQJBqApqfTcX7' // uncompressed 0x7f address
15-
]
16-
17-
// decoded equivalent of above
18-
dvec = [
19-
'8000000000000000000000000000000000000000000000000000000000000000000565fba7',
20-
'800000000000000000000000000000000000000000000000000000000000000001a85aa87e',
21-
'80000000000000000000000000000000000000000000000000000000000000007f64046be9',
22-
'0091b24bf9f5288532960ac687abb035127b1d28a50074ffe0',
23-
'009b7c46977b68474e12066a370b169ec6b9b026444d210d6e'
24-
].map(function(h) {
25-
return new Buffer(h, 'hex')
26-
})
27-
})
4+
var fixtures = require('./fixtures/base58')
285

6+
describe('base58', function() {
297
describe('decode', function() {
308
it('decodes the test vectors', function() {
31-
evec.forEach(function(x, i) {
32-
var actual = base58.decode(x)
33-
var expected = dvec[i]
9+
fixtures.valid.forEach(function(f) {
10+
var actual = base58.decode(f.encoded.string)
11+
var expected = f.encoded.hex
3412

35-
assert.deepEqual(actual, expected)
13+
assert.equal(actual.toString('hex'), expected)
3614
})
3715
})
3816
})
3917

4018
describe('encode', function() {
4119
it('encodes the test vectors', function() {
42-
dvec.forEach(function(x, i) {
43-
var actual = base58.encode(x)
44-
var expected = evec[i]
20+
fixtures.valid.forEach(function(f) {
21+
var actual = base58.encode(new Buffer(f.encoded.hex, 'hex'))
22+
var expected = f.encoded.string
4523

46-
assert.deepEqual(actual, expected)
24+
assert.equal(actual, expected)
4725
})
4826
})
4927
})

test/base58check.js

Lines changed: 26 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,42 @@
11
var assert = require('assert')
22
var base58check = require('../').base58check
33

4-
describe('base58check', function() {
5-
var evec, dvec
6-
7-
beforeEach(function() {
8-
function fromHex(h) { return new Buffer(h, 'hex') }
9-
10-
// base58check encoded strings
11-
evec = [
12-
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU', // 0x00 WIF
13-
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf', // 0x01 WIF
14-
'5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreQyNNN1W', // 0x7f WIF
15-
'1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm', // uncompressed 0x01 address
16-
'1FB8cZijTpRQp3HX8AEkNuQJBqApqfTcX7' // uncompressed 0x7f address
17-
]
18-
19-
// decoded equivalent of above
20-
dvec = [
21-
{
22-
version: 0x80,
23-
payload: '0000000000000000000000000000000000000000000000000000000000000000',
24-
checksum: '0565fba7'
25-
},
26-
{
27-
version: 0x80,
28-
payload: '0000000000000000000000000000000000000000000000000000000000000001',
29-
checksum: 'a85aa87e',
30-
},
31-
{
32-
version: 0x80,
33-
payload: '000000000000000000000000000000000000000000000000000000000000007f',
34-
checksum: '64046be9',
35-
},
36-
{
37-
version: 0x00,
38-
payload: '91b24bf9f5288532960ac687abb035127b1d28a5',
39-
checksum: '0074ffe0',
40-
},
41-
{
42-
version: 0x00,
43-
payload: '9b7c46977b68474e12066a370b169ec6b9b02644',
44-
checksum: '4d210d6e'
45-
}
46-
].map(function(x) {
47-
return {
48-
version: x.version,
49-
payload: fromHex(x.payload),
50-
checksum: fromHex(x.checksum)
51-
}
52-
})
53-
})
4+
var fixtures = require('./fixtures/base58')
545

6+
describe('base58check', function() {
557
describe('decode', function() {
568
it('decodes the test vectors', function() {
57-
evec.forEach(function(x, i) {
58-
var actual = base58check.decode(x)
59-
var expected = dvec[i]
9+
fixtures.valid.forEach(function(f) {
10+
var actual = base58check.decode(f.encoded.string)
11+
var expected = f.decoded
12+
13+
assert.deepEqual({
14+
version: actual.version,
15+
payload: actual.payload.toString('hex'),
16+
checksum: actual.checksum.toString('hex')
17+
}, expected)
18+
})
19+
})
6020

61-
assert.deepEqual(actual, expected)
21+
it('throws on invalid strings', function() {
22+
fixtures.invalid.forEach(function(f) {
23+
assert.throws(function() {
24+
base58check.decode(f)
25+
})
6226
})
6327
})
6428
})
6529

6630
describe('encode', function() {
6731
it('encodes the test vectors', function() {
68-
dvec.forEach(function(x, i) {
69-
var actual = base58check.encode(x.payload, x.version)
70-
var expected = evec[i]
71-
72-
assert.deepEqual(actual, expected)
32+
fixtures.valid.forEach(function(f) {
33+
var actual = base58check.encode(
34+
new Buffer(f.decoded.payload, 'hex'),
35+
f.decoded.version
36+
)
37+
var expected = f.encoded.string
38+
39+
assert.equal(actual, expected)
7340
})
7441
})
7542
})

test/fixtures/address.js

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,5 @@ module.exports = {
2626
hex: 'cd7b44d0b03f2d026d1e586d7ae18903b0d385f6',
2727
base58check: '2NByiBUaEXrhmqAsg7BbLpcQSAQs1EDwt5w'
2828
}
29-
],
30-
malformed: [
31-
'45k2PvUfZw',
32-
'8cVHMKGRJGMEVz',
33-
'AMPCMAGBmj9EE9oGED',
34-
'oJPsqvHTSFFWMcmNS3aDidZexw',
35-
'bpiuHmqwCdiHx4ASNLGvZeBw9taY',
36-
'2ansc1MsREU2HetNdPGs2eHXTY16ircdyaH',
37-
'iTKsHH39ooQPFxzX6RFtjPESpQ1',
38-
'4TU74v3jnoTZGV5UuJGcr7XRg7hU',
39-
'2a3wk37F1YmfqVtBam4gEn63oNuj',
40-
'3rtH2aquyk4q1KGaXuiMGxaGfVPH'
4129
]
4230
}

test/fixtures/base58.js

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
module.exports = {
2+
valid: [
3+
{
4+
encoded: {
5+
hex: '800000000000000000000000000000000000000000000000000000000000000001014671fc3f',
6+
string: 'KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn'
7+
},
8+
decoded: {
9+
version: 128,
10+
payload: '000000000000000000000000000000000000000000000000000000000000000101',
11+
checksum: '4671fc3f'
12+
}
13+
},
14+
{
15+
encoded: {
16+
hex: '00751e76e8199196d454941c45d1b3a323f1433bd6510d1634',
17+
string: '1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH'
18+
},
19+
decoded: {
20+
version: 0,
21+
payload: '751e76e8199196d454941c45d1b3a323f1433bd6',
22+
checksum: '510d1634'
23+
}
24+
},
25+
{
26+
encoded: {
27+
hex: '80000000000000000000000000000000007777777777777777777777777777777701f0845454',
28+
string: 'KwDiBf89QgGbjEhKnhXJuH7UChJaB4ZGvCvAAf7taDvRnbQnjxps'
29+
},
30+
decoded: {
31+
version: 128,
32+
payload: '000000000000000000000000000000007777777777777777777777777777777701',
33+
checksum: 'f0845454'
34+
}
35+
},
36+
{
37+
encoded: {
38+
hex: '006b420cc35afb4d96ea118dbf1fc8ef4b0990798cb4f216d9',
39+
string: '1An8RkWzqVF9GvpQFVX5AM4jpFe43eoPfe'
40+
},
41+
decoded: {
42+
version: 0,
43+
payload: '6b420cc35afb4d96ea118dbf1fc8ef4b0990798c',
44+
checksum: 'b4f216d9'
45+
}
46+
},
47+
{
48+
encoded: {
49+
hex: '80fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414001608f2ef0',
50+
string: 'L5oLkpV3aqBjhki6LmvChTCV6odsp4SXM6FfU2Gppt5kFLaHLuZ9'
51+
},
52+
decoded: {
53+
version: 128,
54+
payload: 'fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414001',
55+
checksum: '608f2ef0'
56+
}
57+
},
58+
{
59+
encoded: {
60+
hex: '00adde4c73c7b9cee17da6c7b3e2b2eea1a0dcbe672c2b0787',
61+
string: '1GrLCmVQXoyJXaPJQdqssNqwxvha1eUo2E'
62+
},
63+
decoded: {
64+
version: 0,
65+
payload: 'adde4c73c7b9cee17da6c7b3e2b2eea1a0dcbe67',
66+
checksum: '2c2b0787'
67+
}
68+
},
69+
{
70+
encoded: {
71+
hex: '806685bb38cf8d16d22741f00140622fccf3ab21fe6804d433140a4cf301e6b4dd01c5de2a2f',
72+
string: 'Kzf11e3pDUh5ZRjcQKwvT3BeA25X5ErdccGatoTx8WJi6f49qzrr'
73+
},
74+
decoded: {
75+
version: 128,
76+
payload: '6685bb38cf8d16d22741f00140622fccf3ab21fe6804d433140a4cf301e6b4dd01',
77+
checksum: 'c5de2a2f'
78+
}
79+
},
80+
{
81+
encoded: {
82+
hex: '00cce94f5f00db418576b78c6a4dae2366fae89638d0b3efb8',
83+
string: '1KgULoNDuBeHovVskY3MAfNFonzBMETt6B'
84+
},
85+
decoded: {
86+
version: 0,
87+
payload: 'cce94f5f00db418576b78c6a4dae2366fae89638',
88+
checksum: 'd0b3efb8'
89+
}
90+
},
91+
{
92+
encoded: {
93+
hex: 'ef00000000000000000000000000000000000000000000000000000000000000010184e38d1f',
94+
string: 'cMahea7zqjxrtgAbB7LSGbcQUr1uX1ojuat9jZodMN87JcbXMTcA'
95+
},
96+
decoded: {
97+
version: 239,
98+
payload: '000000000000000000000000000000000000000000000000000000000000000101',
99+
checksum: '84e38d1f'
100+
}
101+
},
102+
{
103+
encoded: {
104+
hex: '6f751e76e8199196d454941c45d1b3a323f1433bd655c484e3',
105+
string: 'mrCDrCybB6J1vRfbwM5hemdJz73FwDBC8r'
106+
},
107+
decoded: {
108+
version: 111,
109+
payload: '751e76e8199196d454941c45d1b3a323f1433bd6',
110+
checksum: '55c484e3'
111+
}
112+
},
113+
{
114+
encoded: {
115+
hex: 'ef0000000000000000000000000000000077777777777777777777777777777777014a7bd246',
116+
string: 'cMahea7zqjxrtgAbB7LSGbcXpvbyqWexzF4dH5aQ5LaS3LRBaSUV'
117+
},
118+
decoded: {
119+
version: 239,
120+
payload: '000000000000000000000000000000007777777777777777777777777777777701',
121+
checksum: '4a7bd246'
122+
}
123+
},
124+
{
125+
encoded: {
126+
hex: '6f6b420cc35afb4d96ea118dbf1fc8ef4b0990798cc00f9280',
127+
string: 'mqJ5iobyeWgQ43J1y4VSzGH4gFEkxw2dFV'
128+
},
129+
decoded: {
130+
version: 111,
131+
payload: '6b420cc35afb4d96ea118dbf1fc8ef4b0990798c',
132+
checksum: 'c00f9280'
133+
}
134+
},
135+
{
136+
encoded: {
137+
hex: 'effffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641400143ef4bf2',
138+
string: 'cWALDjUu1tszsCBMjBjL4mhYj2wHUWYDR8Q8aSjLKzjkW5eBtpzu'
139+
},
140+
decoded: {
141+
version: 239,
142+
payload: 'fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414001',
143+
checksum: '43ef4bf2'
144+
}
145+
},
146+
{
147+
encoded: {
148+
hex: '6fadde4c73c7b9cee17da6c7b3e2b2eea1a0dcbe670a342a51',
149+
string: 'mwNHVpaPLqQZJgrv8CpFhJ4GpvJGumskXi'
150+
},
151+
decoded: {
152+
version: 111,
153+
payload: 'adde4c73c7b9cee17da6c7b3e2b2eea1a0dcbe67',
154+
checksum: '0a342a51'
155+
}
156+
},
157+
{
158+
encoded: {
159+
hex: 'ef6685bb38cf8d16d22741f00140622fccf3ab21fe6804d433140a4cf301e6b4dd0124df07e1',
160+
string: 'cR1zUZ3feYPLisCsnjm3pMghnFNvjgxKgeR41DvTdcxiMQ4g9ZYC'
161+
},
162+
decoded: {
163+
version: 239,
164+
payload: '6685bb38cf8d16d22741f00140622fccf3ab21fe6804d433140a4cf301e6b4dd01',
165+
checksum: '24df07e1'
166+
}
167+
},
168+
{
169+
encoded: {
170+
hex: '6fcce94f5f00db418576b78c6a4dae2366fae8963831693070',
171+
string: 'mzCRdrTCiD5Yb2yVU71izaaafnatCA4DCT'
172+
},
173+
decoded: {
174+
version: 111,
175+
payload: 'cce94f5f00db418576b78c6a4dae2366fae89638',
176+
checksum: '31693070'
177+
}
178+
}
179+
],
180+
invalid: [
181+
'fN2C5x86J',
182+
'BiLLNZvcHTJWoL',
183+
'MP3zZBT27cEeP4asJD',
184+
'kfjbP4kdqZcZ5tThHpxmgWQ8vk',
185+
'oM6DB1STJKkv9NtPs2vHer6yUBh',
186+
'wkC5tvzZHuKmnrWwVMioYueXCSx',
187+
'BoW61uTv9aHNZtfZzcGXMSJvuc3',
188+
'HhRv5VFtWmf6y28fWUC4WijZ6UV',
189+
'2QPqahfnSzPRScGyaCSFL8JUZkar',
190+
'2RpPJRJyxYz1MTShU2gV8Gy1oDdM',
191+
'2p1tshmtxKWeovXFe68Qu6wNFNqg',
192+
'2bYahuZyEDrw12USasbLdxGfkDH9',
193+
'2Pfp453t1TEkj116QEDaW5hkmf3y',
194+
'47aZqGXrM3XzEy5mWs3wC4guA7hJ',
195+
'BUaVB8rxkTyTPntSRV4sw32vLKUZS',
196+
'2S7rqjHw5yypNZ7WrCCAr9HCQ9Va46WJnNb'
197+
]
198+
}

0 commit comments

Comments
 (0)