Skip to main content

qday-time-machine

Find the cryptography a quantum computer will break, see when it breaks, and get the fix.

qday scans websites and source code for quantum-vulnerable cryptography, gives every finding a break year from published attack costs against IBM's quantum roadmap, exports a CycloneDX 1.6 cryptography bill of materials, and can fail a CI build on critical findings. It also runs scaled-down Shor and Grover attacks in Qiskit and a hybrid post-quantum (ML-KEM + ML-DSA) handshake.

Built by Team Straw Hat Pirates for the VTU-QFF Hackathon, Qiskit Fall Fest 2026. The attacks were validated on three IBM quantum computers (ibm_fez, ibm_kingston, ibm_marrakesh).

Install

pip install qday-time-machine

Requires Python 3.11+. Install the OpenSSL 3.x command-line tool too, so website scans can report the negotiated key-exchange group.

Use

qday scan --host example.com --path ./src     # findings, risk level, break year and the fix
qday scan --path ./src --fail-on critical     # exit code 1 on critical findings: a CI gate
qday cbom --path ./src -o cbom.json           # CycloneDX 1.6 cryptography bill of materials
qday forecast RSA-2048 --scenario roadmap     # what an attack needs, and the first break year
qday shor --N 15 --a 7                        # Shor's order finding (Qiskit Aer by default)
qday grover --bits 3 --secret 6               # Grover key search on a toy cipher
qday pqc                                      # hybrid X25519 + ML-KEM-768 handshake

Example:

$ qday scan --path ./src
critical  RSA-2048               payments.py:8      breaks 2037  fix: ML-KEM-768 (encryption) / ML-DSA-65 (signatures)
critical  MD5                    payments.py:18     breaks -     fix: SHA-256
high      ECDSA-P-256            server.js:3        breaks 2042  fix: ML-DSA-65
medium    AES-128                payments.py:10     breaks -     fix: AES-256

Exit codes: 0 ok, 1 a finding at or above --fail-on, 2 invalid input or every target failed.

In CI (GitHub Actions)

- run: pip install qday-time-machine
- run: qday scan --path . --fail-on critical

How the forecast works

A break year is the first year IBM's roadmap provides both the logical qubits and the operations a published attack needs (Gidney 2025 for RSA-2048: 1,399 logical qubits and 6.5 × 10⁹ Toffoli gates; Roetteler et al. 2017 for elliptic curves). Risk levels follow Mosca's inequality: data that must stay secret longer than the time left before the break, plus the time to migrate, is already at risk. After 2033 the default trend scenario is an explicit extrapolation; --scenario roadmap uses IBM's published roadmap only.

Python API

from qday.scanner.code import scan_code
from qday.forecast.risk import assess_all
from qday.scanner.cbom import build_cbom

assets = scan_code("./src")["assets"]
for finding in assess_all(assets, migration_years=3, shelf_life=10):
    print(finding["risk"], finding["algorithm"], finding["break_year"], finding["replacement"])
cbom = build_cbom(assets, target="my-service")

Limits

The Shor and Grover attacks break toy instances (N = 15 and 21, 3–4-bit keys), not real keys. The code scanner is pattern-based: findings are leads to review. Only scan systems you own or are authorised to test.

License

MIT

Metadata

Release files for qday-time-machine 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qday-time-machine 1.0.0
File Size Uploaded Provenance Actions
qday_time_machine-1.0.0.tar.gz 84.5 kB Without provenance Details for qday_time_machine-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for qday-time-machine 1.0.0
File Interpreter ABI Platform Actions
qday_time_machine-1.0.0-py3-none-any.whl Python 3 none any Details for qday_time_machine-1.0.0-py3-none-any.whl

Total release size: 132.1 kB

Release files / qday_time_machine-1.0.0.tar.gz

Download URL qday_time_machine-1.0.0.tar.gz
Size 84.5 kB
Tags Source
SHA-256 checksum
How to use checksums
0ac35f3e66d3e262f7589ea3c0005f51db35900746411cae26f876e76ba6863c
BLAKE2b-256 checksum
How to use checksums
42c8a1e327b095da5149daf84ed627cc473097b13579b2a6a12a432e4a37c3ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / qday_time_machine-1.0.0-py3-none-any.whl

Download URL qday_time_machine-1.0.0-py3-none-any.whl
Size 47.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
157f518283f1f25ec207fcbf1193fe1198a5116805f4bc36f472ebad9ce482f4
BLAKE2b-256 checksum
How to use checksums
75f45baeaeb3deebf99b44e2b88e086283f0f6a281c5bc5ba57e41af4ee640c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Security for qday-time-machine 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page