@hazae41/chacha20poly1305
Version:
ChaCha20Poly1305 adapter for WebAssembly and JS implementations
74 lines (73 loc) • 2.56 kB
JavaScript
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 };
}