crypto: add custom errors to crypto lib (#9522)
parent
ab6e0ed0b3
commit
70b189d751
|
@ -4,6 +4,7 @@
|
|||
|
||||
module rand
|
||||
|
||||
const (
|
||||
read_error = error('crypto.rand.read() error reading random bytes')
|
||||
)
|
||||
struct ReadError {
|
||||
msg string = 'crypto.rand.read() error reading random bytes'
|
||||
code int
|
||||
}
|
||||
|
|
|
@ -12,10 +12,10 @@ fn C.SecRandomCopyBytes(rnd C.SecRandomRef, count size_t, bytes voidptr) int
|
|||
|
||||
// read returns an array of `bytes_needed` random bytes read from the OS.
|
||||
pub fn read(bytes_needed int) ?[]byte {
|
||||
mut buffer := []byte{ len: bytes_needed }
|
||||
mut buffer := []byte{len: bytes_needed}
|
||||
status := C.SecRandomCopyBytes(C.SecRandomRef(0), bytes_needed, buffer.data)
|
||||
if status != 0 {
|
||||
return read_error
|
||||
return IError(&ReadError{})
|
||||
}
|
||||
return buffer
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ pub fn read(bytes_needed int) ?[]byte {
|
|||
rbytes := unsafe { getrandom(batch_size, buffer + bytes_read) }
|
||||
if rbytes == -1 {
|
||||
unsafe { free(buffer) }
|
||||
return read_error
|
||||
return IError(&ReadError{})
|
||||
}
|
||||
bytes_read += rbytes
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ pub fn read(bytes_needed int) ?[]byte {
|
|||
rbytes := unsafe { getrandom(batch_size, buffer + bytes_read) }
|
||||
if rbytes == -1 {
|
||||
unsafe { free(buffer) }
|
||||
return read_error
|
||||
return IError(&ReadError{})
|
||||
}
|
||||
bytes_read += rbytes
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ pub fn read(bytes_needed int) ?[]byte {
|
|||
// use bcrypt_use_system_preferred_rng because we passed null as algo
|
||||
status := C.BCryptGenRandom(0, buffer.data, bytes_needed, bcrypt_use_system_preferred_rng)
|
||||
if status != status_success {
|
||||
return read_error
|
||||
return IError(&ReadError{})
|
||||
}
|
||||
return buffer
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue