| // Copyright 2023 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 netbsd |
| |
| package unix |
| |
| import ( |
| "syscall" |
| "unsafe" |
| ) |
| |
| const ( |
| _CTL_KERN = 1 |
| |
| _KERN_ARND = 81 |
| ) |
| |
| func GetEntropy(p []byte) error { |
| mib := [2]uint32{_CTL_KERN, _KERN_ARND} |
| n := uintptr(len(p)) |
| _, _, errno := syscall.Syscall6( |
| syscall.SYS___SYSCTL, |
| uintptr(unsafe.Pointer(&mib[0])), |
| uintptr(len(mib)), |
| uintptr(unsafe.Pointer(&p[0])), // olddata |
| uintptr(unsafe.Pointer(&n)), // &oldlen |
| uintptr(unsafe.Pointer(nil)), // newdata |
| 0) // newlen |
| if errno != 0 { |
| return syscall.Errno(errno) |
| } |
| if n != uintptr(len(p)) { |
| return syscall.EINVAL |
| } |
| return nil |
| } |