-
Notifications
You must be signed in to change notification settings - Fork 107
hash: Adds ChaCha20 CSPRNG functions, updates TOTP generator, adds Base32 #225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Does this belong under hash? |
imo yes, it's using almost all the same packages and the TOTP generator is already there. The only reason I added a CSPRNG is because the TOTP generator needs a cryptographically secure random seed |
Why base32? Yog is the only current user of this function indexed on GitHub, and they already convert it to Base32 Google Authenticator requires that keys be encoded as Base32 without padding: https://github.com/google/google-authenticator/wiki/Key-Uri-Format |
do the calls block if there is no hardware entropy available? |
Yes, early in the boot process. The OS will eventually give the necessary data though, from what I understand. |
Adds to functions to
hash
:rustg_csprng_chacha20(format, n_bytes)
: Cryptographically-secure pseudo-random number generator seeded by the OS/hardware.rustg_prng_chacha20_seeded(format, n_bytes, seed)
: High-quality known-seed deterministic pseudo-random number generator.rustg_encode_base32(string, padding)
rustg_decode_base32(string, padding)
Both functions support output into any of the following formats:
Both functions take a parameter,
n_bytes
which is the number of bytes sampled by the RNG. The relation ofn_bytes
to string output length is not 1:1 and varies by format.n_bytes * 2
n_bytes
ceil(n_bytes / 5) * 8
4 * ceil(n_bytes/3)
CSPRNG seeds are provided by SeedableRng::from_os_rng which uses getrandom
On Windows 10,
getrandom
calls ProcessPrngOn Linux,
getrandom
performs a getrandom system call if available, otherwise /dev/urandom after successfully polling /dev/randomUpdates TOTP generator from #76 to support SHA256 and SHA512 HMACs, as well as implements tests from the RFC rather than a private edu paper. Also allows more than 10 bytes worth of entropy for the secret key because ????????????? why?????? and stop implementing HMAC from scratch and just use a crate
Breaking Changes
rustg_generate_totp
andrustg_hash_generate_totp_tolerance
have been updated fromrustg_generate_totpXXX(seed, ...)
torustg_generate_totpXXX(algorithm, seed, ...)
rustg_generate_totp
now accepts seeds in Base32, not hex, as this is standard for OTP apps & QR codes