ML-KEM.NetCore.Browser 1.0.0

dotnet add package ML-KEM.NetCore.Browser --version 1.0.0
                    
NuGet\Install-Package ML-KEM.NetCore.Browser -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ML-KEM.NetCore.Browser" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ML-KEM.NetCore.Browser" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="ML-KEM.NetCore.Browser" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ML-KEM.NetCore.Browser --version 1.0.0
                    
#r "nuget: ML-KEM.NetCore.Browser, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ML-KEM.NetCore.Browser@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ML-KEM.NetCore.Browser&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=ML-KEM.NetCore.Browser&version=1.0.0
                    
Install as a Cake Tool

ML-KEM.NetCore.Browser

License: MIT npm nuget

ML-KEM.NetCore.Browser is a pure JavaScript companion package to ML-KEM.NetCore, focused on ML-KEM-768 compatibility in browser and Node.js runtimes.

The package includes high-level KEM APIs (generateKeyPair, encapsulate, decapsulate) and lower-level modules for polynomial math, packing, NTT, and CPA-PKE internals.


Table of contents


Requirements

  • Runtime: modern browser or Node.js with ES modules.
  • No native addons required.
  • Project package type: "module".

Installation

npm

npm install ml-kem.netcore.browser

NuGet

dotnet add package ML-KEM.NetCore.Browser

Browser script bundle

Build the one-file bundle:

npm run build:bundle

Then include it in your page:

<script src="./dist/ML-KEM.NetCore.Browser.js"></script>
<script>
  const { generateKeyPair, encapsulate, decapsulate } = window.MLKEMNetCoreBrowser;
</script>

Quick start

ESM usage

import { generateKeyPair, encapsulate, decapsulate } from 'ml-kem.netcore.browser';

const { publicKey, secretKey } = await generateKeyPair();
const { ciphertext, sharedSecret: senderSecret } = await encapsulate(publicKey);
const { sharedSecret: receiverSecret } = await decapsulate(secretKey, ciphertext);

console.log(senderSecret.length, receiverSecret.length); // 32, 32

Browser global usage

<script src="./dist/ML-KEM.NetCore.Browser.js"></script>
<script>
  (async () => {
    const { generateKeyPair, encapsulate, decapsulate } = window.MLKEMNetCoreBrowser;

    const { publicKey, secretKey } = await generateKeyPair();
    const { ciphertext, sharedSecret: senderSecret } = await encapsulate(publicKey);
    const { sharedSecret: receiverSecret } = await decapsulate(secretKey, ciphertext);

    console.log(senderSecret, receiverSecret);
  })();
</script>

API reference

All binary values are Uint8Array.

generateKeyPair(seed64?)

async function generateKeyPair(seed64?: Uint8Array): Promise<{
  publicKey: Uint8Array;
  secretKey: Uint8Array;
}>;
  • Without seed64, key generation uses the configured random source.
  • With seed64, deterministic derivation is used (intended for vectors/tests).

encapsulate(publicKey, seed32?)

async function encapsulate(publicKey: Uint8Array, seed32?: Uint8Array): Promise<{
  ciphertext: Uint8Array;
  sharedSecret: Uint8Array;
}>;
  • publicKey must be a Uint8Array with ML-KEM-768 public key length.
  • Optional seed32 enables deterministic encapsulation for vector scenarios.

decapsulate(secretKey, ciphertext)

async function decapsulate(secretKey: Uint8Array, ciphertext: Uint8Array): Promise<{
  sharedSecret: Uint8Array;
}>;
  • Both arguments must be Uint8Array values.
  • Returns the receiver shared secret.

setRandomBytesProvider(provider)

function setRandomBytesProvider(provider: (length: number) => Uint8Array): void;
  • Overrides random byte generation used internally.
  • Useful for deterministic testing harnesses and controlled environments.

MLKEM_768 parameter sizes

const MLKEM_768 = {
  publicKeyBytes: 1184,
  secretKeyBytes: 2400,
  ciphertextBytes: 1088,
  sharedSecretBytes: 32,
  // ...other structural parameters
};

Import from:

import { MLKEM_768 } from 'ml-kem.netcore.browser';
// or: import { MLKEM_768 } from 'ml-kem.netcore.browser/params';

Deterministic/vector workflows

This package supports deterministic pathways used for fixture generation and cross-language verification:

  • generateKeyPair(seed64) for deterministic key derivation.
  • encapsulate(publicKey, seed32) for deterministic encapsulation.

Reference fixture:

  • test/vectors/mlkem768-fixture.json

Validation and testing

Run the test suite:

npm test

Dry-run publish contents:

npm run pack:check

Tests include:

  • ML-KEM round-trip behavior
  • CPA-PKE layer checks
  • Cross-language deterministic vector validation

Development

Build browser bundle

npm run build:bundle

Main implementation modules

  • High-level API:
    • src/index.js
    • src/mlkem.js
  • Core primitives:
    • src/params.js
    • src/random.js
    • src/sha3.js
    • src/shake.js
    • src/keccak-f1600.js
    • src/sponge.js
    • src/utils.js
    • src/modq.js
    • src/poly.js
    • src/polyvec.js
    • src/ntt.js
    • src/packing.js
    • src/cpapke.js
  • Vendored core:
    • src/vendor/mlkem/*

Interoperability notes

  • This package is intended to maintain byte-level interoperability with ML-KEM.NetCore for ML-KEM-768 workflows.
  • Keep parameter set and serialized sizes aligned between communicating peers.
  • Prefer deterministic methods only for test vectors and reproducibility.

Security notes

  • Treat secret material (secretKey, sharedSecret) as sensitive and keep lifetimes short.
  • Clear transient buffers in application code when possible.
  • Validate all external key/ciphertext lengths before calling KEM operations.
  • For high-assurance use, perform an independent cryptographic and implementation review.

License

MIT. See LICENSE.

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 82 3/14/2026