crypto: add custom errors to crypto lib (#9522)
parent
ab6e0ed0b3
commit
70b189d751
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
module rand
|
module rand
|
||||||
|
|
||||||
const (
|
struct ReadError {
|
||||||
read_error = error('crypto.rand.read() error reading random bytes')
|
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.
|
// read returns an array of `bytes_needed` random bytes read from the OS.
|
||||||
pub fn read(bytes_needed int) ?[]byte {
|
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)
|
status := C.SecRandomCopyBytes(C.SecRandomRef(0), bytes_needed, buffer.data)
|
||||||
if status != 0 {
|
if status != 0 {
|
||||||
return read_error
|
return IError(&ReadError{})
|
||||||
}
|
}
|
||||||
return buffer
|
return buffer
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ pub fn read(bytes_needed int) ?[]byte {
|
||||||
rbytes := unsafe { getrandom(batch_size, buffer + bytes_read) }
|
rbytes := unsafe { getrandom(batch_size, buffer + bytes_read) }
|
||||||
if rbytes == -1 {
|
if rbytes == -1 {
|
||||||
unsafe { free(buffer) }
|
unsafe { free(buffer) }
|
||||||
return read_error
|
return IError(&ReadError{})
|
||||||
}
|
}
|
||||||
bytes_read += rbytes
|
bytes_read += rbytes
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ pub fn read(bytes_needed int) ?[]byte {
|
||||||
rbytes := unsafe { getrandom(batch_size, buffer + bytes_read) }
|
rbytes := unsafe { getrandom(batch_size, buffer + bytes_read) }
|
||||||
if rbytes == -1 {
|
if rbytes == -1 {
|
||||||
unsafe { free(buffer) }
|
unsafe { free(buffer) }
|
||||||
return read_error
|
return IError(&ReadError{})
|
||||||
}
|
}
|
||||||
bytes_read += rbytes
|
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
|
// 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)
|
status := C.BCryptGenRandom(0, buffer.data, bytes_needed, bcrypt_use_system_preferred_rng)
|
||||||
if status != status_success {
|
if status != status_success {
|
||||||
return read_error
|
return IError(&ReadError{})
|
||||||
}
|
}
|
||||||
return buffer
|
return buffer
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue