Modern cryptography primitives implemented in Scratch, via Boiga
IMPORTANT NOTE: This is a toy. Don't trust these implementations. Although I have implemented constant-time algorithms, there are no guarantees that they're constant time in the Scratch runtime. Furthermore, I think there are some edge-cases in modular multiplication in poly1305 and x25519 that I need to address, which may be security-relevant.
A demo project is here: https://scratch.mit.edu/projects/714773326/ (It doesn't do anything useful yet, but you can see what the compiled code looks like)
- BLAKE3 (https://github.com/BLAKE3-team/BLAKE3-specs)
- BLAKE2s (RFC-7693)
- ChaCha20 (RFC-8439)
- ChaCha20-based CSPRNG
- ChaCha20-Poly1305 (RFC-8439)
- x25519 (RFC-7748) (EC scalar multiplication, suitable for ECDH)
git clone --recursive https://github.com/DavidBuchanan314/scratch-cryptography-library
python3 -m demo
Note: Requires Python 3.10
This should produce a sb3 file at demo/out/Scratch Cryptography Library: Demo.sb3
,
which you can load into Scratch.
The generated scratch code is massive (~4000 blocks), and looks something like this, when artfully aranged: