rand_js.mx raw

   1  // Copyright 2018 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  package sysrand
   6  
   7  // The maximum buffer size for crypto.getRandomValues is 65536 bytes.
   8  // https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#exceptions
   9  const maxGetRandomRead = 64 << 10
  10  
  11  //go:wasmimport gojs runtime.getRandomData
  12  //go:noescape
  13  func getRandomValues(r []byte)
  14  
  15  // read calls the JavaScript Crypto.getRandomValues() method.
  16  // See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues.
  17  func read(b []byte) error {
  18  	for len(b) > 0 {
  19  		size := len(b)
  20  		if size > maxGetRandomRead {
  21  			size = maxGetRandomRead
  22  		}
  23  		getRandomValues(b[:size])
  24  		b = b[size:]
  25  	}
  26  	return nil
  27  }
  28