@hazae41/glacier
Version:
Yet another React data (re)fetching library
47 lines (43 loc) • 1.88 kB
JavaScript
var tslib_es6 = require('../../../../../node_modules/tslib/tslib.es6.cjs');
var base64 = require('@hazae41/base64');
var bytes = require('@hazae41/bytes');
class AesGcmBicoder {
key;
constructor(key) {
this.key = key;
}
async encryptOrThrow(plain, iv) {
return new Uint8Array(await crypto.subtle.encrypt({ name: "AES-GCM", iv }, this.key, plain));
}
async encodeOrThrow(input) {
const ivBytes = bytes.Bytes.random(12);
const ivBase64 = base64.Base64.get().getOrThrow().encodePaddedOrThrow(ivBytes);
const plainBytes = bytes.Bytes.fromUtf8(input);
const cipherBytes = await this.encryptOrThrow(plainBytes, ivBytes);
const cipherBase64 = base64.Base64.get().getOrThrow().encodePaddedOrThrow(cipherBytes);
return `${ivBase64}.${cipherBase64}`;
}
async decryptOrThrow(cipher, iv) {
return new Uint8Array(await crypto.subtle.decrypt({ name: "AES-GCM", iv }, this.key, cipher));
}
async decodeOrThrow(output) {
const env_1 = { stack: [], error: void 0, hasError: false };
try {
const [ivBase64, cipherBase64] = output.split(".");
const ivMemory = tslib_es6.__addDisposableResource(env_1, base64.Base64.get().getOrThrow().decodePaddedOrThrow(ivBase64), false);
const cipherMemory = tslib_es6.__addDisposableResource(env_1, base64.Base64.get().getOrThrow().decodePaddedOrThrow(cipherBase64), false);
const plainBytes = await this.decryptOrThrow(cipherMemory.bytes, ivMemory.bytes);
return bytes.Bytes.toUtf8(plainBytes);
}
catch (e_1) {
env_1.error = e_1;
env_1.hasError = true;
}
finally {
tslib_es6.__disposeResources(env_1);
}
}
}
exports.AesGcmBicoder = AesGcmBicoder;
//# sourceMappingURL=gcm.cjs.map
;