TOTPFit/lib/protobuf-decoder/varintUtils.js

24 lines
510 B
JavaScript
Raw Normal View History

export function decodeVarint(buffer, offset) {
2025-03-17 13:37:12 +03:00
let res = this.BigInt(0);
let shift = 0;
let byte = 0;
do {
if (offset >= buffer.length) {
throw new RangeError("Index out of bound decoding varint");
}
byte = buffer[offset++];
2025-03-17 13:37:12 +03:00
const multiplier = this.BigInt(2) ** this.BigInt(shift);
const thisByteValue = this.BigInt(byte & 0x7f) * multiplier;
shift += 7;
2025-03-17 13:37:12 +03:00
res = res + thisByteValue;
} while (byte >= 0x80);
return {
value: res,
length: shift / 7
};
}