UNPKG

crystals-kyber-js

Version:

An ML-KEM/CRYSTALS-KYBER implementation written in TypeScript for various JavaScript runtimes

141 lines (140 loc) 4.59 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "./consts.js", "./errors.js", "./mlKemBase.js"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MlKem768Impl = void 0; exports.createMlKem768 = createMlKem768; const consts_js_1 = require("./consts.js"); const errors_js_1 = require("./errors.js"); const mlKemBase_js_1 = require("./mlKemBase.js"); /** * Synchronous implementation of MlKem768. * * Use {@link createMlKem768} to create an initialized instance. * * @example * * ```ts * // Using jsr: * import { createMlKem768 } from "@dajiaji/mlkem"; * // Using npm: * // import { createMlKem768 } from "mlkem"; // or "crystals-kyber-js" * * const recipient = await createMlKem768(); * const [pkR, skR] = recipient.generateKeyPair(); * * const sender = await createMlKem768(); * const [ct, ssS] = sender.encap(pkR); * * const ssR = recipient.decap(ct, skR); * // ssS === ssR * ``` */ class MlKem768Impl extends mlKemBase_js_1.MlKemBase { constructor() { super(); Object.defineProperty(this, "_k", { enumerable: true, configurable: true, writable: true, value: 3 }); Object.defineProperty(this, "_du", { enumerable: true, configurable: true, writable: true, value: 10 }); Object.defineProperty(this, "_dv", { enumerable: true, configurable: true, writable: true, value: 4 }); Object.defineProperty(this, "_eta1", { enumerable: true, configurable: true, writable: true, value: 2 }); Object.defineProperty(this, "_eta2", { enumerable: true, configurable: true, writable: true, value: 2 }); this._skSize = 12 * this._k * consts_js_1.N / 8; this._pkSize = this._skSize + 32; this._compressedUSize = this._k * this._du * consts_js_1.N / 8; this._compressedVSize = this._dv * consts_js_1.N / 8; this._initPool(); } /** Generates a keypair [publicKey, privateKey]. */ generateKeyPair() { try { return this._generateKeyPairCore(); } catch (e) { throw new errors_js_1.MlKemError(e); } } /** Derives a keypair [publicKey, privateKey] deterministically from a 64-octet seed. */ deriveKeyPair(seed) { try { return this._deriveKeyPairCore(seed); } catch (e) { throw new errors_js_1.MlKemError(e); } } /** Encapsulates: returns [ciphertext, sharedSecret]. */ encap(pk, seed) { try { return this._encapCore(pk, seed); } catch (e) { throw new errors_js_1.MlKemError(e); } } /** Decapsulates: returns sharedSecret. */ decap(ct, sk) { try { return this._decapCore(ct, sk); } catch (e) { throw new errors_js_1.MlKemError(e); } } /** @internal */ static async _create() { const impl = new MlKem768Impl(); await impl._setup(); return impl; } } exports.MlKem768Impl = MlKem768Impl; /** * Creates a pre-initialized MlKem768 instance with synchronous operations. * * @returns A promise that resolves to an {@link MlKemInterface} instance. * * @example * * ```ts * const ctx = await createMlKem768(); * const [pk, sk] = ctx.generateKeyPair(); // sync * const [ct, ssS] = ctx.encap(pk); // sync * const ssR = ctx.decap(ct, sk); // sync * ``` */ function createMlKem768() { return MlKem768Impl._create(); } });