allow random-32* or random-bytes* to generate randomness in terms of each other
							parent
							
								
									3e2a867c3a
								
							
						
					
					
						commit
						8cf2fd88a5
					
				| 
						 | 
					@ -16,11 +16,11 @@ IN: random.mersenne-twister.tests
 | 
				
			||||||
[ f ] [ 1234 [ make-100-randoms make-100-randoms = ] test-rng ] unit-test
 | 
					[ f ] [ 1234 [ make-100-randoms make-100-randoms = ] test-rng ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ 1333075495 ] [
 | 
					[ 1333075495 ] [
 | 
				
			||||||
    0 [ 1000 [ drop random-generator get random-32 drop ] each random-generator get random-32 ] test-rng
 | 
					    0 [ 1000 [ drop random-generator get random-32* drop ] each random-generator get random-32* ] test-rng
 | 
				
			||||||
] unit-test
 | 
					] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ 1575309035 ] [
 | 
					[ 1575309035 ] [
 | 
				
			||||||
    0 [ 10000 [ drop random-generator get random-32 drop ] each random-generator get random-32 ] test-rng
 | 
					    0 [ 10000 [ drop random-generator get random-32* drop ] each random-generator get random-32* ] test-rng
 | 
				
			||||||
] unit-test
 | 
					] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,7 +67,7 @@ PRIVATE>
 | 
				
			||||||
M: mersenne-twister seed-random ( mt seed -- )
 | 
					M: mersenne-twister seed-random ( mt seed -- )
 | 
				
			||||||
    init-mt-seq >>seq drop ;
 | 
					    init-mt-seq >>seq drop ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: mersenne-twister random-32 ( mt -- r )
 | 
					M: mersenne-twister random-32* ( mt -- r )
 | 
				
			||||||
    dup [ seq>> ] [ i>> ] bi
 | 
					    dup [ seq>> ] [ i>> ] bi
 | 
				
			||||||
    dup mt-n < [ drop 0 pick mt-generate ] unless
 | 
					    dup mt-n < [ drop 0 pick mt-generate ] unless
 | 
				
			||||||
    new-nth mt-temper
 | 
					    new-nth mt-temper
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
! Copyright (C) 2008 Doug Coleman.
 | 
					! Copyright (C) 2008 Doug Coleman.
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: alien.c-types kernel math namespaces sequences
 | 
					USING: alien.c-types kernel math namespaces sequences
 | 
				
			||||||
io.backend ;
 | 
					io.backend io.binary ;
 | 
				
			||||||
IN: random
 | 
					IN: random
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SYMBOL: random-generator
 | 
					SYMBOL: random-generator
 | 
				
			||||||
| 
						 | 
					@ -12,11 +12,14 @@ HOOK: os-crypto-random-32 io-backend ( -- r )
 | 
				
			||||||
HOOK: os-random-32 io-backend ( -- r )
 | 
					HOOK: os-random-32 io-backend ( -- r )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GENERIC: seed-random ( tuple seed -- )
 | 
					GENERIC: seed-random ( tuple seed -- )
 | 
				
			||||||
GENERIC: random-32 ( tuple -- r )
 | 
					GENERIC: random-32* ( tuple -- r )
 | 
				
			||||||
GENERIC: random-bytes* ( tuple n -- bytes )
 | 
					GENERIC: random-bytes* ( tuple n -- bytes )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: object random-bytes* ( tuple n -- byte-array )
 | 
					M: object random-bytes* ( tuple n -- byte-array )
 | 
				
			||||||
    [ drop random-32 ] with map >c-uint-array ;
 | 
					    [ drop random-32* ] with map >c-uint-array ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: object random-32* ( tuple -- n )
 | 
				
			||||||
 | 
					    4 random-bytes* le> ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: random-bytes ( n -- r )
 | 
					: random-bytes ( n -- r )
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,4 +26,3 @@ M: windows-cryptographic-rng random-bytes* ( tuple n -- bytes )
 | 
				
			||||||
    dup f f PROV_RSA_AES CRYPT_NEWKEYSET
 | 
					    dup f f PROV_RSA_AES CRYPT_NEWKEYSET
 | 
				
			||||||
    CryptAcquireContextW win32-error=0/f *void*
 | 
					    CryptAcquireContextW win32-error=0/f *void*
 | 
				
			||||||
    <windows-crypto-context> ;
 | 
					    <windows-crypto-context> ;
 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue