Support rngd on arm64

Although it does not do anything, as there is no CPU rng on arm64 at present.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
Justin Cormack 2017-08-04 14:01:18 +01:00
parent d7caf92708
commit 8b2327b0e2
5 changed files with 47 additions and 27 deletions

View File

@ -1,5 +1,4 @@
IMAGE=rngd
DEPS:=$(wildcard cmd/rngd/*.go) $(shell find cmd/rngd/vendor)
ARCHES=x86_64
include ../package.mk

View File

@ -2,10 +2,14 @@
package main
// int rndaddentropy;
import "C"
import (
"flag"
"log"
"os"
"unsafe"
"golang.org/x/sys/unix"
)
@ -69,3 +73,24 @@ func main() {
}
}
}
type randInfo struct {
entropyCount int
size int
buf uint64
}
func writeEntropy(random *os.File) (int, error) {
r, err := rand()
if err != nil {
// assume can fail occasionally
return 0, nil
}
const entropy = 64 // they are good random numbers, Brent
info := randInfo{entropy, 8, r}
ret, _, err := unix.Syscall(unix.SYS_IOCTL, uintptr(random.Fd()), uintptr(C.rndaddentropy), uintptr(unsafe.Pointer(&info)))
if ret == 0 {
return 8, nil
}
return 0, err
}

View File

@ -37,10 +37,6 @@ import "C"
import (
"errors"
"flag"
"os"
"unsafe"
"golang.org/x/sys/unix"
)
var disableRdrand = flag.Bool("disable-rdrand", false, "Disable use of RDRAND")
@ -48,12 +44,6 @@ var disableRdseed = flag.Bool("disable-rdseed", false, "Disable use of RDSEED")
var hasRdrand, hasRdseed bool
type randInfo struct {
entropyCount int
size int
buf uint64
}
func initRand() bool {
hasRdrand = C.hasrdrand() == 1 && !*disableRdrand
hasRdseed = C.hasrdseed() == 1 && !*disableRdseed
@ -72,18 +62,3 @@ func rand() (uint64, error) {
}
return 0, errors.New("No randomness available")
}
func writeEntropy(random *os.File) (int, error) {
r, err := rand()
if err != nil {
// assume can fail occasionally
return 0, nil
}
const entropy = 64 // they are good random numbers, Brent
info := randInfo{entropy, 8, r}
ret, _, err := unix.Syscall(unix.SYS_IOCTL, uintptr(random.Fd()), uintptr(C.rndaddentropy), uintptr(unsafe.Pointer(&info)))
if ret == 0 {
return 8, nil
}
return 0, err
}

View File

@ -0,0 +1,21 @@
package main
// #include <linux/random.h>
//
// int rndaddentropy = RNDADDENTROPY;
//
import "C"
import (
"errors"
)
// No standard RNG on arm64
func initRand() bool {
return false
}
func rand() (uint64, error) {
return 0, errors.New("No randomness available")
}

View File

@ -1,4 +1,4 @@
// +build !linux !amd64
// +build !linux !amd64,!arm64
package main