38 lines
		
	
	
		
			924 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			924 B
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: init kernel namespaces openssl.libcrypto openssl.libssl
 | 
						|
sequences ;
 | 
						|
IN: openssl
 | 
						|
 | 
						|
! This code is based on http://www.rtfm.com/openssl-examples/
 | 
						|
 | 
						|
SINGLETON: openssl
 | 
						|
 | 
						|
: (ssl-error-string) ( n -- string )
 | 
						|
    ERR_clear_error f ERR_error_string ;
 | 
						|
 | 
						|
: ssl-error-string ( -- string )
 | 
						|
    ERR_get_error ERR_clear_error f ERR_error_string ;
 | 
						|
 | 
						|
: (ssl-error) ( -- * )
 | 
						|
    ssl-error-string throw ;
 | 
						|
 | 
						|
: ssl-error ( obj -- )
 | 
						|
    { f 0 } member? [ (ssl-error) ] when ;
 | 
						|
 | 
						|
: init-ssl ( -- )
 | 
						|
    SSL_library_init ssl-error
 | 
						|
    SSL_load_error_strings
 | 
						|
    OpenSSL_add_all_digests
 | 
						|
    OpenSSL_add_all_ciphers ;
 | 
						|
 | 
						|
SYMBOL: ssl-initialized?
 | 
						|
 | 
						|
: maybe-init-ssl ( -- )
 | 
						|
    ssl-initialized? get-global [
 | 
						|
        init-ssl
 | 
						|
        t ssl-initialized? set-global
 | 
						|
    ] unless ;
 | 
						|
 | 
						|
[ f ssl-initialized? set-global ] "openssl" add-startup-hook
 |