| 
									
										
										
										
											2008-05-11 18:41:54 -04:00
										 |  |  | ! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2017-07-01 07:41:22 -04:00
										 |  |  | USING: alien.libraries init kernel math namespaces openssl.libcrypto | 
					
						
							|  |  |  | openssl.libssl sequences ;
 | 
					
						
							| 
									
										
										
										
											2008-05-11 18:41:54 -04:00
										 |  |  | IN: openssl | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! This code is based on http://www.rtfm.com/openssl-examples/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-01 07:41:22 -04:00
										 |  |  | SYMBOLS: ssl-initialized? ssl-new-api? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 18:41:54 -04:00
										 |  |  | SINGLETON: openssl | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-12 19:53:22 -04:00
										 |  |  | : (ssl-error-string) ( n -- string )
 | 
					
						
							|  |  |  |     ERR_clear_error f ERR_error_string ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : ssl-error-string ( -- string )
 | 
					
						
							| 
									
										
										
										
											2011-10-15 22:19:44 -04:00
										 |  |  |     ERR_get_error (ssl-error-string) ;
 | 
					
						
							| 
									
										
										
										
											2008-05-11 18:41:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-13 19:24:46 -04:00
										 |  |  | : (ssl-error) ( -- * )
 | 
					
						
							|  |  |  |     ssl-error-string throw ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 18:41:54 -04:00
										 |  |  | : ssl-error ( obj -- )
 | 
					
						
							| 
									
										
										
										
											2008-05-13 19:24:46 -04:00
										 |  |  |     { f 0 } member? [ (ssl-error) ] when ;
 | 
					
						
							| 
									
										
										
										
											2008-05-11 18:41:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-01 07:41:22 -04:00
										 |  |  | : init-old-api ( -- )
 | 
					
						
							| 
									
										
										
										
											2008-05-11 18:41:54 -04:00
										 |  |  |     SSL_library_init ssl-error | 
					
						
							|  |  |  |     SSL_load_error_strings | 
					
						
							| 
									
										
										
										
											2016-03-04 12:15:12 -05:00
										 |  |  |     OpenSSL_add_all_digests ;
 | 
					
						
							| 
									
										
										
										
											2008-05-11 18:41:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-01 07:41:22 -04:00
										 |  |  | : 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 ;
 | 
					
						
							| 
									
										
										
										
											2014-08-05 15:14:53 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : maybe-init-ssl ( -- )
 | 
					
						
							|  |  |  |     ssl-initialized? get-global [ | 
					
						
							|  |  |  |         init-ssl | 
					
						
							|  |  |  |         t ssl-initialized? set-global
 | 
					
						
							|  |  |  |     ] unless ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ f ssl-initialized? set-global ] "openssl" add-startup-hook |