UNPKG

@hazae41/chacha20poly1305

Version:

ChaCha20Poly1305 adapter for WebAssembly and JS implementations

74 lines (73 loc) 2.56 kB
import { Abstract } from "../abstract/mod.js"; export function fromNoble(noble) { const { chacha20, chacha20poly1305 } = noble; class Memory extends Abstract.Memory { inner; constructor(inner) { super(); this.inner = inner; } [Symbol.dispose]() { } static fromOrThrow(memory) { if (memory instanceof Memory) return memory; if (memory instanceof Uint8Array) return new Memory(memory); if (memory.inner instanceof Uint8Array) return new Memory(memory.inner); return new Memory(new Uint8Array(memory.bytes)); } get bytes() { return this.inner; } } class ChaCha20Cipher extends Abstract.ChaCha20Cipher { key; nonce; counter = 0; constructor(key, nonce) { super(); this.key = key; this.nonce = nonce; } [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(key.bytes, nonce.bytes); } applyOrThrow(message) { if (message instanceof Memory === false) throw new Error(); chacha20(this.key, this.nonce, message.bytes, message.bytes, this.counter++); } } class ChaCha20Poly1305Cipher extends Abstract.ChaCha20Poly1305Cipher { key; constructor(key) { super(); this.key = key; } [Symbol.dispose]() { } static importOrThrow(key) { if (key instanceof Memory === false) throw new Error(); return new ChaCha20Poly1305Cipher(new Uint8Array(key.bytes)); } encryptOrThrow(message, nonce) { if (message instanceof Memory === false) throw new Error(); if (nonce instanceof Memory === false) throw new Error(); return new Memory(chacha20poly1305(this.key, nonce.bytes).encrypt(message.bytes)); } decryptOrThrow(message, nonce) { if (message instanceof Memory === false) throw new Error(); return new Memory(chacha20poly1305(this.key, nonce.bytes).decrypt(message.bytes)); } } return { Memory, ChaCha20Cipher, ChaCha20Poly1305Cipher }; }