ripple-bs58check
Version:
A straightforward implementation of base58-check encoding
55 lines (43 loc) • 1.25 kB
JavaScript
var base58 = require('ripple-bs58')
var createHash = require('create-hash')
// SHA256(SHA256(buffer))
function sha256x2 (buffer) {
var tmp = createHash('sha256').update(buffer).digest()
return createHash('sha256').update(tmp).digest()
}
// Encode a buffer as a base58-check encoded string
function encode (payload) {
var checksum = sha256x2(payload)
return base58.encode(Buffer.concat([
payload,
checksum
], payload.length + 4))
}
function decodeRaw (buffer) {
var payload = buffer.slice(0, -4)
var checksum = buffer.slice(-4)
var newChecksum = sha256x2(payload)
if (checksum[0] ^ newChecksum[0] |
checksum[1] ^ newChecksum[1] |
checksum[2] ^ newChecksum[2] |
checksum[3] ^ newChecksum[3]) return
return payload
}
// Decode a base58-check encoded string to a buffer, no result if checksum is wrong
function decodeUnsafe (string) {
var buffer = base58.decodeUnsafe(string)
if (!buffer) return
return decodeRaw(buffer)
}
function decode (string) {
var buffer = base58.decode(string)
var payload = decodeRaw(buffer)
if (!payload) throw new Error('Invalid checksum')
return payload
}
module.exports = {
encode: encode,
decode: decode,
decodeUnsafe: decodeUnsafe
}