|  | // Copyright 2016 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package rand | 
|  |  | 
|  | import ( | 
|  | "internal/syscall/unix" | 
|  | ) | 
|  |  | 
|  | func init() { | 
|  | altGetRandom = getRandomOpenBSD | 
|  | } | 
|  |  | 
|  | func getRandomOpenBSD(p []byte) (ok bool) { | 
|  | // getentropy(2) returns a maximum of 256 bytes per call | 
|  | for i := 0; i < len(p); i += 256 { | 
|  | end := i + 256 | 
|  | if len(p) < end { | 
|  | end = len(p) | 
|  | } | 
|  | err := unix.GetEntropy(p[i:end]) | 
|  | if err != nil { | 
|  | return false | 
|  | } | 
|  | } | 
|  | return true | 
|  | } |