multiformats
Version:
Interface for multihash, multicodec, multibase and CID
48 lines (43 loc) • 1.38 kB
JavaScript
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;
;