Sydney, Australia

I build secure software. Then I prove it works.

Sydney-based engineer. Backend, cryptography, and offensive security. I build production systems and then break them to find the gaps.

whoami.sh
$whoami
live checking systems...
about

Who's writing this

I like understanding systems from both sides. Building software is only half the job — the other half is asking what assumptions it depends on, what happens when those assumptions fail, and whether I can actually explain why. That's taken me through backend development, applied cryptography, quantum computing experiments, and offensive security. When I'm not building products, I'm usually solving CTF challenges or implementing ideas from research papers just to see how they actually work.

about.js
const developer = {
  name: "Abhinav Kumar",
  based_in: "Sydney, Australia",
  stack: ["Python", "React", "TypeScript", "FastAPI"],
  security: ["web exploitation", "binary exploitation",
              "applied cryptography"],
  philosophy: "if I can't explain how it fails,
                I don't understand it yet",
  currently: shipping("real, working systems")
};
0
shipped products
0
vulnerability classes explored, hands-on
0
automated tests across those products
0
client-side encrypted — that's Haven, not a slogan
philosophy

How I work

01

Build

Start small. Make it work.

02

Measure

Untested is unfinished.

03

Break

Abuse it before they do.

04

Improve

Software survives contact with reality.

experience

Experience & Methodology

A chronological record of operations and the core principles guiding my technical execution.

Integration Analyst InternApr 2026 – Jul 2026
iSoft Software Technologies Pty Ltd · Sydney
  • Verified REST/Auth flows under load.
  • SQL validation & schema mapping for data integrity.
  • Live debugging of integration failures in production-ready cycles.
skills

What I actually use

Languages & frameworks
PythonReact / TypeScriptJavaScriptFastAPI
Security
Web exploitationBinary exploitationApplied cryptographyFormat string bugs
Tools & infra
GitLinuxGitHub Actionsgdb / objdump
projects

Projects that taught me something

Each of these forced me to actually understand a system, not just use a library.

Haven title card: 'Your tasks. Stay yours.'
LIVE
JavaScriptWeb Crypto APIPython

Haven

haven.jsSTATUS: LIVE

Every task is encrypted before Haven's server ever sees it — and there's a page that proves exactly that.

Why: I wanted to know what "zero-knowledge" actually means in practice, not just in a whitepaper.

Problem

"We encrypt your data" is a line every app puts in its privacy policy. Almost none let you actually check it.

Approach

Built a "you vs. the server" panel that queries the real stored record and renders exactly what the backend has on disk.

Result

What the server sees is ciphertext, full stop — AES-256-GCM, key derived via PBKDF2-SHA256 at 600,000 iterations.

MeowMentor title card: roadmap and learner profile view with Arrays, Graphs and Dynamic Programming topic badges
LIVE
TypeScriptSafari Web ExtensionReactGemini API

MeowMentor

universal-detector.tsSTATUS: LIVE

A Safari extension that watches me solve problems on LeetCode and eight other judges, then coaches instead of solving.

Why: I wanted hints that teach the pattern, not ones that just hand me the answer.

Problem

LeetCode, Codeforces and AtCoder all render their editors completely differently. A coach that only works on one site isn't a coach.

Approach

Built a detector that tries dedicated adapters first — LeetCode, Codeforces, AtCoder, CodeChef, GeeksforGeeks — then falls back to a generic one for the rest, verified against real DOM captured through an actual Safari session instead of guessed selectors. Hints escalate through four levels: a Socratic question, then direction, then pattern, then a full solution only on request.

Result

Seven of nine platforms have real, DOM-verified detection. Nudges fire on stuck time and repeat failures, not a timer, and every problem stays in chrome.storage.local: nothing leaves the machine unless you turn on the optional public profile sync.

crackrsa.com homepage: Shor's Algorithm vs. RSA, live terminal running a real factoring API call
LIVE
PythonReactFastAPIQiskit

Shor's RSA Cracker

shors-rsa-cracker.pySTATUS: LIVE

Factored RSA by hand, then classically, then on IBM hardware.

Why: I wanted to understand why RSA actually breaks, not just read that it does.

Problem

Anyone can claim a quantum simulator is correct. Trusting my own code to grade my own code isn't proof of anything.

Approach

Built the statevector simulator from scratch — gates, entanglement, QFT — then diffed the same circuits against Google's Cirq state by state.

Result

Matched Cirq to floating-point precision. The real IBM hardware run came back noisier, which is exactly the point.

Ashfaq Policy & Affairs title card: The Policy Archive front page mockup
LIVE
11tyClaude APIVercelGroq

Ashfaq Policy & Affairs

editor-ai.jsSTATUS: LIVE

A foreign-policy blog with an AI editor built into the writing flow, not bolted onto the CMS.

Why: Built for a policy researcher. The interesting part turned out to be the writing tool, not the blog.

Problem

AI drafting tools either write the whole article for you or ignore your voice completely, and both produce copy that reads like it.

Approach

An in-editor AI copilot (draft, continue, proofread, brainstorm, SEO check) scoped to only that article's text, plus a dedicated humanize pass that hunts down specific tells — rule-of-three padding, filler phrases like "stands as a testament" — sentence by sentence instead of doing a generic rewrite. Reader-facing summary, takeaway and Q&A tools answer strictly from the article text.

Result

Articles keep the writer's actual voice and hedges instead of flattening into generic AI register, and every reader-facing answer traces back to a sentence that's actually on the page.

Distributed Hash-Based Threshold Signatures title card
LIVE
PythonJavaScriptMerkle Trees

Threshold Signatures

threshold_signatures.pySTATUS: LIVE

Kelsey, Lang & Lucks published this threshold-signature scheme in 2024. I built it.

Why: papers get a lot clearer once you've had to debug them.

Problem

A "multi-party" signing demo is easy to fake — one shared JS array pretending to be three signers proves nothing.

Approach

Ran each signer in a genuinely separate browser tab with no shared memory, talking only over BroadcastChannel.

Result

k-of-n threshold signing works across isolated tabs, with every Winternitz signature and Merkle proof computed live.

crack.py — this is the actual thing

Paste a key.
Watch it break.

Factor and decrypt in the browser. No data leaves your machine. This is slow by design — the gap between instant and never is why RSA works. The prefilled example is a toy 12-bit key; find a sterner one elsewhere on this site and paste it in.

output
engineering notes

Things worth writing down

reflection

Things I changed my mind about

I used to think

AES was the hard part of secure software.

I learned

Key management is the real fight.

I used to think

Reading a cryptography paper meant understanding it.

I learned

Implementation reveals the hidden assumptions.

I used to think

A quantum computer would make short work of real RSA keys.

I learned

Today's hardware can barely factor toy numbers — the gap between "possible in theory" and "possible today" is enormous.

github

Code I've put into the world

public repos
followers
contributions, last 12 months
View GitHub profile
loading real contribution history...
status.sh

Is it actually up

checking...
Live check, not a claim — this backend actually pings each URL server-side on load. It runs on a free-tier dyno that sleeps when idle, so the first check after a quiet spell can take a few seconds while it wakes up, and history resets on a cold start.
● Restricted Access. Experimental modules only.

SEC_PLAYGROUND_

root@sec_eng:/dev/null$
// LOCAL_ENVIRONMENT_V2.4.0
This one actually runs. Type help to see what it does — or just try todo.
$
contact.sh

Let's build something

message.sh
LinkedInlinkedin.com/in/iabhi92
const contact = {
name: "Abhinav Kumar",
email: "pinku2c@gmail.com",
github: "github.com/iabhi92",
linkedin: "linkedin.com/in/iabhi92",
based_in: "Sydney, Australia"
};