I don't recommend using CVS code if you're not running Windows. I
typically don't test Crypto++ on other operating systems until right
before I make a release.
On Wed, Jul 09, 2003 at 03:09:40PM -0400, Pat Deegan wrote:
> Greetings Wei Dai, CryptoPP developpers and users.
>
> I got the latest version from CVS today and encountered a lot of errors
> trying to compile under Linux (gcc version 3.2 20020903, Red Hat Linux
> 8.0 3.2-7). At first I looked for some switch I'd forgotten but then
> noticed that a number of files simply had
>
> #include <windows.h>
>
> without any prepocessor directives to indicate these were
> MSWindows-specific includes. In addition, there were references to
> things like HMODULEs, HANDLEs and other things that I vaguely recognized
> from my brief period in MFC "land".
>
> In any case, I made some changes to the source to get it to work. The
> mods aren't very subtle - I only wanted it to compile - but they are a
> clear indication of where the trouble was occuring... The only change I
> made that I think *may* affect Win32 users is the change from stricmp()
> to strcasecmp() - but I don't know.
>
> Included below is the diff output.
>
> Regards,
> Pat Deegan.
>
>
> ============ output from `diff -Naur c5 c5.new` =================
>
> diff -Naur c5/adhoc.cpp c5.new/adhoc.cpp
> --- c5/adhoc.cpp 1969-12-31 19:00:00.000000000 -0500
> +++ c5.new/adhoc.cpp 2003-07-09 14:02:24.000000000 -0400
> @@ -0,0 +1,17 @@
> +#include "filters.h"
> +#include "files.h"
> +#include "base64.h"
> +#include "hex.h"
> +#include <iostream>
> +
> +USING_NAMESPACE(CryptoPP)
> +USING_NAMESPACE(std)
> +
> +extern int (*AdhocTest)(int argc, char *argv[]);
> +
> +int MyAdhocTest(int argc, char *argv[])
> +{
> + return 0;
> +}
> +
> +static int s_i = (AdhocTest = &MyAdhocTest, 0);
> diff -Naur c5/CVS/Entries c5.new/CVS/Entries
> --- c5/CVS/Entries 2003-07-09 14:51:32.000000000 -0400
> +++ c5.new/CVS/Entries 2003-07-09 14:06:44.000000000 -0400
> @@ -316,4 +316,4 @@
> /zinflate.h/1.2/Fri May 16 00:02:31 2003//
> /zlib.cpp/1.1.1.1/Fri Oct 4 17:32:03 2002//
> /zlib.h/1.1.1.1/Fri Oct 4 17:32:03 2002//
> -D
> +D/TestVectors////
> diff -Naur c5/CVS/Entries.Log c5.new/CVS/Entries.Log
> --- c5/CVS/Entries.Log 2003-07-09 14:51:33.000000000 -0400
> +++ c5.new/CVS/Entries.Log 1969-12-31 19:00:00.000000000 -0500
> @@ -1 +0,0 @@
> -A D/TestVectors////
> diff -Naur c5/dll.cpp c5.new/dll.cpp
> --- c5/dll.cpp 2003-07-03 20:17:36.000000000 -0400
> +++ c5.new/dll.cpp 2003-07-09 14:28:23.000000000 -0400
> @@ -7,8 +7,21 @@
> #include "dll.h"
> #pragma warning(default: 4660)
>
> +
> +#ifdef CRYPTOPP_WIN32_AVAILABLE
> #include <windows.h>
> #include <new.h>
> +#else
> +// these defines are all junk - I dunno
> +// what to put here and don't really care... just want
> +// to get rid of MS Windows dependency - Pat Deegan
> +#define BOOL bool
> +#define HMODULE void*
> +#define DWORD long
> +#define LPVOID void*
> +#define _MAX_PATH 255
> +#endif
> +
>
> #include "strciphr.cpp"
> #include "algebra.cpp"
> @@ -27,9 +40,11 @@
>
> void DoDllPowerUpSelfTest()
> {
> +#ifdef CRYPTOPP_WIN32_AVAILABLE
> char moduleFileName[_MAX_PATH];
> GetModuleFileNameA(s_hModule, moduleFileName, sizeof(moduleFileName));
> CryptoPP::DoPowerUpSelfTest(moduleFileName, s_moduleMac);
> +#endif
> }
>
> NAMESPACE_END
> @@ -45,6 +60,7 @@
>
> void * _cdecl operator new (size_t size)
> {
> +#ifdef CRYPTOPP_WIN32_AVAILABLE
> if (!s_pNew)
> {
> HMODULE hExe = GetModuleHandle(NULL);
> @@ -77,24 +93,29 @@
> if (!s_pNew || !s_pDelete)
> OutputDebugString("Crypto++ was not able to obtain new and
> delete
> function pointers.");
> }
> +#endif
> return s_pNew(size);
> }
>
> void _cdecl operator delete (void * p)
> {
> +#ifdef CRYPTOPP_WIN32_AVAILABLE
> s_pDelete(p);
> +#endif
> }
>
> BOOL APIENTRY DllMain(HANDLE hModule,
> DWORD ul_reason_for_call,
> LPVOID lpReserved)
> {
> +#ifdef CRYPTOPP_WIN32_AVAILABLE
> if (ul_reason_for_call == DLL_PROCESS_ATTACH)
> {
> s_hModule = (HMODULE)hModule;
> DoDllPowerUpSelfTest();
> }
> return TRUE;
> +#endif
> }
>
> #endif
> diff -Naur c5/dll.h c5.new/dll.h
> --- c5/dll.h 2003-07-03 20:17:36.000000000 -0400
> +++ c5.new/dll.h 2003-07-09 14:47:00.000000000 -0400
> @@ -47,9 +47,13 @@
>
> #endif // #ifdef CRYPTOPP_IMPORTS
>
> +NAMESPACE_BEGIN(CryptoPP)
> +
> +#ifdef CRYPTOPP_WIN32_AVAILABLE
> +// _cdecl More windows related stuff?
> +// Need to drop this to compile under linux
> #include <new.h> // for _PNH
>
> -NAMESPACE_BEGIN(CryptoPP)
>
> typedef void * (_cdecl * PNew)(size_t);
> typedef void (_cdecl * PDelete)(void *);
> @@ -57,8 +61,11 @@
> typedef _PNH (_cdecl * PSetNewHandler)(_PNH);
> typedef void (_cdecl * PSetNewAndDelete)(PNew, PDelete,
> PSetNewHandler);
>
> +
> +
> +#endif // end if WINDOWS
> +
> CRYPTOPP_DLL void DoDllPowerUpSelfTest();
>
> NAMESPACE_END
> -
> #endif
> diff -Naur c5/fips140.h c5.new/fips140.h
> --- c5/fips140.h 2003-07-03 20:17:36.000000000 -0400
> +++ c5.new/fips140.h 2003-07-09 13:42:51.000000000 -0400
> @@ -6,6 +6,7 @@
> */
>
> #include "cryptlib.h"
> +#include "secblock.h"
>
> NAMESPACE_BEGIN(CryptoPP)
>
> diff -Naur c5/fipstest.cpp c5.new/fipstest.cpp
> --- c5/fipstest.cpp 2003-07-03 20:17:36.000000000 -0400
> +++ c5.new/fipstest.cpp 2003-07-09 14:34:52.000000000 -0400
> @@ -5,7 +5,10 @@
> #ifndef CRYPTOPP_IMPORTS
>
> #include "dll.h"
> +
> +#ifdef CRYPTOPP_WIN32_AVAILABLE
> #include <windows.h>
> +#endif
>
> NAMESPACE_BEGIN(CryptoPP)
>
> diff -Naur c5/GNUmakefile c5.new/GNUmakefile
> --- c5/GNUmakefile 2003-04-14 20:38:47.000000000 -0400
> +++ c5.new/GNUmakefile 2003-07-09 14:30:56.000000000 -0400
> @@ -1,10 +1,10 @@
> # can't use -fno-rtti yet because it causes problems with exception
> handling in GCC 2.95.2
> -CXXFLAGS = -g
> +CXXFLAGS = -g -DCRYPTOPP_NO_DLL
> # Uncomment the next two lines to do a release build.
> # Note that you must define NDEBUG for your own application if you
> define it for Crypto++.
> # Also, make sure you run the validation tests and test your own
> program thoroughly
> # after turning on -O2. The GCC optimizer may have bugs that cause it
> to generate incorrect code.
> -# CXXFLAGS = -O2 -DNDEBUG -ffunction-sections -fdata-sections
> +#CXXFLAGS = -O2 -DNDEBUG -ffunction-sections -fdata-sections
> -DCRYPTOPP_NO_DLL
> # LDFLAGS = -Wl,--gc-sections
> ARFLAGS = -cr # ar needs the dash on OpenBSD
> RANLIB = ranlib
> diff -Naur c5/polynomi.cpp c5.new/polynomi.cpp
> --- c5/polynomi.cpp 2003-03-19 20:24:11.000000000 -0500
> +++ c5.new/polynomi.cpp 2003-07-09 14:37:48.000000000 -0400
> @@ -7,7 +7,7 @@
> #include "polynomi.h"
> #include "secblock.h"
>
> -#include <strstream>
> +#include <sstream>
> #include <iostream>
>
> NAMESPACE_BEGIN(CryptoPP)
> @@ -23,7 +23,7 @@
> template <class T>
> void PolynomialOver<T>::FromStr(const char *str, const Ring &ring)
> {
> - std::istrstream in((char *)str);
> + std::istringstream in((char *)str);
> bool positive = true;
> CoefficientType coef;
> unsigned int power;
> @@ -387,7 +387,7 @@
> else
> {
> CoefficientType inverse =
> ring.Inverse(m_coefficients[i]);
> - std::ostrstream pstr, nstr;
> + std::ostringstream pstr, nstr;
>
> pstr << m_coefficients[i];
> nstr << inverse;
> diff -Naur c5/test.cpp c5.new/test.cpp
> --- c5/test.cpp 2003-07-03 20:17:36.000000000 -0400
> +++ c5.new/test.cpp 2003-07-09 14:00:46.000000000 -0400
> @@ -1,6 +1,6 @@
> // test.cpp - written and placed in the public domain by Wei Dai
>
> -#include "dll.h"
> +// #include "dll.h"
> #include "md5.h"
> #include "sha.h"
> #include "ripemd.h"
> @@ -183,6 +183,7 @@
> }
> }
> case 'm':
> + /*
> if (command == "mac_dll")
> {
> HMODULE hModule = LoadLibrary(argv[2]);
> @@ -220,7 +221,9 @@
> return 0;
> }
> }
> - else if (command == "mt")
> + else
> + */
> + if (command == "mt")
> {
> MaurerRandomnessTest mt;
> FileStore fs(argv[2]);
> @@ -456,7 +459,7 @@
> void HmacFile(const char *hexKey, const char *file)
> {
> member_ptr<MessageAuthenticationCode> mac;
> - if (stricmp(hexKey, "selftest") == 0)
> + if (strcasecmp(hexKey, "selftest") == 0)
> {
> cerr << "Computing HMAC/SHA1 value for self test.\n";
> mac.reset(NewIntegrityCheckingMAC());
> diff -Naur c5/trdlocal.cpp c5.new/trdlocal.cpp
> --- c5/trdlocal.cpp 2003-07-03 20:17:37.000000000 -0400
> +++ c5.new/trdlocal.cpp 2003-07-09 14:14:14.000000000 -0400
> @@ -5,7 +5,10 @@
> #ifndef CRYPTOPP_IMPORTS
>
> #include "trdlocal.h"
> +
> +#ifdef CRYPTOPP_WIN32_AVAILABLE
> #include <windows.h>
> +#endif
>
> #ifdef THREADS_AVAILABLE
>
>
>
>
>
>
> --
> Pat Deegan,
> http://www.psychogenic.com/
> PGP: http://www.keyserver.net 0x03F86A50