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.
This commit is contained in:
Przemysław Czerpak
2015-02-19 19:42:07 +01:00
parent ea82ac86f6
commit bae69e6ead
7 changed files with 262 additions and 12 deletions

View File

@@ -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

View File

@@ -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 );
}

View File

@@ -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 )

View File

@@ -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 )
{

View File

@@ -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 );

View File

@@ -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

View File

@@ -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