1 ! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: alien.libraries kernel math namespaces openssl.libcrypto
4 openssl.libssl sequences ;
7 ! This code is based on https://www.rtfm.com/openssl-examples/
9 SYMBOLS: ssl-initialized? ssl-new-api? ;
13 : (ssl-error-string) ( n -- string )
14 ERR_clear_error f ERR_error_string ;
16 : ssl-error-string ( -- string )
17 ERR_get_error (ssl-error-string) ;
19 : throw-ssl-error ( -- * )
20 ssl-error-string throw ;
22 : ssl-error ( obj -- )
23 { f 0 } member? [ throw-ssl-error ] when ;
26 SSL_library_init ssl-error
27 SSL_load_error_strings
28 OpenSSL_add_all_digests ;
31 0 f OPENSSL_init_ssl ssl-error
32 OPENSSL_INIT_LOAD_SSL_STRINGS
33 OPENSSL_INIT_LOAD_CRYPTO_STRINGS bitand
34 f OPENSSL_init_ssl ssl-error
35 OPENSSL_INIT_ADD_ALL_DIGESTS f OPENSSL_init_ssl ssl-error ;
38 "OPENSSL_init_ssl" "libssl" dlsym? >boolean
39 [ ssl-new-api? set-global ]
40 [ [ init-new-api ] [ init-old-api ] if ] bi ;
42 : maybe-init-ssl ( -- )
43 ssl-initialized? get-global [
45 t ssl-initialized? set-global
48 STARTUP-HOOK: [ f ssl-initialized? set-global ]