UNPKG

multiformats

Version:

Interface for multihash, multicodec, multibase and CID

48 lines (43 loc) 1.38 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var bytes = require('../bytes.js'); var varint = require('../varint.js'); const create = (code, digest) => { const size = digest.byteLength; const sizeOffset = varint.encodingLength(code); const digestOffset = sizeOffset + varint.encodingLength(size); const bytes = new Uint8Array(digestOffset + size); varint.encodeTo(code, bytes, 0); varint.encodeTo(size, bytes, sizeOffset); bytes.set(digest, digestOffset); return new Digest(code, size, digest, bytes); }; const decode = multihash => { const bytes$1 = bytes.coerce(multihash); const [code, sizeOffset] = varint.decode(bytes$1); const [size, digestOffset] = varint.decode(bytes$1.subarray(sizeOffset)); const digest = bytes$1.subarray(sizeOffset + digestOffset); if (digest.byteLength !== size) { throw new Error('Incorrect length'); } return new Digest(code, size, digest, bytes$1); }; const equals = (a, b) => { if (a === b) { return true; } else { return a.code === b.code && a.size === b.size && bytes.equals(a.bytes, b.bytes); } }; class Digest { constructor(code, size, digest, bytes) { this.code = code; this.size = size; this.digest = digest; this.bytes = bytes; } } exports.Digest = Digest; exports.create = create; exports.decode = decode; exports.equals = equals;