UNPKG

@mojsoski/server-crypto

Version:

Asymmetric key-exchange cryptography library

57 lines 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Server = void 0; const async_stream_1 = require("@mojsoski/async-stream"); const base_1 = require("./base"); class Server { _provider; constructor(crypto) { this._provider = crypto; } async verifyJwt(jwt) { return (await this._provider.jwt.verifyRS256(jwt, this.publicKey)); } async createContext() { const key = await this._provider.crypto.randomBytes(base_1.AES_KEY_LEN); const iv = await this._provider.crypto.randomBytes(base_1.IV_LEN); const encryptedKey = await this._provider.crypto.publicEncrypt(key, this.publicKey); return { header: { key: encryptedKey.toString("base64"), iv: iv.toString("base64"), }, key, iv, }; } static async decrypt({ key, iv }, content, provider) { const authTag = Buffer.from(content.authTag, "base64"); const encrypted = Buffer.from(content.content, "base64"); return await provider.crypto.decrypt(encrypted, authTag, key, iv); } encryptStream(stream) { return async_stream_1.AsyncTransform.from(this.createContext().then((context) => async_stream_1.AsyncTransform.from([ context.header, ]).concat(stream .transform() .map((item) => Server.encrypt(context, item, this._provider))))).stream(); } static async encrypt({ key, iv }, content, provider) { const { content: encrypted, authTag } = await provider.crypto.encrypt(content, key, iv); return { content: encrypted.toString("base64"), authTag: authTag.toString("base64"), }; } async encryptBase64(obj) { const json = Buffer.from(JSON.stringify(obj), "utf-8"); const context = await this.createContext(); const base64Object = { ...context.header, ...(await Server.encrypt(context, json, this._provider)), }; return Buffer.from(JSON.stringify(base64Object), "utf-8").toString("base64"); } } exports.Server = Server; //# sourceMappingURL=server.js.map