diff -up dclib-0.3.23/dclib/core/cssl.cpp.openssl dclib-0.3.23/dclib/core/cssl.cpp --- dclib-0.3.23/dclib/core/cssl.cpp.openssl 2009-01-07 23:13:52.000000000 +0100 +++ dclib-0.3.23/dclib/core/cssl.cpp 2009-08-25 14:12:21.000000000 +0200 @@ -86,7 +86,11 @@ void CSSL::DeInitSSLLibrary() /** */ SSL_CTX * CSSL::InitClientCTX() { +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + const SSL_METHOD *method; +#else SSL_METHOD *method; +#endif SSL_CTX *ctx = NULL; method = SSLv23_client_method(); /* Create new client-method instance */ @@ -109,7 +113,11 @@ SSL_CTX * CSSL::InitClientCTX() /** */ SSL_CTX * CSSL::InitServerCTX() { +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + const SSL_METHOD *method; +#else SSL_METHOD *method; +#endif SSL_CTX *ctx = NULL; method = SSLv23_server_method(); /* Create new client-method instance */ @@ -130,9 +138,14 @@ SSL_CTX * CSSL::InitServerCTX() /** */ SSL_CTX * CSSL::NewTLSv1ClientCTX() { - SSL_METHOD * method = TLSv1_client_method(); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + const SSL_METHOD *method; +#else + SSL_METHOD *method; +#endif SSL_CTX * ctx = NULL; + method = TLSv1_client_method(); if ( method != NULL ) { ctx = SSL_CTX_new(method); @@ -149,9 +162,14 @@ SSL_CTX * CSSL::NewTLSv1ClientCTX() /** */ SSL_CTX * CSSL::NewTLSv1ServerCTX() { - SSL_METHOD * method = TLSv1_server_method(); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + const SSL_METHOD *method; +#else + SSL_METHOD *method; +#endif SSL_CTX * ctx = NULL; + method = TLSv1_server_method(); if ( method != NULL ) { ctx = SSL_CTX_new(method); --- dclib-0.3.23/dclib/core/cssl.cpp.org 2018-09-26 06:27:39.330068940 +0200 +++ dclib-0.3.23/dclib/core/cssl.cpp 2018-09-26 06:31:39.423763528 +0200 @@ -447,7 +447,7 @@ CString CSSL::EncryptData( CSSLObject * CString res; CByteArray bain,baout; int i,tmplen; - EVP_CIPHER_CTX ctx; + EVP_CIPHER_CTX *ctx; // sanity check if ( !SSLObject || (s.IsEmpty()) ) @@ -455,8 +455,11 @@ CString CSSL::EncryptData( CSSLObject * return res; } - EVP_CIPHER_CTX_init(&ctx); - EVP_EncryptInit(&ctx, EVP_bf_cbc(), SSLObject->m_remotekey, SSLObject->m_remoteiv); + ctx = EVP_CIPHER_CTX_new(); + if (ctx == NULL) + return res; + + EVP_EncryptInit(ctx, EVP_bf_cbc(), SSLObject->m_remotekey, SSLObject->m_remoteiv); // init input array bain.SetSize(2); @@ -466,13 +469,13 @@ CString CSSL::EncryptData( CSSLObject * // init output array // input size + cipher_block_size for EVP_EncryptUpdate // plus cipher_block_size for EVP_EncryptFinal - baout.SetSize( bain.Size() + ( 2 * EVP_CIPHER_CTX_block_size(&ctx) ) ); + baout.SetSize( bain.Size() + ( 2 * EVP_CIPHER_CTX_block_size(ctx) ) ); //printf("CSSL::EncryptData: wrong old size=%lu new size=%lu\n",bain.Size()*2,baout.Size()); i = baout.Size(); - if ( EVP_EncryptUpdate(&ctx, baout.Data(), &i, bain.Data(), bain.Size() ) ) + if ( EVP_EncryptUpdate(ctx, baout.Data(), &i, bain.Data(), bain.Size() ) ) { - if ( EVP_EncryptFinal(&ctx, baout.Data()+i, &tmplen) ) + if ( EVP_EncryptFinal(ctx, baout.Data()+i, &tmplen) ) { i+=tmplen; bain.SetSize(0); @@ -483,7 +486,7 @@ CString CSSL::EncryptData( CSSLObject * } } - EVP_CIPHER_CTX_cleanup(&ctx); + EVP_CIPHER_CTX_free(ctx); return res; } @@ -494,7 +497,7 @@ CString CSSL::DecryptData( CSSLObject * CString res; CByteArray bain,baout; int i,tmplen; - EVP_CIPHER_CTX ctx; + EVP_CIPHER_CTX *ctx; // sanity check if ( !SSLObject || (s.IsEmpty()) ) @@ -502,22 +505,25 @@ CString CSSL::DecryptData( CSSLObject * return res; } - EVP_CIPHER_CTX_init(&ctx); - EVP_DecryptInit(&ctx, EVP_bf_cbc(), SSLObject->m_localkey, SSLObject->m_localiv); + ctx = EVP_CIPHER_CTX_new(); + if (ctx == NULL) + return res; + + EVP_DecryptInit(ctx, EVP_bf_cbc(), SSLObject->m_localkey, SSLObject->m_localiv); bain.SetSize(0); bain.Append(s.Data(),s.Length()); if ( CBase64::Decode(&baout,&bain) > 0 ) { - bain.SetSize( baout.Size() + ( 2 * EVP_CIPHER_CTX_block_size(&ctx) ) ); + bain.SetSize( baout.Size() + ( 2 * EVP_CIPHER_CTX_block_size(ctx) ) ); //printf("CSSL::DecryptData: wrong old size=%lu new size=%lu\n",baout.Size()*2,bain.Size()); i = 0; - if ( EVP_DecryptUpdate(&ctx, bain.Data(), &i, baout.Data(), (int)baout.Size() ) ) + if ( EVP_DecryptUpdate(ctx, bain.Data(), &i, baout.Data(), (int)baout.Size() ) ) { tmplen = 0; - if ( EVP_DecryptFinal(&ctx, bain.Data()+i, &tmplen) ) + if ( EVP_DecryptFinal(ctx, bain.Data()+i, &tmplen) ) { i+=tmplen; res.Set((const char*)bain.Data()+2,i-2); @@ -525,7 +531,7 @@ CString CSSL::DecryptData( CSSLObject * } } - EVP_CIPHER_CTX_cleanup(&ctx); + EVP_CIPHER_CTX_free(ctx); return res; }