UNPKG

merkle-reference

Version:

This is a TS library implementing [merkle reference] specification.

38 lines (33 loc) 762 B
import * as Tag from './tag.js' export const tag = Tag.for('merkle-structure:integer/leb128') export const name = 'Integer' /** * @param {bigint|number} value */ export const toBytes = (value) => leb128(BigInt(value)) /** * @param {bigint} value */ export const leb128 = (value) => { let bytes = [] let more = true while (more) { let byte = value & 0x7fn value >>= 7n if ( (value === 0n && (byte & 0x40n) === 0n) || (value === -1n && (byte & 0x40n) !== 0n) ) { more = false } else { byte |= 0x80n } bytes.push(Number(byte)) } return new Uint8Array(bytes) } /** * @param {bigint|number} value * @return {import('./tree.js').Branch} */ export const toTree = (value) => [tag, toBytes(value)]