crystals-kyber-js
Version:
An ML-KEM/CRYSTALS-KYBER implementation written in TypeScript for various JavaScript runtimes
132 lines (131 loc) • 4.5 kB
JavaScript
(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", "./errors.js", "./mlKem1024Base.js"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MlKem1024 = void 0;
/**
* This implementation is based on https://github.com/antontutoveanu/crystals-kyber-javascript,
* which was deveploped under the MIT licence below:
* https://github.com/antontutoveanu/crystals-kyber-javascript/blob/main/LICENSE
*/
const errors_js_1 = require("./errors.js");
const mlKem1024Base_js_1 = require("./mlKem1024Base.js");
/**
* Represents the MlKem1024 class, which extends the MlKem1024Base class.
*
* This class extends the MlKem1024Base class and provides specific implementation for MlKem1024.
*
* @deprecated Use {@link createMlKem1024} instead. This async class-based API will be removed in a future release.
*
* @remarks
*
* MlKem1024 is a specific implementation of the ML-KEM key encapsulation mechanism.
*
* @example
*
* ```ts
* // Using jsr:
* import { createMlKem1024 } from "@dajiaji/mlkem";
* // Using npm:
* // import { createMlKem1024 } from "mlkem"; // or "crystals-kyber-js"
*
* const recipient = await createMlKem1024();
* const [pkR, skR] = recipient.generateKeyPair();
*
* const sender = await createMlKem1024();
* const [ct, ssS] = sender.encap(pkR);
*
* const ssR = recipient.decap(ct, skR);
* // ssS === ssR
* ```
*/
class MlKem1024 extends mlKem1024Base_js_1.MlKem1024Base {
/**
* Constructs a new instance of the MlKem1024 class.
*/
constructor() {
super();
}
/**
* Generates a keypair [publicKey, privateKey].
*
* If an error occurred, throws {@link MlKemError}.
*
* @returns A kaypair [publicKey, privateKey].
* @throws {@link MlKemError}
*/
async generateKeyPair() {
await this._setup();
try {
return this._generateKeyPairCore();
}
catch (e) {
throw new errors_js_1.MlKemError(e);
}
}
/**
* Derives a keypair [publicKey, privateKey] deterministically from a 64-octet seed.
*
* If an error occurred, throws {@link MlKemError}.
*
* @param seed A 64-octet seed for the deterministic key generation.
* @returns A kaypair [publicKey, privateKey].
* @throws {@link MlKemError}
*/
async deriveKeyPair(seed) {
await this._setup();
try {
return this._deriveKeyPairCore(seed);
}
catch (e) {
throw new errors_js_1.MlKemError(e);
}
}
/**
* Generates a shared secret from the encapsulated ciphertext and the private key.
*
* If an error occurred, throws {@link MlKemError}.
*
* @param pk A public key.
* @param seed An optional 32-octet seed for the deterministic shared secret generation.
* @returns A ciphertext (encapsulated public key) and a shared secret.
* @throws {@link MlKemError}
*/
async encap(pk, seed) {
await this._setup();
try {
return this._encapCore(pk, seed);
}
catch (e) {
throw new errors_js_1.MlKemError(e);
}
}
/**
* Generates a ciphertext for the public key and a shared secret.
*
* If an error occurred, throws {@link MlKemError}.
*
* @param ct A ciphertext generated by {@link encap}.
* @param sk A private key.
* @returns A shared secret.
* @throws {@link MlKemError}
*/
async decap(ct, sk) {
await this._setup();
try {
return this._decapCore(ct, sk);
}
catch (e) {
throw new errors_js_1.MlKemError(e);
}
}
}
exports.MlKem1024 = MlKem1024;
});