Source File
rand_getrandom.go
Belonging Package
crypto/rand
// Copyright 2014 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 dragonfly || freebsd || linux || solarispackage randimport ()func () {var intswitch runtime.GOOS {case "linux", "android":// Per the manpage:// When reading from the urandom source, a maximum of 33554431 bytes// is returned by a single call to getrandom() on systems where int// has a size of 32 bits.= (1 << 25) - 1case "dragonfly", "freebsd", "illumos", "solaris":= 1 << 8default:panic("no maximum specified for GetRandom")}altGetRandom = batched(getRandom, )}// If the kernel is too old to support the getrandom syscall(),// unix.GetRandom will immediately return ENOSYS and we will then fall back to// reading from /dev/urandom in rand_unix.go. unix.GetRandom caches the ENOSYS// result so we only suffer the syscall overhead once in this case.// If the kernel supports the getrandom() syscall, unix.GetRandom will block// until the kernel has sufficient randomness (as we don't use GRND_NONBLOCK).// In this case, unix.GetRandom will not return an error.func ( []byte) error {, := unix.GetRandom(, 0)if != nil {return}if != len() {return syscall.EIO}return nil}
![]() |
The pages are generated with Golds v0.7.6. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |