1// Copyright 2023 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5//go:build netbsd 6 7package unix 8 9import ( 10 "syscall" 11 "unsafe" 12) 13 14const ( 15 _CTL_KERN = 1 16 17 _KERN_ARND = 81 18) 19 20func GetEntropy(p []byte) error { 21 mib := [2]uint32{_CTL_KERN, _KERN_ARND} 22 n := uintptr(len(p)) 23 _, _, errno := syscall.Syscall6( 24 syscall.SYS___SYSCTL, 25 uintptr(unsafe.Pointer(&mib[0])), 26 uintptr(len(mib)), 27 uintptr(unsafe.Pointer(&p[0])), // olddata 28 uintptr(unsafe.Pointer(&n)), // &oldlen 29 uintptr(unsafe.Pointer(nil)), // newdata 30 0) // newlen 31 if errno != 0 { 32 return syscall.Errno(errno) 33 } 34 if n != uintptr(len(p)) { 35 return syscall.EINVAL 36 } 37 return nil 38} 39