uwurandom
Version:
`/dev/urandom` is made out of cold hard math. Instead, consider using `/dev/uwurandom`, which generates data through a tiny catgirl furiously typing away utter nonsense inside your computer.
78 lines (77 loc) • 11.1 kB
JavaScript
const wasmBinaryString = atob('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');
const wasmData = new Uint8Array(wasmBinaryString.length);
for (let i = 0; i < wasmBinaryString.length; i++) {
wasmData[i] = wasmBinaryString.charCodeAt(i);
}
const module = new WebAssembly.Module(wasmData);
const instance = new WebAssembly.Instance(module, {
env: {
uwuwasm_getrandom(dst, size) {
crypto.getRandomValues(new Uint8Array(memory.buffer, dst, size));
}
}
});
const { uwuwasm_init, uwuwasm_free, uwuwasm_write_chars, malloc, free, memory } = instance.exports;
const DECODER = new TextDecoder();
/**
* Stateful uwurandom generator.
*/
export class UwurandomState {
constructor() {
this.ptr = uwuwasm_init();
if (this.ptr === 0) {
throw new Error('Out of memory');
}
}
/**
* Generate cat nonsense into the provided buffer.
* @param dest A buffer, allocated within this instance.
*/
generate(dest) {
uwuwasm_write_chars(this.ptr, dest.ptr, dest.size);
}
/**
* Destroy this generator, freeing its underlying WASM memory.
*/
destroy() {
uwuwasm_free(this.ptr);
}
}
/**
* Memory allocation within this WASM instance, used for writing cat
* nonsense into.
*/
export class DestBuffer {
/**
* Allocate a new buffer.
* @param size The size, in bytes, of this buffer.
*/
constructor(size) {
this.ptr = malloc(size);
if (this.ptr === 0) {
throw new Error('Out of memory');
}
this.size = size;
}
/**
* @returns This buffer as a {@link Uint8Array} view into the underlying
* WASM memory. Note that allocating further {@link DestBuffer}s or
* {@link UwurandomState}s may grow the WebAssembly memory and
* invalidate this array view!
*/
asTypedArray() {
return new Uint8Array(memory.buffer, this.ptr, this.size);
}
/**
* @returns The text contents of this buffer.
*/
asText() {
return DECODER.decode(this.asTypedArray());
}
/**
* Free this buffer's underlying WASM memory.
*/
destroy() {
free(this.ptr);
}
}