61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
|
import {
|
||
|
decodeBase64,
|
||
|
decodeHex,
|
||
|
encodeBase64,
|
||
|
encodeHex,
|
||
|
} from "@std/encoding";
|
||
|
|
||
|
const encoder = new TextEncoder();
|
||
|
const decoder = new TextDecoder();
|
||
|
|
||
|
export type BinaryLike = string | Uint8Array;
|
||
|
|
||
|
export function from_utf8(s: BinaryLike): string {
|
||
|
return typeof s === "string" ? s : decoder.decode(s);
|
||
|
}
|
||
|
|
||
|
export function to_utf8(s: BinaryLike): Uint8Array {
|
||
|
return typeof s === "string" ? encoder.encode(s) : s;
|
||
|
}
|
||
|
|
||
|
export function encode_utf8(s: BinaryLike, buf: Uint8Array): number {
|
||
|
if (typeof s === "string") return encoder.encodeInto(s, buf).written;
|
||
|
else return buf.set(s), s.length;
|
||
|
}
|
||
|
|
||
|
export function from_hex(s: BinaryLike): Uint8Array {
|
||
|
return decodeHex(from_utf8(s));
|
||
|
}
|
||
|
|
||
|
export function to_hex(b: BinaryLike): string {
|
||
|
return encodeHex(to_utf8(b));
|
||
|
}
|
||
|
|
||
|
export function from_base64(s: BinaryLike): Uint8Array {
|
||
|
return decodeBase64(from_utf8(s));
|
||
|
}
|
||
|
|
||
|
export function to_base64(b: BinaryLike): string {
|
||
|
return encodeBase64(to_utf8(b));
|
||
|
}
|
||
|
|
||
|
export { equals as buf_eq, concat as buf_concat } from "@std/bytes";
|
||
|
|
||
|
export function buf_concat_fast(a: Uint8Array, b: Uint8Array) {
|
||
|
const m = a.length;
|
||
|
const c = new Uint8Array(m + b.length);
|
||
|
return c.set(a, 0), c.set(b, m), c;
|
||
|
}
|
||
|
|
||
|
export function buf_resize(buf: Uint8Array, n: number) {
|
||
|
const res = new Uint8Array(n);
|
||
|
return res.set(buf.subarray(0, n)), res;
|
||
|
}
|
||
|
|
||
|
export function buf_xor(a: Uint8Array, b: Uint8Array) {
|
||
|
const n = Math.max(a.length, b.length);
|
||
|
const c = new Uint8Array(n);
|
||
|
for (let i = 0; i < n; i++) c[i] = a[i] ^ b[i];
|
||
|
return c;
|
||
|
}
|