00001
00002
00003 #undef CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES
00004 #define CRYPTOPP_DEFAULT_NO_DLL
00005
00006 #include "dll.h"
00007 #ifdef _MSC_VER
00008 #pragma warning(default: 4660)
00009 #endif
00010
00011 #ifdef CRYPTOPP_WIN32_AVAILABLE
00012 #include <windows.h>
00013 #endif
00014
00015 #include "iterhash.cpp"
00016 #include "strciphr.cpp"
00017 #include "algebra.cpp"
00018 #include "eprecomp.cpp"
00019 #include "eccrypto.cpp"
00020
00021 #ifndef CRYPTOPP_IMPORTS
00022
00023 NAMESPACE_BEGIN(CryptoPP)
00024
00025 #ifdef __MWERKS__
00026
00027 CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<ECP>;
00028 CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<EC2N>;
00029 CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<Integer>;
00030 CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word64, HashTransformation>;
00031 CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word32, HashTransformation>;
00032 CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word32, MessageAuthenticationCode>;
00033 CRYPTOPP_DLL_TEMPLATE_CLASS CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, CFB_ModePolicy> >;
00034 CRYPTOPP_DLL_TEMPLATE_CLASS CFB_EncryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, CFB_ModePolicy> >;
00035 CRYPTOPP_DLL_TEMPLATE_CLASS CFB_DecryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, CFB_ModePolicy> >;
00036 CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate<>;
00037 CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, OFB_ModePolicy> >;
00038 CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, CTR_ModePolicy> >;
00039 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<Integer>;
00040 #endif
00041
00042 #if defined(__GNUC__) && __GNUC__ > 3
00043 template class CRYPTOPP_DLL AbstractEuclideanDomain<Integer>;
00044 template class CRYPTOPP_DLL AbstractEuclideanDomain<PolynomialMod2>;
00045 template class CRYPTOPP_DLL AbstractGroup<Integer>;
00046 template class CRYPTOPP_DLL AbstractGroup<EC2NPoint>;
00047 template class CRYPTOPP_DLL AbstractGroup<ECPPoint>;
00048 template class CRYPTOPP_DLL AbstractGroup<PolynomialMod2>;
00049 template class CRYPTOPP_DLL AbstractPolicyHolder<AdditiveCipherAbstractPolicy, TwoBases<SimpleKeyedTransformation<StreamTransformation>, RandomNumberGenerator> >;
00050 template class CRYPTOPP_DLL AbstractRing<Integer>;
00051 template class CRYPTOPP_DLL AbstractRing<PolynomialMod2>;
00052 template class CRYPTOPP_DLL AdditiveCipherTemplate<>;
00053 template class CRYPTOPP_DLL AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, CTR_ModePolicy> >;
00054 template class CRYPTOPP_DLL AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, OFB_ModePolicy> >;
00055 template class CRYPTOPP_DLL AllocatorWithCleanup<byte>;
00056 template class CRYPTOPP_DLL AllocatorWithCleanup<word16>;
00057 template class CRYPTOPP_DLL AllocatorWithCleanup<word32>;
00058 template class CRYPTOPP_DLL AutoSeededX917RNG<DES_EDE3>;
00059 template class CRYPTOPP_DLL CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, CFB_ModePolicy> >;
00060 template class CRYPTOPP_DLL CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, SymmetricCipher> >;
00061 template class CRYPTOPP_DLL CFB_DecryptionTemplate<>;
00062 template class CRYPTOPP_DLL CFB_DecryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, CFB_ModePolicy> >;
00063 template class CRYPTOPP_DLL CFB_EncryptionTemplate<>;
00064 template class CRYPTOPP_DLL CFB_EncryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, CFB_ModePolicy> >;
00065 template class CRYPTOPP_DLL CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Decryption>;
00066 template class CRYPTOPP_DLL CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Encryption>;
00067 template class CRYPTOPP_DLL CipherModeFinalTemplate_ExternalCipher<CBC_Decryption>;
00068 template class CRYPTOPP_DLL CipherModeFinalTemplate_ExternalCipher<CBC_Encryption>;
00069 template class CRYPTOPP_DLL CipherModeFinalTemplate_ExternalCipher<ECB_OneWay>;
00070 template class CRYPTOPP_DLL DH_Domain<DL_GroupParameters_GFP_DefaultSafePrime>;
00071 template class CRYPTOPP_DLL DL_Algorithm_GDSA<EC2N::Point>;
00072 template class CRYPTOPP_DLL DL_Algorithm_GDSA<ECP::Point>;
00073 template class CRYPTOPP_DLL DL_Algorithm_GDSA<Integer>;
00074 template class CRYPTOPP_DLL DL_FixedBasePrecomputationImpl<EC2N::Point>;
00075 template class CRYPTOPP_DLL DL_FixedBasePrecomputationImpl<ECPPoint>;
00076 template class CRYPTOPP_DLL DL_FixedBasePrecomputationImpl<Integer>;
00077 template class CRYPTOPP_DLL DL_GroupParameters<Integer>;
00078 template class CRYPTOPP_DLL DL_GroupParameters_EC<EC2N>;
00079 template class CRYPTOPP_DLL DL_GroupParameters_EC<ECP>;
00080 template class CRYPTOPP_DLL DL_GroupParameters_IntegerBasedImpl<ModExpPrecomputation>;
00081 template class CRYPTOPP_DLL DL_GroupPrecomputation<EC2N::Point>;
00082 template class CRYPTOPP_DLL DL_GroupPrecomputation<ECPPoint>;
00083 template class CRYPTOPP_DLL DL_PrivateKeyImpl<DL_GroupParameters_EC<EC2N> >;
00084 template class CRYPTOPP_DLL DL_PrivateKeyImpl<DL_GroupParameters_EC<ECP> >;
00085 template class CRYPTOPP_DLL DL_PrivateKey_EC<EC2N>;
00086 template class CRYPTOPP_DLL DL_PrivateKey_EC<ECP>;
00087 template class CRYPTOPP_DLL DL_PrivateKey_GFP<DL_GroupParameters_DSA>;
00088 template class CRYPTOPP_DLL DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<EC2N>, ECDSA<EC2N> >;
00089 template class CRYPTOPP_DLL DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<ECP>, ECDSA<ECP> >;
00090 template class CRYPTOPP_DLL DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_GFP<DL_GroupParameters_DSA>, DSA>;
00091 template class CRYPTOPP_DLL DL_PublicKeyImpl<DL_GroupParameters_EC<EC2N> >;
00092 template class CRYPTOPP_DLL DL_PublicKeyImpl<DL_GroupParameters_EC<ECP> >;
00093 template class CRYPTOPP_DLL DL_PublicKey_EC<EC2N>;
00094 template class CRYPTOPP_DLL DL_PublicKey_EC<ECP>;
00095 template class CRYPTOPP_DLL DL_PublicKey_GFP<DL_GroupParameters_DSA>;
00096 template class CRYPTOPP_DLL EuclideanDomainOf<PolynomialMod2>;
00097 template class CRYPTOPP_DLL IteratedHashBase<word32, HashTransformation>;
00098 template class CRYPTOPP_DLL IteratedHashBase<word32, MessageAuthenticationCode>;
00099 #ifdef WORD64_AVAILABLE
00100 template class CRYPTOPP_DLL IteratedHashBase<word64, HashTransformation>;
00101 template class CRYPTOPP_DLL IteratedHashBase<word64, MessageAuthenticationCode>;
00102 #endif
00103 template class CRYPTOPP_DLL OAEP<SHA>;
00104 #ifdef CRYPTOPP_IS_DLL
00105 template class CRYPTOPP_DLL PKCS_DigestDecoration<SHA>;
00106 #endif
00107 template class CRYPTOPP_DLL QuotientRing<EuclideanDomainOf<PolynomialMod2> >;
00108 template class CRYPTOPP_DLL SimpleKeyedTransformation<BlockTransformation>;
00109 template class CRYPTOPP_DLL SimpleKeyedTransformation<HashTransformation>;
00110 template class CRYPTOPP_DLL SimpleKeyedTransformation<StreamTransformation>;
00111 template class CRYPTOPP_DLL StringSinkTemplate<std::string>;
00112 template class CRYPTOPP_DLL TwoBases<SymmetricCipher, RandomNumberGenerator>;
00113 #endif // __GNUC__ > 3
00114
00115 template<> const byte PKCS_DigestDecoration<SHA>::decoration[] = {0x30,0x21,0x30,0x09,0x06,0x05,0x2B,0x0E,0x03,0x02,0x1A,0x05,0x00,0x04,0x14};
00116 template<> const unsigned int PKCS_DigestDecoration<SHA>::length = sizeof(PKCS_DigestDecoration<SHA>::decoration);
00117
00118 NAMESPACE_END
00119
00120 #endif
00121
00122 #ifdef CRYPTOPP_EXPORTS
00123
00124 USING_NAMESPACE(CryptoPP)
00125
00126 #if !(defined(_MSC_VER) && (_MSC_VER < 1300))
00127 using std::set_new_handler;
00128 #endif
00129
00130 static PNew s_pNew = NULL;
00131 static PDelete s_pDelete = NULL;
00132
00133 static void * CRYPTOPP_CDECL New (size_t size)
00134 {
00135 void *p;
00136 while (!(p = malloc(size)))
00137 CallNewHandler();
00138
00139 return p;
00140 }
00141
00142 static void SetNewAndDeleteFunctionPointers()
00143 {
00144 void *p = NULL;
00145 HMODULE hModule = NULL;
00146 MEMORY_BASIC_INFORMATION mbi;
00147
00148 while (true)
00149 {
00150 VirtualQuery(p, &mbi, sizeof(mbi));
00151
00152 if (p >= (char *)mbi.BaseAddress + mbi.RegionSize)
00153 break;
00154
00155 p = (char *)mbi.BaseAddress + mbi.RegionSize;
00156
00157 if (!mbi.AllocationBase || mbi.AllocationBase == hModule)
00158 continue;
00159
00160 hModule = HMODULE(mbi.AllocationBase);
00161
00162 PGetNewAndDelete pGetNewAndDelete = (PGetNewAndDelete)GetProcAddress(hModule, "GetNewAndDeleteForCryptoPP");
00163 if (pGetNewAndDelete)
00164 {
00165 pGetNewAndDelete(s_pNew, s_pDelete);
00166 return;
00167 }
00168
00169 PSetNewAndDelete pSetNewAndDelete = (PSetNewAndDelete)GetProcAddress(hModule, "SetNewAndDeleteFromCryptoPP");
00170 if (pSetNewAndDelete)
00171 {
00172 s_pNew = &New;
00173 s_pDelete = &free;
00174 pSetNewAndDelete(s_pNew, s_pDelete, &set_new_handler);
00175 return;
00176 }
00177 }
00178
00179 hModule = GetModuleHandle("msvcrtd");
00180 if (!hModule)
00181 hModule = GetModuleHandle("msvcrt");
00182 if (hModule)
00183 {
00184 s_pNew = (PNew)GetProcAddress(hModule, "??2@YAPAXI@Z");
00185 s_pDelete = (PDelete)GetProcAddress(hModule, "??3@YAXPAX@Z");
00186 return;
00187 }
00188
00189 OutputDebugString("Crypto++ was not able to obtain new and delete function pointers.\n");
00190 throw 0;
00191 }
00192
00193 void * CRYPTOPP_CDECL operator new (size_t size)
00194 {
00195 if (!s_pNew)
00196 SetNewAndDeleteFunctionPointers();
00197
00198 return s_pNew(size);
00199 }
00200
00201 void CRYPTOPP_CDECL operator delete (void * p)
00202 {
00203 s_pDelete(p);
00204 }
00205
00206 void * CRYPTOPP_CDECL operator new [] (size_t size)
00207 {
00208 return operator new (size);
00209 }
00210
00211 void CRYPTOPP_CDECL operator delete [] (void * p)
00212 {
00213 operator delete (p);
00214 }
00215
00216 #endif // #ifdef CRYPTOPP_EXPORTS