Can embed any file in a PNG/WebM/GIF/JPEG and upload it to a third-party host through 4chan
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.4 KiB

import { BitstreamReader as br, BitstreamWriter as bw } from '@astronautlabs/bitstream';
export const revbyte = (n: number, len = 8) => {
let acc = 0;
let n2 = n;
let len2 = len;
while (len2) {
// can't use bitshifts or binray ops or else becomes negative
acc = (acc * 2) + (n2 & 1);
n2 >>= 1;
len2--;
}
return acc;
};
export class BitstreamReader extends br {
rtotal = 0;
addBuffer(hidden: Buffer) {
const inp = Buffer.from(hidden);
for (let i = 0; i < inp.byteLength; ++i)
inp[i] = revbyte(inp[i]);
super.addBuffer(inp);
}
readSync(len: number) {
const v = super.readSync(len);
this.rtotal += len;
return revbyte(v, len);
}
}
export type Writable = {
write: (chunk: Buffer) => void;
};
export class BitstreamWriter extends bw {
wtotal = 0;
constructor(private w: Writable) {
super({
write: (c) => {
const inp = Buffer.from(c);
for (let i = 0; i < inp.byteLength; ++i)
inp[i] = revbyte(inp[i]);
this.w.write(inp);
}
});
}
write(length: number, value: number): void {
this.wtotal += length;
if (length) {
//tconsole.log(length, value)
value = revbyte(value, length);
}
super.write(length, value);
}
}