aboutsummaryrefslogtreecommitdiff
path: root/src/crypto/rand/rand_windows.go
diff options
context:
space:
mode:
authorDmitri Shuralyov <dmitshur@google.com>2022-06-01 17:42:39 +0000
committerDmitri Shuralyov <dmitshur@google.com>2022-06-01 17:42:39 +0000
commit4658e6e324a85b0076f66acdab77799ffa9ac7bb (patch)
treef3b4de12074d583057060fdf35d91b6591859644 /src/crypto/rand/rand_windows.go
parent6b07de790c08967d0dbe3a36ec86f3d13e1cfcbd (diff)
parent26cdea3acca29db94541236f0037a20aa22ce2d7 (diff)
downloadgo-4658e6e324a85b0076f66acdab77799ffa9ac7bb.tar.gz
go-4658e6e324a85b0076f66acdab77799ffa9ac7bb.zip
[dev.boringcrypto.go1.17] all: merge go1.17.11 into dev.boringcrypto.go1.17
Change-Id: I563433b2d02a5abea610a1561139d0980d5c2102
Diffstat (limited to 'src/crypto/rand/rand_windows.go')
-rw-r--r--src/crypto/rand/rand_windows.go18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/crypto/rand/rand_windows.go b/src/crypto/rand/rand_windows.go
index 7379f1489a..6c0655c72b 100644
--- a/src/crypto/rand/rand_windows.go
+++ b/src/crypto/rand/rand_windows.go
@@ -9,7 +9,6 @@ package rand
import (
"internal/syscall/windows"
- "os"
)
func init() { Reader = &rngReader{} }
@@ -17,16 +16,11 @@ func init() { Reader = &rngReader{} }
type rngReader struct{}
func (r *rngReader) Read(b []byte) (n int, err error) {
- // RtlGenRandom only accepts 2**32-1 bytes at a time, so truncate.
- inputLen := uint32(len(b))
-
- if inputLen == 0 {
- return 0, nil
- }
-
- err = windows.RtlGenRandom(b)
- if err != nil {
- return 0, os.NewSyscallError("RtlGenRandom", err)
+ // RtlGenRandom only returns 1<<32-1 bytes at a time. We only read at
+ // most 1<<31-1 bytes at a time so that this works the same on 32-bit
+ // and 64-bit systems.
+ if err := batched(windows.RtlGenRandom, 1<<31-1)(b); err != nil {
+ return 0, err
}
- return int(inputLen), nil
+ return len(b), nil
}