// Package varn implements variable-length encoding for unsigned integers and // byte slices. It is used in the OpenTimestamps protocol to encode // instructions and attestations. The encoding is similar to the one used in // Protocol Buffers, but with a different format for the variable-length // integers. The encoding is designed to be compact and efficient, while still // being easy to decode. The package provides functions to read and write // variable-length integers and byte slices, as well as a Buffer type for // reading and writing data in a more convenient way. The package is not // thread-safe and should not be used concurrently. It is intended for use in // the OpenTimestamps protocol and is not a general-purpose encoding library. package varn // AppendVarUint appends a variable-length unsigned integer to the buffer func AppendVarUint(buf []byte, value uint64) []byte { if value == 0 { buf = append(buf, 0) } else { for value != 0 { b := byte(value & 0b01111111) if value > 0b01111111 { b |= 0b10000000 } buf = append(buf, b) if value <= 0b01111111 { break } value >>= 7 } } return buf } func AppendVarBytes(buf []byte, value []byte) []byte { buf = AppendVarUint(buf, uint64(len(value))) buf = append(buf, value...) return buf }