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