diff --git a/validat0.cpp b/validat0.cpp deleted file mode 100644 index fc6b3397..00000000 --- a/validat0.cpp +++ /dev/null @@ -1,673 +0,0 @@ -// validat0.cpp - written and placed in the public domain by Wei Dai and Jeffrey Walton - -#include "pch.h" - -#include "config.h" -#include "stdcpp.h" -#include "misc.h" -#include "integer.h" - -#include "validate.h" - -#include - -USING_NAMESPACE(CryptoPP) - -#if GCC_DIAGNOSTIC_AWARE -# pragma GCC diagnostic ignored "-Wunused-value" -#endif - -bool TestSettings() -{ - bool pass = true; - - std::cout << "\nTesting Settings...\n\n"; - - word32 w; - memcpy_s(&w, sizeof(w), "\x01\x02\x03\x04", 4); - - if (w == 0x04030201L) - { -#ifdef IS_LITTLE_ENDIAN - std::cout << "passed: "; -#else - std::cout << "FAILED: "; - pass = false; -#endif - std::cout << "Your machine is little endian.\n"; - } - else if (w == 0x01020304L) - { -#ifndef IS_LITTLE_ENDIAN - std::cout << "passed: "; -#else - std::cout << "FAILED: "; - pass = false; -#endif - std::cout << "Your machine is big endian.\n"; - } - else - { - std::cout << "FAILED: Your machine is neither big endian nor little endian.\n"; - pass = false; - } - -#ifdef CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS - byte testvals[10] = {1,2,2,3,3,3,3,2,2,1}; - if (*(word32 *)(testvals+3) == 0x03030303 && *(word64 *)(testvals+1) == W64LIT(0x0202030303030202)) - std::cout << "passed: Your machine allows unaligned data access.\n"; - else - { - std::cout << "FAILED: Unaligned data access gave incorrect results.\n"; - pass = false; - } -#else - std::cout << "passed: CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS is not defined. Will restrict to aligned data access.\n"; -#endif - - if (sizeof(byte) == 1) - std::cout << "passed: "; - else - { - std::cout << "FAILED: "; - pass = false; - } - std::cout << "sizeof(byte) == " << sizeof(byte) << std::endl; - - if (sizeof(word16) == 2) - std::cout << "passed: "; - else - { - std::cout << "FAILED: "; - pass = false; - } - std::cout << "sizeof(word16) == " << sizeof(word16) << std::endl; - - if (sizeof(word32) == 4) - std::cout << "passed: "; - else - { - std::cout << "FAILED: "; - pass = false; - } - std::cout << "sizeof(word32) == " << sizeof(word32) << std::endl; - - if (sizeof(word64) == 8) - std::cout << "passed: "; - else - { - std::cout << "FAILED: "; - pass = false; - } - std::cout << "sizeof(word64) == " << sizeof(word64) << std::endl; - -#ifdef CRYPTOPP_WORD128_AVAILABLE - if (sizeof(word128) == 16) - std::cout << "passed: "; - else - { - std::cout << "FAILED: "; - pass = false; - } - std::cout << "sizeof(word128) == " << sizeof(word128) << std::endl; -#endif - - if (sizeof(word) == 2*sizeof(hword) -#ifdef CRYPTOPP_NATIVE_DWORD_AVAILABLE - && sizeof(dword) == 2*sizeof(word) -#endif - ) - std::cout << "passed: "; - else - { - std::cout << "FAILED: "; - pass = false; - } - std::cout << "sizeof(hword) == " << sizeof(hword) << ", sizeof(word) == " << sizeof(word); -#ifdef CRYPTOPP_NATIVE_DWORD_AVAILABLE - std::cout << ", sizeof(dword) == " << sizeof(dword); -#endif - std::cout << std::endl; - -#ifdef CRYPTOPP_CPUID_AVAILABLE - bool hasMMX = HasMMX(); - bool hasISSE = HasSSE(); - bool hasSSE2 = HasSSE2(); - bool hasSSSE3 = HasSSSE3(); - bool isP4 = IsP4(); - int cacheLineSize = GetCacheLineSize(); - - if ((isP4 && (!hasMMX || !hasSSE2)) || (hasSSE2 && !hasMMX) || (cacheLineSize < 16 || cacheLineSize > 256 || !IsPowerOf2(cacheLineSize))) - { - std::cout << "FAILED: "; - pass = false; - } - else - std::cout << "passed: "; - - std::cout << "hasMMX == " << hasMMX << ", hasISSE == " << hasISSE << ", hasSSE2 == " << hasSSE2 << ", hasSSSE3 == " << hasSSSE3 << ", hasAESNI == " << HasAESNI() << ", hasCLMUL == " << HasCLMUL() << ", isP4 == " << isP4 << ", cacheLineSize == " << cacheLineSize; - std::cout << ", AESNI_INTRINSICS == " << CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE << std::endl; -#endif - - if (!pass) - { - std::cout << "Some critical setting in config.h is in error. Please fix it and recompile." << std::endl; - abort(); - } - return pass; -} - -bool TestRotate() -{ - bool pass = true; - - std::cout << "\nTesting rotate...\n\n"; - std::cout << (!pass ? "FAILED" : "passed") << " left rotate" << std::endl; - std::cout << (!pass ? "FAILED" : "passed") << " right rotate" << std::endl; - - return pass; -} - -bool TestConversion() -{ - bool pass = true; - - std::cout << "\nTesting conversions...\n\n"; - - /********** signed char **********/ - { - signed char v1, v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min() + 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " signed char" << std::endl; - pass &= p; - } - - /********** signed char overflow **********/ - { - signed char v; bool p = true; - { - signed short v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed short v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned short v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - { - signed int v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed int v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned int v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - - { - signed long v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned long v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - { - signed long long v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed long long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned long long v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - - std::cout << (!p ? "FAILED" : "passed") << " signed char overflow" << std::endl; - pass &= p; - } - - /********** unsigned char **********/ - { - unsigned char v1, v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " unsigned char" << std::endl; - pass &= p; - } - - /********** unsigned char overflow **********/ - { - unsigned char v; bool p = true; - { - unsigned short v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - { - unsigned int v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - { - unsigned long v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - { - unsigned long long v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - - std::cout << (!p ? "FAILED" : "passed") << " unsigned char overflow" << std::endl; - pass &= p; - } - - /********** signed short **********/ - { - signed short v1, v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min() + 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " signed short" << std::endl; - pass &= p; - } - - /********** signed short overflow **********/ - { - signed short v; bool p = true; - { - signed int v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed int v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned int v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - { - signed long v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned long v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - { - signed long long v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed long long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned long long v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - - std::cout << (!p ? "FAILED" : "passed") << " signed short overflow" << std::endl; - pass &= p; - } - - /********** unsigned short **********/ - { - unsigned short v1, v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " unsigned short" << std::endl; - pass &= p; - } - - /********** unsigned short overflow **********/ - { - unsigned short v; bool p = true; - { - unsigned int v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - { - unsigned long v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - { - unsigned long long v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - - std::cout << (!p ? "FAILED" : "passed") << " unsigned short overflow" << std::endl; - pass &= p; - } - - /********** signed int **********/ - { - signed int v1, v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min() + 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " signed int" << std::endl; - pass &= p; - } - - /********** signed int overflow **********/ - { - signed int v; bool p = true; - { - // Guard i686 collision of type sizes - if (sizeof(signed int) != sizeof(signed long)) - { - signed long v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned long v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - // Guard i686 collision of type sizes - if (sizeof(signed int) != sizeof(signed long long)) - { - signed long long v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed long long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned long long v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - - std::cout << (!p ? "FAILED" : "passed") << " signed int overflow" << std::endl; - pass &= p; - } - } - - /********** unsigned int **********/ - { - unsigned int v1, v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " unsigned int" << std::endl; - pass &= p; - } - - /********** unsigned int overflow **********/ - { - unsigned int v; bool p = true; - { - // Guard i686 collision of type sizes - if (sizeof(unsigned int) != sizeof(unsigned long)) - { - unsigned long v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - // Guard i686 collision of type sizes - if (sizeof(unsigned int) != sizeof(unsigned long long)) - { - unsigned long long v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - - std::cout << (!p ? "FAILED" : "passed") << " unsigned int overflow" << std::endl; - pass &= p; - } - } - - /********** signed long **********/ - { - signed long v1, v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min() + 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " signed long" << std::endl; - pass &= p; - } - - /********** signed long overflow **********/ - { - // Guard x86_64 collision of type sizes - if (sizeof(signed long) != sizeof(signed long long)) - { - signed long v; bool p = true; - { - signed long long v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed long long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned long long v3 = std::numeric_limits::max(); p = !SafeConvert(v3, v) && p; - } - - std::cout << (!p ? "FAILED" : "passed") << " signed long overflow" << std::endl; - pass &= p; - } - else - { - std::cout << "passed signed long overflow (skipped due to range of types)" << std::endl; - } - } - - /********** unsigned long **********/ - { - unsigned long v1, v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " unsigned long" << std::endl; - pass &= p; - } - - /********** unsigned long overflow **********/ - { - // Guard x86_64 collision of type sizes - if (sizeof(unsigned long) != sizeof(unsigned long long)) - { - unsigned long v; bool p = true; - { - unsigned long long v1 = std::numeric_limits::max(); p = !SafeConvert(v1, v) && p; - } - - std::cout << (!p ? "FAILED" : "passed") << " unsigned long overflow" << std::endl; - pass &= p; - } - else - { - std::cout << "passed unsigned long overflow (skipped due to range of types)" << std::endl; - } - } - - /********** signed long long **********/ - { - signed long long v1, v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min() + 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " signed long long" << std::endl; - pass &= p; - } - - /********** unsigned long long **********/ - { - unsigned long long v1, v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " unsigned long long" << std::endl; - pass &= p; - } - - /********** ssize_t **********/ - { - ssize_t v1, v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::min() + 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " ssize_t" << std::endl; - pass &= p; - } - - /********** size_t **********/ - { - size_t v1, v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max(); p = SafeConvert(v1, v2) && p; - v1 = std::numeric_limits::max() - 1; p = SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " size_t" << std::endl; - pass &= p; - } - -#if 0 - { - Integer v1; signed char v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::min()); p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::min()) + 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::min()) - 1; p = !SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " Integer to signed char" << std::endl; - pass &= p; - } - - { - Integer v1; unsigned char v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " Integer to unsigned char" << std::endl; - pass &= p; - } - - { - Integer v1; signed short v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::min()); p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::min()) + 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::min()) - 1; p = !SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " Integer to signed short" << std::endl; - pass &= p; - } - - { - Integer v1; unsigned short v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; - v1 = 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; - v1 = Integer((signed long)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; - - std::cout << (!p ? "FAILED" : "passed") << " Integer to unsigned short" << std::endl; - pass &= p; - } - - { - Integer v1; signed int v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 0; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::min()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - std::cout << "Limit: " << (int) std::numeric_limits::min() << std::endl; - std::cout << "Digits: " << (int) std::numeric_limits::digits << std::endl; - std::cout << "Value: " << v1 << std::endl; - std::cout << "BitCount: " << v1.BitCount() << std::endl; - - v1 = Integer((signed long)std::numeric_limits::min()) + 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::min()) - 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - - std::cout << (!p ? "FAILED" : "passed") << " Integer to signed int" << std::endl; - pass &= p; - } - - { - Integer v1; unsigned int v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - - std::cout << (!p ? "FAILED" : "passed") << " Integer to unsigned int" << std::endl; - pass &= p; - } - - { - Integer v1; signed long v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 0; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::min()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::min()) + 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::min()) - 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - - std::cout << (!p ? "FAILED" : "passed") << " Integer to signed long" << std::endl; - pass &= p; - } - - { - Integer v1; unsigned long v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((word64)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((word64)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((word64)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - - std::cout << (!p ? "FAILED" : "passed") << " Integer to signed long" << std::endl; - pass &= p; - } - - { - Integer v1; ssize_t v2; bool p = true; - v1 = -1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 0; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::min()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::min()) + 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::min()) - 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((signed long)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - - std::cout << (!p ? "FAILED" : "passed") << " Integer to signed ssize_t" << std::endl; - pass &= p; - } - - { - Integer v1; size_t v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((word64)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((word64)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((word64)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - - std::cout << (!p ? "FAILED" : "passed") << " Integer to size_t" << std::endl; - pass &= p; - } - - { - CRYPTOPP_COMPILE_ASSERT(sizeof(word64) >= sizeof(unsigned long long)); - Integer v1; unsigned long long v2; bool p = true; - v1 = 0; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((word64)std::numeric_limits::max()); p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((word64)std::numeric_limits::max()) - 1; p = SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - v1 = Integer((word64)std::numeric_limits::max()) + 1; p = !SafeConvert(v1, v2) && p; CRYPTOPP_ASSERT(p); - - std::cout << (!p ? "FAILED" : "passed") << " Integer to unsigned long long" << std::endl; - pass &= p; - } -#endif - - return pass; -}