summaryrefslogtreecommitdiff
path: root/extra/yassl
diff options
context:
space:
mode:
authorunknown <svoj@mysql.com>2005-07-01 20:00:59 +0500
committerunknown <svoj@mysql.com>2005-07-01 20:00:59 +0500
commit672dffcaf24332626cd3abe8f4366c7c66382d43 (patch)
tree50a170b168a3f21cd4cf1e5a5c1cebfa3b8f1cdd /extra/yassl
parent6c8d397588722dece2803370409d4776d5ffb461 (diff)
downloadmariadb-git-672dffcaf24332626cd3abe8f4366c7c66382d43.tar.gz
WL#2286 - Compile MySQL w/YASSL support
Merge with latest yaSSL. It includes fix for bigendian/littleendian problem (fixes func_encrypt test failure). Our trees are in sync now. extra/yassl/include/yassl_types.hpp: Merge with latest yaSSL. extra/yassl/src/Makefile.am: Merge with latest yaSSL. extra/yassl/src/buffer.cpp: Merge with latest yaSSL. extra/yassl/src/cert_wrapper.cpp: Merge with latest yaSSL. extra/yassl/src/lock.cpp: Merge with latest yaSSL. extra/yassl/src/log.cpp: Merge with latest yaSSL. extra/yassl/src/socket_wrapper.cpp: Merge with latest yaSSL. extra/yassl/src/template_instnt.cpp: Merge with latest yaSSL. extra/yassl/src/timer.cpp: Merge with latest yaSSL. extra/yassl/src/yassl_error.cpp: Merge with latest yaSSL. extra/yassl/src/yassl_int.cpp: Merge with latest yaSSL. extra/yassl/taocrypt/include/types.hpp: Merge with latest yaSSL. extra/yassl/taocrypt/src/Makefile.am: Merge with latest yaSSL. extra/yassl/taocrypt/src/aestables.cpp: Merge with latest yaSSL. extra/yassl/taocrypt/src/algebra.cpp: Merge with latest yaSSL. extra/yassl/taocrypt/src/arc4.cpp: Merge with latest yaSSL. extra/yassl/taocrypt/src/coding.cpp: Merge with latest yaSSL. extra/yassl/taocrypt/src/file.cpp: Merge with latest yaSSL. extra/yassl/taocrypt/src/integer.cpp: Merge with latest yaSSL. extra/yassl/taocrypt/src/misc.cpp: Merge with latest yaSSL. extra/yassl/taocrypt/src/random.cpp: Merge with latest yaSSL. extra/yassl/taocrypt/src/template_instnt.cpp: Merge with latest yaSSL.
Diffstat (limited to 'extra/yassl')
-rw-r--r--extra/yassl/include/yassl_types.hpp3
-rw-r--r--extra/yassl/src/Makefile.am1
-rw-r--r--extra/yassl/src/buffer.cpp1
-rw-r--r--extra/yassl/src/cert_wrapper.cpp1
-rw-r--r--extra/yassl/src/lock.cpp1
-rw-r--r--extra/yassl/src/log.cpp2
-rw-r--r--extra/yassl/src/socket_wrapper.cpp1
-rw-r--r--extra/yassl/src/template_instnt.cpp32
-rw-r--r--extra/yassl/src/timer.cpp1
-rw-r--r--extra/yassl/src/yassl_error.cpp1
-rw-r--r--extra/yassl/src/yassl_int.cpp34
-rw-r--r--extra/yassl/taocrypt/include/types.hpp38
-rw-r--r--extra/yassl/taocrypt/src/Makefile.am1
-rw-r--r--extra/yassl/taocrypt/src/aestables.cpp1
-rw-r--r--extra/yassl/taocrypt/src/algebra.cpp2
-rw-r--r--extra/yassl/taocrypt/src/arc4.cpp1
-rw-r--r--extra/yassl/taocrypt/src/coding.cpp1
-rw-r--r--extra/yassl/taocrypt/src/file.cpp1
-rw-r--r--extra/yassl/taocrypt/src/integer.cpp6
-rw-r--r--extra/yassl/taocrypt/src/misc.cpp27
-rw-r--r--extra/yassl/taocrypt/src/random.cpp1
-rw-r--r--extra/yassl/taocrypt/src/template_instnt.cpp30
22 files changed, 139 insertions, 48 deletions
diff --git a/extra/yassl/include/yassl_types.hpp b/extra/yassl/include/yassl_types.hpp
index 01b82d95039..ec9e6fb7ceb 100644
--- a/extra/yassl/include/yassl_types.hpp
+++ b/extra/yassl/include/yassl_types.hpp
@@ -445,7 +445,7 @@ const opaque master_label[MASTER_LABEL_SZ + 1] = "master secret";
const opaque key_label [KEY_LABEL_SZ + 1] = "key expansion";
-} // namespace
+} // naemspace
#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96
/*
@@ -456,4 +456,5 @@ const opaque key_label [KEY_LABEL_SZ + 1] = "key expansion";
using yaSSL::byte;
#endif
+
#endif // yaSSL_TYPES_HPP
diff --git a/extra/yassl/src/Makefile.am b/extra/yassl/src/Makefile.am
index 1f5f1ee7a4e..4ebb9a2d862 100644
--- a/extra/yassl/src/Makefile.am
+++ b/extra/yassl/src/Makefile.am
@@ -5,3 +5,4 @@ libyassl_a_SOURCES = buffer.cpp cert_wrapper.cpp crypto_wrapper.cpp \
handshake.cpp lock.cpp log.cpp socket_wrapper.cpp ssl.cpp \
template_instnt.cpp timer.cpp yassl_imp.cpp yassl_error.cpp yassl_int.cpp
EXTRA_DIST = ../include/*.hpp ../include/openssl/*.h
+AM_CXXFLAGS = -DYASSL_PURE_C
diff --git a/extra/yassl/src/buffer.cpp b/extra/yassl/src/buffer.cpp
index 1da0827ac4e..56d355bea80 100644
--- a/extra/yassl/src/buffer.cpp
+++ b/extra/yassl/src/buffer.cpp
@@ -25,6 +25,7 @@
*/
#include <string.h> // memcpy
+#include "runtime.hpp"
#include "buffer.hpp"
#include "yassl_types.hpp"
diff --git a/extra/yassl/src/cert_wrapper.cpp b/extra/yassl/src/cert_wrapper.cpp
index 7a8c7dfe253..a775c366a92 100644
--- a/extra/yassl/src/cert_wrapper.cpp
+++ b/extra/yassl/src/cert_wrapper.cpp
@@ -24,6 +24,7 @@
*
*/
+#include "runtime.hpp"
#include "cert_wrapper.hpp"
#include "yassl_int.hpp"
diff --git a/extra/yassl/src/lock.cpp b/extra/yassl/src/lock.cpp
index 8a0b66ead42..4827d396e81 100644
--- a/extra/yassl/src/lock.cpp
+++ b/extra/yassl/src/lock.cpp
@@ -22,6 +22,7 @@
/* Locking functions
*/
+#include "runtime.hpp"
#include "lock.hpp"
diff --git a/extra/yassl/src/log.cpp b/extra/yassl/src/log.cpp
index 38633cd1210..8ab351ee2b1 100644
--- a/extra/yassl/src/log.cpp
+++ b/extra/yassl/src/log.cpp
@@ -22,6 +22,8 @@
/* Debug logging functions
*/
+
+#include "runtime.hpp"
#include "log.hpp"
#ifdef YASSL_LOG
diff --git a/extra/yassl/src/socket_wrapper.cpp b/extra/yassl/src/socket_wrapper.cpp
index 00f9c8d170c..2252dfafdc5 100644
--- a/extra/yassl/src/socket_wrapper.cpp
+++ b/extra/yassl/src/socket_wrapper.cpp
@@ -26,6 +26,7 @@
*/
+#include "runtime.hpp"
#include "socket_wrapper.hpp"
#ifndef _WIN32
diff --git a/extra/yassl/src/template_instnt.cpp b/extra/yassl/src/template_instnt.cpp
index 5cf4f8c39f8..5ee57e76aed 100644
--- a/extra/yassl/src/template_instnt.cpp
+++ b/extra/yassl/src/template_instnt.cpp
@@ -1,3 +1,29 @@
+/* template_instnt.cpp
+ *
+ * Copyright (C) 2003 Sawtooth Consulting Ltd.
+ *
+ * This file is part of yaSSL.
+ *
+ * yaSSL is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * yaSSL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+
+/* Explicit template instantiation requests
+ */
+
+
#include "runtime.hpp"
#include "handshake.hpp"
#include "yassl_int.hpp"
@@ -15,7 +41,7 @@ template class HMAC<MD5>;
template class HMAC<SHA>;
template class HMAC<RIPEMD160>;
}
-#endif
+#endif // USE_CRYPTOPP_LIB
namespace mySTL {
template class list<unsigned char*>;
@@ -64,4 +90,6 @@ template void ysDelete<Message>(Message*);
template void ysArrayDelete<unsigned char>(unsigned char*);
template void ysArrayDelete<char>(char*);
}
-#endif
+
+#endif // HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
+
diff --git a/extra/yassl/src/timer.cpp b/extra/yassl/src/timer.cpp
index cfa1319ae80..4fe0d3aa4f9 100644
--- a/extra/yassl/src/timer.cpp
+++ b/extra/yassl/src/timer.cpp
@@ -23,6 +23,7 @@
*
*/
+#include "runtime.hpp"
#include "timer.hpp"
namespace yaSSL {
diff --git a/extra/yassl/src/yassl_error.cpp b/extra/yassl/src/yassl_error.cpp
index 6ae5a9f6663..c53aef2068d 100644
--- a/extra/yassl/src/yassl_error.cpp
+++ b/extra/yassl/src/yassl_error.cpp
@@ -23,6 +23,7 @@
/* yaSSL error implements and an exception class
*/
+#include "runtime.hpp"
#include "yassl_error.hpp"
namespace yaSSL {
diff --git a/extra/yassl/src/yassl_int.cpp b/extra/yassl/src/yassl_int.cpp
index e9c1ed53816..740618ce701 100644
--- a/extra/yassl/src/yassl_int.cpp
+++ b/extra/yassl/src/yassl_int.cpp
@@ -33,28 +33,36 @@
void* operator new(size_t sz, yaSSL::new_t)
{
+#ifdef YASSL_PURE_C
void* ptr = malloc(sz ? sz : 1);
if (!ptr) abort();
return ptr;
+#else
+ return ::operator new(sz);
+#endif
}
-void* operator new[](size_t sz, yaSSL::new_t)
-{
- void* ptr = malloc(sz ? sz : 1);
- if (!ptr) abort();
-
- return ptr;
-}
void operator delete(void* ptr, yaSSL::new_t)
{
+#ifdef YASSL_PURE_C
if (ptr) free(ptr);
+#else
+ ::operator delete(ptr);
+#endif
+}
+
+
+void* operator new[](size_t sz, yaSSL::new_t nt)
+{
+ return ::operator new(sz, nt);
}
-void operator delete[](void* ptr, yaSSL::new_t)
+
+void operator delete[](void* ptr, yaSSL::new_t nt)
{
- if (ptr) free(ptr);
+ ::operator delete(ptr, nt);
}
@@ -923,7 +931,7 @@ void SSL::setKeys()
// local functors
-namespace yassl_int_cpp_local1 {
+namespace yassl_int_cpp_local1 { // for explicit templates
struct SumData {
uint total_;
@@ -1385,7 +1393,8 @@ Sessions::~Sessions()
}
-namespace yassl_int_cpp_local2 { // locals
+// locals
+namespace yassl_int_cpp_local2 { // for explicit templates
typedef mySTL::list<SSL_SESSION*>::iterator iterator;
@@ -1974,6 +1983,8 @@ X509_NAME* X509::GetSubject()
return &subject_;
}
+
+
} // namespace
#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
@@ -1983,3 +1994,4 @@ template yaSSL::yassl_int_cpp_local1::SumBuffer for_each<mySTL::list<yaSSL::outp
template mySTL::list<yaSSL::SSL_SESSION*>::iterator find_if<mySTL::list<yaSSL::SSL_SESSION*>::iterator, yaSSL::yassl_int_cpp_local2::sess_match>(mySTL::list<yaSSL::SSL_SESSION*>::iterator, mySTL::list<yaSSL::SSL_SESSION*>::iterator, yaSSL::yassl_int_cpp_local2::sess_match);
}
#endif
+
diff --git a/extra/yassl/taocrypt/include/types.hpp b/extra/yassl/taocrypt/include/types.hpp
index 18961cf4d6f..92164eaaab4 100644
--- a/extra/yassl/taocrypt/include/types.hpp
+++ b/extra/yassl/taocrypt/include/types.hpp
@@ -31,10 +31,8 @@
namespace TaoCrypt {
-// define this if running on a big-endian CPU
-#if !defined(LITTLE_ENDIAN_ORDER) && (defined(__BIG_ENDIAN__) || \
- defined(__sparc) || defined(__sparc__) || defined(__hppa__) || \
- defined(__mips__) || (defined(__MWERKS__) && !defined(__INTEL__)))
+
+#if defined(WORDS_BIGENDIAN) || (defined(__MWERKS__) && !defined(__INTEL__))
#define BIG_ENDIAN_ORDER
#endif
@@ -47,34 +45,28 @@ typedef unsigned char byte;
typedef unsigned short word16;
typedef unsigned int word32;
-#if defined(__GNUC__) || defined(__MWERKS__) || defined(_LONGLONG_TYPE)
- #define WORD64_AVAILABLE
- #define WORD64_IS_DISTINCT_TYPE
- typedef unsigned long long word64;
- #define W64LIT(x) x##LL
-#elif defined(_MSC_VER) || defined(__BCPLUSPLUS__)
+#if defined(_MSC_VER) || defined(__BCPLUSPLUS__)
#define WORD64_AVAILABLE
#define WORD64_IS_DISTINCT_TYPE
typedef unsigned __int64 word64;
- #define W64LIT(x) x##ui64
-#elif defined(__DECCXX)
+#elif SIZEOF_LONG == 8
#define WORD64_AVAILABLE
typedef unsigned long word64;
+#elif SIZEOF_LONG_LONG == 8
+ #define WORD64_AVAILABLE
+ #define WORD64_IS_DISTINCT_TYPE
+ typedef unsigned long long word64;
#endif
-// define largest word type
-#ifdef WORD64_AVAILABLE
- typedef word64 lword;
-#else
- typedef word32 lword;
-#endif
+// compilers we've found 64-bit multiply insructions for
+#if defined(__GNUC__) || defined(_MSC_VER) || defined(__DECCXX)
+ #define HAVE_64_MULTIPLY
+#endif
-// TODO: FIXME, add asm multiply for x86_64 on Solaris and remove !__sun
-#if defined(__alpha__) || (defined(__ia64__) && !defined(__INTEL_COMPILER)) || \
- defined(_ARCH_PPC64) || defined(__mips64) || \
- (defined(__x86_64__) && !defined(__sun))
+#if defined(HAVE_64_MULTIPLY) && (defined(__alpha__) || defined(__ia64__) \
+ || defined(_ARCH_PPC64) || defined(__mips64) || defined(__x86_64__))
// These platforms have 64-bit CPU registers. Unfortunately most C++ compilers
// don't allow any way to access the 64-bit by 64-bit multiply instruction
// without using assembly, so in order to use word64 as word, the assembly
@@ -84,7 +76,7 @@ typedef unsigned int word32;
#else
#define TAOCRYPT_NATIVE_DWORD_AVAILABLE
#ifdef WORD64_AVAILABLE
- #define TAOCRYPT_SLOW_WORD64
+ #define TAOCRYPT_SLOW_WORD64
typedef word16 hword;
typedef word32 word;
typedef word64 dword;
diff --git a/extra/yassl/taocrypt/src/Makefile.am b/extra/yassl/taocrypt/src/Makefile.am
index 4005be94fb2..5bf45074a98 100644
--- a/extra/yassl/taocrypt/src/Makefile.am
+++ b/extra/yassl/taocrypt/src/Makefile.am
@@ -6,3 +6,4 @@ libtaocrypt_a_SOURCES = aes.cpp aestables.cpp algebra.cpp arc4.cpp asn.cpp \
md2.cpp md5.cpp misc.cpp random.cpp ripemd.cpp rsa.cpp sha.cpp \
template_instnt.cpp
EXTRA_DIST = ../include/*.hpp
+AM_CXXFLAGS = -DYASSL_PURE_C
diff --git a/extra/yassl/taocrypt/src/aestables.cpp b/extra/yassl/taocrypt/src/aestables.cpp
index 5a125dfd44d..7ba25bc9ffb 100644
--- a/extra/yassl/taocrypt/src/aestables.cpp
+++ b/extra/yassl/taocrypt/src/aestables.cpp
@@ -21,6 +21,7 @@
/* based on Wei Dai's aestables.cpp from CryptoPP */
+#include "runtime.hpp"
#include "aes.hpp"
diff --git a/extra/yassl/taocrypt/src/algebra.cpp b/extra/yassl/taocrypt/src/algebra.cpp
index e0472f2fc76..45bbcfa662a 100644
--- a/extra/yassl/taocrypt/src/algebra.cpp
+++ b/extra/yassl/taocrypt/src/algebra.cpp
@@ -319,9 +319,11 @@ void AbstractRing::SimultaneousExponentiate(Integer *results,
} // namespace
+
#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
namespace mySTL {
template TaoCrypt::WindowSlider* uninit_copy<TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*);
template void destroy<TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*);
}
#endif
+
diff --git a/extra/yassl/taocrypt/src/arc4.cpp b/extra/yassl/taocrypt/src/arc4.cpp
index bbd77cd822c..1e521b48f0c 100644
--- a/extra/yassl/taocrypt/src/arc4.cpp
+++ b/extra/yassl/taocrypt/src/arc4.cpp
@@ -21,6 +21,7 @@
/* based on Wei Dai's arc4.cpp from CryptoPP */
+#include "runtime.hpp"
#include "arc4.hpp"
diff --git a/extra/yassl/taocrypt/src/coding.cpp b/extra/yassl/taocrypt/src/coding.cpp
index 6514ed4d46d..944a47c288e 100644
--- a/extra/yassl/taocrypt/src/coding.cpp
+++ b/extra/yassl/taocrypt/src/coding.cpp
@@ -22,6 +22,7 @@
/* coding.cpp implements hex and base64 encoding/decoing
*/
+#include "runtime.hpp"
#include "coding.hpp"
#include "file.hpp"
diff --git a/extra/yassl/taocrypt/src/file.cpp b/extra/yassl/taocrypt/src/file.cpp
index 75df80608ae..4d48b9e7bca 100644
--- a/extra/yassl/taocrypt/src/file.cpp
+++ b/extra/yassl/taocrypt/src/file.cpp
@@ -22,6 +22,7 @@
/* file.cpp implements File Sources and Sinks
*/
+#include "runtime.hpp"
#include "file.hpp"
diff --git a/extra/yassl/taocrypt/src/integer.cpp b/extra/yassl/taocrypt/src/integer.cpp
index 460b2d31426..71324b04b92 100644
--- a/extra/yassl/taocrypt/src/integer.cpp
+++ b/extra/yassl/taocrypt/src/integer.cpp
@@ -35,8 +35,9 @@
#endif
-#if defined(_MSC_VER) && defined(_WIN64) && \
- !defined(__INTEL_COMPILER) // 64 bit X overflow intrinsic
+// 64bit multiply overflow intrinsic
+#if defined(_MSC_VER) && defined(_WIN64) && !defined(__INTEL_COMPILER) && \
+ !defined(TAOCRYPT_NATIVE_DWORD_AVAILABLE)
#ifdef __ia64__
#define myUMULH __UMULH
#elif __x86_64__
@@ -3957,6 +3958,7 @@ Integer CRT(const Integer &xp, const Integer &p, const Integer &xq,
return p * (u * (xq-xp) % q) + xp;
}
+
#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
#ifndef TAOCRYPT_NATIVE_DWORD_AVAILABLE
template hword DivideThreeWordsByTwo<hword, Word>(hword*, hword, hword, Word*);
diff --git a/extra/yassl/taocrypt/src/misc.cpp b/extra/yassl/taocrypt/src/misc.cpp
index 6a801a9995a..ef051332098 100644
--- a/extra/yassl/taocrypt/src/misc.cpp
+++ b/extra/yassl/taocrypt/src/misc.cpp
@@ -22,34 +22,43 @@
/* based on Wei Dai's misc.cpp from CryptoPP */
+#include "runtime.hpp"
#include "misc.hpp"
#include <new> // for NewHandler
void* operator new(size_t sz, TaoCrypt::new_t)
{
+#ifdef YASSL_PURE_C
void* ptr = malloc(sz ? sz : 1);
if (!ptr) abort();
return ptr;
+#else
+ return ::operator new(sz);
+#endif
}
-void* operator new[](size_t sz, TaoCrypt::new_t)
-{
- void* ptr = malloc(sz ? sz : 1);
- if (!ptr) abort();
-
- return ptr;
-}
void operator delete(void* ptr, TaoCrypt::new_t)
{
+#ifdef YASSL_PURE_C
if (ptr) free(ptr);
+#else
+ ::operator delete(ptr);
+#endif
}
-void operator delete[](void* ptr, TaoCrypt::new_t)
+
+void* operator new[](size_t sz, TaoCrypt::new_t nt)
{
- if (ptr) free(ptr);
+ return ::operator new(sz, nt);
+}
+
+
+void operator delete[](void* ptr, TaoCrypt::new_t nt)
+{
+ ::operator delete(ptr, nt);
}
diff --git a/extra/yassl/taocrypt/src/random.cpp b/extra/yassl/taocrypt/src/random.cpp
index 69fb180720a..e1e6416eb00 100644
--- a/extra/yassl/taocrypt/src/random.cpp
+++ b/extra/yassl/taocrypt/src/random.cpp
@@ -24,6 +24,7 @@
specific seed, switch to /dev/random for more security but may block
*/
+#include "runtime.hpp"
#include "random.hpp"
#if defined(_WIN32)
diff --git a/extra/yassl/taocrypt/src/template_instnt.cpp b/extra/yassl/taocrypt/src/template_instnt.cpp
index 28994282669..9a3c12badfc 100644
--- a/extra/yassl/taocrypt/src/template_instnt.cpp
+++ b/extra/yassl/taocrypt/src/template_instnt.cpp
@@ -1,3 +1,29 @@
+/* template_instnt.cpp
+ *
+ * Copyright (C) 2003 Sawtooth Consulting Ltd.
+ *
+ * This file is part of yaSSL.
+ *
+ * yaSSL is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * yaSSL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+
+/* Explicit template instantiation requests
+ */
+
+
#include "integer.hpp"
#include "rsa.hpp"
#include "algebra.hpp"
@@ -6,9 +32,11 @@
#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
namespace TaoCrypt {
+
#if defined(SSE2_INTRINSICS_AVAILABLE)
template AlignedAllocator<unsigned int>::pointer StdReallocate<unsigned int, AlignedAllocator<unsigned int> >(AlignedAllocator<unsigned int>&, unsigned int*, AlignedAllocator<unsigned int>::size_type, AlignedAllocator<unsigned int>::size_type, bool);
#endif
+
template class RSA_Decryptor<RSA_BlockType2>;
template class RSA_Encryptor<RSA_BlockType1>;
template class RSA_Encryptor<RSA_BlockType2>;
@@ -17,10 +45,12 @@ template void tcArrayDelete<byte>(byte*);
template AllocatorWithCleanup<byte>::pointer StdReallocate<byte, AllocatorWithCleanup<byte> >(AllocatorWithCleanup<byte>&, byte*, AllocatorWithCleanup<byte>::size_type, AllocatorWithCleanup<byte>::size_type, bool);
template void tcArrayDelete<word>(word*);
template AllocatorWithCleanup<word>::pointer StdReallocate<word, AllocatorWithCleanup<word> >(AllocatorWithCleanup<word>&, word*, AllocatorWithCleanup<word>::size_type, AllocatorWithCleanup<word>::size_type, bool);
+
#ifndef TAOCRYPT_SLOW_WORD64 // defined when word != word32
template void tcArrayDelete<word32>(word32*);
template AllocatorWithCleanup<word32>::pointer StdReallocate<word32, AllocatorWithCleanup<word32> >(AllocatorWithCleanup<word32>&, word32*, AllocatorWithCleanup<word32>::size_type, AllocatorWithCleanup<word32>::size_type, bool);
#endif
+
template void tcArrayDelete<char>(char*);
}