mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-06-17 02:09:44 -07:00
93 lines
1.6 KiB
JavaScript
93 lines
1.6 KiB
JavaScript
/**
|
|
* @param {number} length
|
|
*/
|
|
export function createBytes(length) {
|
|
return new Uint8Array(length);
|
|
}
|
|
|
|
/**
|
|
* @param {Uint8Array[]} parts
|
|
*/
|
|
export function concatBytes(parts) {
|
|
const length = parts.reduce((total, part) => total + part.length, 0);
|
|
const bytes = createBytes(length);
|
|
let offset = 0;
|
|
|
|
for (const part of parts) {
|
|
bytes.set(part, offset);
|
|
offset += part.length;
|
|
}
|
|
|
|
return bytes;
|
|
}
|
|
|
|
/**
|
|
* @param {Uint8Array} bytes
|
|
* @param {number} start
|
|
*/
|
|
export function readUint32(bytes, start) {
|
|
return (
|
|
bytes[start] * 0x1000000 +
|
|
bytes[start + 1] * 0x10000 +
|
|
bytes[start + 2] * 0x100 +
|
|
bytes[start + 3]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param {number} value
|
|
*/
|
|
export function writeUint32(value) {
|
|
const bytes = createBytes(4);
|
|
|
|
bytes[0] = value >>> 24;
|
|
bytes[1] = value >>> 16;
|
|
bytes[2] = value >>> 8;
|
|
bytes[3] = value;
|
|
|
|
return bytes;
|
|
}
|
|
|
|
/**
|
|
* @param {Uint8Array} bytes
|
|
*/
|
|
export function bytesToBigInt(bytes) {
|
|
let value = 0n;
|
|
|
|
for (const byte of bytes) {
|
|
value = (value << 8n) + BigInt(byte);
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
/**
|
|
* @param {bigint} value
|
|
* @param {number} length
|
|
*/
|
|
export function bigIntToBytes(value, length) {
|
|
const bytes = createBytes(length);
|
|
let remaining = value;
|
|
|
|
for (let i = length - 1; i >= 0; i -= 1) {
|
|
bytes[i] = Number(remaining & 0xffn);
|
|
remaining >>= 8n;
|
|
}
|
|
|
|
return bytes;
|
|
}
|
|
|
|
/**
|
|
* @param {Uint8Array} left
|
|
* @param {Uint8Array} right
|
|
*/
|
|
export function bytesEqual(left, right) {
|
|
if (left.length !== right.length) return false;
|
|
|
|
for (let i = 0; i < left.length; i += 1) {
|
|
if (left[i] !== right[i]) return false;
|
|
}
|
|
|
|
return true;
|
|
}
|