| // 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. |
| |
| //go:build (darwin && !ios) || openbsd |
| // +build darwin,!ios openbsd |
| |
| package rand |
| |
| import ( |
| "internal/syscall/unix" |
| ) |
| |
| func init() { |
| altGetRandom = getEntropy |
| } |
| |
| func getEntropy(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 |
| } |