Getting Started with MetaMUI Crypto Primitives
Side-channel claim limit. Nothing on this page claims constant-time behaviour or side-channel resistance for any target: the side-channel harness covers nothing (finding A48) and no measurement exists. The Rust and C cores are designed for constant time and unmeasured; managed runtimes (JIT, GC, bounds checks) make no timing claim. Where this page names constant-time or side-channel techniques, in prose or in code, they are design intent or recommendations, not measured properties.
MetaMUI Crypto is a release candidate (1.0.0-rc.7) with no package published on a public registry yet; see the Installation Guide for building from source and for the decided package coordinates.
Choose Your Platform
Python
metamui-crypto-python
Rust
metamui-crypto-rust
TypeScript
metamui-crypto-typescript
Swift
metamui-crypto-swift
Kotlin
metamui-crypto-kotlin
WASM
metamui-crypto-typescript
Quick example
One ML-KEM-768 round trip in three of the ten targets; the
Quick Start page has
every language, and each snippet there was run against a locally built
candidate of the 1.0.0-rc.7 tree.
Python
from metamui_crypto.facade import profile
kem = profile("ml-kem-768")
ek, dk = kem.generate_keypair()
ct, ss = kem.encapsulate(ek)
assert kem.decapsulate(dk, ct) == ss
Rust
use metamui_crypto::mlkem768;
let mut rng = rand::rngs::OsRng;
let kem = mlkem768::generate_keypair(&mut rng)?;
let (ct, ss) = mlkem768::encapsulate(&kem.encapsulation_key, &mut rng)?;
assert_eq!(mlkem768::decapsulate(&kem.decapsulation_key, &ct)?, ss);
TypeScript
import { mlkem768 } from '@metamui/crypto';
const receiver = await mlkem768.generateKeyPair();
const { ciphertext, sharedSecret } = await mlkem768.encapsulate(receiver.encapsulationKey);
const same = await mlkem768.decapsulate(receiver.decapsulationKey, ciphertext);
Core concepts
1. Own implementations
Every algorithm is MetaMUI’s own implementation; no package wraps an external cryptography library. Each is validated against the algorithm’s upstream test vectors (NIST ACVP, the Round-3 and KpqC reference files, the RFC appendices), and a missing vector file fails the test run.
2. Explicit profiles
A profile identifier (ml-kem-768, falcon-512.r3-padded, …) names one
algorithm, one parameter set and one wire encoding, and never changes
meaning. A family name is refused rather than substituted; ML-DSA, SLH-DSA,
HAETAE and AIMer sign under a required context string.
3. What is not claimed
- Constant-time behaviour and side-channel resistance: not claimed for any target; the side-channel axis is unmeasured (A48). The Rust and C cores are designed for constant time; managed runtimes make no timing claim.
- No independent audit, CMVP validation or CAVP certificate exists
(
SECURITY.md,SUPPORT.md). - Performance figures exist only in the benchmark evidence for the Rust crates on one host, and none compares with another library.
Next Steps
- Installation Guide - Build from source instructions
- Platform Guides - Platform-specific documentation
- API Reference - Complete API documentation
- Security Best Practices - Security guidelines
- Algorithm Details - In-depth algorithm information
- Integration Examples - Real-world usage examples
Getting Help
- Documentation: Browse the documentation
- Examples: Check out integration examples
- Issues: Report issues on GitHub
- Support level: best effort, no commercial support through the repository (
SUPPORT.md); security reports to security@metamui.id
Ready to build quantum-resistant applications? Let’s get started!