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 88 #if defined(CRYPTOPP_BUGGY_SIMD_LOAD_AND_STORE) 89 # define CRYPTOPP_DISABLE_LEA_SIMD 1 90 # define CRYPTOPP_DISABLE_SIMON_SIMD 1 91 # define CRYPTOPP_DISABLE_SPECK_SIMD 1 92 # define CRYPTOPP_DISABLE_SM4_SIMD 1 119 #define CRYPTOPP_VERSION 800 126 #ifndef CRYPTOPP_DATA_DIR 127 # define CRYPTOPP_DATA_DIR "" 147 #if !defined(GZIP_OS_CODE) 148 # if defined(__macintosh__) 149 # define GZIP_OS_CODE 7 150 # elif defined(__unix__) || defined(__linux__) 151 # define GZIP_OS_CODE 3 153 # define GZIP_OS_CODE 0 178 #define CRYPTOPP_SLOW_ARMV8_SHIFT 1 188 #define CRYPTOPP_RIJNDAEL_NAME "AES" 196 #if (defined(DEBUG) || defined(_DEBUG)) && !defined(CRYPTOPP_DEBUG) 197 # define CRYPTOPP_DEBUG 1 205 # error namespace support is now required 208 #ifdef CRYPTOPP_DOXYGEN_PROCESSING 223 # define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 227 # define NAMESPACE_BEGIN(x) 228 # define NAMESPACE_END 230 # define DOCUMENTED_TYPEDEF(x, y) class y : public x {}; 232 # define protected private 234 # define NAMESPACE_BEGIN(x) namespace x { 235 # define NAMESPACE_END } 236 # define DOCUMENTED_TYPEDEF(x, y) typedef x y; 238 #define ANONYMOUS_NAMESPACE_BEGIN namespace { 239 #define ANONYMOUS_NAMESPACE_END } 240 #define USING_NAMESPACE(x) using namespace x; 241 #define DOCUMENTED_NAMESPACE_BEGIN(x) namespace x { 242 #define DOCUMENTED_NAMESPACE_END } 248 #define CRYPTOPP_NO_GLOBAL_BYTE 1 255 typedef unsigned char byte;
256 typedef unsigned short word16;
257 typedef unsigned int word32;
259 typedef signed char sbyte;
260 typedef signed short sword16;
261 typedef signed int sword32;
263 #if defined(_MSC_VER) || defined(__BORLANDC__) 264 typedef signed __int64 sword64;
265 typedef unsigned __int64 word64;
266 #define SW64LIT(x) x##i64 267 #define W64LIT(x) x##ui64 268 #elif (_LP64 || __LP64__) 269 typedef signed long sword64;
270 typedef unsigned long word64;
271 #define SW64LIT(x) x##L 272 #define W64LIT(x) x##UL 274 typedef signed long long sword64;
275 typedef unsigned long long word64;
276 #define SW64LIT(x) x##LL 277 #define W64LIT(x) x##ULL 281 typedef word64 lword;
282 const lword LWORD_MAX = W64LIT(0xffffffffffffffff);
290 #if (defined(_MSC_VER) && defined(__clang__)) 291 # error: "Unsupported configuration" 295 #define CRYPTOPP_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) 298 #if defined(__xlc__) || defined(__xlC__) 299 #define CRYPTOPP_XLC_VERSION ((__xlC__ / 256) * 10000 + (__xlC__ % 256) * 100) 303 #if defined(__clang__) && defined(__apple_build_version__) 304 #define CRYPTOPP_APPLE_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) 305 #elif defined(__clang__) 306 #define CRYPTOPP_LLVM_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) 310 #define CRYPTOPP_MSC_VERSION (_MSC_VER) 314 #if (CRYPTOPP_GCC_VERSION >= 40600) || (CRYPTOPP_LLVM_CLANG_VERSION >= 10700) || (CRYPTOPP_APPLE_CLANG_VERSION >= 20000) 315 #define CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE 1 320 #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__)) 321 typedef word32 hword;
324 #define CRYPTOPP_NATIVE_DWORD_AVAILABLE 1 325 #if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || defined(__x86_64__) || defined(__mips64) || defined(__sparc64__) 326 #if ((CRYPTOPP_GCC_VERSION >= 30400) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30000) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) && (__SIZEOF_INT128__ >= 16) 330 typedef word32 hword;
332 typedef __uint128_t dword;
333 typedef __uint128_t word128;
334 #define CRYPTOPP_WORD128_AVAILABLE 1 337 typedef word16 hword;
339 typedef word64 dword;
343 #define CRYPTOPP_BOOL_SLOW_WORD64 1 344 typedef word16 hword;
346 typedef word64 dword;
349 #ifndef CRYPTOPP_BOOL_SLOW_WORD64 350 #define CRYPTOPP_BOOL_SLOW_WORD64 0 353 const unsigned int WORD_SIZE =
sizeof(word);
354 const unsigned int WORD_BITS = WORD_SIZE * 8;
358 #ifndef CRYPTOPP_L1_CACHE_LINE_SIZE 361 #if defined(_M_X64) || defined(__x86_64__) || defined(__arm64__) || defined(__aarch64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) 362 #define CRYPTOPP_L1_CACHE_LINE_SIZE 64 365 #define CRYPTOPP_L1_CACHE_LINE_SIZE 32 373 #ifndef CRYPTOPP_ALIGN_DATA 374 #if defined(_MSC_VER) 375 #define CRYPTOPP_ALIGN_DATA(x) __declspec(align(x)) 376 #elif defined(__GNUC__) || (__SUNPRO_CC >= 0x5100) 377 #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x))) 378 #elif defined(__xlc__) || defined(__xlC__) 379 #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x))) 381 #define CRYPTOPP_ALIGN_DATA(x) 386 #if ((defined(__MACH__) && defined(__APPLE__)) && ((CRYPTOPP_LLVM_CLANG_VERSION >= 30600) || (CRYPTOPP_APPLE_CLANG_VERSION >= 70100) || (CRYPTOPP_GCC_VERSION >= 40300))) 387 #define CRYPTOPP_SECTION_INIT __attribute__((section ("__DATA,__data"))) 388 #elif (defined(__ELF__) && (CRYPTOPP_GCC_VERSION >= 40300)) 389 #define CRYPTOPP_SECTION_INIT __attribute__((section ("nocommon"))) 390 #elif defined(__ELF__) && (defined(__xlC__) || defined(__ibmxl__)) 391 #define CRYPTOPP_SECTION_INIT __attribute__((section ("nocommon"))) 393 #define CRYPTOPP_SECTION_INIT 396 #if defined(_MSC_VER) || defined(__fastcall) 397 #define CRYPTOPP_FASTCALL __fastcall 399 #define CRYPTOPP_FASTCALL 403 #define CRYPTOPP_NO_VTABLE __declspec(novtable) 405 #define CRYPTOPP_NO_VTABLE 413 # pragma warning(disable: 4127 4512 4661 4910) 416 # pragma warning(once: 4191 4242 4263 4264 4266 4302 4826 4905 4906 4928) 425 #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE 426 # pragma GCC diagnostic ignored "-Wunknown-pragmas" 427 # pragma GCC diagnostic ignored "-Wunused-function" 433 #if (defined(_MSC_VER) && _MSC_VER <= 1300) || defined(__MWERKS__) || (defined(_STLPORT_VERSION) && ((_STLPORT_VERSION < 0x450) || defined(_STLP_NO_UNCAUGHT_EXCEPT_SUPPORT))) 434 #define CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION 437 #ifndef CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION 438 #define CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE 448 #if (defined(__ILP32__) || defined(_ILP32)) && defined(__x86_64__) 449 #define CRYPTOPP_BOOL_X32 1 453 #if (defined(_M_IX86) || defined(__i386__) || defined(__i386) || defined(_X86_) || defined(__I86__) || defined(__INTEL__)) && !CRYPTOPP_BOOL_X32 454 #define CRYPTOPP_BOOL_X86 1 457 #if (defined(_M_X64) || defined(__x86_64__)) && !CRYPTOPP_BOOL_X32 458 #define CRYPTOPP_BOOL_X64 1 462 #if CRYPTOPP_BOOL_X32 463 # undef CRYPTOPP_BOOL_X64 464 # undef CRYPTOPP_X64_ASM_AVAILABLE 465 # undef CRYPTOPP_X64_MASM_AVAILABLE 469 #if defined(__arm64__) || defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 470 #define CRYPTOPP_BOOL_ARMV8 1 471 #elif defined(__arm__) || defined(_M_ARM) 472 #define CRYPTOPP_BOOL_ARM32 1 476 #if defined(__ppc64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) 477 #define CRYPTOPP_BOOL_PPC64 1 478 #elif defined(__powerpc__) || defined(_ARCH_PPC) 479 #define CRYPTOPP_BOOL_PPC32 1 483 #if defined(__mips64__) 484 #define CRYPTOPP_BOOL_MIPS64 1 485 #elif defined(__mips__) 486 #define CRYPTOPP_BOOL_MIPS32 1 489 #if defined(_MSC_VER) || defined(__BORLANDC__) 490 # define CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY 1 492 # define CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY 1 497 #if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) 500 #if defined(CRYPTOPP_APPLE_CLANG_VERSION) && (CRYPTOPP_APPLE_CLANG_VERSION < 50000) 501 # define CRYPTOPP_DISABLE_ASM 1 506 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x5100) 507 # define CRYPTOPP_DISABLE_ASM 1 510 #if !defined(CRYPTOPP_DISABLE_ASM) && ((defined(_MSC_VER) && defined(_M_IX86)) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))) 512 #define CRYPTOPP_X86_ASM_AVAILABLE 1 514 #if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(_MSC_VER) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__)) 515 #define CRYPTOPP_SSE2_ASM_AVAILABLE 1 518 #if !defined(CRYPTOPP_DISABLE_SSSE3) && (_MSC_VER >= 1500 || CRYPTOPP_GCC_VERSION >= 40300 || defined(__SSSE3__)) 519 #define CRYPTOPP_SSSE3_ASM_AVAILABLE 1 523 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(_MSC_VER) && defined(_M_X64) 524 #define CRYPTOPP_X64_MASM_AVAILABLE 1 527 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(__GNUC__) && defined(__x86_64__) 528 #define CRYPTOPP_X64_ASM_AVAILABLE 1 532 #if !defined(CRYPTOPP_DISABLE_ASM) && (defined(_MSC_VER) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__) || (__SUNPRO_CC >= 0x5100)) 533 #define CRYPTOPP_SSE2_INTRIN_AVAILABLE 1 536 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_SSSE3) 537 # if defined(__SSSE3__) || (_MSC_VER >= 1500) || \ 538 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \ 539 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) 540 #define CRYPTOPP_SSSE3_AVAILABLE 1 547 #if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \ 548 (defined(__SSE4_1__) || (CRYPTOPP_MSC_VERSION >= 1500) || \ 549 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \ 550 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000)) 551 #define CRYPTOPP_SSE41_AVAILABLE 1 554 #if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \ 555 (defined(__SSE4_2__) || (CRYPTOPP_MSC_VERSION >= 1500) || (__SUNPRO_CC >= 0x5110) || \ 556 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || \ 557 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000)) 558 #define CRYPTOPP_SSE42_AVAILABLE 1 563 #if defined(CRYPTOPP_DISABLE_AESNI) 564 #define CRYPTOPP_DISABLE_CLMUL 1 568 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_CLMUL) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 569 (defined(__PCLMUL__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \ 570 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \ 571 (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) 572 #define CRYPTOPP_CLMUL_AVAILABLE 1 576 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_AESNI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 577 (defined(__AES__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \ 578 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \ 579 (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) 580 #define CRYPTOPP_AESNI_AVAILABLE 1 584 #if !defined(CRYPTOPP_DISABLE_AVX) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 585 (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \ 586 (CRYPTOPP_GCC_VERSION >= 40700) || (__INTEL_COMPILER >= 1400) || \ 587 (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600)) 588 #define CRYPTOPP_AVX_AVAILABLE 1 592 #if !defined(CRYPTOPP_DISABLE_AVX2) && defined(CRYPTOPP_AVX_AVAILABLE) && \ 593 (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \ 594 (CRYPTOPP_GCC_VERSION >= 40700) || (__INTEL_COMPILER >= 1400) || \ 595 (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600)) 596 #define CRYPTOPP_AVX2_AVAILABLE 1 601 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_SHANI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 602 (defined(__SHA__) || (CRYPTOPP_MSC_VERSION >= 1900) || (__SUNPRO_CC >= 0x5160) || \ 603 (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1300) || \ 604 (CRYPTOPP_LLVM_CLANG_VERSION >= 30400) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50100)) 605 #define CRYPTOPP_SHANI_AVAILABLE 1 609 #if (defined(__ANDROID__) || defined(ANDROID)) 610 # if (CRYPTOPP_BOOL_X86) 611 # undef CRYPTOPP_SSE41_AVAILABLE 612 # undef CRYPTOPP_SSE42_AVAILABLE 613 # undef CRYPTOPP_CLMUL_AVAILABLE 614 # undef CRYPTOPP_AESNI_AVAILABLE 615 # undef CRYPTOPP_SHANI_AVAILABLE 617 # if (CRYPTOPP_BOOL_X64) 618 # undef CRYPTOPP_CLMUL_AVAILABLE 619 # undef CRYPTOPP_AESNI_AVAILABLE 620 # undef CRYPTOPP_SHANI_AVAILABLE 625 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5130) 626 # undef CRYPTOPP_AESNI_AVAILABLE 631 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5150) 632 # undef CRYPTOPP_CLMUL_AVAILABLE 635 #endif // X86, X32, X64 639 #if (CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8) 643 #if (CRYPTOPP_BIG_ENDIAN) 644 # define CRYPTOPP_DISABLE_ASM 1 650 #if !defined(CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 651 # if defined(__arm__) || defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(_M_ARM) 652 # if (CRYPTOPP_GCC_VERSION >= 40300) || (CRYPTOPP_CLANG_VERSION >= 20800) || \ 653 (CRYPTOPP_MSC_VERSION >= 1700) 654 # define CRYPTOPP_ARM_NEON_AVAILABLE 1 662 #if !defined(CRYPTOPP_ARM_ASIMD_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 663 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 664 # if defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(__ARM_FEATURE_ASIMD) || \ 665 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 30300) || \ 666 (CRYPTOPP_MSC_VERSION >= 1916) 667 # define CRYPTOPP_ARM_NEON_AVAILABLE 1 668 # define CRYPTOPP_ARM_ASIMD_AVAILABLE 1 676 #if !defined(CRYPTOPP_ARM_CRC32_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 677 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 678 # if defined(__ARM_FEATURE_CRC32) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 679 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) 680 # define CRYPTOPP_ARM_CRC32_AVAILABLE 1 688 #if !defined(CRYPTOPP_ARM_PMULL_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 689 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 690 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 691 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) 692 # define CRYPTOPP_ARM_PMULL_AVAILABLE 1 700 #if !defined(CRYPTOPP_ARM_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 701 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 702 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 703 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1910) 704 # define CRYPTOPP_ARM_AES_AVAILABLE 1 712 #if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 713 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 714 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 715 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) 716 # define CRYPTOPP_ARM_SHA1_AVAILABLE 1 717 # define CRYPTOPP_ARM_SHA2_AVAILABLE 1 725 #if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 726 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 727 # if defined(__ARM_FEATURE_SHA3) || (CRYPTOPP_GCC_VERSION >= 80000) || \ 728 (CRYPTOPP_MSC_VERSION >= 5000) 729 # define CRYPTOPP_ARM_SHA512_AVAILABLE 1 730 # define CRYPTOPP_ARM_SHA3_AVAILABLE 1 738 #if !defined(CRYPTOPP_ARM_SM3_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 739 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 740 # if defined(__ARM_FEATURE_SM3) || (CRYPTOPP_GCC_VERSION >= 80000) || \ 741 (CRYPTOPP_MSC_VERSION >= 5000) 742 # define CRYPTOPP_ARM_SM3_AVAILABLE 1 743 # define CRYPTOPP_ARM_SM4_AVAILABLE 1 749 #if !defined(CRYPTOPP_ARM_ACLE_AVAILABLE) 750 # if defined(__aarch32__) || defined(__aarch64__) || (__ARM_ARCH >= 8) || defined(__ARM_ACLE) 751 # if !defined(__ANDROID__) && !defined(ANDROID) && !defined(__APPLE__) 752 # define CRYPTOPP_ARM_ACLE_AVAILABLE 1 759 #if defined(CRYPTOPP_APPLE_CLANG_VERSION) && (CRYPTOPP_APPLE_CLANG_VERSION < 70000) 760 # undef CRYPTOPP_ARM_PMULL_AVAILABLE 764 #if (defined(__ANDROID__) || defined(ANDROID)) && !defined(__ARM_FEATURE_CRC32) 765 # undef CRYPTOPP_ARM_CRC32_AVAILABLE 769 #if (defined(__ANDROID__) || defined(ANDROID)) && !defined(__ARM_FEATURE_CRYPTO) 770 # undef CRYPTOPP_ARM_PMULL_AVAILABLE 771 # undef CRYPTOPP_ARM_AES_AVAILABLE 772 # undef CRYPTOPP_ARM_SHA1_AVAILABLE 773 # undef CRYPTOPP_ARM_SHA2_AVAILABLE 782 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(__arm__) 783 # if defined(__GNUC__) && !defined(__clang__) 784 # define CRYPTOGAMS_ARM_AES 1 788 #endif // ARM32, ARM64 792 #if (CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) 794 #if defined(CRYPTOPP_DISABLE_ALTIVEC) || defined(CRYPTOPP_DISABLE_ASM) 795 # undef CRYPTOPP_DISABLE_ALTIVEC 796 # undef CRYPTOPP_DISABLE_POWER7 797 # undef CRYPTOPP_DISABLE_POWER8 798 # undef CRYPTOPP_DISABLE_POWER9 799 # define CRYPTOPP_DISABLE_ALTIVEC 1 800 # define CRYPTOPP_DISABLE_POWER7 1 801 # define CRYPTOPP_DISABLE_POWER8 1 802 # define CRYPTOPP_DISABLE_POWER9 1 806 #if !defined(CRYPTOPP_ALTIVEC_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ALTIVEC) 807 # if defined(_ARCH_PWR4) || defined(__ALTIVEC__) || \ 808 (CRYPTOPP_XLC_VERSION >= 100000) || (CRYPTOPP_GCC_VERSION >= 40001) || \ 809 (CRYPTOPP_CLANG_VERSION >= 20900) 810 # define CRYPTOPP_ALTIVEC_AVAILABLE 1 815 #if !defined(CRYPTOPP_POWER7_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER7) && defined(CRYPTOPP_ALTIVEC_AVAILABLE) 816 # if defined(_ARCH_PWR7) || (CRYPTOPP_XLC_VERSION >= 100000) || \ 817 (CRYPTOPP_GCC_VERSION >= 40100) || (CRYPTOPP_CLANG_VERSION >= 30100) 818 # define CRYPTOPP_POWER7_AVAILABLE 1 823 #if !defined(CRYPTOPP_POWER8_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8) && defined(CRYPTOPP_POWER7_AVAILABLE) 824 # if defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \ 825 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 70000) 826 # define CRYPTOPP_POWER8_AVAILABLE 1 831 #if !defined(CRYPTOPP_POWER9_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER9) && defined(CRYPTOPP_POWER8_AVAILABLE) 832 # if defined(_ARCH_PWR9) || (CRYPTOPP_XLC_VERSION >= 130200) || \ 833 (CRYPTOPP_GCC_VERSION >= 70000) || (CRYPTOPP_CLANG_VERSION >= 80000) 834 # define CRYPTOPP_POWER9_AVAILABLE 1 838 #if !defined(CRYPTOPP_POWER8_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8_AES) && defined(CRYPTOPP_POWER8_AVAILABLE) 839 # if defined(__CRYPTO__) || defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \ 840 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 70000) 842 # define CRYPTOPP_POWER8_AES_AVAILABLE 1 843 # define CRYPTOPP_POWER8_VMULL_AVAILABLE 1 844 # define CRYPTOPP_POWER8_SHA_AVAILABLE 1 848 #endif // PPC32, PPC64 853 #if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) && !defined(CRYPTOPP_DISABLE_ASM) 854 #define CRYPTOPP_BOOL_ALIGN16 1 856 #define CRYPTOPP_BOOL_ALIGN16 0 861 #if defined(_MSC_VER) 862 #define CRYPTOPP_MM_MALLOC_AVAILABLE 863 #elif defined(__linux__) || defined(__sun__) || defined(__CYGWIN__) 864 #define CRYPTOPP_MEMALIGN_AVAILABLE 865 #elif defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) 866 #define CRYPTOPP_MALLOC_ALIGNMENT_IS_16 867 #elif (defined(_GNU_SOURCE) || ((_XOPEN_SOURCE + 0) >= 600)) && (_POSIX_ADVISORY_INFO > 0) 868 #define CRYPTOPP_POSIX_MEMALIGN_AVAILABLE 870 #define CRYPTOPP_NO_ALIGNED_ALLOC 874 #if defined(_MSC_VER) 875 # define CRYPTOPP_NOINLINE_DOTDOTDOT 876 # define CRYPTOPP_NOINLINE __declspec(noinline) 877 #elif defined(__xlc__) || defined(__xlC__) || defined(__ibmxl__) 878 # define CRYPTOPP_NOINLINE_DOTDOTDOT ... 879 # define CRYPTOPP_NOINLINE __attribute__((noinline)) 880 #elif defined(__GNUC__) 881 # define CRYPTOPP_NOINLINE_DOTDOTDOT 882 # define CRYPTOPP_NOINLINE __attribute__((noinline)) 884 # define CRYPTOPP_NOINLINE_DOTDOTDOT ... 885 # define CRYPTOPP_NOINLINE 889 #if defined(CRYPTOPP_DOXYGEN_PROCESSING) || defined(__BORLANDC__) 890 # define CRYPTOPP_CONSTANT(x) static const int x; 892 # define CRYPTOPP_CONSTANT(x) enum {x}; 903 #if defined(__APPLE__) 904 # define CRYPTOPP_NO_CPU_FEATURE_PROBES 1 916 #ifndef CRYPTOPP_INIT_PRIORITY 917 # define CRYPTOPP_INIT_PRIORITY 250 923 #ifndef CRYPTOPP_USER_PRIORITY 924 # define CRYPTOPP_USER_PRIORITY (CRYPTOPP_INIT_PRIORITY+101) 928 #if (CRYPTOPP_INIT_PRIORITY > 0) && !(defined(NO_OS_DEPENDENCE) || defined(__APPLE__) || defined(__sun__)) 929 # if (CRYPTOPP_GCC_VERSION >= 30000) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) || (_INTEL_COMPILER >= 800) 930 # define HAVE_GCC_INIT_PRIORITY 1 931 # elif (CRYPTOPP_MSC_VERSION >= 1310) 932 # define HAVE_MSC_INIT_PRIORITY 1 933 # elif defined(__xlc__) || defined(__xlC__) || defined(__ibmxl__) 934 # define HAVE_XLC_INIT_PRIORITY 1 936 #endif // CRYPTOPP_INIT_PRIORITY, NO_OS_DEPENDENCE, Apple, Sun 940 #ifndef NO_OS_DEPENDENCE 942 #if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) 943 #define CRYPTOPP_WIN32_AVAILABLE 946 #if defined(__unix__) || defined(__MACH__) || defined(__NetBSD__) || defined(__sun) 947 #define CRYPTOPP_UNIX_AVAILABLE 950 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) 951 #define CRYPTOPP_BSD_AVAILABLE 954 #if defined(CRYPTOPP_WIN32_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE) 955 # define HIGHRES_TIMER_AVAILABLE 958 #ifdef CRYPTOPP_WIN32_AVAILABLE 959 # if !defined(WINAPI_FAMILY) 960 # define THREAD_TIMER_AVAILABLE 961 # elif defined(WINAPI_FAMILY) 962 # if (WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) 963 # define THREAD_TIMER_AVAILABLE 968 #if defined(CRYPTOPP_UNIX_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) 969 # define NONBLOCKING_RNG_AVAILABLE 970 # define BLOCKING_RNG_AVAILABLE 971 # define OS_RNG_AVAILABLE 975 #if defined(CRYPTOPP_UNIX_AVAILABLE) 976 # define UNIX_SIGNALS_AVAILABLE 1 979 #ifdef CRYPTOPP_WIN32_AVAILABLE 980 # if !defined(WINAPI_FAMILY) 981 # define NONBLOCKING_RNG_AVAILABLE 982 # define OS_RNG_AVAILABLE 983 # elif defined(WINAPI_FAMILY) 984 # if (WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) 985 # define NONBLOCKING_RNG_AVAILABLE 986 # define OS_RNG_AVAILABLE 987 # elif !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) 988 # if ((WINVER >= 0x0A00 ) || (_WIN32_WINNT >= 0x0A00 )) 989 # define NONBLOCKING_RNG_AVAILABLE 990 # define OS_RNG_AVAILABLE 996 #endif // NO_OS_DEPENDENCE 1000 #if defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) 1002 #ifdef CRYPTOPP_EXPORTS 1003 #define CRYPTOPP_IS_DLL 1004 #define CRYPTOPP_DLL __declspec(dllexport) 1005 #elif defined(CRYPTOPP_IMPORTS) 1006 #define CRYPTOPP_IS_DLL 1007 #define CRYPTOPP_DLL __declspec(dllimport) 1009 #define CRYPTOPP_DLL 1013 #define CRYPTOPP_TABLE extern 1014 #define CRYPTOPP_API __cdecl 1016 #else // not CRYPTOPP_WIN32_AVAILABLE 1019 #define CRYPTOPP_TABLE extern 1020 #define CRYPTOPP_DLL 1021 #define CRYPTOPP_API 1023 #endif // CRYPTOPP_WIN32_AVAILABLE 1025 #if defined(__MWERKS__) 1026 #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern class CRYPTOPP_DLL 1027 #elif defined(__BORLANDC__) || defined(__SUNPRO_CC) 1028 #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL 1030 #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern template class CRYPTOPP_DLL 1033 #if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_IMPORTS) 1034 #define CRYPTOPP_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL 1036 #define CRYPTOPP_DLL_TEMPLATE_CLASS CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS 1039 #if defined(__MWERKS__) 1040 #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern class 1041 #elif defined(__BORLANDC__) || defined(__SUNPRO_CC) 1042 #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS template class 1044 #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern template class 1047 #if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_EXPORTS) 1048 #define CRYPTOPP_STATIC_TEMPLATE_CLASS template class 1050 #define CRYPTOPP_STATIC_TEMPLATE_CLASS CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS 1057 #define CRYPTOPP_UNUSED(x) ((void)(x)) 1061 #if (CRYPTOPP_GCC_VERSION >= 40500) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20800) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40200) 1062 # define CRYPTOPP_DEPRECATED(msg) __attribute__((deprecated (msg))) 1063 #elif (CRYPTOPP_GCC_VERSION) 1064 # define CRYPTOPP_DEPRECATED(msg) __attribute__((deprecated)) 1066 # define CRYPTOPP_DEPRECATED(msg) 1078 #ifndef __has_feature 1079 # define __has_feature(x) 0 1082 #if !defined(CRYPTOPP_NO_CXX11) 1083 # if ((_MSC_VER >= 1600) || (__cplusplus >= 201103L)) && !defined(_STLPORT_VERSION) 1084 # define CRYPTOPP_CXX11 1 1093 #if defined(__APPLE__) && defined(__clang__) 1094 # if !(defined(__has_include) && __has_include(<forward_list>)) 1095 # undef CRYPTOPP_CXX11 1100 #if defined(CRYPTOPP_CXX11) 1103 #if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_atomic) || \ 1104 (__INTEL_COMPILER >= 1300) || (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5140) 1105 # define CRYPTOPP_CXX11_ATOMICS 1 1110 #if (CRYPTOPP_MSC_VERSION >= 1700) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || \ 1111 (CRYPTOPP_APPLE_CLANG_VERSION >= 50000) || (__INTEL_COMPILER >= 1200) || \ 1112 (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5130) 1119 # if !defined(__GLIBCXX__) || defined(_GLIBCXX_HAS_GTHREADS) 1120 # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 1122 #endif // synchronization 1128 #if (CRYPTOPP_MSC_VERSION >= 1900) && ((WINVER >= 0x0600) || (_WIN32_WINNT >= 0x0600)) || \ 1129 (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) || \ 1130 (__INTEL_COMPILER >= 1110) || (CRYPTOPP_GCC_VERSION >= 40300) || (__SUNPRO_CC >= 0x5130) 1131 # define CRYPTOPP_CXX11_DYNAMIC_INIT 1 1132 #endif // Dynamic Initialization compilers 1135 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_alignas) || \ 1136 (__INTEL_COMPILER >= 1500) || (CRYPTOPP_GCC_VERSION >= 40800) || (__SUNPRO_CC >= 0x5130) 1137 # define CRYPTOPP_CXX11_ALIGNAS 1 1141 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_alignof) || \ 1142 (__INTEL_COMPILER >= 1500) || (CRYPTOPP_GCC_VERSION >= 40500) || (__SUNPRO_CC >= 0x5130) 1143 # define CRYPTOPP_CXX11_ALIGNOF 1 1147 #if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_lambdas) || \ 1148 (__INTEL_COMPILER >= 1200) || (CRYPTOPP_GCC_VERSION >= 40900) || (__SUNPRO_CC >= 0x5140) 1149 # define CRYPTOPP_CXX11_LAMBDA 1 1153 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_noexcept) || \ 1154 (__INTEL_COMPILER >= 1400) || (CRYPTOPP_GCC_VERSION >= 40600) || (__SUNPRO_CC >= 0x5130) 1155 # define CRYPTOPP_CXX11_NOEXCEPT 1 1156 #endif // noexcept compilers 1159 #if (CRYPTOPP_MSC_VERSION >= 1800) || __has_feature(cxx_variadic_templates) || \ 1160 (__INTEL_COMPILER >= 1210) || (CRYPTOPP_GCC_VERSION >= 40300) || (__SUNPRO_CC >= 0x5130) 1161 # define CRYPTOPP_CXX11_VARIADIC_TEMPLATES 1 1162 #endif // variadic templates 1166 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_constexpr) || \ 1167 (__INTEL_COMPILER >= 1600) || (CRYPTOPP_GCC_VERSION >= 40600) || (__SUNPRO_CC >= 0x5130) 1168 # define CRYPTOPP_CXX11_CONSTEXPR 1 1169 #endif // constexpr compilers 1173 #if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_strong_enums) || \ 1174 (__INTEL_COMPILER >= 1400) || (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5120) 1175 # define CRYPTOPP_CXX11_ENUM 1 1176 #endif // constexpr compilers 1179 #if (CRYPTOPP_MSC_VERSION >= 1600) || __has_feature(cxx_nullptr) || \ 1180 (__INTEL_COMPILER >= 1000) || (CRYPTOPP_GCC_VERSION >= 40600) || \ 1181 (__SUNPRO_CC >= 0x5130) || defined(__IBMCPP_NULLPTR) 1182 # define CRYPTOPP_CXX11_NULLPTR 1 1183 #endif // nullptr_t compilers 1185 #endif // CRYPTOPP_CXX11 1190 #if defined(CRYPTOPP_CXX11) && !defined(CRYPTOPP_NO_CXX17) 1191 # if ((_MSC_VER >= 1900) || (__cplusplus >= 201703L)) && !defined(_STLPORT_VERSION) 1192 # define CRYPTOPP_CXX17 1 1197 #if defined(CRYPTOPP_CXX17) 1201 #if defined(__clang__) 1202 # if __EXCEPTIONS && __has_feature(cxx_exceptions) 1203 # if __cpp_lib_uncaught_exceptions 1204 # define CRYPTOPP_CXX17_EXCEPTIONS 1 1207 #elif (CRYPTOPP_MSC_VERSION >= 1900) || (__INTEL_COMPILER >= 1800) || (CRYPTOPP_GCC_VERSION >= 60000) || (__cpp_lib_uncaught_exceptions) 1208 # define CRYPTOPP_CXX17_EXCEPTIONS 1 1209 #endif // uncaught_exceptions compilers 1211 #endif // CRYPTOPP_CXX17 1215 #if defined(CRYPTOPP_CXX11_NOEXCEPT) 1216 # define CRYPTOPP_THROW noexcept(false) 1217 # define CRYPTOPP_NO_THROW noexcept(true) 1219 # define CRYPTOPP_THROW 1220 # define CRYPTOPP_NO_THROW 1221 #endif // CRYPTOPP_CXX11_NOEXCEPT 1224 #if defined(CRYPTOPP_CXX11_CONSTEXPR) 1225 # define CRYPTOPP_STATIC_CONSTEXPR static constexpr 1226 # define CRYPTOPP_CONSTEXPR constexpr 1228 # define CRYPTOPP_STATIC_CONSTEXPR static 1229 # define CRYPTOPP_CONSTEXPR 1230 #endif // CRYPTOPP_CXX11_CONSTEXPR 1233 #if defined(CRYPTOPP_CXX11_ALIGNAS) 1234 # undef CRYPTOPP_ALIGN_DATA 1235 # define CRYPTOPP_ALIGN_DATA(x) alignas(x) 1236 #endif // CRYPTOPP_CXX11_ALIGNAS 1247 #if defined(CRYPTOPP_CXX11_ENUM) 1248 # undef CRYPTOPP_CONSTANT 1249 # define CRYPTOPP_CONSTANT(x) enum : int { x }; 1250 #elif defined(CRYPTOPP_CXX11_CONSTEXPR) 1251 # undef CRYPTOPP_CONSTANT 1252 # define CRYPTOPP_CONSTANT(x) constexpr static int x; 1256 #if defined(CRYPTOPP_CXX11_NULLPTR) && !defined(NULLPTR) 1257 # define NULLPTR nullptr 1258 #elif !defined(NULLPTR) 1259 # define NULLPTR NULL 1260 #endif // CRYPTOPP_CXX11_NULLPTR 1264 #if (defined(__cplusplus) && (__cplusplus >= 199711L) && (__cplusplus < 201402L)) && !defined(CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE) 1265 # error "std::uncaught_exception is not available. This is likely a configuration error." 1268 #endif // CRYPTOPP_CONFIG_H Crypto++ library namespace.