49 lines
1.3 KiB
Factor
49 lines
1.3 KiB
Factor
! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: alien.libraries init kernel math namespaces openssl.libcrypto
|
|
openssl.libssl sequences ;
|
|
IN: openssl
|
|
|
|
! This code is based on http://www.rtfm.com/openssl-examples/
|
|
|
|
SYMBOLS: ssl-initialized? ssl-new-api? ;
|
|
|
|
SINGLETON: openssl
|
|
|
|
: (ssl-error-string) ( n -- string )
|
|
ERR_clear_error f ERR_error_string ;
|
|
|
|
: ssl-error-string ( -- string )
|
|
ERR_get_error (ssl-error-string) ;
|
|
|
|
: (ssl-error) ( -- * )
|
|
ssl-error-string throw ;
|
|
|
|
: ssl-error ( obj -- )
|
|
{ f 0 } member? [ (ssl-error) ] when ;
|
|
|
|
: init-old-api ( -- )
|
|
SSL_library_init ssl-error
|
|
SSL_load_error_strings
|
|
OpenSSL_add_all_digests ;
|
|
|
|
: init-new-api ( -- )
|
|
0 f OPENSSL_init_ssl ssl-error
|
|
OPENSSL_INIT_LOAD_SSL_STRINGS
|
|
OPENSSL_INIT_LOAD_CRYPTO_STRINGS bitand
|
|
f OPENSSL_init_ssl ssl-error
|
|
OPENSSL_INIT_ADD_ALL_DIGESTS f OPENSSL_init_ssl ssl-error ;
|
|
|
|
: init-ssl ( -- )
|
|
"OPENSSL_init_ssl" "libssl" dlsym? >boolean
|
|
[ ssl-new-api? set-global ]
|
|
[ [ init-new-api ] [ init-old-api ] if ] bi ;
|
|
|
|
: maybe-init-ssl ( -- )
|
|
ssl-initialized? get-global [
|
|
init-ssl
|
|
t ssl-initialized? set-global
|
|
] unless ;
|
|
|
|
[ f ssl-initialized? set-global ] "openssl" add-startup-hook
|