working on random

db4
Doug Coleman 2008-03-26 18:48:55 -05:00
parent 9120865157
commit d823c4a287
4 changed files with 828 additions and 765 deletions

View File

@ -4,6 +4,8 @@ USING: alien.c-types kernel math namespaces sequences
io.backend ;
IN: random
SYMBOL: random-generator
HOOK: os-crypto-random-bytes io-backend ( n -- byte-array )
HOOK: os-random-bytes io-backend ( n -- byte-array )
HOOK: os-crypto-random-32 io-backend ( -- r )
@ -11,16 +13,15 @@ HOOK: os-random-32 io-backend ( -- r )
GENERIC: seed-random ( tuple seed -- )
GENERIC: random-32 ( tuple -- r )
GENERIC: random-bytes* ( tuple n -- bytes )
: (random-bytes) ( tuple n -- byte-array )
M: object random-bytes* ( tuple n -- byte-array )
[ drop random-32 ] with map >c-uint-array ;
SYMBOL: random-generator
: random-bytes ( n -- r )
[
4 /mod zero? [ 1+ ] unless
random-generator get swap (random-bytes)
random-generator get swap random-bytes*
] keep head ;
: random ( seq -- elt )

View File

@ -0,0 +1,29 @@
USING: accessors alien.c-types byte-arrays continuations
kernel random windows windows.advapi32 ;
IN: random.windows.cryptographic
TUPLE: windows-crypto-context handle ;
C: <windows-crypto-context> windows-crypto-context
M: windows-crypto-context dispose ( tuple -- )
handle>> 0 CryptReleaseContext win32-error=0/f ;
TUPLE: windows-cryptographic-rng context ;
C: <windows-cryptographic-rng> windows-cryptographic-rng
M: windows-cryptographic-rng dispose ( tuple -- )
context>> dispose ;
M: windows-cryptographic-rng random-bytes* ( tuple n -- bytes )
>r context>> r> dup <byte-array>
[ CryptGenRandom win32-error=0/f ] keep ;
: acquire-aes-context ( -- bytes )
"HCRYPTPROV" <c-object>
dup f f PROV_RSA_AES CRYPT_NEWKEYSET
CryptAcquireContextW win32-error=0/f *void*
<windows-crypto-context> ;

File diff suppressed because it is too large Load Diff

View File

@ -113,6 +113,7 @@ TYPEDEF: HANDLE HSZ
TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
TYPEDEF: HANDLE HWINSTA ! typo??
TYPEDEF: HANDLE HWND
TYPEDEF: HANDLE HCRYPTPROV
TYPEDEF: WORD LANGID
TYPEDEF: DWORD LCID
TYPEDEF: DWORD LCTYPE