Blog
Technical guides on post-quantum cryptography, reliable algorithmic trading, Python and AI — each one written from the code behind it.
Post-quantum cryptography
iraca: differential verification of ML-KEM and ML-DSA against three independent implementations
A Rust harness that differences the RustCrypto ml-kem crate against THREE independent implementations —the pq-crystals C reference, libcrux (formally verified) and AWS-LC (production)— byte for byte, across all three ML-KEM levels, and its ML-DSA against dilithium across all three levels. Any disagreement is a real one, verified by execution.
Can an AI decrypt your encryption? The real threat is elsewhere
The 'AI hacking' headline blurs three different threats. AI does not break the mathematics of encryption: it amplifies implementation bugs, phishing and brute force. The threat to the maths is quantum computing, mitigated by hybrid post-quantum cryptography.
Fifty seconds for half a megabyte: the optimisation that fixed the constant, not the order
A quadratic radix conversion survived for months inside a cryptography library with every test green. The comment documenting it convinced everyone the problem was solved. Measurement, cause, and the classical algorithm that made it 111× faster.
Seal a file so no one can dispute you didn't touch it
A single hash forces you to reveal the whole set to prove one file. A Merkle tree doesn't. How Tunjo works: an integrity root, a triple post-quantum signature, and a verifier anyone can run.
They steal your database and can't crack a single password
Argon2 makes each guess expensive, but the attacker who takes your user table has infinite time and GPUs. An OPRF changes the game: the hash depends on a key that doesn't travel with the database. How it works, what it costs, and what breaks.
What is post-quantum cryptography, and why should you migrate now?
The quantum threat, the 'harvest now, decrypt later' attack, and the NIST standards ML-KEM and ML-DSA — explained clearly, and why to start migrating today.
Hybrid encryption: why combine classical and post-quantum cryptography
What hybrid encryption is, why combining X25519 with ML-KEM-1024 (and Ed25519 with ML-DSA-87) is safer than picking just one, and how Quipu applies it.
Quipu: post-quantum encryption in pure Rust, with a Python wheel
Quipu is a hybrid post-quantum encryption library for data at rest, written in pure Rust. For non-Rust users it ships as a native Python wheel (PyO3). Why we dropped the C ABI and multi-language bindings, with examples.
Reliable algorithmic trading
I switched off the bot: five strategies, 77,000 candles and zero net edge over fees
I measured five trading strategies over 77,000 one-minute candles of BTC and ETH, net of fees. The best returned +0.0135% with a t-statistic of 0.16. Why that is zero, and why switching off was the right call.
The rounding that makes your bot risk 10 times what you think
Sizing a position looks like a division, but making it fit the exchange's minimums is where money is lost. The max(1, int(...)) pattern and how to avoid it with Decimal and rounding down.
Why your bot gets a 403 from Cloudflare (and how to harden a ccxt client)
Many exchanges put Cloudflare in front of their API and, now and then, challenge legitimate requests from your own account with a 403. How to mitigate it without evading anything: header hardening and selective retry with backoff.
Two ways a backtest lies to you (and how to avoid them)
Almost all the edge measured in a backtest is one of two illusions: the model saw the future, or the winning variant won by noise. Two pure-Python primitives to rule out both before risking anything.
When your classifier flickers: hysteresis for signals that oscillate
A signal that near the threshold goes OK, CAÍDO, OK, CAÍDO fires alerts or failovers on every twitch. The fix is old and elegant: don't change state until the new one holds.
Python, AI & development
1,200 AI agents escaped their lab. We used their method to audit ourselves
2026's biggest agentic-AI incident, without the fear and with the method: its seven attack disciplines, turned into a checklist against our own systems, and what we found.
Malware that lets four AIs vote on its next move
CLOSEDQUORUM asks four AI models to vote on its next malicious action. It is flashy, it is an inert proof of concept, and it is a mirror: we use the same multi-model pattern defensively.
Can one AI attack and corrupt another? Yes, and the filter is not the defense
Prompt worms, memory poisoning, backdoored models: what is proven and what is hype, and why defending an AI agent is a matter of architecture, not a filter.
One AI can attack another AI's core. It has already started, and it is not Skynet
Poisoning a model's data costs 250 documents; an agent already ran 80-90 % of a real cyberattack. What is true about the 'AI attacks AI' scenario, what is science fiction, and how you defend the core.
The one who builds AI is the one who fears it most. And he is right
Anthropic's CEO puts a 25 % chance on things going very badly and says the industry lied about the risks. His fear is not a rogue robot: it is that models are grown, not built, and we do not know what is inside.
What we fear about AI are our own failings. And in it, they have a fix
Acting without a compass, being inconsistent, not auditing oneself: what we fear about AI is the list of our own defects. The difference is that in a well-built machine they have a solution.
How to integrate an LLM (Claude or GPT) into your Python application
A practical, code-driven guide to connecting a language model to your Python app: API calls, streaming, structured outputs, and best practices for production.
NiceGUI: build a web application in Python without writing JavaScript
What NiceGUI is, how it works, and why it's ideal for MVPs, dashboards, and internal tools built 100% in Python. With a code example.
Automate repetitive tasks with a Python bot
How to identify what to automate and build a bot or script in Python that saves you hours: scraping, reports, notifications, and scheduled execution.
RAG explained: how to give an LLM your own information
What Retrieval-Augmented Generation is, why it avoids hallucinations, and how to build an assistant that answers with YOUR documents. With the pattern in Python.
From idea to MVP: launch your product in 2 weeks with Python
What an MVP is, what it should NOT include, and how a modern Python stack (FastAPI, NiceGUI, SQLite) lets you validate your idea in weeks instead of months.
Small reliable libraries
Sovereign recon: what a 4000-star tool gives you (and what is debt)
We evaluated a 4000-star security recon tool for our Rust engine. We read all 1561 lines, classified every capability, and kept ONE vein. The lesson: you adopt techniques, not code.
SameSite=Lax doesn't protect you from login-CSRF
SameSite=Lax doesn't cover login-CSRF, and we found it by setting three AI models to attack our own identity server: one raised a false alarm, another refuted it, and a third found the real bug.
Same text format doesn't mean the same signature
We were merging two session implementations into one library. The token format was identical; the signatures weren't. What a fixed vector caught before it logged everyone out.
I killed the process and the drain still hung: a grandchild held the pipe
A subprocess hangs, I kill it with SIGKILL, and my program still waits for its output forever —at 0% CPU—. The pipe wasn't held by the child: a grandchild inherited it, and while it lives EOF never arrives.
My adaptive memory stayed empty in production, and it wasn't a bug
A system meant to learn from its own failures accumulated zero records, while a neighbouring table grew. There was no error in the code —the logs were clean—. It was a deadlock: two safety mechanisms starving each other.
Don't claim a security boundary holds — demonstrate it
Confining what a piece of code can touch —the file system, spawning processes— is a capability problem. And there's a huge difference between designing the boundary and PROVING it holds: the first is a claim; the second, a harness that attacks its own boundary and keeps the evidence.
My detector was blind across 1,029 of 6,309 lines and its three tests stayed green
A test bench made only of negative cases over files that are clean today cannot tell a correct rule from a blind one: both return empty. How to detect it, and the three conditions that make a pair of tests actually discriminate.
I said no data was leaving. On the first good run, two records left
A zero, a silence or a "not found" are indistinguishable from a real negative when the code that would produce them never ran — and they arrive with the confidence of having verified. The positive control, and why you have to look again after the first success.
LegalTech
What gives an electronic document evidentiary weight
A file isn't evidence just because it exists. It carries evidentiary weight when you can show it wasn't altered, who produced it, and when it existed. Here's how the technique —hashing, digital signatures and timestamping— turns an electronic document into evidence that holds up before a third party.
Electronic signature vs digital signature: not the same thing
They're used as synonyms and they aren't. An electronic signature is any sign of intent to sign; a digital signature is a specific cryptographic technique that proves integrity and origin. The difference matters when you have to hold the document up before someone who doesn't trust it.
What digital chain of custody really is (and what your software must do)
Digital chain of custody is not a hash: it is the continuous proof that a file hasn't changed, who produced it and when it existed. The four guarantees a system must provide for electronic evidence to hold up.
Trusted timestamping: how to date digital evidence so nobody can dispute the date
A hash and a signature prove what a file is and who signed it, but not when it existed. Timestamping is the piece that supplies the date verifiably: what it is, how a TSA works, and why the system clock doesn't count.
Xiliux