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
<PackageReference Include="ML-KEM.NetCore.Browser" Version="1.0.0" />
<PackageVersion Include="ML-KEM.NetCore.Browser" Version="1.0.0" />
<PackageReference Include="ML-KEM.NetCore.Browser" />
paket add ML-KEM.NetCore.Browser --version 1.0.0
#r "nuget: ML-KEM.NetCore.Browser, 1.0.0"
#:package ML-KEM.NetCore.Browser@1.0.0
#addin nuget:?package=ML-KEM.NetCore.Browser&version=1.0.0
#tool nuget:?package=ML-KEM.NetCore.Browser&version=1.0.0
ML-KEM.NetCore.Browser
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
- Installation
- Quick start
- API reference
- Deterministic/vector workflows
- Validation and testing
- Development
- Interoperability notes
- Security notes
- License
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;
}>;
publicKeymust be aUint8Arraywith ML-KEM-768 public key length.- Optional
seed32enables deterministic encapsulation for vector scenarios.
decapsulate(secretKey, ciphertext)
async function decapsulate(secretKey: Uint8Array, ciphertext: Uint8Array): Promise<{
sharedSecret: Uint8Array;
}>;
- Both arguments must be
Uint8Arrayvalues. - 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.jssrc/mlkem.js
- Core primitives:
src/params.jssrc/random.jssrc/sha3.jssrc/shake.jssrc/keccak-f1600.jssrc/sponge.jssrc/utils.jssrc/modq.jssrc/poly.jssrc/polyvec.jssrc/ntt.jssrc/packing.jssrc/cpapke.js
- Vendored core:
src/vendor/mlkem/*
Interoperability notes
- This package is intended to maintain byte-level interoperability with
ML-KEM.NetCorefor 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.
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 |