bitcoinjs-lib/src/base58check.js
Daniel Cousens 2fc69b0834 address/base58check: fix missing exceptions/tests
All the `invalid2` tests have been removed as they were not invalid
base58check.  They were actually valid in some cases.
They will be re-integrated in more specific bitcoin core tests in
relation to Address/ECKey respectively.
2014-05-29 14:43:44 +10:00

47 lines
1.1 KiB
JavaScript

// https://en.bitcoin.it/wiki/Base58Check_encoding
var assert = require('assert')
var base58 = require('./base58')
var crypto = require('./crypto')
// Encode a buffer as a base58-check-encoded string
function encode(buffer, version) {
version = version || 0
// FIXME: `new Buffer(buffer)` is unnecessary if input is a Buffer
var version = new Buffer([version])
var payload = new Buffer(buffer)
var message = Buffer.concat([version, payload])
var checksum = crypto.hash256(message).slice(0, 4)
return base58.encode(Buffer.concat([
message,
checksum
]))
}
// Decode a base58-check-encoded string to a buffer
function decode(string) {
var buffer = base58.decode(string)
var message = buffer.slice(0, -4)
var checksum = buffer.slice(-4)
var newChecksum = crypto.hash256(message).slice(0, 4)
assert.deepEqual(newChecksum, checksum, 'Invalid checksum')
var version = message.readUInt8(0)
var payload = message.slice(1)
return {
version: version,
payload: payload,
checksum: checksum
}
}
module.exports = {
encode: encode,
decode: decode
}