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