Hello all,
I have the same problem as you do. I tried to fix 5.2.1 <anonymous enum>
problems by rewriting them into "static const unsigned int" contants, this
overcame compilation problem but the result was hundreds of "undefined
reference" linker errors.
I did the same as Dave (checked out 5.3 from CVS), and compiled everything
successfully with "gcc (GCC) 4.0.1 (Debian 4.0.1-2)" (including osrng.cpp)!
But linkage resulted again into those undefined references to templates:
bench.o:(.gnu.linkonce.r._ZTVN8CryptoPP3MD5E[vtable for CryptoPP::MD5]+0x18):
undefined reference to `CryptoPP::IteratedHashBase<unsigned int,
CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned int)'
This is of course caused by changes relating template instantiation introduced
in GCC 4.0. In crypto++ templates like IteratedHashBase are explicitly
instantiated (in header files) before the their methods are defined in
dll.cpp. This could be fixed by skipping these instantiations and header
files and forcing them in dll.cpp.
I have a quick-patch (see below), but I'm not completely sure whether it fixes
all problems (I'm using only DSA and SHA in my application yet) by
cryptest.exe links and runs fine.
I believe there can be more clear way how to fix this, but for the time being
at least this helps :-).
Regards,
Jozef Matula
diff -ru cryptopp/cryptlib.h cryptopp.fixed/cryptlib.h
--- cryptopp/cryptlib.h 2005-07-13 04:19:10.000000000 +0200
+++ cryptopp.fixed/cryptlib.h 2005-07-23 14:30:36.000000000 +0200
@@ -521,6 +521,8 @@
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE HashTransformation : public Algorithm
{
public:
+ virtual ~HashTransformation() { }
+
//! process more input
virtual void Update(const byte *input, size_t length) =0;
@@ -604,9 +606,11 @@
typedef SimpleKeyedTransformation<HashTransformation>
MessageAuthenticationCode;
#endif
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<BlockTransformation>;
CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<StreamTransformation>;
CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<HashTransformation>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
typedef SymmetricCipher StreamCipher;
diff -ru cryptopp/dll.cpp cryptopp.fixed/dll.cpp
--- cryptopp/dll.cpp 2005-01-20 05:19:35.000000000 +0100
+++ cryptopp.fixed/dll.cpp 2005-07-23 14:40:51.000000000 +0200
@@ -3,6 +3,10 @@
#define CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES
#define CRYPTOPP_DEFAULT_NO_DLL
+#if defined(__GNUC__) && __GNUC__ > 3
+#define SKIP_EXPLICIT_INSTANTIATION
+#endif
+
#include "dll.h"
#pragma warning(default: 4660)
@@ -37,6 +41,57 @@
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<Integer>;
#endif
+#if defined(__GNUC__) && __GNUC__ > 3
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<ECP>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<EC2N>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<Integer>;
+CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word64, HashTransformation>;
+CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word32, HashTransformation>;
+CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word32,
MessageAuthenticationCode>;
+CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word64,
MessageAuthenticationCode>;
+CRYPTOPP_DLL_TEMPLATE_CLASS
CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
CFB_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS
CFB_EncryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
CFB_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS
CFB_DecryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
CFB_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate<>;
+CRYPTOPP_DLL_TEMPLATE_CLASS
AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy,
OFB_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS
AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy,
CTR_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<Integer>;
+CRYPTOPP_DLL_TEMPLATE_CLASS
CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
SymmetricCipher> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS CFB_EncryptionTemplate<>;
+CRYPTOPP_DLL_TEMPLATE_CLASS CFB_DecryptionTemplate<>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<PolynomialMod2>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractRing<PolynomialMod2>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<PolynomialMod2>;
+CRYPTOPP_DLL_TEMPLATE_CLASS EuclideanDomainOf<PolynomialMod2>;
+CRYPTOPP_DLL_TEMPLATE_CLASS QuotientRing<EuclideanDomainOf<PolynomialMod2> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<ECB_OneWay>;
+CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<CBC_Encryption>;
+CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<CBC_Decryption>;
+CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Encryption>;
+CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Decryption>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<EC2NPoint>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<ECPPoint>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<EC2N::Point>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupPrecomputation<EC2N::Point>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC<ECP>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC<EC2N>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl<DL_GroupParameters_EC<ECP> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl<DL_GroupParameters_EC<EC2N> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<ECP>,
ECDSA<ECP> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<EC2N>,
ECDSA<EC2N> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC<ECP>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC<EC2N>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA<ECP::Point>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA<EC2N::Point>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AutoSeededX917RNG<DES_EDE3>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_GFP<DL_GroupParameters_DSA>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_GFP<DL_GroupParameters_DSA>;
+CRYPTOPP_DLL_TEMPLATE_CLASS
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_GFP<DL_GroupParameters_DSA>,
DSA>;
+CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<BlockTransformation>;
+CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<StreamTransformation>;
+CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<HashTransformation>;
+#endif
+
template<> const byte PKCS_DigestDecoration<SHA1>::decoration[] =
{0x30,0x21,0x30,0x09,0x06,0x05,0x2B,0x0E,0x03,0x02,0x1A,0x05,0x00,0x04,0x14};
template<> const unsigned int PKCS_DigestDecoration<SHA1>::length =
sizeof(PKCS_DigestDecoration<SHA1>::decoration);
diff -ru cryptopp/dlltest.cpp cryptopp.fixed/dlltest.cpp
--- cryptopp/dlltest.cpp 2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/dlltest.cpp 2005-07-23 14:15:39.000000000 +0200
@@ -195,11 +195,13 @@
#else
+#if 0
extern "C" __declspec(dllexport) void __cdecl GetNewAndDeleteForCryptoPP(PNew
&pNew, PDelete &pDelete)
{
pNew = &operator new;
pDelete = &operator delete;
}
+#endif
#endif
diff -ru cryptopp/ec2n.h cryptopp.fixed/ec2n.h
--- cryptopp/ec2n.h 2005-07-12 06:23:30.000000000 +0200
+++ cryptopp.fixed/ec2n.h 2005-07-23 14:15:39.000000000 +0200
@@ -24,7 +24,9 @@
PolynomialMod2 x, y;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<EC2NPoint>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! Elliptic Curve over GF(2^n)
class CRYPTOPP_DLL EC2N : public AbstractGroup<EC2NPoint>
@@ -84,8 +86,10 @@
mutable Point m_R;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<EC2N::Point>;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupPrecomputation<EC2N::Point>;
+#endif
template <class T> class EcPrecomputation;
diff -ru cryptopp/eccrypto.h cryptopp.fixed/eccrypto.h
--- cryptopp/eccrypto.h 2005-07-12 06:23:30.000000000 +0200
+++ cryptopp.fixed/eccrypto.h 2005-07-23 14:15:39.000000000 +0200
@@ -137,10 +137,12 @@
mutable Integer m_k; // cofactor
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<ECP>;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<EC2N>;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKeyImpl<DL_GroupParameters_EC<ECP> >;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKeyImpl<DL_GroupParameters_EC<EC2N> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! EC public key
template <class EC>
@@ -159,10 +161,12 @@
void DEREncodeKey(BufferedTransformation &bt) const;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC<ECP>;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC<EC2N>;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl<DL_GroupParameters_EC<ECP> >;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl<DL_GroupParameters_EC<EC2N> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! EC private key
template <class EC>
@@ -185,8 +189,10 @@
void DEREncodeKey(BufferedTransformation &bt) const;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC<ECP>;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC<EC2N>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! Elliptic Curve Diffie-Hellman, AKA <a
href="http://www.weidai.com/scan-mirror/ka.html#ECDH">ECDH</a>
template <class EC, class COFACTOR_OPTION = CPP_TYPENAME
DL_GroupParameters_EC<EC>::DefaultCofactorOption>
@@ -221,8 +227,10 @@
typedef
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<EC>,
ECDSA<EC> > PrivateKey;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA<ECP::Point>;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA<EC2N::Point>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! ECDSA algorithm
template <class EC>
@@ -246,8 +254,10 @@
{
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<ECP>,
ECDSA<ECP> >;
CRYPTOPP_DLL_TEMPLATE_CLASS
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<EC2N>,
ECDSA<EC2N> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! ECNR
template <class EC, class H = SHA>
diff -ru cryptopp/ecp.h cryptopp.fixed/ecp.h
--- cryptopp/ecp.h 2005-07-12 06:23:30.000000000 +0200
+++ cryptopp.fixed/ecp.h 2005-07-23 14:15:39.000000000 +0200
@@ -24,7 +24,9 @@
Integer x, y;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<ECPPoint>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! Elliptic Curve over GF(p), where p is prime
class CRYPTOPP_DLL ECP : public AbstractGroup<ECPPoint>
@@ -88,8 +90,10 @@
mutable Point m_R;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<ECP::Point>;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupPrecomputation<ECP::Point>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
template <class T> class EcPrecomputation;
diff -ru cryptopp/gf2n.h cryptopp.fixed/gf2n.h
--- cryptopp/gf2n.h 2005-07-12 06:23:30.000000000 +0200
+++ cryptopp.fixed/gf2n.h 2005-07-23 14:15:39.000000000 +0200
@@ -269,6 +269,7 @@
//!
inline CryptoPP::PolynomialMod2 operator%(const CryptoPP::PolynomialMod2 &a,
const CryptoPP::PolynomialMod2 &b) {return a.Modulo(b);}
+#ifndef SKIP_EXPLICIT_INSTANTIATION
// CodeWarrior 8 workaround: put these template instantiations after
overloaded operator declarations,
// but before the use of QuotientRing<EuclideanDomainOf<PolynomialMod2> > for
VC .NET 2003
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<PolynomialMod2>;
@@ -276,6 +277,7 @@
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<PolynomialMod2>;
CRYPTOPP_DLL_TEMPLATE_CLASS EuclideanDomainOf<PolynomialMod2>;
CRYPTOPP_DLL_TEMPLATE_CLASS QuotientRing<EuclideanDomainOf<PolynomialMod2> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! GF(2^n) with Polynomial Basis
class CRYPTOPP_DLL GF2NP : public
QuotientRing<EuclideanDomainOf<PolynomialMod2> >
diff -ru cryptopp/gfpcrypt.h cryptopp.fixed/gfpcrypt.h
--- cryptopp/gfpcrypt.h 2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/gfpcrypt.h 2005-07-23 14:15:39.000000000 +0200
@@ -411,9 +411,11 @@
MAX_PRIME_LENGTH = 1024, PRIME_LENGTH_MULTIPLE = 64};
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_GFP<DL_GroupParameters_DSA>;
CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_GFP<DL_GroupParameters_DSA>;
CRYPTOPP_DLL_TEMPLATE_CLASS
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_GFP<DL_GroupParameters_DSA>,
DSA>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! the XOR encryption method, for use with DL-based cryptosystems
template <class MAC, bool DHAES_MODE>
diff -ru cryptopp/iterhash.h cryptopp.fixed/iterhash.h
--- cryptopp/iterhash.h 2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/iterhash.h 2005-07-23 14:15:39.000000000 +0200
@@ -54,6 +54,7 @@
T m_countLo, m_countHi;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
#ifdef WORD64_AVAILABLE
CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word64, HashTransformation>;
CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word64,
MessageAuthenticationCode>;
@@ -61,6 +62,7 @@
CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word32, HashTransformation>;
CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word32,
MessageAuthenticationCode>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! _
template <class T_HashWordType, class T_Endianness, unsigned int T_BlockSize,
class T_Base = HashTransformation>
diff -ru cryptopp/modarith.h cryptopp.fixed/modarith.h
--- cryptopp/modarith.h 2005-01-20 05:19:35.000000000 +0100
+++ cryptopp.fixed/modarith.h 2005-07-23 14:15:39.000000000 +0200
@@ -10,9 +10,11 @@
NAMESPACE_BEGIN(CryptoPP)
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<Integer>;
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractRing<Integer>;
CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<Integer>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! ring of congruence classes modulo n
/*! \note this implementation represents each congruence class as the
smallest non-negative integer in that class */
diff -ru cryptopp/modes.h cryptopp.fixed/modes.h
--- cryptopp/modes.h 2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/modes.h 2005-07-23 14:15:39.000000000 +0200
@@ -318,9 +318,11 @@
this->Resynchronize(iv);
}
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS
CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
CFB_ModePolicy> >;
CRYPTOPP_DLL_TEMPLATE_CLASS
CFB_EncryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
CFB_ModePolicy> >;
CRYPTOPP_DLL_TEMPLATE_CLASS
CFB_DecryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
CFB_ModePolicy> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! CFB mode
template <class CIPHER>
@@ -352,7 +354,9 @@
typedef
CipherModeFinalTemplate_ExternalCipher<ConcretePolicyHolder<Empty,
CFB_RequireFullDataBlocks<CFB_DecryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
CFB_ModePolicy> > > > > Decryption;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS
AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy,
OFB_ModePolicy> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! OFB mode
template <class CIPHER>
@@ -369,7 +373,9 @@
typedef Encryption Decryption;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS
AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy,
CTR_ModePolicy> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! CTR mode
template <class CIPHER>
@@ -394,7 +400,9 @@
typedef CipherModeFinalTemplate_CipherHolder<CPP_TYPENAME
CIPHER::Decryption, ECB_OneWay> Decryption;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<ECB_OneWay>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! ECB mode, external cipher
struct ECB_Mode_ExternalCipher : public CipherModeDocumentation
@@ -411,8 +419,10 @@
typedef CipherModeFinalTemplate_CipherHolder<CPP_TYPENAME
CIPHER::Decryption, CBC_Decryption> Decryption;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<CBC_Encryption>;
CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<CBC_Decryption>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! CBC mode, external cipher
struct CBC_Mode_ExternalCipher : public CipherModeDocumentation
@@ -429,8 +439,10 @@
typedef CipherModeFinalTemplate_CipherHolder<CPP_TYPENAME
CIPHER::Decryption, CBC_CTS_Decryption> Decryption;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Encryption>;
CRYPTOPP_DLL_TEMPLATE_CLASS
CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Decryption>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
//! CBC mode with ciphertext stealing, external cipher
struct CBC_CTS_Mode_ExternalCipher : public CipherModeDocumentation
diff -ru cryptopp/modexppc.h cryptopp.fixed/modexppc.h
--- cryptopp/modexppc.h 2003-07-04 02:17:36.000000000 +0200
+++ cryptopp.fixed/modexppc.h 2005-07-23 14:15:39.000000000 +0200
@@ -8,7 +8,9 @@
NAMESPACE_BEGIN(CryptoPP)
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<Integer>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
class ModExpPrecomputation : public DL_GroupPrecomputation<Integer>
{
diff -ru cryptopp/osrng.h cryptopp.fixed/osrng.h
--- cryptopp/osrng.h 2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/osrng.h 2005-07-23 14:15:39.000000000 +0200
@@ -112,7 +112,9 @@
unsigned int m_counter;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS AutoSeededX917RNG<DES_EDE3>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
template <class BLOCK_CIPHER>
void AutoSeededX917RNG<BLOCK_CIPHER>::Reseed(const byte *key, size_t
keylength, const byte *seed, const byte *timeVector)
diff -ru cryptopp/strciphr.h cryptopp.fixed/strciphr.h
--- cryptopp/strciphr.h 2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/strciphr.h 2005-07-23 14:15:39.000000000 +0200
@@ -146,9 +146,11 @@
size_t m_leftOver;
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
CRYPTOPP_DLL_TEMPLATE_CLASS TwoBases<SymmetricCipher, RandomNumberGenerator>;
CRYPTOPP_DLL_TEMPLATE_CLASS
AbstractPolicyHolder<AdditiveCipherAbstractPolicy, TwoBases<SymmetricCipher,
RandomNumberGenerator> >;
CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate<>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CFB_CipherAbstractPolicy
{
@@ -263,10 +265,12 @@
unsigned int MandatoryBlockSize() const {return
this->OptimalBlockSize();}
};
+#ifndef SKIP_EXPLICIT_INSTANTIATION
// for Darwin
CRYPTOPP_DLL_TEMPLATE_CLASS
CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
SymmetricCipher> >;
CRYPTOPP_DLL_TEMPLATE_CLASS CFB_EncryptionTemplate<>;
CRYPTOPP_DLL_TEMPLATE_CLASS CFB_DecryptionTemplate<>;
+#endif
//! _
template <class BASE, class INFO = BASE>
--
IBL Software Engineering, http://www.iblsoft.com
Mierova 103, 82105 Bratislava, Slovakia
Tel: +421-2-43427227, fax: +421-2-43427214