UNPKG

@hazae41/chacha20poly1305

Version:

ChaCha20Poly1305 adapter for WebAssembly and JS implementations

78 lines (77 loc) 2.69 kB
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 }; }