summaryrefslogtreecommitdiff
path: root/extra/yassl/taocrypt/include/misc.hpp
diff options
context:
space:
mode:
authorunknown <msvensson@shellback.(none)>2006-04-07 11:35:12 +0200
committerunknown <msvensson@shellback.(none)>2006-04-07 11:35:12 +0200
commit78697215c1245f5ae4d6771fece4cf7d6c363131 (patch)
tree9cad353f5a7f89b9f7ee3d3d7e2de065f3dadab7 /extra/yassl/taocrypt/include/misc.hpp
parent9a1d80e90ef7a176da61d7c19f9b463076e8ad0c (diff)
downloadmariadb-git-78697215c1245f5ae4d6771fece4cf7d6c363131.tar.gz
Update yassl to 1.2.2
extra/yassl/examples/client/client.cpp: Import patch yassl.diff extra/yassl/README: Import patch yassl.diff extra/yassl/examples/client/client.dsp: Import patch yassl.diff extra/yassl/examples/echoclient/echoclient.cpp: Import patch yassl.diff extra/yassl/examples/echoclient/echoclient.dsp: Import patch yassl.diff extra/yassl/examples/echoclient/input: Import patch yassl.diff extra/yassl/examples/echoclient/quit: Import patch yassl.diff extra/yassl/examples/echoserver/echoserver.cpp: Import patch yassl.diff extra/yassl/examples/echoserver/echoserver.dsp: Import patch yassl.diff extra/yassl/examples/server/server.cpp: Import patch yassl.diff extra/yassl/examples/server/server.dsp: Import patch yassl.diff extra/yassl/include/cert_wrapper.hpp: Import patch yassl.diff extra/yassl/include/crypto_wrapper.hpp: Import patch yassl.diff extra/yassl/include/openssl/ssl.h: Import patch yassl.diff extra/yassl/include/socket_wrapper.hpp: Import patch yassl.diff extra/yassl/include/yassl.hpp: Import patch yassl.diff extra/yassl/include/yassl_error.hpp: Import patch yassl.diff extra/yassl/include/yassl_imp.hpp: Import patch yassl.diff extra/yassl/include/yassl_int.hpp: Import patch yassl.diff extra/yassl/include/yassl_types.hpp: Import patch yassl.diff extra/yassl/mySTL/helpers.hpp: Import patch yassl.diff extra/yassl/mySTL/list.hpp: Import patch yassl.diff extra/yassl/mySTL/vector.hpp: Import patch yassl.diff extra/yassl/src/buffer.cpp: Import patch yassl.diff extra/yassl/src/cert_wrapper.cpp: Import patch yassl.diff extra/yassl/src/crypto_wrapper.cpp: Import patch yassl.diff extra/yassl/src/handshake.cpp: Import patch yassl.diff extra/yassl/src/make.bat: Import patch yassl.diff extra/yassl/src/socket_wrapper.cpp: Import patch yassl.diff extra/yassl/src/ssl.cpp: Import patch yassl.diff extra/yassl/src/yassl.cpp: Import patch yassl.diff extra/yassl/taocrypt/benchmark/benchmark.cpp: Import patch yassl.diff extra/yassl/taocrypt/benchmark/benchmark.dsp: Import patch yassl.diff extra/yassl/taocrypt/benchmark/make.bat: Import patch yassl.diff extra/yassl/taocrypt/include/blowfish.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/kernelc.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/pwdbased.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/twofish.hpp: Import patch yassl.diff extra/yassl/taocrypt/src/bftables.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/blowfish.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/make.bat: Import patch yassl.diff extra/yassl/taocrypt/src/tftables.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/twofish.cpp: Import patch yassl.diff extra/yassl/taocrypt/test.dsp: Import patch yassl.diff extra/yassl/taocrypt/test.dsw: Import patch yassl.diff extra/yassl/taocrypt/test/make.bat: Import patch yassl.diff extra/yassl/taocrypt/test/memory.cpp: Import patch yassl.diff extra/yassl/taocrypt/test/test.cpp: Import patch yassl.diff extra/yassl/testsuite/input: Import patch yassl.diff extra/yassl/src/timer.cpp: Import patch yassl.diff extra/yassl/src/yassl_error.cpp: Import patch yassl.diff extra/yassl/src/yassl_imp.cpp: Import patch yassl.diff extra/yassl/src/yassl_int.cpp: Import patch yassl.diff extra/yassl/taocrypt/include/aes.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/arc4.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/asn.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/block.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/des.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/dh.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/hash.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/hmac.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/md5.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/misc.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/modes.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/ripemd.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/runtime.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/sha.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/types.hpp: Import patch yassl.diff extra/yassl/taocrypt/src/aes.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/aestables.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/algebra.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/arc4.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/asn.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/coding.cpp: Import patch yassl.diff extra/yassl/testsuite/make.bat: Import patch yassl.diff extra/yassl/testsuite/quit: Import patch yassl.diff extra/yassl/testsuite/test.hpp: Import patch yassl.diff extra/yassl/testsuite/testsuite.cpp: Import patch yassl.diff extra/yassl/testsuite/testsuite.dsp: Import patch yassl.diff extra/yassl/taocrypt/src/des.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/dh.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/hash.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/integer.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/md5.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/misc.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/random.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/ripemd.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/sha.cpp: Import patch yassl.diff extra/yassl/taocrypt/taocrypt.dsp: Import patch yassl.diff extra/yassl/yassl.dsp: Import patch yassl.diff extra/yassl/yassl.dsw: Import patch yassl.diff
Diffstat (limited to 'extra/yassl/taocrypt/include/misc.hpp')
-rw-r--r--extra/yassl/taocrypt/include/misc.hpp159
1 files changed, 125 insertions, 34 deletions
diff --git a/extra/yassl/taocrypt/include/misc.hpp b/extra/yassl/taocrypt/include/misc.hpp
index f705cc99970..7a71784893f 100644
--- a/extra/yassl/taocrypt/include/misc.hpp
+++ b/extra/yassl/taocrypt/include/misc.hpp
@@ -24,9 +24,15 @@
#ifndef TAO_CRYPT_MISC_HPP
#define TAO_CRYPT_MISC_HPP
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
+
+#if !defined(DO_TAOCRYPT_KERNEL_MODE)
+ #include <stdlib.h>
+ #include <assert.h>
+ #include <string.h>
+#else
+ #include "kernelc.hpp"
+#endif
+
#include "types.hpp"
#include "type_traits.hpp"
@@ -34,31 +40,33 @@
namespace TaoCrypt {
-// library allocation
-struct new_t {}; // TaoCrypt New type
-extern new_t tc; // pass in parameter
+#ifdef YASSL_PURE_C
-} // namespace TaoCrypt
+ // library allocation
+ struct new_t {}; // TaoCrypt New type
+ extern new_t tc; // pass in parameter
-void* operator new (size_t, TaoCrypt::new_t);
-void* operator new[](size_t, TaoCrypt::new_t);
+ } // namespace TaoCrypt
-void operator delete (void*, TaoCrypt::new_t);
-void operator delete[](void*, TaoCrypt::new_t);
+ void* operator new (size_t, TaoCrypt::new_t);
+ void* operator new[](size_t, TaoCrypt::new_t);
+ void operator delete (void*, TaoCrypt::new_t);
+ void operator delete[](void*, TaoCrypt::new_t);
-namespace TaoCrypt {
-template<typename T>
-void tcDelete(T* ptr)
-{
+ namespace TaoCrypt {
+
+ template<typename T>
+ void tcDelete(T* ptr)
+ {
if (ptr) ptr->~T();
::operator delete(ptr, TaoCrypt::tc);
-}
+ }
-template<typename T>
-void tcArrayDelete(T* ptr)
-{
+ template<typename T>
+ void tcArrayDelete(T* ptr)
+ {
// can't do array placement destruction since not tracking size in
// allocation, only allow builtins to use array placement since they
// don't need destructors called
@@ -66,15 +74,39 @@ void tcArrayDelete(T* ptr)
(void)sizeof(builtin);
::operator delete[](ptr, TaoCrypt::tc);
-}
+ }
+ #define NEW_TC new (tc)
-// to resolve compiler generated operator delete on base classes with
-// virtual destructors (when on stack), make sure doesn't get called
-class virtual_base {
-public:
+
+ // to resolve compiler generated operator delete on base classes with
+ // virtual destructors (when on stack), make sure doesn't get called
+ class virtual_base {
+ public:
static void operator delete(void*) { assert(0); }
-};
+ };
+
+#else // YASSL_PURE_C
+
+
+ template<typename T>
+ void tcDelete(T* ptr)
+ {
+ delete ptr;
+ }
+
+ template<typename T>
+ void tcArrayDelete(T* ptr)
+ {
+ delete[] ptr;
+ }
+
+ #define NEW_TC new
+
+ class virtual_base {};
+
+
+#endif // YASSL_PURE_C
#if defined(_MSC_VER) || defined(__BCPLUSPLUS__)
@@ -91,19 +123,12 @@ public:
// no gas on these systems ?, disable for now
-#if defined(__sun__) || defined (__QNX__) || defined (__APPLE__)
+#if defined(__sun__) || defined (__QNX__)
#define TAOCRYPT_DISABLE_X86ASM
#endif
-// Disable assmebler when compiling with icc
-// Temporary workaround for bug12717
-#if defined(__INTEL_COMPILER)
- #define TAOCRYPT_DISABLE_X86ASM
-#endif
-
-
-
+// Turn on ia32 ASM for Big Integer
// CodeWarrior defines _MSC_VER
#if !defined(TAOCRYPT_DISABLE_X86ASM) && ((defined(_MSC_VER) && \
!defined(__MWERKS__) && defined(_M_IX86)) || \
@@ -112,6 +137,20 @@ public:
#endif
+// Turn on ia32 ASM for Ciphers and Message Digests
+// Seperate define since these are more complex, use member offsets
+// and user may want to turn off while leaving Big Integer optos on
+#if defined(TAOCRYPT_X86ASM_AVAILABLE) && !defined(DISABLE_TAO_ASM)
+ #define TAO_ASM
+#endif
+
+
+// Extra word in older vtable implementations, for ASM member offset
+#if defined(__GNUC__) && __GNUC__ < 3
+ #define OLD_GCC_OFFSET
+#endif
+
+
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
# define TAOCRYPT_MALLOC_ALIGNMENT_IS_16
#endif
@@ -432,6 +471,58 @@ inline void ByteReverseIf(T* out, const T* in, word32 bc, ByteOrder order)
}
+
+// do Asm Reverse is host is Little and x86asm
+#ifdef LITTLE_ENDIAN_ORDER
+ #ifdef TAOCRYPT_X86ASM_AVAILABLE
+ #define LittleReverse AsmReverse
+ #else
+ #define LittleReverse ByteReverse
+ #endif
+#else
+ #define LittleReverse
+#endif
+
+
+// do Asm Reverse is host is Big and x86asm
+#ifdef BIG_ENDIAN_ORDER
+ #ifdef TAOCRYPT_X86ASM_AVAILABLE
+ #define BigReverse AsmReverse
+ #else
+ #define BigReverse ByteReverse
+ #endif
+#else
+ #define BigReverse
+#endif
+
+
+#ifdef TAOCRYPT_X86ASM_AVAILABLE
+
+ // faster than rotate, use bswap
+
+ inline word32 AsmReverse(word32 wd)
+ {
+ #ifdef __GNUC__
+ __asm__
+ (
+ "bswap %1"
+ : "=r"(wd)
+ : "0"(wd)
+ );
+ #else
+ __asm
+ {
+ mov eax, wd
+ bswap eax
+ mov wd, eax
+ }
+ #endif
+ return wd;
+ }
+
+#endif
+
+
template <class T>
inline void GetUserKey(ByteOrder order, T* out, word32 outlen, const byte* in,
word32 inlen)