A BitTorrent client
Bencode, trackers and the peer-to-peer protocol. Download a real file by talking to real peers.
Go · Python · Java
Rotations, padding and the compression block. Sign and verify messages without touching a crypto library.
Build it in your language
The tester treats your program as a black box: any language works. These are just the most convenient ones for this project.
A cryptographic hash is a function that shows up everywhere — passwords, signatures, blockchains, file integrity — and that almost nobody has seen from the inside. Inside, it's rotations and additions, nothing more.
You'll implement SHA-256 from the padding to the compression block, check your output against the official test vectors, and use it to build HMAC and sign real tokens.
7 stages across 3 phases. Every stage comes with its guide and its tests: you move on when they pass.
Padding, length in bits, and splitting into 512-bit blocks.
Message schedule, the 64 rounds, and validation against the NIST vectors.
HMAC-SHA256, and signing and verifying tokens in constant time.
Bencode, trackers and the peer-to-peer protocol. Download a real file by talking to real peers.
Go · Python · Java
Blobs, trees and commits. Discover that Git is a content-addressed object store, and little else.
Go · Python · Rust