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 ; io.backend ;
IN: random IN: random
SYMBOL: random-generator
HOOK: os-crypto-random-bytes io-backend ( n -- byte-array ) HOOK: os-crypto-random-bytes io-backend ( n -- byte-array )
HOOK: os-random-bytes io-backend ( n -- byte-array ) HOOK: os-random-bytes io-backend ( n -- byte-array )
HOOK: os-crypto-random-32 io-backend ( -- r ) 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: seed-random ( tuple seed -- )
GENERIC: random-32 ( tuple -- r ) 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 ; [ drop random-32 ] with map >c-uint-array ;
SYMBOL: random-generator
: random-bytes ( n -- r ) : random-bytes ( n -- r )
[ [
4 /mod zero? [ 1+ ] unless 4 /mod zero? [ 1+ ] unless
random-generator get swap (random-bytes) random-generator get swap random-bytes*
] keep head ; ] keep head ;
: random ( seq -- elt ) : 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> ;

View File

@ -2,6 +2,32 @@ USING: alien.syntax kernel math windows.types math.bitfields ;
IN: windows.advapi32 IN: windows.advapi32
LIBRARY: advapi32 LIBRARY: advapi32
: PROV_RSA_FULL 1 ; inline
: PROV_RSA_SIG 2 ; inline
: PROV_DSS 3 ; inline
: PROV_FORTEZZA 4 ; inline
: PROV_MS_EXCHANGE 5 ; inline
: PROV_SSL 6 ; inline
: PROV_RSA_SCHANNEL 12 ; inline
: PROV_DSS_DH 13 ; inline
: PROV_EC_ECDSA_SIG 14 ; inline
: PROV_EC_ECNRA_SIG 15 ; inline
: PROV_EC_ECDSA_FULL 16 ; inline
: PROV_EC_ECNRA_FULL 17 ; inline
: PROV_DH_SCHANNEL 18 ; inline
: PROV_SPYRUS_LYNKS 20 ; inline
: PROV_RNG 21 ; inline
: PROV_INTEL_SEC 22 ; inline
: PROV_REPLACE_OWF 23 ; inline
: PROV_RSA_AES 24 ; inline
: CRYPT_VERIFYCONTEXT HEX: F0000000 ; inline
: CRYPT_NEWKEYSET HEX: 8 ; inline
: CRYPT_DELETEKEYSET HEX: 10 ; inline
: CRYPT_MACHINE_KEYSET HEX: 20 ; inline
: CRYPT_SILENT HEX: 40 ; inline
! : I_ScGetCurrentGroupStateW ; ! : I_ScGetCurrentGroupStateW ;
! : A_SHAFinal ; ! : A_SHAFinal ;
! : A_SHAInit ; ! : A_SHAInit ;
@ -143,7 +169,13 @@ FUNCTION: BOOL AdjustTokenPrivileges ( HANDLE TokenHandle,
! : CredpDecodeCredential ; ! : CredpDecodeCredential ;
! : CredpEncodeCredential ; ! : CredpEncodeCredential ;
! : CryptAcquireContextA ; ! : CryptAcquireContextA ;
! : CryptAcquireContextW ; FUNCTION: BOOL CryptAcquireContextW ( HCRYPTPROV* phProv,
LPCTSTR pszContainer,
LPCTSTR pszProvider,
DWORD dwProvType,
DWORD dwFlags ) ;
: CryptAcquireContext CryptAcquireContextW ;
! : CryptContextAddRef ; ! : CryptContextAddRef ;
! : CryptCreateHash ; ! : CryptCreateHash ;
! : CryptDecrypt ; ! : CryptDecrypt ;
@ -159,7 +191,7 @@ FUNCTION: BOOL AdjustTokenPrivileges ( HANDLE TokenHandle,
! : CryptEnumProvidersW ; ! : CryptEnumProvidersW ;
! : CryptExportKey ; ! : CryptExportKey ;
! : CryptGenKey ; ! : CryptGenKey ;
! : CryptGenRandom ; FUNCTION: BOOL CryptGenRandom ( HCRYPTPROV hProv, DWORD dwLen, BYTE* pbBuffer ) ;
! : CryptGetDefaultProviderA ; ! : CryptGetDefaultProviderA ;
! : CryptGetDefaultProviderW ; ! : CryptGetDefaultProviderW ;
! : CryptGetHashParam ; ! : CryptGetHashParam ;
@ -169,7 +201,7 @@ FUNCTION: BOOL AdjustTokenPrivileges ( HANDLE TokenHandle,
! : CryptHashData ; ! : CryptHashData ;
! : CryptHashSessionKey ; ! : CryptHashSessionKey ;
! : CryptImportKey ; ! : CryptImportKey ;
! : CryptReleaseContext ; FUNCTION: BOOL CryptReleaseContext ( HCRYPTPROV hProv, DWORD dwFlags ) ;
! : CryptSetHashParam ; ! : CryptSetHashParam ;
! : CryptSetKeyParam ; ! : CryptSetKeyParam ;
! : CryptSetProvParam ; ! : CryptSetProvParam ;

View File

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