https://bettercrypto.org/static/applied-crypto-hardening.pdf