melis-api-js
Version:
Melis Javascript API bindings
65 lines (53 loc) • 1.54 kB
JavaScript
const base58 = require('bs58')
const ghash = require('groestl-hash-js')
function groestlx2(buffer) {
return ghash.groestl_2([...buffer], 1, 1)
}
const bs58checkBase = function (checksumFn) {
// Encode a buffer as a base58-check encoded string
function encode(hash, prefix) {
var payload = hash
if (prefix) {
payload = Buffer.allocUnsafe(hash.length + 1)
payload.writeUInt8(prefix, 0)
hash.copy(payload, 1)
}
const checksum = Buffer.from(checksumFn(payload))
return base58.encode(Buffer.concat([
payload,
checksum
], payload.length + 4))
}
function decodeRaw(buffer) {
const payload = buffer.slice(0, -4)
const checksum = buffer.slice(-4)
const newChecksum = checksumFn(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) {
const buffer = base58.decode(string)
const payload = decodeRaw(buffer, checksumFn)
if (!payload)
throw new Error('Invalid checksum in base58 GRS encoding')
return payload
}
return {
encode: encode,
decode: decode,
decodeUnsafe: decodeUnsafe
}
}
module.exports = bs58checkBase(groestlx2)