0 | module Crypto.Random.JS
9 | %foreign "node:lambda:n => require('crypto').randomBytes(n)"
10 | prim_io__randomBytes : Int -> PrimIO Buffer
13 | %foreign "javascript:lambda:n => crypto.getRandomValues(new Uint8Array(n))"
14 | prim_io__getRandomValues : Int -> PrimIO Buffer
16 | buffer_content : HasIO io => (Int -> PrimIO Buffer) -> (n : Nat) -> io (Vect n Bits8)
17 | buffer_content f n = do
18 | buffer <- primIO $
f (cast n)
19 | traverse (getBits8 buffer) $
map (cast . finToNat) range
22 | HasIO io => MonadRandom io where
23 | random_bytes Z = pure []
26 | "node" => buffer_content prim_io__randomBytes n
27 | "javascript" => buffer_content prim_io__getRandomValues n
28 | _ => assert_total $
idris_crash "no random backend availible"