From bae69e6ead36617fd1f7d3fd81c50754a97cf522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Thu, 19 Feb 2015 19:42:07 +0100 Subject: [PATCH] 2015-02-19 19:42 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/hbssl/bio.c * contrib/hbssl/err.c * contrib/hbssl/evpciph.c * contrib/hbssl/evpmd.c * contrib/hbssl/hbssl.h * contrib/hbssl/ssl.c * contrib/hbssl/ssl_inet.c ! fixed compilation with older OpenSSL versions. Now minimum supported version of OpenSSL is 0.9.6. I tested current code only with finals releases (such releases have 'f' as last hex digit in OPENSSL_VERSION_NUMBER) so it's possible that some beta release may need additional tunes but now adopting the code should be quite easy job for anyone who need to use such OpenSSL version and has same very basic C knowledge. When older OpenSSL versions are used then warnings: "passing arg X discards qualifier 'const' from pointer target type" can appear. I didn't pacified them to not hide some possible bugs in the future though it breaks C++ compilation so maybe I'll add such casting using macro redefined only for older versions. ; [TODO] check if HB_OPENSSL_OLD_OSX_ macro is still required and if not then remove it. Maybe also other DARWIN macros can be removed. --- ChangeLog.txt | 24 +++++++++++ contrib/hbssl/bio.c | 6 ++- contrib/hbssl/err.c | 6 +++ contrib/hbssl/evpciph.c | 72 +++++++++++++++++++++++++++++---- contrib/hbssl/evpmd.c | 70 +++++++++++++++++++++++++++++++- contrib/hbssl/hbssl.h | 90 +++++++++++++++++++++++++++++++++++++++++ contrib/hbssl/ssl.c | 6 ++- 7 files changed, 262 insertions(+), 12 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index ba3df7c735..8571c1ad41 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,30 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2015-02-19 19:42 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * contrib/hbssl/bio.c + * contrib/hbssl/err.c + * contrib/hbssl/evpciph.c + * contrib/hbssl/evpmd.c + * contrib/hbssl/hbssl.h + * contrib/hbssl/ssl.c + * contrib/hbssl/ssl_inet.c + ! fixed compilation with older OpenSSL versions. + Now minimum supported version of OpenSSL is 0.9.6. + I tested current code only with finals releases (such releases + have 'f' as last hex digit in OPENSSL_VERSION_NUMBER) so it's + possible that some beta release may need additional tunes but now + adopting the code should be quite easy job for anyone who need + to use such OpenSSL version and has same very basic C knowledge. + When older OpenSSL versions are used then warnings: + "passing arg X discards qualifier 'const' from pointer target type" + can appear. I didn't pacified them to not hide some possible bugs + in the future though it breaks C++ compilation so maybe I'll add + such casting using macro redefined only for older versions. + ; [TODO] check if HB_OPENSSL_OLD_OSX_ macro is still required and + if not then remove it. Maybe also other DARWIN macros can + be removed. + 2015-02-17 18:47 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rtl/gtwin/gtwin.c * use VK_MENU macro instead of direct value and do not check diff --git a/contrib/hbssl/bio.c b/contrib/hbssl/bio.c index 8ef0c22bdb..5ee53a84cc 100644 --- a/contrib/hbssl/bio.c +++ b/contrib/hbssl/bio.c @@ -191,7 +191,7 @@ HB_FUNC( BIO_TEST_FLAGS ) BIO * bio = hb_BIO_par( 1 ); if( bio ) -#if ! defined( HB_OPENSSL_OLD_OSX_ ) +#if OPENSSL_VERSION_NUMBER >= 0x00908050L && ! defined( HB_OPENSSL_OLD_OSX_ ) hb_retni( BIO_test_flags( bio, hb_parni( 2 ) ) ); #else hb_retni( 0 ); @@ -648,7 +648,11 @@ HB_FUNC( BIO_GET_CONN_IP ) BIO * bio = hb_BIO_par( 1 ); if( bio ) +#if OPENSSL_VERSION_NUMBER >= 0x00906040L hb_retc( BIO_get_conn_ip( bio ) ); +#else + hb_retc( BIO_get_conn_ip( bio, 0 ) ); +#endif else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } diff --git a/contrib/hbssl/err.c b/contrib/hbssl/err.c index a218b2bdff..73e3326bf5 100644 --- a/contrib/hbssl/err.c +++ b/contrib/hbssl/err.c @@ -80,7 +80,9 @@ HB_FUNC( ERR_PEEK_ERROR ) HB_FUNC( ERR_PEEK_LAST_ERROR ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L hb_retnint( ERR_peek_last_error() ); +#endif } HB_FUNC( ERR_ERROR_STRING ) @@ -133,6 +135,7 @@ HB_FUNC( ERR_PEEK_ERROR_LINE ) HB_FUNC( ERR_PEEK_LAST_ERROR_LINE ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L const char * file = NULL; int line = 0; @@ -140,6 +143,7 @@ HB_FUNC( ERR_PEEK_LAST_ERROR_LINE ) hb_storc( file, 1 ); hb_storni( line, 2 ); +#endif } HB_FUNC( ERR_GET_ERROR_LINE_DATA ) @@ -174,6 +178,7 @@ HB_FUNC( ERR_PEEK_ERROR_LINE_DATA ) HB_FUNC( ERR_PEEK_LAST_ERROR_LINE_DATA ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L const char * file = NULL; int line = 0; const char * data = NULL; @@ -185,6 +190,7 @@ HB_FUNC( ERR_PEEK_LAST_ERROR_LINE_DATA ) hb_storni( line, 2 ); hb_storc( data, 3 ); hb_storni( flags, 4 ); +#endif } HB_FUNC( ERR_FREE_STRINGS ) diff --git a/contrib/hbssl/evpciph.c b/contrib/hbssl/evpciph.c index 70cee96f5d..8806fd3f8a 100644 --- a/contrib/hbssl/evpciph.c +++ b/contrib/hbssl/evpciph.c @@ -113,18 +113,22 @@ const EVP_CIPHER * hb_EVP_CIPHER_par( int iParam ) case HB_EVP_CIPHER_DES_ECB: p = EVP_des_ecb(); break; case HB_EVP_CIPHER_DES_EDE: p = EVP_des_ede(); break; case HB_EVP_CIPHER_DES_EDE3: p = EVP_des_ede3(); break; +#if OPENSSL_VERSION_NUMBER >= 0x00907000L case HB_EVP_CIPHER_DES_EDE_ECB: p = EVP_des_ede_ecb(); break; case HB_EVP_CIPHER_DES_EDE3_ECB: p = EVP_des_ede3_ecb(); break; - case HB_EVP_CIPHER_DES_CFB64: p = EVP_des_cfb64(); break; +#endif case HB_EVP_CIPHER_DES_CFB: p = EVP_des_cfb(); break; + case HB_EVP_CIPHER_DES_EDE_CFB: p = EVP_des_ede_cfb(); break; + case HB_EVP_CIPHER_DES_EDE3_CFB: p = EVP_des_ede3_cfb(); break; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L case HB_EVP_CIPHER_DES_CFB1: p = EVP_des_cfb1(); break; case HB_EVP_CIPHER_DES_CFB8: p = EVP_des_cfb8(); break; + case HB_EVP_CIPHER_DES_CFB64: p = EVP_des_cfb64(); break; case HB_EVP_CIPHER_DES_EDE_CFB64: p = EVP_des_ede_cfb64(); break; - case HB_EVP_CIPHER_DES_EDE_CFB: p = EVP_des_ede_cfb(); break; - case HB_EVP_CIPHER_DES_EDE3_CFB64: p = EVP_des_ede3_cfb64(); break; - case HB_EVP_CIPHER_DES_EDE3_CFB: p = EVP_des_ede3_cfb(); break; case HB_EVP_CIPHER_DES_EDE3_CFB1: p = EVP_des_ede3_cfb1(); break; case HB_EVP_CIPHER_DES_EDE3_CFB8: p = EVP_des_ede3_cfb8(); break; + case HB_EVP_CIPHER_DES_EDE3_CFB64: p = EVP_des_ede3_cfb64(); break; +#endif case HB_EVP_CIPHER_DES_OFB: p = EVP_des_ofb(); break; case HB_EVP_CIPHER_DES_EDE_OFB: p = EVP_des_ede_ofb(); break; case HB_EVP_CIPHER_DES_EDE3_OFB: p = EVP_des_ede3_ofb(); break; @@ -149,51 +153,63 @@ const EVP_CIPHER * hb_EVP_CIPHER_par( int iParam ) case HB_EVP_CIPHER_RC2_CBC: p = EVP_rc2_cbc(); break; case HB_EVP_CIPHER_RC2_40_CBC: p = EVP_rc2_40_cbc(); break; case HB_EVP_CIPHER_RC2_64_CBC: p = EVP_rc2_64_cbc(); break; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L case HB_EVP_CIPHER_RC2_CFB64: p = EVP_rc2_cfb64(); break; +#endif case HB_EVP_CIPHER_RC2_CFB: p = EVP_rc2_cfb(); break; case HB_EVP_CIPHER_RC2_OFB: p = EVP_rc2_ofb(); break; #endif #ifndef OPENSSL_NO_BF case HB_EVP_CIPHER_BF_ECB: p = EVP_bf_ecb(); break; case HB_EVP_CIPHER_BF_CBC: p = EVP_bf_cbc(); break; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L case HB_EVP_CIPHER_BF_CFB64: p = EVP_bf_cfb64(); break; +#endif case HB_EVP_CIPHER_BF_CFB: p = EVP_bf_cfb(); break; case HB_EVP_CIPHER_BF_OFB: p = EVP_bf_ofb(); break; #endif #ifndef OPENSSL_NO_CAST case HB_EVP_CIPHER_CAST5_ECB: p = EVP_cast5_ecb(); break; case HB_EVP_CIPHER_CAST5_CBC: p = EVP_cast5_cbc(); break; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L case HB_EVP_CIPHER_CAST5_CFB64: p = EVP_cast5_cfb64(); break; +#endif case HB_EVP_CIPHER_CAST5_CFB: p = EVP_cast5_cfb(); break; case HB_EVP_CIPHER_CAST5_OFB: p = EVP_cast5_ofb(); break; #endif #ifndef OPENSSL_NO_RC5 case HB_EVP_CIPHER_RC5_32_12_16_CBC: p = EVP_rc5_32_12_16_cbc(); break; case HB_EVP_CIPHER_RC5_32_12_16_ECB: p = EVP_rc5_32_12_16_ecb(); break; - case HB_EVP_CIPHER_RC5_32_12_16_CFB64: p = EVP_rc5_32_12_16_cfb64(); break; case HB_EVP_CIPHER_RC5_32_12_16_CFB: p = EVP_rc5_32_12_16_cfb(); break; case HB_EVP_CIPHER_RC5_32_12_16_OFB: p = EVP_rc5_32_12_16_ofb(); break; + case HB_EVP_CIPHER_RC5_32_12_16_CFB64: p = EVP_rc5_32_12_16_cfb64(); break; #endif #ifndef OPENSSL_NO_AES case HB_EVP_CIPHER_AES_128_ECB: p = EVP_aes_128_ecb(); break; case HB_EVP_CIPHER_AES_128_CBC: p = EVP_aes_128_cbc(); break; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L case HB_EVP_CIPHER_AES_128_CFB1: p = EVP_aes_128_cfb1(); break; case HB_EVP_CIPHER_AES_128_CFB8: p = EVP_aes_128_cfb8(); break; case HB_EVP_CIPHER_AES_128_CFB128: p = EVP_aes_128_cfb128(); break; +#endif case HB_EVP_CIPHER_AES_128_CFB: p = EVP_aes_128_cfb(); break; case HB_EVP_CIPHER_AES_128_OFB: p = EVP_aes_128_ofb(); break; case HB_EVP_CIPHER_AES_192_ECB: p = EVP_aes_192_ecb(); break; case HB_EVP_CIPHER_AES_192_CBC: p = EVP_aes_192_cbc(); break; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L case HB_EVP_CIPHER_AES_192_CFB1: p = EVP_aes_192_cfb1(); break; case HB_EVP_CIPHER_AES_192_CFB8: p = EVP_aes_192_cfb8(); break; case HB_EVP_CIPHER_AES_192_CFB128: p = EVP_aes_192_cfb128(); break; +#endif case HB_EVP_CIPHER_AES_192_CFB: p = EVP_aes_192_cfb(); break; case HB_EVP_CIPHER_AES_192_OFB: p = EVP_aes_192_ofb(); break; case HB_EVP_CIPHER_AES_256_ECB: p = EVP_aes_256_ecb(); break; case HB_EVP_CIPHER_AES_256_CBC: p = EVP_aes_256_cbc(); break; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L case HB_EVP_CIPHER_AES_256_CFB1: p = EVP_aes_256_cfb1(); break; case HB_EVP_CIPHER_AES_256_CFB8: p = EVP_aes_256_cfb8(); break; case HB_EVP_CIPHER_AES_256_CFB128: p = EVP_aes_256_cfb128(); break; +#endif case HB_EVP_CIPHER_AES_256_CFB: p = EVP_aes_256_cfb(); break; case HB_EVP_CIPHER_AES_256_OFB: p = EVP_aes_256_ofb(); break; #endif @@ -242,18 +258,22 @@ static int hb_EVP_CIPHER_ptr_to_id( const EVP_CIPHER * p ) else if( p == EVP_des_ecb() ) n = HB_EVP_CIPHER_DES_ECB; else if( p == EVP_des_ede() ) n = HB_EVP_CIPHER_DES_EDE; else if( p == EVP_des_ede3() ) n = HB_EVP_CIPHER_DES_EDE3; +#if OPENSSL_VERSION_NUMBER >= 0x00907000L else if( p == EVP_des_ede_ecb() ) n = HB_EVP_CIPHER_DES_EDE_ECB; else if( p == EVP_des_ede3_ecb() ) n = HB_EVP_CIPHER_DES_EDE3_ECB; - else if( p == EVP_des_cfb64() ) n = HB_EVP_CIPHER_DES_CFB64; +#endif else if( p == EVP_des_cfb() ) n = HB_EVP_CIPHER_DES_CFB; + else if( p == EVP_des_ede_cfb() ) n = HB_EVP_CIPHER_DES_EDE_CFB; + else if( p == EVP_des_ede3_cfb() ) n = HB_EVP_CIPHER_DES_EDE3_CFB; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L + else if( p == EVP_des_cfb64() ) n = HB_EVP_CIPHER_DES_CFB64; else if( p == EVP_des_cfb1() ) n = HB_EVP_CIPHER_DES_CFB1; else if( p == EVP_des_cfb8() ) n = HB_EVP_CIPHER_DES_CFB8; else if( p == EVP_des_ede_cfb64() ) n = HB_EVP_CIPHER_DES_EDE_CFB64; - else if( p == EVP_des_ede_cfb() ) n = HB_EVP_CIPHER_DES_EDE_CFB; else if( p == EVP_des_ede3_cfb64() ) n = HB_EVP_CIPHER_DES_EDE3_CFB64; - else if( p == EVP_des_ede3_cfb() ) n = HB_EVP_CIPHER_DES_EDE3_CFB; else if( p == EVP_des_ede3_cfb1() ) n = HB_EVP_CIPHER_DES_EDE3_CFB1; else if( p == EVP_des_ede3_cfb8() ) n = HB_EVP_CIPHER_DES_EDE3_CFB8; +#endif else if( p == EVP_des_ofb() ) n = HB_EVP_CIPHER_DES_OFB; else if( p == EVP_des_ede_ofb() ) n = HB_EVP_CIPHER_DES_EDE_OFB; else if( p == EVP_des_ede3_ofb() ) n = HB_EVP_CIPHER_DES_EDE3_OFB; @@ -278,21 +298,27 @@ static int hb_EVP_CIPHER_ptr_to_id( const EVP_CIPHER * p ) else if( p == EVP_rc2_cbc() ) n = HB_EVP_CIPHER_RC2_CBC; else if( p == EVP_rc2_40_cbc() ) n = HB_EVP_CIPHER_RC2_40_CBC; else if( p == EVP_rc2_64_cbc() ) n = HB_EVP_CIPHER_RC2_64_CBC; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L else if( p == EVP_rc2_cfb64() ) n = HB_EVP_CIPHER_RC2_CFB64; +#endif else if( p == EVP_rc2_cfb() ) n = HB_EVP_CIPHER_RC2_CFB; else if( p == EVP_rc2_ofb() ) n = HB_EVP_CIPHER_RC2_OFB; #endif #ifndef OPENSSL_NO_BF else if( p == EVP_bf_ecb() ) n = HB_EVP_CIPHER_BF_ECB; else if( p == EVP_bf_cbc() ) n = HB_EVP_CIPHER_BF_CBC; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L else if( p == EVP_bf_cfb64() ) n = HB_EVP_CIPHER_BF_CFB64; +#endif else if( p == EVP_bf_cfb() ) n = HB_EVP_CIPHER_BF_CFB; else if( p == EVP_bf_ofb() ) n = HB_EVP_CIPHER_BF_OFB; #endif #ifndef OPENSSL_NO_CAST else if( p == EVP_cast5_ecb() ) n = HB_EVP_CIPHER_CAST5_ECB; else if( p == EVP_cast5_cbc() ) n = HB_EVP_CIPHER_CAST5_CBC; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L else if( p == EVP_cast5_cfb64() ) n = HB_EVP_CIPHER_CAST5_CFB64; +#endif else if( p == EVP_cast5_cfb() ) n = HB_EVP_CIPHER_CAST5_CFB; else if( p == EVP_cast5_ofb() ) n = HB_EVP_CIPHER_CAST5_OFB; #endif @@ -306,23 +332,29 @@ static int hb_EVP_CIPHER_ptr_to_id( const EVP_CIPHER * p ) #ifndef OPENSSL_NO_AES else if( p == EVP_aes_128_ecb() ) n = HB_EVP_CIPHER_AES_128_ECB; else if( p == EVP_aes_128_cbc() ) n = HB_EVP_CIPHER_AES_128_CBC; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L else if( p == EVP_aes_128_cfb1() ) n = HB_EVP_CIPHER_AES_128_CFB1; else if( p == EVP_aes_128_cfb8() ) n = HB_EVP_CIPHER_AES_128_CFB8; else if( p == EVP_aes_128_cfb128() ) n = HB_EVP_CIPHER_AES_128_CFB128; +#endif else if( p == EVP_aes_128_cfb() ) n = HB_EVP_CIPHER_AES_128_CFB; else if( p == EVP_aes_128_ofb() ) n = HB_EVP_CIPHER_AES_128_OFB; else if( p == EVP_aes_192_ecb() ) n = HB_EVP_CIPHER_AES_192_ECB; else if( p == EVP_aes_192_cbc() ) n = HB_EVP_CIPHER_AES_192_CBC; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L else if( p == EVP_aes_192_cfb1() ) n = HB_EVP_CIPHER_AES_192_CFB1; else if( p == EVP_aes_192_cfb8() ) n = HB_EVP_CIPHER_AES_192_CFB8; else if( p == EVP_aes_192_cfb128() ) n = HB_EVP_CIPHER_AES_192_CFB128; +#endif else if( p == EVP_aes_192_cfb() ) n = HB_EVP_CIPHER_AES_192_CFB; else if( p == EVP_aes_192_ofb() ) n = HB_EVP_CIPHER_AES_192_OFB; else if( p == EVP_aes_256_ecb() ) n = HB_EVP_CIPHER_AES_256_ECB; else if( p == EVP_aes_256_cbc() ) n = HB_EVP_CIPHER_AES_256_CBC; +#if OPENSSL_VERSION_NUMBER >= 0x00907050L else if( p == EVP_aes_256_cfb1() ) n = HB_EVP_CIPHER_AES_256_CFB1; else if( p == EVP_aes_256_cfb8() ) n = HB_EVP_CIPHER_AES_256_CFB8; else if( p == EVP_aes_256_cfb128() ) n = HB_EVP_CIPHER_AES_256_CFB128; +#endif else if( p == EVP_aes_256_cfb() ) n = HB_EVP_CIPHER_AES_256_CFB; else if( p == EVP_aes_256_ofb() ) n = HB_EVP_CIPHER_AES_256_OFB; #endif @@ -416,6 +448,11 @@ HB_FUNC( EVP_CIPHER_KEY_MODE ) { const EVP_CIPHER * cipher = hb_EVP_CIPHER_par( 1 ); +#if OPENSSL_VERSION_NUMBER < 0x00906040L + /* fix for typo in macro definition in openssl/evp.h */ + #undef EVP_CIPHER_mode + #define EVP_CIPHER_mode(e) ((e)->flags & EVP_CIPH_MODE) +#endif hb_retni( cipher ? EVP_CIPHER_mode( cipher ) : 0 ); } @@ -469,10 +506,12 @@ HB_FUNC( EVP_CIPHER_CTX_SET_PADDING ) { if( hb_EVP_CIPHER_CTX_is( 1 ) ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_CIPHER_CTX * ctx = hb_EVP_CIPHER_CTX_par( 1 ); if( ctx ) hb_retni( EVP_CIPHER_CTX_set_padding( ctx, hb_parni( 2 ) ) ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -557,6 +596,7 @@ HB_FUNC( EVP_ENCRYPTINIT_EX ) if( hb_EVP_CIPHER_CTX_is( 1 ) && cipher ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_CIPHER_CTX * ctx = hb_EVP_CIPHER_CTX_par( 1 ); if( ctx ) @@ -565,6 +605,7 @@ HB_FUNC( EVP_ENCRYPTINIT_EX ) ( ENGINE * ) hb_parptr( 3 ), ( const unsigned char * ) hb_parc( 4 ), ( const unsigned char * ) hb_parc( 5 ) ) ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -640,6 +681,7 @@ HB_FUNC( EVP_ENCRYPTFINAL_EX ) if( ctx ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L int size = EVP_CIPHER_CTX_block_size( ctx ); unsigned char * buffer = ( unsigned char * ) hb_xgrab( size + 1 ); @@ -655,6 +697,7 @@ HB_FUNC( EVP_ENCRYPTFINAL_EX ) hb_xfree( buffer ); hb_storc( NULL, 2 ); } +#endif } } else @@ -685,6 +728,7 @@ HB_FUNC( EVP_DECRYPTINIT_EX ) if( hb_EVP_CIPHER_CTX_is( 1 ) && cipher ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_CIPHER_CTX * ctx = hb_EVP_CIPHER_CTX_par( 1 ); if( ctx ) @@ -693,6 +737,7 @@ HB_FUNC( EVP_DECRYPTINIT_EX ) ( ENGINE * ) hb_parptr( 3 ), ( const unsigned char * ) hb_parc( 4 ), ( const unsigned char * ) hb_parc( 5 ) ) ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -768,6 +813,7 @@ HB_FUNC( EVP_DECRYPTFINAL_EX ) if( ctx ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L int size = EVP_CIPHER_CTX_block_size( ctx ); unsigned char * buffer = ( unsigned char * ) hb_xgrab( size + 1 ); @@ -783,6 +829,7 @@ HB_FUNC( EVP_DECRYPTFINAL_EX ) hb_xfree( buffer ); hb_storc( NULL, 2 ); } +#endif } } else @@ -814,6 +861,7 @@ HB_FUNC( EVP_CIPHERINIT_EX ) if( hb_EVP_CIPHER_CTX_is( 1 ) && cipher ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_CIPHER_CTX * ctx = hb_EVP_CIPHER_CTX_par( 1 ); if( ctx ) @@ -823,6 +871,7 @@ HB_FUNC( EVP_CIPHERINIT_EX ) ( const unsigned char * ) hb_parc( 4 ), ( const unsigned char * ) hb_parc( 5 ), hb_parni( 6 ) ) ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -898,6 +947,7 @@ HB_FUNC( EVP_CIPHERFINAL_EX ) if( ctx ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L int size = EVP_CIPHER_CTX_block_size( ctx ); unsigned char * buffer = ( unsigned char * ) hb_xgrab( size + 1 ); @@ -913,6 +963,7 @@ HB_FUNC( EVP_CIPHERFINAL_EX ) hb_xfree( buffer ); hb_storc( NULL, 2 ); } +#endif } } else @@ -1037,7 +1088,12 @@ HB_FUNC( EVP_SEALFINAL ) int size = EVP_CIPHER_CTX_block_size( ctx ); unsigned char * buffer = ( unsigned char * ) hb_xgrab( size + 1 ); +#if OPENSSL_VERSION_NUMBER >= 0x00907000L hb_retni( EVP_SealFinal( ctx, buffer, &size ) ); +#else + EVP_SealFinal( ctx, buffer, &size ); + hb_retni( 1 ); +#endif if( size > 0 ) { diff --git a/contrib/hbssl/evpmd.c b/contrib/hbssl/evpmd.c index 96ce83ecb0..ee6e7442fc 100644 --- a/contrib/hbssl/evpmd.c +++ b/contrib/hbssl/evpmd.c @@ -66,8 +66,12 @@ static HB_GARBAGE_FUNC( EVP_MD_CTX_release ) /* Check if pointer is not NULL to avoid multiple freeing */ if( ph && *ph ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L /* Destroy the object */ EVP_MD_CTX_destroy( ( EVP_MD_CTX * ) *ph ); +#else + hb_xfree( *ph ); +#endif /* set pointer to NULL just in case */ *ph = NULL; @@ -121,7 +125,7 @@ const EVP_MD * hb_EVP_MD_par( int iParam ) case HB_EVP_MD_SHA1: p = EVP_sha1(); break; case HB_EVP_MD_DSS: p = EVP_dss(); break; case HB_EVP_MD_DSS1: p = EVP_dss1(); break; -#if ! defined( HB_OPENSSL_OLD_OSX_ ) +#if OPENSSL_VERSION_NUMBER >= 0x00908000L && ! defined( HB_OPENSSL_OLD_OSX_ ) case HB_EVP_MD_ECDSA: p = EVP_ecdsa(); break; #endif #endif @@ -164,7 +168,7 @@ static int hb_EVP_MD_ptr_to_id( const EVP_MD * p ) else if( p == EVP_sha1() ) n = HB_EVP_MD_SHA1; else if( p == EVP_dss() ) n = HB_EVP_MD_DSS; else if( p == EVP_dss1() ) n = HB_EVP_MD_DSS1; -#if ! defined( HB_OPENSSL_OLD_OSX_ ) +#if OPENSSL_VERSION_NUMBER >= 0x00908000L && ! defined( HB_OPENSSL_OLD_OSX_ ) else if( p == EVP_ecdsa() ) n = HB_EVP_MD_ECDSA; #endif #endif @@ -214,7 +218,11 @@ HB_FUNC( EVP_MD_NID ) { const EVP_MD * md = hb_EVP_MD_par( 1 ); +#if OPENSSL_VERSION_NUMBER >= 0x00907000L hb_retni( md ? EVP_MD_nid( md ) : 0 ); +#else + hb_retni( md ? EVP_MD_type( md ) : 0 ); +#endif } HB_FUNC( EVP_MD_PKEY_TYPE ) @@ -242,7 +250,11 @@ HB_FUNC( EVP_MD_CTX_CREATE ) { void ** ph = ( void ** ) hb_gcAllocate( sizeof( EVP_MD_CTX * ), &s_gcEVP_MD_CTX_funcs ); +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_MD_CTX * ctx = EVP_MD_CTX_create(); +#else + EVP_MD_CTX * ctx = ( EVP_MD_CTX * ) hb_xgrabz( sizeof( EVP_MD_CTX ) ); +#endif *ph = ctx; @@ -253,10 +265,12 @@ HB_FUNC( EVP_MD_CTX_INIT ) { if( hb_EVP_MD_CTX_is( 1 ) ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) EVP_MD_CTX_init( ctx ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -266,10 +280,12 @@ HB_FUNC( EVP_MD_CTX_CLEANUP ) { if( hb_EVP_MD_CTX_is( 1 ) ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) hb_retni( EVP_MD_CTX_cleanup( ctx ) ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -306,11 +322,13 @@ HB_FUNC( EVP_MD_CTX_COPY_EX ) { if( hb_EVP_MD_CTX_is( 1 ) && hb_EVP_MD_CTX_is( 2 ) ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_MD_CTX * ctx_out = hb_EVP_MD_CTX_par( 1 ); EVP_MD_CTX * ctx_in = hb_EVP_MD_CTX_par( 2 ); if( ctx_out && ctx_in ) hb_retni( EVP_MD_CTX_copy_ex( ctx_out, ctx_in ) ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -325,7 +343,14 @@ HB_FUNC( EVP_DIGESTINIT ) EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) + { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L hb_retni( EVP_DigestInit( ctx, md ) ); +#else + EVP_DigestInit( ctx, md ); + hb_retni( 1 ); +#endif + } } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -337,10 +362,12 @@ HB_FUNC( EVP_DIGESTINIT_EX ) if( hb_EVP_MD_CTX_is( 1 ) && md ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) hb_retni( EVP_DigestInit_ex( ctx, md, ( ENGINE * ) hb_parptr( 3 ) ) ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -353,7 +380,14 @@ HB_FUNC( EVP_DIGESTUPDATE ) EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) + { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L hb_retni( EVP_DigestUpdate( ctx, hb_parcx( 2 ), ( size_t ) hb_parclen( 2 ) ) ); +#else + EVP_DigestUpdate( ctx, hb_parcx( 2 ), ( size_t ) hb_parclen( 2 ) ); + hb_retni( 1 ); +#endif + } } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -370,7 +404,12 @@ HB_FUNC( EVP_DIGESTFINAL ) unsigned char * buffer = ( unsigned char * ) hb_xgrab( EVP_MAX_MD_SIZE + 1 ); unsigned int size = 0; +#if OPENSSL_VERSION_NUMBER >= 0x00907000L hb_retni( EVP_DigestFinal( ctx, buffer, &size ) ); +#else + EVP_DigestFinal( ctx, buffer, &size ); + hb_retni( 1 ); +#endif if( size > 0 ) { @@ -396,6 +435,7 @@ HB_FUNC( EVP_DIGESTFINAL_EX ) if( ctx ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L unsigned char * buffer = ( unsigned char * ) hb_xgrab( EVP_MAX_MD_SIZE + 1 ); unsigned int size = 0; @@ -411,6 +451,7 @@ HB_FUNC( EVP_DIGESTFINAL_EX ) hb_xfree( buffer ); hb_storc( NULL, 2 ); } +#endif } } else @@ -438,10 +479,12 @@ HB_FUNC( EVP_SIGNINIT_EX ) if( hb_EVP_MD_CTX_is( 1 ) && md ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) hb_retni( EVP_SignInit_ex( ctx, md, ( ENGINE * ) hb_parptr( 3 ) ) ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -454,7 +497,14 @@ HB_FUNC( EVP_SIGNUPDATE ) EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) + { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L hb_retni( EVP_SignUpdate( ctx, hb_parcx( 2 ), ( size_t ) hb_parclen( 2 ) ) ); +#else + EVP_SignUpdate( ctx, hb_parcx( 2 ), ( size_t ) hb_parclen( 2 ) ); + hb_retni( 1 ); +#endif + } } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -498,7 +548,14 @@ HB_FUNC( EVP_VERIFYINIT ) EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) + { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L hb_retni( EVP_VerifyInit( ctx, md ) ); +#else + EVP_VerifyInit( ctx, md ); + hb_retni( 1 ); +#endif + } } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -510,10 +567,12 @@ HB_FUNC( EVP_VERIFYINIT_EX ) if( hb_EVP_MD_CTX_is( 1 ) && md ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) hb_retni( EVP_VerifyInit_ex( ctx, md, ( ENGINE * ) hb_parptr( 3 ) ) ); +#endif } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); @@ -526,7 +585,14 @@ HB_FUNC( EVP_VERIFYUPDATE ) EVP_MD_CTX * ctx = hb_EVP_MD_CTX_par( 1 ); if( ctx ) + { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L hb_retni( EVP_VerifyUpdate( ctx, hb_parcx( 2 ), ( size_t ) hb_parclen( 2 ) ) ); +#else + EVP_VerifyUpdate( ctx, hb_parcx( 2 ), ( size_t ) hb_parclen( 2 ) ); + hb_retni( 1 ); +#endif + } } else hb_errRT_BASE( EG_ARG, 2010, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); diff --git a/contrib/hbssl/hbssl.h b/contrib/hbssl/hbssl.h index dad0512d08..f7f19c10f0 100644 --- a/contrib/hbssl/hbssl.h +++ b/contrib/hbssl/hbssl.h @@ -61,11 +61,101 @@ #include "hbssl.ch" +#if OPENSSL_VERSION_NUMBER < 0x00906000L + /* #error "unsupported OpenSSL version, required 0.9.6 or higher" */ +#endif + #if OPENSSL_VERSION_NUMBER < 0x0090806fL #ifndef OPENSSL_NO_SEED #define OPENSSL_NO_SEED #endif #endif +#if OPENSSL_VERSION_NUMBER < 0x0090803fL + #ifndef OPENSSL_NO_CAMELLIA + #define OPENSSL_NO_CAMELLIA + #endif +#endif +#if OPENSSL_VERSION_NUMBER < 0x0090800fL + #ifndef OPENSSL_NO_DGRAM + #define OPENSSL_NO_DGRAM + #endif +#endif +#if OPENSSL_VERSION_NUMBER < 0x00907000L + #ifndef OPENSSL_NO_AES + #define OPENSSL_NO_AES + #endif + #if ! defined( SSLEAY_DIR ) + #define SSLEAY_DIR 5 + #endif + #if ! defined( SSL_ERROR_WANT_ACCEPT ) + #define SSL_ERROR_WANT_ACCEPT 8 + #endif + + /* translate old configuration macros to new ones */ + #if defined( NO_BF ) && ! defined( OPENSSL_NO_BF ) + #define OPENSSL_NO_BF + #endif + #if defined( NO_CAST ) && ! defined( OPENSSL_NO_CAST ) + #define OPENSSL_NO_CAST + #endif + #if defined( NO_DES ) && ! defined( OPENSSL_NO_DES ) + #define OPENSSL_NO_DES + #endif + #if defined( NO_DSA ) && ! defined( OPENSSL_NO_DSA ) + #define OPENSSL_NO_DSA + #endif + #if defined( NO_IDEA ) && ! defined( OPENSSL_NO_IDEA ) + #define OPENSSL_NO_IDEA + #endif + #if defined( NO_MDC2 ) && ! defined( OPENSSL_NO_MDC2 ) + #define OPENSSL_NO_MDC2 + #endif + #if defined( NO_MD2 ) && ! defined( OPENSSL_NO_MD2 ) + #define OPENSSL_NO_MD2 + #endif + #if defined( NO_MD4 ) && ! defined( OPENSSL_NO_MD4 ) + #define OPENSSL_NO_MD4 + #endif + #if defined( NO_MD5 ) && ! defined( OPENSSL_NO_MD5 ) + #define OPENSSL_NO_MD5 + #endif + #if defined( NO_RC2 ) && ! defined( OPENSSL_NO_RC2 ) + #define OPENSSL_NO_RC2 + #endif + #if defined( NO_RC4 ) && ! defined( OPENSSL_NO_RC4 ) + #define OPENSSL_NO_RC4 + #endif + #if defined( NO_RC5 ) && ! defined( OPENSSL_NO_RC5 ) + #define OPENSSL_NO_RC5 + #endif + #if defined( NO_RIPEMD ) && ! defined( OPENSSL_NO_RIPEMD ) + #define OPENSSL_NO_RIPEMD + #endif + #if defined( NO_RSA ) && ! defined( OPENSSL_NO_RSA ) + #define OPENSSL_NO_RSA + #endif + #if defined( NO_FP_API ) && ! defined( OPENSSL_NO_FP_API ) + #define OPENSSL_NO_FP_API + #endif + #if defined( NO_STDIO ) && ! defined( OPENSSL_NO_STDIO ) + #define OPENSSL_NO_STDIO + #endif + +#endif +#if OPENSSL_VERSION_NUMBER < 0x00908000L + #if OPENSSL_VERSION_NUMBER < 0x0090708fL || ! defined( OPENSSL_FIPS ) + #ifndef OPENSSL_NO_SHA256 + #define OPENSSL_NO_SHA256 + #endif + #ifndef OPENSSL_NO_SHA512 + #define OPENSSL_NO_SHA512 + #endif + #endif +#endif +#if OPENSSL_VERSION_NUMBER < 0x00906030L + #define SSL_get_rfd SSL_get_fd + #define SSL_get_wfd SSL_get_fd +#endif HB_EXTERN_BEGIN diff --git a/contrib/hbssl/ssl.c b/contrib/hbssl/ssl.c index 6d497bdad1..8a5dc5d19f 100644 --- a/contrib/hbssl/ssl.c +++ b/contrib/hbssl/ssl.c @@ -1260,7 +1260,7 @@ HB_FUNC( SSL_SET_MTU ) { if( hb_SSL_is( 1 ) ) { -#if ! defined( HB_OPENSSL_OLD_OSX_ ) +#if OPENSSL_VERSION_NUMBER >= 0x00908000L && ! defined( HB_OPENSSL_OLD_OSX_ ) SSL * ssl = hb_SSL_par( 1 ); if( ssl ) @@ -1507,6 +1507,7 @@ HB_FUNC( SSL_USE_PRIVATEKEY ) /* Callback */ /* -------- */ +#if OPENSSL_VERSION_NUMBER >= 0x00907000L static void hb_ssl_msg_callback( int write_p, int version, int content_type, const void * buf, size_t len, SSL * ssl, void * userdata ) { HB_SYMBOL_UNUSED( ssl ); @@ -1524,6 +1525,7 @@ static void hb_ssl_msg_callback( int write_p, int version, int content_type, con hb_vmRequestRestore(); } } +#endif HB_FUNC( SSL_SET_MSG_CALLBACK ) { @@ -1533,6 +1535,7 @@ HB_FUNC( SSL_SET_MSG_CALLBACK ) if( ssl ) { +#if OPENSSL_VERSION_NUMBER >= 0x00907000L PHB_ITEM pCallback = hb_param( 2, HB_IT_BLOCK | HB_IT_SYMBOL ); if( pCallback ) @@ -1548,6 +1551,7 @@ HB_FUNC( SSL_SET_MSG_CALLBACK ) SSL_set_msg_callback_arg( ssl, NULL ); SSL_set_msg_callback( ssl, NULL ); } +#endif } } else