| // Copyright 2018 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. |
| |
| package sysrand |
| |
| // The maximum buffer size for crypto.getRandomValues is 65536 bytes. |
| // https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#exceptions |
| const maxGetRandomRead = 64 << 10 |
| |
| //go:wasmimport gojs runtime.getRandomData |
| //go:noescape |
| func getRandomValues(r []byte) |
| |
| // read calls the JavaScript Crypto.getRandomValues() method. |
| // See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues. |
| func read(b []byte) error { |
| for len(b) > 0 { |
| size := len(b) |
| if size > maxGetRandomRead { |
| size = maxGetRandomRead |
| } |
| getRandomValues(b[:size]) |
| b = b[size:] |
| } |
| return nil |
| } |