Only in crypto++-5.1.amd64/: adhoc.cpp
diff -ru crypto++-5.1/config.h crypto++-5.1.amd64/config.h
--- crypto++-5.1/config.h	2003-03-20 02:24:11.000000000 +0100
+++ crypto++-5.1.amd64/config.h	2004-04-26 15:37:37.000000000 +0200
@@ -100,7 +100,7 @@
 NAMESPACE_BEGIN(CryptoPP)
 
 typedef unsigned short word16;
-#if defined(__alpha) && !defined(_MSC_VER)
+#if (defined(__alpha) || defined(__x86_64__)) && !defined(_MSC_VER)
 	typedef unsigned int word32;
 #else
 	typedef unsigned long word32;
@@ -124,7 +124,7 @@
 // word should have the same size as your CPU registers
 // dword should be twice as big as word
 
-#if (defined(__GNUC__) && !defined(__alpha)) || defined(__MWERKS__)
+#if (defined(__GNUC__) && !defined(__alpha)) && !defined(__x86_64__) || defined(__MWERKS__)
 	typedef unsigned long word;
 	typedef unsigned long long dword;
 #elif defined(_MSC_VER) || defined(__BCPLUSPLUS__)
diff -ru crypto++-5.1/misc.cpp crypto++-5.1.amd64/misc.cpp
--- crypto++-5.1/misc.cpp	2002-10-04 19:31:51.000000000 +0200
+++ crypto++-5.1.amd64/misc.cpp	2004-04-26 15:37:37.000000000 +0200
@@ -16,7 +16,7 @@
 
 void xorbuf(byte *buf, const byte *mask, unsigned int count)
 {
-	if (((unsigned int)buf | (unsigned int)mask | count) % WORD_SIZE == 0)
+	if (((uintptr_t)buf | (uintptr_t)mask | count) % WORD_SIZE == 0)
 		XorWords((word *)buf, (const word *)mask, count/WORD_SIZE);
 	else
 	{
@@ -27,7 +27,7 @@
 
 void xorbuf(byte *output, const byte *input, const byte *mask, unsigned int count)
 {
-	if (((unsigned int)output | (unsigned int)input | (unsigned int)mask | count) % WORD_SIZE == 0)
+	if (((uintptr_t)output | (uintptr_t)input | (uintptr_t)mask | count) % WORD_SIZE == 0)
 		XorWords((word *)output, (const word *)input, (const word *)mask, count/WORD_SIZE);
 	else
 	{
diff -ru crypto++-5.1/misc.h crypto++-5.1.amd64/misc.h
--- crypto++-5.1/misc.h	2002-10-04 19:31:52.000000000 +0200
+++ crypto++-5.1.amd64/misc.h	2004-04-26 15:37:37.000000000 +0200
@@ -5,6 +5,7 @@
 #include "cryptlib.h"
 #include <assert.h>
 #include <string.h>		// CodeWarrior doesn't have memory.h
+#include <inttypes.h>
 #include <algorithm>
 #include <string>
 
@@ -142,7 +143,7 @@
 
 inline bool IsAlignedOn(const void *p, unsigned int alignment)
 {
-	return IsPowerOf2(alignment) ? ModPowerOf2((unsigned int)p, alignment) == 0 : (unsigned int)p % alignment == 0;
+	return IsPowerOf2(alignment) ? ModPowerOf2((uintptr_t)p, alignment) == 0 : (uintptr_t)p % alignment == 0;
 }
 
 template <class T>
diff -ru crypto++-5.1/serpent.cpp crypto++-5.1.amd64/serpent.cpp
--- crypto++-5.1/serpent.cpp	2002-10-04 19:31:57.000000000 +0200
+++ crypto++-5.1.amd64/serpent.cpp	2004-04-26 15:38:39.000000000 +0200
@@ -428,7 +428,9 @@
 	word32 *k = m_key;
 	GetUserKey(LITTLE_ENDIAN_ORDER, k, 8, userKey, keylen);
 
-	word32	i,a,b,c,d,e;
+	word32	a,b,c,d,e;
+        // word32 is an unsigned integral type,so it will underflow
+        int i;
 
 	if (keylen < 32)
 		k[keylen/4] |= word32(1) << ((keylen%4)*8);
Only in crypto++-5.1.amd64/: serpent.cpp~