diff -ru ../qca-ossl-2.0.0-beta3/CMakeLists.txt ./CMakeLists.txt --- ../qca-ossl-2.0.0-beta3/CMakeLists.txt 2007-06-29 23:10:53.000000000 +0200 +++ ./CMakeLists.txt 2010-04-18 04:05:09.000000000 +0200 @@ -1,5 +1,12 @@ # QCA OSSL +INCLUDE(CheckFunctionExists) +SET(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES}) +CHECK_FUNCTION_EXISTS(EVP_md2 HAVE_OPENSSL_MD2) +IF (HAVE_OPENSSL_MD2) + ADD_DEFINITIONS(-DHAVE_OPENSSL_MD2) +ENDIF (HAVE_OPENSSL_MD2) + SET(QCA_OSSL_SOURCES qca-ossl.cpp) MY_AUTOMOC( QCA_OSSL_SOURCES ) diff -ru ../qca-ossl-2.0.0-beta3/qca-ossl.cpp ./qca-ossl.cpp --- ../qca-ossl-2.0.0-beta3/qca-ossl.cpp 2007-12-11 07:34:57.000000000 +0100 +++ ./qca-ossl.cpp 2010-04-18 04:08:46.000000000 +0200 @@ -42,6 +42,15 @@ #define OSSL_097 #endif +#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10000000L +// OpenSSL 1.0.0 makes a few changes that aren't very C++ friendly... +// Among other things, CHECKED_PTR_OF returns a void*, but is used in +// contexts requiring STACK pointers. +#undef CHECKED_PTR_OF +#define CHECKED_PTR_OF(type, p) \ + ((_STACK*) (1 ? p : (type*)0)) +#endif + using namespace QCA; namespace opensslQCAPlugin { @@ -1771,8 +1780,10 @@ md = EVP_sha1(); else if(alg == EMSA3_MD5) md = EVP_md5(); +#ifdef HAVE_OPENSSL_MD2 else if(alg == EMSA3_MD2) md = EVP_md2(); +#endif else if(alg == EMSA3_RIPEMD160) md = EVP_ripemd160(); else if(alg == EMSA3_Raw) @@ -1789,8 +1800,10 @@ md = EVP_sha1(); else if(alg == EMSA3_MD5) md = EVP_md5(); +#ifdef HAVE_OPENSSL_MD2 else if(alg == EMSA3_MD2) md = EVP_md2(); +#endif else if(alg == EMSA3_RIPEMD160) md = EVP_ripemd160(); else if(alg == EMSA3_Raw) @@ -3385,9 +3398,11 @@ case NID_md5WithRSAEncryption: p.sigalgo = QCA::EMSA3_MD5; break; +#ifdef HAVE_OPENSSL_MD2 case NID_md2WithRSAEncryption: p.sigalgo = QCA::EMSA3_MD2; break; +#endif case NID_ripemd160WithRSA: p.sigalgo = QCA::EMSA3_RIPEMD160; break; @@ -3871,9 +3886,11 @@ case NID_md5WithRSAEncryption: p.sigalgo = QCA::EMSA3_MD5; break; +#ifdef HAVE_OPENSSL_MD2 case NID_md2WithRSAEncryption: p.sigalgo = QCA::EMSA3_MD2; break; +#endif case NID_ripemd160WithRSA: p.sigalgo = QCA::EMSA3_RIPEMD160; break; @@ -4061,9 +4078,11 @@ case NID_md5WithRSAEncryption: p.sigalgo = QCA::EMSA3_MD5; break; +#ifdef HAVE_OPENSSL_MD2 case NID_md2WithRSAEncryption: p.sigalgo = QCA::EMSA3_MD2; break; +#endif case NID_ripemd160WithRSA: p.sigalgo = QCA::EMSA3_RIPEMD160; break; @@ -6582,7 +6601,9 @@ list += "sha1"; list += "sha0"; list += "ripemd160"; +#ifdef HAVE_OPENSSL_MD2 list += "md2"; +#endif list += "md4"; list += "md5"; #ifdef SHA224_DIGEST_LENGTH @@ -6597,9 +6618,11 @@ #ifdef SHA512_DIGEST_LENGTH list += "sha512"; #endif +/* #ifdef OBJ_whirlpool list += "whirlpool"; #endif +*/ return list; } @@ -6757,7 +6780,9 @@ list += all_hash_types(); list += all_mac_types(); list += all_cipher_types(); +#ifdef HAVE_OPENSSL_MD2 list += "pbkdf1(md2)"; +#endif list += "pbkdf1(sha1)"; list += "pbkdf2(sha1)"; list += "pkey"; @@ -6788,8 +6813,10 @@ return new opensslHashContext( EVP_sha(), this, type); else if ( type == "ripemd160" ) return new opensslHashContext( EVP_ripemd160(), this, type); +#ifdef HAVE_OPENSSL_MD2 else if ( type == "md2" ) return new opensslHashContext( EVP_md2(), this, type); +#endif else if ( type == "md4" ) return new opensslHashContext( EVP_md4(), this, type); else if ( type == "md5" ) @@ -6810,14 +6837,18 @@ else if ( type == "sha512" ) return new opensslHashContext( EVP_sha512(), this, type); #endif +/* #ifdef OBJ_whirlpool else if ( type == "whirlpool" ) return new opensslHashContext( EVP_whirlpool(), this, type); #endif +*/ else if ( type == "pbkdf1(sha1)" ) return new opensslPbkdf1Context( EVP_sha1(), this, type ); +#ifdef HAVE_OPENSSL_MD2 else if ( type == "pbkdf1(md2)" ) return new opensslPbkdf1Context( EVP_md2(), this, type ); +#endif else if ( type == "pbkdf2(sha1)" ) return new opensslPbkdf2Context( this, type ); else if ( type == "hmac(md5)" )