crypto: implement `rand.bytes(needed_bytes int) ?[]byte`, use it consistently instead of the old rand.read(), which will change to be compatible with io and the pseudo random `rand` module

pull/13483/head
Delyan Angelov 2022-02-15 18:39:17 +02:00
parent 80444c8ec4
commit ff34b79d39
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
4 changed files with 12 additions and 2 deletions

View File

@ -21,7 +21,7 @@ import crypto.rand
fn main() {
// remember to save this key somewhere if you ever want to decrypt your data
key := rand.read(32) ?
key := rand.bytes(32) ?
println('KEY: $key')
// this data is one block (16 bytes) big

View File

@ -59,7 +59,7 @@ pub fn compare_hash_and_password(password []byte, hashed_password []byte) ? {
// generate_salt generate a string to be treated as a salt.
pub fn generate_salt() string {
randbytes := rand.read(bcrypt.salt_length) or { panic(err) }
randbytes := rand.bytes(bcrypt.salt_length) or { panic(err) }
return randbytes.bytestr()
}

View File

@ -11,3 +11,13 @@ struct ReadError {
pub fn (err ReadError) msg() string {
return 'crypto.rand.read() error reading random bytes'
}
// bytes returns an array of `bytes_needed` random bytes.
// NB: this call can block your program for a long period of time,
// if your system does not have access to enough entropy.
// See also rand.bytes(), if you do not need really random bytes,
// but instead pseudo random ones, from a pseudo random generator
// that can be seeded, and that is usually faster.
pub fn bytes(bytes_needed int) ?[]byte {
return read(bytes_needed)
}