@hazae41/chacha20poly1305
Version:
ChaCha20Poly1305 adapter for WebAssembly and JS implementations
83 lines (80 loc) • 2.78 kB
JavaScript
import { Unowned, Owned } from '../../libs/ownable/index.mjs';
import { Abstract } from './abstract.mjs';
function fromWasm(Wasm) {
class Memory extends Abstract.Memory {
inner;
constructor(inner) {
super();
this.inner = inner;
}
static fromOrThrow(memory) {
if (memory instanceof Memory)
return new Unowned(memory);
if (memory.inner instanceof Wasm.Memory)
return new Unowned(new Memory(memory.inner));
const inner = new Wasm.Memory(memory.bytes);
return new Owned(new Memory(inner));
}
static importOrThrow(bytes) {
return new Memory(new Wasm.Memory(bytes));
}
[Symbol.dispose]() {
this.inner[Symbol.dispose]();
}
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();
return new Memory(this.inner.decrypt(message.inner, nonce.inner));
}
}
return { Memory, ChaCha20Cipher, ChaCha20Poly1305Cipher };
}
export { fromWasm };
//# sourceMappingURL=wasm.mjs.map