Skip to main content

VORTEX-256: Novel post-quantum KEM based on Rotational Module LWE (RotMLWE)

Project description

Post-Quantum KEM RotMLWE Python 3.10+ MIT License

VORTEX-256

A new lattice KEM built on Rotational Module Learning With Errors
Same footprint as Kyber-512 · Entirely different mathematics · Standalone library

CI PyPI Documentation


                              ╭──────────────────────────────────────╮
                              │                                      │
         ρ  ──▶  a₀ ──σ──▶  a₁ ──σ──▶  a₂ ──σ──▶  …               │
                              │         Frobenius orbit              │
                              │         of a single ring element     │
                              ╰──────────────────────────────────────╯
                                           │
                              bᵢ = aᵢ · s + eᵢ     (K correlated instances)
                                           │
                              pk  ·  ct  ·  32-byte shared secret

✦ At a glance

The invention

ML-KEM samples a full k×k matrix of random ring elements.

VORTEX-256 samples one element a, then derives the public structure from its Frobenius orbit:

σ : f(x) ↦ f(x³ mod x²⁵⁶+1)

a₀ = a
a₁ = σ(a₀)
bᵢ = aᵢ · s + eᵢ

One secret s. K rotations. A new hardness assumption — RotMLWE.

The footprint

Identical wire sizes to Kyber-512 — drop-in at the byte level.

Object Size
Public key 800 B
Private key 1 248 B
Ciphertext 768 B
Shared secret 32 B
Kyber-512 VORTEX-256
XOF calls at keygen 4 1
Secret type vector scalar
Assumption MLWE RotMLWE

✦ Install

pip install vortex-pqc

No runtime dependencies. Compiles an optional native extension when a C toolchain is present; otherwise falls back to a pure-Python reference.


✦ Thirty seconds to a shared secret

from vortex_pqc import generate_keypair, encapsulate, decapsulate

alice = generate_keypair()
bob   = encapsulate(alice.public_key)

# bob sends bob.data (768 B) to alice
alice_secret = decapsulate(bob.data, alice.private_key)

assert alice_secret == bob.shared_secret   # both parties agree


✦ How the exchange works

sequenceDiagram
    participant Alice
    participant Bob

    Note over Alice: generate_keypair()
    Alice->>Alice: pk (800 B) · sk (1248 B)

    Alice->>Bob: public key

    Note over Bob: encapsulate(pk)
    Bob->>Bob: ct (768 B) · ss (32 B)

    Bob->>Alice: ciphertext

    Note over Alice: decapsulate(ct, sk)
    Alice->>Alice: ss (32 B)

    Note over Alice,Bob: shared secrets match

✦ PEM keys

Standard Base64 PEM — compatible with everyday tooling.

from vortex_pqc import PEMKind, write_pem_file, read_pem_file

write_pem_file("key.pem", PEMKind.PRIVATE_KEY, alice.private_key)
sk = read_pem_file("key.pem", PEMKind.PRIVATE_KEY)
-----BEGIN VORTEX256 PRIVATE KEY-----
AQDQABAAABAAAA0AAAAAAPDP/gzQAhAAAAAAAA3QAA0AAPDPAQAAASAAAADQ/wwA
...
-----END VORTEX256 PRIVATE KEY-----

Private key files are written with mode 0600.


✦ C library

cd c && make lib && make test && make demo
#include "vortex_pqc.h"

uint8_t pk[VORTEX_PUBLIC_KEY_BYTES];
uint8_t sk[VORTEX_PRIVATE_KEY_BYTES];
uint8_t ct[VORTEX_CIPHERTEXT_BYTES];
uint8_t ss[VORTEX_SHARED_SECRET_BYTES];

vortex_keypair(pk, sk);
vortex_enc(pk, ct, ss);
vortex_dec(ct, sk, ss);

✦ Documentation

Full documentation → · Published portal →

GuideForYou'll learn
OverviewEveryoneWhat VORTEX is, design goals, positioning
QuickstartUsersInstall, first exchange, PEM files
Integration guideDevelopersClient–server protocol, session keys
Core conceptsLearnersKEM, RotMLWE, Frobenius, FO transform
Security modelSecurity engineersThreat model, guarantees, limitations
API referenceIntegratorsPython and C API, byte layouts
ComparisonEvaluatorsvs ML-KEM, NTRU, other PQC
FAQEveryoneCommon questions answered

✦ For developers

git clone https://github.com/bajpai-labs/vortex-pqc.git
cd vortex-pqc
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
make test

→ Full workflow in the Development Guide


✦ Security

Research prototype. VORTEX-256 introduces a novel hardness assumption that has not received the years of independent cryptanalysis behind NIST-standardised ML-KEM. Suitable for research, education, and prototyping. Not recommended for production without a formal security review.


✦ Related

This project is fully independent from Kyber-PQC (ML-KEM-512).

GitHub PyPI

MIT © Bajpai Labs · Invented for the post-quantum era

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vortex_pqc-0.1.1.tar.gz (31.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vortex_pqc-0.1.1-cp310-cp310-macosx_26_0_arm64.whl (35.9 kB view details)

Uploaded CPython 3.10macOS 26.0+ ARM64

File details

Details for the file vortex_pqc-0.1.1.tar.gz.

File metadata

  • Download URL: vortex_pqc-0.1.1.tar.gz
  • Upload date:
  • Size: 31.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for vortex_pqc-0.1.1.tar.gz
Algorithm Hash digest
SHA256 529aeed4f7bc4ca2825cc6e923c3c7184b77cc2fe622e70a72587b293abf4b3c
MD5 5a4066edd65fe085d8817afe370fd56d
BLAKE2b-256 1ed466998f58f31b8f52aef34411dd5daf4f0150d1741f0b504fb3fa611cfa14

See more details on using hashes here.

File details

Details for the file vortex_pqc-0.1.1-cp310-cp310-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for vortex_pqc-0.1.1-cp310-cp310-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 9e5f3956569598f516ae98ef4ba561adaa9e77a38cb7a59caa64258e679d2c4c
MD5 69c73cf6bd37e1eff10719f413705a3c
BLAKE2b-256 31f2b69aec4530b1bcec61ccffdf962006149c99cd6e916e422962092b08fc4e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page