6 #ifndef CRYPTOPP_CONFIG_H 7 #define CRYPTOPP_CONFIG_H 13 #if !defined(CRYPTOPP_LITTLE_ENDIAN) && !defined(CRYPTOPP_BIG_ENDIAN) && (defined(__BIG_ENDIAN__) || (defined(__s390__) || defined(__s390x__) || defined(__zarch__)) || (defined(__m68k__) || defined(__MC68K__)) || defined(__sparc) || defined(__sparc__) || defined(__hppa__) || defined(__MIPSEB__) || defined(__ARMEB__) || (defined(__MWERKS__) && !defined(__INTEL__))) 14 # define CRYPTOPP_BIG_ENDIAN 1 19 #if !defined(CRYPTOPP_BIG_ENDIAN) && !defined(CRYPTOPP_LITTLE_ENDIAN) 20 # define CRYPTOPP_LITTLE_ENDIAN 1 25 #if (CRYPTOPP_BIG_ENDIAN) && defined(__GNUC__) && defined(__BYTE_ORDER__) && (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) 26 # error "(CRYPTOPP_BIG_ENDIAN) is set, but __BYTE_ORDER__ is not __ORDER_BIG_ENDIAN__" 28 #if (CRYPTOPP_LITTLE_ENDIAN) && defined(__GNUC__) && defined(__BYTE_ORDER__) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) 29 # error "(CRYPTOPP_LITTLE_ENDIAN) is set, but __BYTE_ORDER__ is not __ORDER_LITTLE_ENDIAN__" 50 #if !defined(USE_MS_CRYPTOAPI) && !defined(USE_MS_CNGAPI) 51 # if !defined(_USING_V110_SDK71_) && ((WINVER >= 0x0602 ) || (_WIN32_WINNT >= 0x0602 )) 52 # define USE_MS_CNGAPI 54 # define USE_MS_CRYPTOAPI 67 #if defined(__native_client__) 68 # define CRYPTOPP_DISABLE_ASM 1 101 #define CRYPTOPP_MAJOR 8 102 #define CRYPTOPP_MINOR 2 103 #define CRYPTOPP_REVISION 0 104 #define CRYPTOPP_VERSION 820 111 #ifndef CRYPTOPP_DATA_DIR 112 # define CRYPTOPP_DATA_DIR "" 132 #if !defined(GZIP_OS_CODE) 133 # if defined(__macintosh__) 134 # define GZIP_OS_CODE 7 135 # elif defined(__unix__) || defined(__linux__) 136 # define GZIP_OS_CODE 3 138 # define GZIP_OS_CODE 0 163 #define CRYPTOPP_SLOW_ARMV8_SHIFT 1 173 #define CRYPTOPP_RIJNDAEL_NAME "AES" 181 #if (defined(DEBUG) || defined(_DEBUG)) && !defined(CRYPTOPP_DEBUG) 182 # define CRYPTOPP_DEBUG 1 190 # error namespace support is now required 193 #ifdef CRYPTOPP_DOXYGEN_PROCESSING 208 # define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 212 # define NAMESPACE_BEGIN(x) 213 # define NAMESPACE_END 215 # define DOCUMENTED_TYPEDEF(x, y) class y : public x {}; 217 # define protected private 219 # define NAMESPACE_BEGIN(x) namespace x { 220 # define NAMESPACE_END } 221 # define DOCUMENTED_TYPEDEF(x, y) typedef x y; 223 #define ANONYMOUS_NAMESPACE_BEGIN namespace { 224 #define ANONYMOUS_NAMESPACE_END } 225 #define USING_NAMESPACE(x) using namespace x; 226 #define DOCUMENTED_NAMESPACE_BEGIN(x) namespace x { 227 #define DOCUMENTED_NAMESPACE_END } 233 #define CRYPTOPP_NO_GLOBAL_BYTE 1 240 typedef unsigned char byte;
241 typedef unsigned short word16;
242 typedef unsigned int word32;
244 typedef signed char sbyte;
245 typedef signed short sword16;
246 typedef signed int sword32;
248 #if defined(_MSC_VER) || defined(__BORLANDC__) 249 typedef signed __int64 sword64;
250 typedef unsigned __int64 word64;
251 #define SW64LIT(x) x##i64 252 #define W64LIT(x) x##ui64 253 #elif (_LP64 || __LP64__) 254 typedef signed long sword64;
255 typedef unsigned long word64;
256 #define SW64LIT(x) x##L 257 #define W64LIT(x) x##UL 259 typedef signed long long sword64;
260 typedef unsigned long long word64;
261 #define SW64LIT(x) x##LL 262 #define W64LIT(x) x##ULL 266 typedef word64 lword;
267 const lword LWORD_MAX = W64LIT(0xffffffffffffffff);
275 #if (defined(_MSC_VER) && defined(__clang__)) 276 # error: "Unsupported configuration" 280 #define CRYPTOPP_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) 283 #if defined(__xlc__) || defined(__xlC__) 284 #define CRYPTOPP_XLC_VERSION ((__xlC__ / 256) * 10000 + (__xlC__ % 256) * 100) 288 #if defined(__clang__) && defined(__apple_build_version__) 289 #define CRYPTOPP_APPLE_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) 290 #elif defined(__clang__) 291 #define CRYPTOPP_LLVM_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) 295 #define CRYPTOPP_MSC_VERSION (_MSC_VER) 299 #if (CRYPTOPP_GCC_VERSION >= 40600) || (CRYPTOPP_LLVM_CLANG_VERSION >= 10700) || (CRYPTOPP_APPLE_CLANG_VERSION >= 20000) 300 #define CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE 1 305 #if (defined(_MSC_VER) && (!defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1000) && (defined(_M_X64) || defined(_M_IA64))) || (defined(__DECCXX) && defined(__alpha__)) || (defined(__INTEL_COMPILER) && defined(__x86_64__)) || (defined(__SUNPRO_CC) && defined(__x86_64__)) 306 typedef word32 hword;
309 #define CRYPTOPP_NATIVE_DWORD_AVAILABLE 1 310 #if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || defined(__x86_64__) || defined(__mips64) || defined(__sparc64__) 311 #if ((CRYPTOPP_GCC_VERSION >= 30400) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30000) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) && (__SIZEOF_INT128__ >= 16) 315 typedef word32 hword;
317 typedef __uint128_t dword;
318 typedef __uint128_t word128;
319 #define CRYPTOPP_WORD128_AVAILABLE 1 322 typedef word16 hword;
324 typedef word64 dword;
328 #define CRYPTOPP_BOOL_SLOW_WORD64 1 329 typedef word16 hword;
331 typedef word64 dword;
334 #ifndef CRYPTOPP_BOOL_SLOW_WORD64 335 #define CRYPTOPP_BOOL_SLOW_WORD64 0 338 const unsigned int WORD_SIZE =
sizeof(word);
339 const unsigned int WORD_BITS = WORD_SIZE * 8;
343 #ifndef CRYPTOPP_L1_CACHE_LINE_SIZE 346 #if defined(_M_X64) || defined(__x86_64__) || defined(__arm64__) || defined(__aarch64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) 347 #define CRYPTOPP_L1_CACHE_LINE_SIZE 64 350 #define CRYPTOPP_L1_CACHE_LINE_SIZE 32 358 #ifndef CRYPTOPP_ALIGN_DATA 359 #if defined(_MSC_VER) 360 #define CRYPTOPP_ALIGN_DATA(x) __declspec(align(x)) 361 #elif defined(__GNUC__) || (__SUNPRO_CC >= 0x5100) 362 #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x))) 363 #elif defined(__xlc__) || defined(__xlC__) 364 #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x))) 366 #define CRYPTOPP_ALIGN_DATA(x) 371 #if ((defined(__MACH__) && defined(__APPLE__)) && ((CRYPTOPP_LLVM_CLANG_VERSION >= 30600) || (CRYPTOPP_APPLE_CLANG_VERSION >= 70100) || (CRYPTOPP_GCC_VERSION >= 40300))) 372 #define CRYPTOPP_SECTION_INIT __attribute__((section ("__DATA,__data"))) 373 #elif (defined(__ELF__) && (CRYPTOPP_GCC_VERSION >= 40300)) 374 #define CRYPTOPP_SECTION_INIT __attribute__((section ("nocommon"))) 375 #elif defined(__ELF__) && (defined(__xlC__) || defined(__ibmxl__)) 376 #define CRYPTOPP_SECTION_INIT __attribute__((section ("nocommon"))) 378 #define CRYPTOPP_SECTION_INIT 381 #if defined(_MSC_VER) || defined(__fastcall) 382 #define CRYPTOPP_FASTCALL __fastcall 384 #define CRYPTOPP_FASTCALL 388 #define CRYPTOPP_NO_VTABLE __declspec(novtable) 390 #define CRYPTOPP_NO_VTABLE 398 # pragma warning(disable: 4127 4512 4661 4910) 401 # pragma warning(once: 4191 4242 4263 4264 4266 4302 4826 4905 4906 4928) 410 #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE 411 # pragma GCC diagnostic ignored "-Wunknown-pragmas" 412 # pragma GCC diagnostic ignored "-Wunused-function" 418 #if (defined(_MSC_VER) && _MSC_VER <= 1300) || defined(__MWERKS__) || (defined(_STLPORT_VERSION) && ((_STLPORT_VERSION < 0x450) || defined(_STLP_NO_UNCAUGHT_EXCEPT_SUPPORT))) 419 #define CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION 422 #ifndef CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION 423 #define CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE 433 #if (defined(__ILP32__) || defined(_ILP32)) && defined(__x86_64__) 434 #define CRYPTOPP_BOOL_X32 1 438 #if (defined(_M_IX86) || defined(__i386__) || defined(__i386) || defined(_X86_) || defined(__I86__) || defined(__INTEL__)) && !CRYPTOPP_BOOL_X32 439 #define CRYPTOPP_BOOL_X86 1 442 #if (defined(_M_X64) || defined(__x86_64__)) && !CRYPTOPP_BOOL_X32 443 #define CRYPTOPP_BOOL_X64 1 447 #if CRYPTOPP_BOOL_X32 448 # undef CRYPTOPP_BOOL_X64 449 # undef CRYPTOPP_X64_ASM_AVAILABLE 450 # undef CRYPTOPP_X64_MASM_AVAILABLE 454 #if defined(__arm64__) || defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 455 #define CRYPTOPP_BOOL_ARMV8 1 456 #elif defined(__arm__) || defined(_M_ARM) 457 #define CRYPTOPP_BOOL_ARM32 1 461 #if defined(__ppc64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) 462 #define CRYPTOPP_BOOL_PPC64 1 463 #elif defined(__powerpc__) || defined(_ARCH_PPC) 464 #define CRYPTOPP_BOOL_PPC32 1 468 #if defined(__mips64__) 469 #define CRYPTOPP_BOOL_MIPS64 1 470 #elif defined(__mips__) 471 #define CRYPTOPP_BOOL_MIPS32 1 474 #if defined(_MSC_VER) || defined(__BORLANDC__) 475 # define CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY 1 477 # define CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY 1 482 #if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) 485 #if defined(CRYPTOPP_APPLE_CLANG_VERSION) && (CRYPTOPP_APPLE_CLANG_VERSION < 50000) 486 # define CRYPTOPP_DISABLE_ASM 1 491 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x5100) 492 # define CRYPTOPP_DISABLE_ASM 1 495 #if !defined(CRYPTOPP_DISABLE_ASM) && ((defined(_MSC_VER) && defined(_M_IX86)) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))) 497 #define CRYPTOPP_X86_ASM_AVAILABLE 1 499 #if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(_MSC_VER) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__)) 500 #define CRYPTOPP_SSE2_ASM_AVAILABLE 1 503 #if !defined(CRYPTOPP_DISABLE_SSSE3) && (_MSC_VER >= 1500 || CRYPTOPP_GCC_VERSION >= 40300 || defined(__SSSE3__)) 504 #define CRYPTOPP_SSSE3_ASM_AVAILABLE 1 508 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(_MSC_VER) && defined(_M_X64) 509 #define CRYPTOPP_X64_MASM_AVAILABLE 1 512 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(__GNUC__) && defined(__x86_64__) 513 #define CRYPTOPP_X64_ASM_AVAILABLE 1 517 #if !defined(CRYPTOPP_DISABLE_ASM) && (defined(_MSC_VER) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__) || (__SUNPRO_CC >= 0x5100)) 518 #define CRYPTOPP_SSE2_INTRIN_AVAILABLE 1 521 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_SSSE3) 522 # if defined(__SSSE3__) || (_MSC_VER >= 1500) || \ 523 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \ 524 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) 525 #define CRYPTOPP_SSSE3_AVAILABLE 1 532 #if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \ 533 (defined(__SSE4_1__) || (CRYPTOPP_MSC_VERSION >= 1500) || \ 534 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \ 535 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000)) 536 #define CRYPTOPP_SSE41_AVAILABLE 1 539 #if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \ 540 (defined(__SSE4_2__) || (CRYPTOPP_MSC_VERSION >= 1500) || (__SUNPRO_CC >= 0x5110) || \ 541 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || \ 542 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000)) 543 #define CRYPTOPP_SSE42_AVAILABLE 1 548 #if defined(CRYPTOPP_DISABLE_AESNI) 549 #define CRYPTOPP_DISABLE_CLMUL 1 553 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_CLMUL) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 554 (defined(__PCLMUL__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \ 555 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \ 556 (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) 557 #define CRYPTOPP_CLMUL_AVAILABLE 1 561 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_AESNI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 562 (defined(__AES__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \ 563 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \ 564 (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) 565 #define CRYPTOPP_AESNI_AVAILABLE 1 569 #if !defined(CRYPTOPP_DISABLE_AVX) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 570 (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \ 571 (CRYPTOPP_GCC_VERSION >= 40700) || (__INTEL_COMPILER >= 1400) || \ 572 (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600)) 573 #define CRYPTOPP_AVX_AVAILABLE 1 577 #if !defined(CRYPTOPP_DISABLE_AVX2) && defined(CRYPTOPP_AVX_AVAILABLE) && \ 578 (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \ 579 (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1400) || \ 580 (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600)) 581 #define CRYPTOPP_AVX2_AVAILABLE 1 586 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_SHANI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 587 (defined(__SHA__) || (CRYPTOPP_MSC_VERSION >= 1900) || (__SUNPRO_CC >= 0x5160) || \ 588 (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1300) || \ 589 (CRYPTOPP_LLVM_CLANG_VERSION >= 30400) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50100)) 590 #define CRYPTOPP_SHANI_AVAILABLE 1 594 #if (defined(__ANDROID__) || defined(ANDROID)) 595 # if (CRYPTOPP_BOOL_X86) 596 # undef CRYPTOPP_SSE41_AVAILABLE 597 # undef CRYPTOPP_SSE42_AVAILABLE 598 # undef CRYPTOPP_CLMUL_AVAILABLE 599 # undef CRYPTOPP_AESNI_AVAILABLE 600 # undef CRYPTOPP_SHANI_AVAILABLE 602 # if (CRYPTOPP_BOOL_X64) 603 # undef CRYPTOPP_CLMUL_AVAILABLE 604 # undef CRYPTOPP_AESNI_AVAILABLE 605 # undef CRYPTOPP_SHANI_AVAILABLE 610 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5130) 611 # undef CRYPTOPP_AESNI_AVAILABLE 616 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5150) 617 # undef CRYPTOPP_CLMUL_AVAILABLE 620 #endif // X86, X32, X64 624 #if (CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8) 628 #if (CRYPTOPP_BIG_ENDIAN) 629 # define CRYPTOPP_DISABLE_ASM 1 635 #if !defined(CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 636 # if defined(__arm__) || defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(_M_ARM) 637 # if (CRYPTOPP_GCC_VERSION >= 40300) || (CRYPTOPP_CLANG_VERSION >= 20800) || \ 638 (CRYPTOPP_MSC_VERSION >= 1700) 639 # define CRYPTOPP_ARM_NEON_AVAILABLE 1 647 #if !defined(CRYPTOPP_ARM_ASIMD_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 648 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 649 # if defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(__ARM_FEATURE_ASIMD) || \ 650 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 30300) || \ 651 (CRYPTOPP_MSC_VERSION >= 1916) 652 # define CRYPTOPP_ARM_NEON_AVAILABLE 1 653 # define CRYPTOPP_ARM_ASIMD_AVAILABLE 1 661 #if !defined(CRYPTOPP_ARM_CRC32_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 662 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 663 # if defined(__ARM_FEATURE_CRC32) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 664 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) 665 # define CRYPTOPP_ARM_CRC32_AVAILABLE 1 673 #if !defined(CRYPTOPP_ARM_PMULL_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 674 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 675 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 676 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) 677 # define CRYPTOPP_ARM_PMULL_AVAILABLE 1 685 #if !defined(CRYPTOPP_ARM_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 686 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 687 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 688 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1910) 689 # define CRYPTOPP_ARM_AES_AVAILABLE 1 697 #if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 698 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 699 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 700 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) 701 # define CRYPTOPP_ARM_SHA1_AVAILABLE 1 702 # define CRYPTOPP_ARM_SHA2_AVAILABLE 1 710 #if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 711 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 712 # if defined(__ARM_FEATURE_SHA3) || (CRYPTOPP_GCC_VERSION >= 80000) || \ 713 (CRYPTOPP_MSC_VERSION >= 5000) 714 # define CRYPTOPP_ARM_SHA512_AVAILABLE 1 715 # define CRYPTOPP_ARM_SHA3_AVAILABLE 1 723 #if !defined(CRYPTOPP_ARM_SM3_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 724 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 725 # if defined(__ARM_FEATURE_SM3) || (CRYPTOPP_GCC_VERSION >= 80000) || \ 726 (CRYPTOPP_MSC_VERSION >= 5000) 727 # define CRYPTOPP_ARM_SM3_AVAILABLE 1 728 # define CRYPTOPP_ARM_SM4_AVAILABLE 1 734 #if !defined(CRYPTOPP_ARM_ACLE_AVAILABLE) 735 # if defined(__aarch32__) || defined(__aarch64__) || (__ARM_ARCH >= 8) || defined(__ARM_ACLE) 736 # if !defined(__ANDROID__) && !defined(ANDROID) && !defined(__APPLE__) 737 # define CRYPTOPP_ARM_ACLE_AVAILABLE 1 744 #if defined(CRYPTOPP_APPLE_CLANG_VERSION) && (CRYPTOPP_APPLE_CLANG_VERSION < 70000) 745 # undef CRYPTOPP_ARM_PMULL_AVAILABLE 749 #if (defined(__ANDROID__) || defined(ANDROID)) && !defined(__ARM_FEATURE_CRC32) 750 # undef CRYPTOPP_ARM_CRC32_AVAILABLE 754 #if (defined(__ANDROID__) || defined(ANDROID)) && !defined(__ARM_FEATURE_CRYPTO) 755 # undef CRYPTOPP_ARM_PMULL_AVAILABLE 756 # undef CRYPTOPP_ARM_AES_AVAILABLE 757 # undef CRYPTOPP_ARM_SHA1_AVAILABLE 758 # undef CRYPTOPP_ARM_SHA2_AVAILABLE 767 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(__arm__) 768 # if defined(__GNUC__) && !defined(__clang__) 769 # define CRYPTOGAMS_ARM_AES 1 773 #endif // ARM32, ARM64 777 #if (CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) 779 #if defined(CRYPTOPP_DISABLE_ALTIVEC) || defined(CRYPTOPP_DISABLE_ASM) 780 # undef CRYPTOPP_DISABLE_ALTIVEC 781 # undef CRYPTOPP_DISABLE_POWER7 782 # undef CRYPTOPP_DISABLE_POWER8 783 # undef CRYPTOPP_DISABLE_POWER9 784 # define CRYPTOPP_DISABLE_ALTIVEC 1 785 # define CRYPTOPP_DISABLE_POWER7 1 786 # define CRYPTOPP_DISABLE_POWER8 1 787 # define CRYPTOPP_DISABLE_POWER9 1 791 #if !defined(CRYPTOPP_ALTIVEC_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ALTIVEC) 792 # if defined(_ARCH_PWR4) || defined(__ALTIVEC__) || \ 793 (CRYPTOPP_XLC_VERSION >= 100000) || (CRYPTOPP_GCC_VERSION >= 40001) || \ 794 (CRYPTOPP_CLANG_VERSION >= 20900) 795 # define CRYPTOPP_ALTIVEC_AVAILABLE 1 800 #if !defined(CRYPTOPP_POWER7_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER7) && defined(CRYPTOPP_ALTIVEC_AVAILABLE) 801 # if defined(_ARCH_PWR7) || (CRYPTOPP_XLC_VERSION >= 100000) || \ 802 (CRYPTOPP_GCC_VERSION >= 40100) || (CRYPTOPP_CLANG_VERSION >= 30100) 803 # define CRYPTOPP_POWER7_AVAILABLE 1 808 #if !defined(CRYPTOPP_POWER8_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8) && defined(CRYPTOPP_POWER7_AVAILABLE) 809 # if defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \ 810 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 70000) 811 # define CRYPTOPP_POWER8_AVAILABLE 1 816 #if !defined(CRYPTOPP_POWER9_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER9) && defined(CRYPTOPP_POWER8_AVAILABLE) 817 # if defined(_ARCH_PWR9) || (CRYPTOPP_XLC_VERSION >= 130200) || \ 818 (CRYPTOPP_GCC_VERSION >= 70000) || (CRYPTOPP_CLANG_VERSION >= 80000) 819 # define CRYPTOPP_POWER9_AVAILABLE 1 823 #if !defined(CRYPTOPP_POWER8_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8_AES) && defined(CRYPTOPP_POWER8_AVAILABLE) 824 # if defined(__CRYPTO__) || defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \ 825 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 70000) 827 # define CRYPTOPP_POWER8_AES_AVAILABLE 1 828 # define CRYPTOPP_POWER8_VMULL_AVAILABLE 1 829 # define CRYPTOPP_POWER8_SHA_AVAILABLE 1 833 #endif // PPC32, PPC64 838 #if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) && !defined(CRYPTOPP_DISABLE_ASM) 839 #define CRYPTOPP_BOOL_ALIGN16 1 841 #define CRYPTOPP_BOOL_ALIGN16 0 846 #if defined(_MSC_VER) 847 #define CRYPTOPP_MM_MALLOC_AVAILABLE 848 #elif defined(__linux__) || defined(__sun__) || defined(__CYGWIN__) 849 #define CRYPTOPP_MEMALIGN_AVAILABLE 850 #elif defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) 851 #define CRYPTOPP_MALLOC_ALIGNMENT_IS_16 852 #elif (defined(_GNU_SOURCE) || ((_XOPEN_SOURCE + 0) >= 600)) && (_POSIX_ADVISORY_INFO > 0) 853 #define CRYPTOPP_POSIX_MEMALIGN_AVAILABLE 855 #define CRYPTOPP_NO_ALIGNED_ALLOC 859 #if defined(_MSC_VER) 860 # define CRYPTOPP_NOINLINE_DOTDOTDOT 861 # define CRYPTOPP_NOINLINE __declspec(noinline) 862 #elif defined(__xlc__) || defined(__xlC__) || defined(__ibmxl__) 863 # define CRYPTOPP_NOINLINE_DOTDOTDOT ... 864 # define CRYPTOPP_NOINLINE __attribute__((noinline)) 865 #elif defined(__GNUC__) 866 # define CRYPTOPP_NOINLINE_DOTDOTDOT 867 # define CRYPTOPP_NOINLINE __attribute__((noinline)) 869 # define CRYPTOPP_NOINLINE_DOTDOTDOT ... 870 # define CRYPTOPP_NOINLINE 874 #if defined(CRYPTOPP_DOXYGEN_PROCESSING) || defined(__BORLANDC__) 875 # define CRYPTOPP_CONSTANT(x) static const int x; 877 # define CRYPTOPP_CONSTANT(x) enum {x}; 888 #if defined(__APPLE__) 889 # define CRYPTOPP_NO_CPU_FEATURE_PROBES 1 901 #ifndef CRYPTOPP_INIT_PRIORITY 902 # define CRYPTOPP_INIT_PRIORITY 250 908 #ifndef CRYPTOPP_USER_PRIORITY 909 # define CRYPTOPP_USER_PRIORITY (CRYPTOPP_INIT_PRIORITY+101) 913 #if (CRYPTOPP_INIT_PRIORITY > 0) && !(defined(NO_OS_DEPENDENCE) || defined(__APPLE__) || defined(__sun__)) 914 # if (CRYPTOPP_GCC_VERSION >= 30000) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) || (_INTEL_COMPILER >= 800) 915 # define HAVE_GCC_INIT_PRIORITY 1 916 # elif (CRYPTOPP_MSC_VERSION >= 1310) 917 # define HAVE_MSC_INIT_PRIORITY 1 918 # elif defined(__xlc__) || defined(__xlC__) || defined(__ibmxl__) 919 # define HAVE_XLC_INIT_PRIORITY 1 921 #endif // CRYPTOPP_INIT_PRIORITY, NO_OS_DEPENDENCE, Apple, Sun 925 #ifndef NO_OS_DEPENDENCE 927 #if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) 928 #define CRYPTOPP_WIN32_AVAILABLE 931 #if defined(__unix__) || defined(__MACH__) || defined(__NetBSD__) || defined(__sun) 932 #define CRYPTOPP_UNIX_AVAILABLE 935 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) 936 #define CRYPTOPP_BSD_AVAILABLE 939 #if defined(CRYPTOPP_WIN32_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE) 940 # define HIGHRES_TIMER_AVAILABLE 943 #ifdef CRYPTOPP_WIN32_AVAILABLE 944 # if !defined(WINAPI_FAMILY) 945 # define THREAD_TIMER_AVAILABLE 946 # elif defined(WINAPI_FAMILY) 947 # if (WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) 948 # define THREAD_TIMER_AVAILABLE 953 #if defined(CRYPTOPP_UNIX_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) 954 # define NONBLOCKING_RNG_AVAILABLE 955 # define BLOCKING_RNG_AVAILABLE 956 # define OS_RNG_AVAILABLE 960 #if defined(CRYPTOPP_UNIX_AVAILABLE) 961 # define UNIX_SIGNALS_AVAILABLE 1 964 #ifdef CRYPTOPP_WIN32_AVAILABLE 965 # if !defined(WINAPI_FAMILY) 966 # define NONBLOCKING_RNG_AVAILABLE 967 # define OS_RNG_AVAILABLE 968 # elif defined(WINAPI_FAMILY) 969 # if (WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) 970 # define NONBLOCKING_RNG_AVAILABLE 971 # define OS_RNG_AVAILABLE 972 # elif !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) 973 # if ((WINVER >= 0x0A00 ) || (_WIN32_WINNT >= 0x0A00 )) 974 # define NONBLOCKING_RNG_AVAILABLE 975 # define OS_RNG_AVAILABLE 981 #endif // NO_OS_DEPENDENCE 985 #if defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) 987 #ifdef CRYPTOPP_EXPORTS 988 #define CRYPTOPP_IS_DLL 989 #define CRYPTOPP_DLL __declspec(dllexport) 990 #elif defined(CRYPTOPP_IMPORTS) 991 #define CRYPTOPP_IS_DLL 992 #define CRYPTOPP_DLL __declspec(dllimport) 998 #define CRYPTOPP_TABLE extern 999 #define CRYPTOPP_API __cdecl 1001 #else // not CRYPTOPP_WIN32_AVAILABLE 1004 #define CRYPTOPP_TABLE extern 1005 #define CRYPTOPP_DLL 1006 #define CRYPTOPP_API 1008 #endif // CRYPTOPP_WIN32_AVAILABLE 1010 #if defined(__MWERKS__) 1011 #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern class CRYPTOPP_DLL 1012 #elif defined(__BORLANDC__) || defined(__SUNPRO_CC) 1013 #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL 1015 #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern template class CRYPTOPP_DLL 1018 #if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_IMPORTS) 1019 #define CRYPTOPP_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL 1021 #define CRYPTOPP_DLL_TEMPLATE_CLASS CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS 1024 #if defined(__MWERKS__) 1025 #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern class 1026 #elif defined(__BORLANDC__) || defined(__SUNPRO_CC) 1027 #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS template class 1029 #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern template class 1032 #if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_EXPORTS) 1033 #define CRYPTOPP_STATIC_TEMPLATE_CLASS template class 1035 #define CRYPTOPP_STATIC_TEMPLATE_CLASS CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS 1042 #define CRYPTOPP_UNUSED(x) ((void)(x)) 1046 #if (CRYPTOPP_GCC_VERSION >= 40500) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20800) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40200) 1047 # define CRYPTOPP_DEPRECATED(msg) __attribute__((deprecated (msg))) 1048 #elif (CRYPTOPP_GCC_VERSION) 1049 # define CRYPTOPP_DEPRECATED(msg) __attribute__((deprecated)) 1051 # define CRYPTOPP_DEPRECATED(msg) 1063 #ifndef __has_feature 1064 # define __has_feature(x) 0 1067 #if !defined(CRYPTOPP_NO_CXX11) 1068 # if ((_MSC_VER >= 1600) || (__cplusplus >= 201103L)) && !defined(_STLPORT_VERSION) 1069 # define CRYPTOPP_CXX11 1 1078 #if defined(__APPLE__) && defined(__clang__) 1079 # if !(defined(__has_include) && __has_include(<forward_list>)) 1080 # undef CRYPTOPP_CXX11 1085 #if defined(CRYPTOPP_CXX11) 1088 #if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_atomic) || \ 1089 (__INTEL_COMPILER >= 1300) || (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5140) 1090 # define CRYPTOPP_CXX11_ATOMICS 1 1095 #if (CRYPTOPP_MSC_VERSION >= 1700) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || \ 1096 (CRYPTOPP_APPLE_CLANG_VERSION >= 50000) || (__INTEL_COMPILER >= 1200) || \ 1097 (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5130) 1104 # if !defined(__GLIBCXX__) || defined(_GLIBCXX_HAS_GTHREADS) 1105 # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 1107 #endif // synchronization 1113 #if (CRYPTOPP_MSC_VERSION >= 1900) && ((WINVER >= 0x0600) || (_WIN32_WINNT >= 0x0600)) || \ 1114 (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) || \ 1115 (__INTEL_COMPILER >= 1110) || (CRYPTOPP_GCC_VERSION >= 40300) || (__SUNPRO_CC >= 0x5130) 1116 # define CRYPTOPP_CXX11_DYNAMIC_INIT 1 1117 #endif // Dynamic Initialization compilers 1120 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_alignas) || \ 1121 (__INTEL_COMPILER >= 1500) || (CRYPTOPP_GCC_VERSION >= 40800) || (__SUNPRO_CC >= 0x5130) 1122 # define CRYPTOPP_CXX11_ALIGNAS 1 1126 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_alignof) || \ 1127 (__INTEL_COMPILER >= 1500) || (CRYPTOPP_GCC_VERSION >= 40500) || (__SUNPRO_CC >= 0x5130) 1128 # define CRYPTOPP_CXX11_ALIGNOF 1 1132 #if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_lambdas) || \ 1133 (__INTEL_COMPILER >= 1200) || (CRYPTOPP_GCC_VERSION >= 40900) || (__SUNPRO_CC >= 0x5140) 1134 # define CRYPTOPP_CXX11_LAMBDA 1 1138 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_noexcept) || \ 1139 (__INTEL_COMPILER >= 1400) || (CRYPTOPP_GCC_VERSION >= 40600) || (__SUNPRO_CC >= 0x5130) 1140 # define CRYPTOPP_CXX11_NOEXCEPT 1 1141 #endif // noexcept compilers 1144 #if (CRYPTOPP_MSC_VERSION >= 1800) || __has_feature(cxx_variadic_templates) || \ 1145 (__INTEL_COMPILER >= 1210) || (CRYPTOPP_GCC_VERSION >= 40300) || (__SUNPRO_CC >= 0x5130) 1146 # define CRYPTOPP_CXX11_VARIADIC_TEMPLATES 1 1147 #endif // variadic templates 1151 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_constexpr) || \ 1152 (__INTEL_COMPILER >= 1600) || (CRYPTOPP_GCC_VERSION >= 40600) || (__SUNPRO_CC >= 0x5130) 1153 # define CRYPTOPP_CXX11_CONSTEXPR 1 1154 #endif // constexpr compilers 1158 #if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_strong_enums) || \ 1159 (__INTEL_COMPILER >= 1400) || (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5120) 1160 # define CRYPTOPP_CXX11_ENUM 1 1161 #endif // constexpr compilers 1164 #if (CRYPTOPP_MSC_VERSION >= 1600) || __has_feature(cxx_nullptr) || \ 1165 (__INTEL_COMPILER >= 1000) || (CRYPTOPP_GCC_VERSION >= 40600) || \ 1166 (__SUNPRO_CC >= 0x5130) || defined(__IBMCPP_NULLPTR) 1167 # define CRYPTOPP_CXX11_NULLPTR 1 1168 #endif // nullptr_t compilers 1170 #endif // CRYPTOPP_CXX11 1175 #if defined(CRYPTOPP_CXX11) && !defined(CRYPTOPP_NO_CXX17) 1176 # if ((_MSC_VER >= 1900) || (__cplusplus >= 201703L)) && !defined(_STLPORT_VERSION) 1177 # define CRYPTOPP_CXX17 1 1182 #if defined(CRYPTOPP_CXX17) 1186 #if defined(__clang__) 1187 # if __EXCEPTIONS && __has_feature(cxx_exceptions) 1188 # if __cpp_lib_uncaught_exceptions 1189 # define CRYPTOPP_CXX17_EXCEPTIONS 1 1192 #elif (CRYPTOPP_MSC_VERSION >= 1900) || (__INTEL_COMPILER >= 1800) || (CRYPTOPP_GCC_VERSION >= 60000) || (__cpp_lib_uncaught_exceptions) 1193 # define CRYPTOPP_CXX17_EXCEPTIONS 1 1194 #endif // uncaught_exceptions compilers 1196 #endif // CRYPTOPP_CXX17 1200 #if defined(CRYPTOPP_CXX11_NOEXCEPT) 1201 # define CRYPTOPP_THROW noexcept(false) 1202 # define CRYPTOPP_NO_THROW noexcept(true) 1204 # define CRYPTOPP_THROW 1205 # define CRYPTOPP_NO_THROW 1206 #endif // CRYPTOPP_CXX11_NOEXCEPT 1209 #if defined(CRYPTOPP_CXX11_CONSTEXPR) 1210 # define CRYPTOPP_STATIC_CONSTEXPR static constexpr 1211 # define CRYPTOPP_CONSTEXPR constexpr 1213 # define CRYPTOPP_STATIC_CONSTEXPR static 1214 # define CRYPTOPP_CONSTEXPR 1215 #endif // CRYPTOPP_CXX11_CONSTEXPR 1218 #if defined(CRYPTOPP_CXX11_ALIGNAS) 1219 # undef CRYPTOPP_ALIGN_DATA 1220 # define CRYPTOPP_ALIGN_DATA(x) alignas(x) 1221 #endif // CRYPTOPP_CXX11_ALIGNAS 1232 #if defined(CRYPTOPP_CXX11_ENUM) 1233 # undef CRYPTOPP_CONSTANT 1234 # define CRYPTOPP_CONSTANT(x) enum : int { x }; 1235 #elif defined(CRYPTOPP_CXX11_CONSTEXPR) 1236 # undef CRYPTOPP_CONSTANT 1237 # define CRYPTOPP_CONSTANT(x) constexpr static int x; 1241 #if defined(CRYPTOPP_CXX11_NULLPTR) && !defined(NULLPTR) 1242 # define NULLPTR nullptr 1243 #elif !defined(NULLPTR) 1244 # define NULLPTR NULL 1245 #endif // CRYPTOPP_CXX11_NULLPTR 1249 #if (defined(__cplusplus) && (__cplusplus >= 199711L) && (__cplusplus < 201402L)) && !defined(CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE) 1250 # error "std::uncaught_exception is not available. This is likely a configuration error." 1253 #endif // CRYPTOPP_CONFIG_H Crypto++ library namespace.