@hazae41/chacha20poly1305
Version:
ChaCha20Poly1305 adapter for WebAssembly and JS implementations
78 lines (77 loc) • 2.69 kB
JavaScript
import { Abstract } from "../abstract/mod.js";
export function fromWasm(wasm) {
class Memory extends Abstract.Memory {
inner;
constructor(inner) {
super();
this.inner = inner;
}
[Symbol.dispose]() {
this.inner[Symbol.dispose]();
}
static fromOrThrow(memory) {
if (memory instanceof Memory)
return memory;
if (memory instanceof Uint8Array)
return new Memory(new wasm.Memory(memory));
if (memory.inner instanceof wasm.Memory)
return new Memory(memory.inner);
return new Memory(new wasm.Memory(memory.bytes));
}
get bytes() {
return this.inner.bytes;
}
}
class ChaCha20Cipher extends Abstract.ChaCha20Cipher {
inner;
constructor(inner) {
super();
this.inner = inner;
}
[Symbol.dispose]() {
this.inner[Symbol.dispose]();
}
static importOrThrow(key, nonce) {
if (key instanceof Memory === false)
throw new Error();
if (nonce instanceof Memory === false)
throw new Error();
return new ChaCha20Cipher(new wasm.ChaCha20Cipher(key.inner, nonce.inner));
}
applyOrThrow(message) {
if (message instanceof Memory === false)
throw new Error();
this.inner.apply_keystream(message.inner);
}
}
class ChaCha20Poly1305Cipher extends Abstract.ChaCha20Poly1305Cipher {
inner;
constructor(inner) {
super();
this.inner = inner;
}
[Symbol.dispose]() {
this.inner[Symbol.dispose]();
}
static importOrThrow(key) {
if (key instanceof Memory === false)
throw new Error();
return new ChaCha20Poly1305Cipher(new wasm.ChaCha20Poly1305Cipher(key.inner));
}
encryptOrThrow(message, nonce) {
if (message instanceof Memory === false)
throw new Error();
if (nonce instanceof Memory === false)
throw new Error();
return new Memory(this.inner.encrypt(message.inner, nonce.inner));
}
decryptOrThrow(message, nonce) {
if (message instanceof Memory === false)
throw new Error();
if (nonce instanceof Memory === false)
throw new Error();
return new Memory(this.inner.decrypt(message.inner, nonce.inner));
}
}
return { Memory, ChaCha20Cipher, ChaCha20Poly1305Cipher };
}