Browse Source

Replace Math.random with crypto.getRandomValues for _system_number

Damian Tarnawski 1 year ago
parent
commit
49da19e013
3 changed files with 6 additions and 5 deletions
  1. 1 1
      core/crypto/rand_js.odin
  2. 5 3
      core/math/rand/system_js.odin
  3. 0 1
      vendor/wasm/js/runtime.js

+ 1 - 1
core/crypto/rand_js.odin

@@ -6,7 +6,7 @@ foreign odin_env {
 	env_rand_bytes :: proc "contextless" (buf: []byte) ---
 }
 
-_MAX_PER_CALL_BYTES :: 65536
+_MAX_PER_CALL_BYTES :: 65536 // 64kiB
 
 _rand_bytes :: proc(dst: []byte) {
 	dst := dst

+ 5 - 3
core/math/rand/system_js.odin

@@ -2,11 +2,13 @@ package rand
 
 foreign import "odin_env"
 foreign odin_env {
-	@(link_name = "rand")
-	rand_f64 :: proc "contextless" () -> f64 ---
+	@(link_name = "rand_bytes")
+	env_rand_bytes :: proc "contextless" (buf: []byte) ---
 }
 
 @(require_results)
 _system_random :: proc() -> u64 {
-	return u64(rand_f64() * 0x1fffffffffffff)
+	buf: [8]u8
+	env_rand_bytes(buf[:])
+	return transmute(u64)buf
 }

+ 0 - 1
vendor/wasm/js/runtime.js

@@ -1350,7 +1350,6 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) {
 			exp:     Math.exp,
 			ldexp:   (x, exp) => x * Math.pow(2, exp),
 
-			rand: Math.random,
 			rand_bytes: (ptr, len) => {
 				const view = new Uint8Array(wasmMemoryInterface.memory.buffer, ptr, len)
 				crypto.getRandomValues(view)