Most everything was generic (and nice!), and could be moved out to `utils/crypto.py`.