aboutsummaryrefslogtreecommitdiff
path: root/crypto/rand.go
diff options
context:
space:
mode:
authorJoseph Richey <joerichey94@gmail.com>2017-10-19 11:34:07 -0700
committerJoe Richey joerichey@google.com <joerichey@google.com>2017-10-20 11:24:14 -0700
commit6de6b14a09b3695fe797e5fd59a04b3c3834641a (patch)
tree49a6c617f0e470892099e0f38f4dd3ab9f920964 /crypto/rand.go
parent3269bc539e52cdced8c03a628e4fdf22942ece4b (diff)
crypto: Remove crypto.randReader
As #19274 is now fixed in Go 1.9, there is no longer any reason to have a duplicate implementation to the standard library. We can now move safely to crypto/rand.
Diffstat (limited to 'crypto/rand.go')
-rw-r--r--crypto/rand.go67
1 files changed, 0 insertions, 67 deletions
diff --git a/crypto/rand.go b/crypto/rand.go
deleted file mode 100644
index 0778ebd..0000000
--- a/crypto/rand.go
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * rand.go - Reader used to generate secure random data for fscrypt.
- *
- * Copyright 2017 Google Inc.
- * Author: Joe Richey (joerichey@google.com)
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package crypto
-
-import (
- "io"
-
- "github.com/pkg/errors"
- "golang.org/x/sys/unix"
-)
-
-// NewRandomBuffer uses the Linux Getrandom() syscall to create random bytes. If
-// the operating system has insufficient randomness, the buffer creation will
-// fail. This is an improvement over Go's built-in crypto/rand which will still
-// return bytes if the system has insufficiency entropy.
-// See: https://github.com/golang/go/issues/19274
-//
-// While this syscall was only introduced in Kernel v3.17, it predates the
-// introduction of filesystem encryption, so it introduces no additional
-// compatibility issues.
-func NewRandomBuffer(length int) ([]byte, error) {
- buffer := make([]byte, length)
- if _, err := io.ReadFull(randReader{}, buffer); err != nil {
- return nil, err
- }
- return buffer, nil
-}
-
-// NewRandomKey creates a random key of the specified length. This function uses
-// the same random number generation process a NewRandomBuffer.
-func NewRandomKey(length int) (*Key, error) {
- return NewFixedLengthKeyFromReader(randReader{}, length)
-}
-
-// randReader just calls into Getrandom, so no internal data is needed.
-type randReader struct{}
-
-func (r randReader) Read(buffer []byte) (int, error) {
- n, err := unix.Getrandom(buffer, unix.GRND_NONBLOCK)
- switch err {
- case nil:
- return n, nil
- case unix.EAGAIN:
- return 0, errors.Wrap(ErrGetrandomFail, "insufficient entropy in pool")
- case unix.ENOSYS:
- return 0, errors.Wrap(ErrGetrandomFail, "kernel must be v3.17 or later")
- default:
- return 0, errors.Wrap(ErrGetrandomFail, err.Error())
- }
-}