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.0.tar.gz (31.3 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.0-cp310-cp310-macosx_26_0_arm64.whl (35.5 kB view details)

Uploaded CPython 3.10macOS 26.0+ ARM64

File details

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

File metadata

  • Download URL: vortex_pqc-0.1.0.tar.gz
  • Upload date:
  • Size: 31.3 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.0.tar.gz
Algorithm Hash digest
SHA256 d0aad1088c96315e059e0010a92cb6a96cdd0ff02e5da86c85b3de2cbf004ce1
MD5 6d803c6ce3966c8ecfbcb2253716d036
BLAKE2b-256 cd629771a5254d5407d4551a4caabc8cfcf2a07548f6b54b4679112b0a4c8685

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vortex_pqc-0.1.0-cp310-cp310-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 6b556c2b50ead7fa3b3132913535156087dbe022c33b6e3212d17ecefee79b9c
MD5 183e0a65c9a3912d193b24dc791d096e
BLAKE2b-256 b3c8b94812439a398c8a7bc6c4d6d7d5ac3486d94604e1ccbd8a5d6583130fa7

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