UNPKG

@waku/rln

Version:

RLN (Rate Limiting Nullifier) implementation for Waku

63 lines (60 loc) 1.75 kB
import { equals as equals$1, coerce } from '../bytes.js'; import { encodeTo, decode as decode$1, encodingLength } from '../varint.js'; /** * Creates a multihash digest. */ function create(code, digest) { const size = digest.byteLength; const sizeOffset = encodingLength(code); const digestOffset = sizeOffset + encodingLength(size); const bytes = new Uint8Array(digestOffset + size); encodeTo(code, bytes, 0); encodeTo(size, bytes, sizeOffset); bytes.set(digest, digestOffset); return new Digest(code, size, digest, bytes); } /** * Turns bytes representation of multihash digest into an instance. */ function decode(multihash) { const bytes = coerce(multihash); const [code, sizeOffset] = decode$1(bytes); const [size, digestOffset] = decode$1(bytes.subarray(sizeOffset)); const digest = bytes.subarray(sizeOffset + digestOffset); if (digest.byteLength !== size) { throw new Error('Incorrect length'); } return new Digest(code, size, digest, bytes); } function equals(a, b) { if (a === b) { return true; } else { const data = b; return (a.code === data.code && a.size === data.size && data.bytes instanceof Uint8Array && equals$1(a.bytes, data.bytes)); } } /** * Represents a multihash digest which carries information about the * hashing algorithm and an actual hash digest. */ class Digest { code; size; digest; bytes; /** * Creates a multihash digest. */ constructor(code, size, digest, bytes) { this.code = code; this.size = size; this.digest = digest; this.bytes = bytes; } } export { Digest, create, decode, equals };