@hazae41/chacha20poly1305
Version:
ChaCha20Poly1305 adapter for WebAssembly and JS implementations
85 lines (81 loc) • 2.83 kB
JavaScript
;
var index = require('../../libs/ownable/index.cjs');
var abstract = require('./abstract.cjs');
function fromWasm(Wasm) {
class Memory extends abstract.Abstract.Memory {
inner;
constructor(inner) {
super();
this.inner = inner;
}
static fromOrThrow(memory) {
if (memory instanceof Memory)
return new index.Unowned(memory);
if (memory.inner instanceof Wasm.Memory)
return new index.Unowned(new Memory(memory.inner));
const inner = new Wasm.Memory(memory.bytes);
return new index.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.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.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 };
}
exports.fromWasm = fromWasm;
//# sourceMappingURL=wasm.cjs.map