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_MAJOR 8 120 #define CRYPTOPP_MINOR 1 121 #define CRYPTOPP_REVISION 0 122 #define CRYPTOPP_VERSION 810 129 #ifndef CRYPTOPP_DATA_DIR 130 # define CRYPTOPP_DATA_DIR "" 150 #if !defined(GZIP_OS_CODE) 151 # if defined(__macintosh__) 152 # define GZIP_OS_CODE 7 153 # elif defined(__unix__) || defined(__linux__) 154 # define GZIP_OS_CODE 3 156 # define GZIP_OS_CODE 0 181 #define CRYPTOPP_SLOW_ARMV8_SHIFT 1 191 #define CRYPTOPP_RIJNDAEL_NAME "AES" 199 #if (defined(DEBUG) || defined(_DEBUG)) && !defined(CRYPTOPP_DEBUG) 200 # define CRYPTOPP_DEBUG 1 208 # error namespace support is now required 211 #ifdef CRYPTOPP_DOXYGEN_PROCESSING 226 # define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 230 # define NAMESPACE_BEGIN(x) 231 # define NAMESPACE_END 233 # define DOCUMENTED_TYPEDEF(x, y) class y : public x {}; 235 # define protected private 237 # define NAMESPACE_BEGIN(x) namespace x { 238 # define NAMESPACE_END } 239 # define DOCUMENTED_TYPEDEF(x, y) typedef x y; 241 #define ANONYMOUS_NAMESPACE_BEGIN namespace { 242 #define ANONYMOUS_NAMESPACE_END } 243 #define USING_NAMESPACE(x) using namespace x; 244 #define DOCUMENTED_NAMESPACE_BEGIN(x) namespace x { 245 #define DOCUMENTED_NAMESPACE_END } 251 #define CRYPTOPP_NO_GLOBAL_BYTE 1 258 typedef unsigned char byte;
259 typedef unsigned short word16;
260 typedef unsigned int word32;
262 typedef signed char sbyte;
263 typedef signed short sword16;
264 typedef signed int sword32;
266 #if defined(_MSC_VER) || defined(__BORLANDC__) 267 typedef signed __int64 sword64;
268 typedef unsigned __int64 word64;
269 #define SW64LIT(x) x##i64 270 #define W64LIT(x) x##ui64 271 #elif (_LP64 || __LP64__) 272 typedef signed long sword64;
273 typedef unsigned long word64;
274 #define SW64LIT(x) x##L 275 #define W64LIT(x) x##UL 277 typedef signed long long sword64;
278 typedef unsigned long long word64;
279 #define SW64LIT(x) x##LL 280 #define W64LIT(x) x##ULL 284 typedef word64 lword;
285 const lword LWORD_MAX = W64LIT(0xffffffffffffffff);
293 #if (defined(_MSC_VER) && defined(__clang__)) 294 # error: "Unsupported configuration" 298 #define CRYPTOPP_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) 301 #if defined(__xlc__) || defined(__xlC__) 302 #define CRYPTOPP_XLC_VERSION ((__xlC__ / 256) * 10000 + (__xlC__ % 256) * 100) 306 #if defined(__clang__) && defined(__apple_build_version__) 307 #define CRYPTOPP_APPLE_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) 308 #elif defined(__clang__) 309 #define CRYPTOPP_LLVM_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) 313 #define CRYPTOPP_MSC_VERSION (_MSC_VER) 317 #if (CRYPTOPP_GCC_VERSION >= 40600) || (CRYPTOPP_LLVM_CLANG_VERSION >= 10700) || (CRYPTOPP_APPLE_CLANG_VERSION >= 20000) 318 #define CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE 1 323 #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__)) 324 typedef word32 hword;
327 #define CRYPTOPP_NATIVE_DWORD_AVAILABLE 1 328 #if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || defined(__x86_64__) || defined(__mips64) || defined(__sparc64__) 329 #if ((CRYPTOPP_GCC_VERSION >= 30400) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30000) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) && (__SIZEOF_INT128__ >= 16) 333 typedef word32 hword;
335 typedef __uint128_t dword;
336 typedef __uint128_t word128;
337 #define CRYPTOPP_WORD128_AVAILABLE 1 340 typedef word16 hword;
342 typedef word64 dword;
346 #define CRYPTOPP_BOOL_SLOW_WORD64 1 347 typedef word16 hword;
349 typedef word64 dword;
352 #ifndef CRYPTOPP_BOOL_SLOW_WORD64 353 #define CRYPTOPP_BOOL_SLOW_WORD64 0 356 const unsigned int WORD_SIZE =
sizeof(word);
357 const unsigned int WORD_BITS = WORD_SIZE * 8;
361 #ifndef CRYPTOPP_L1_CACHE_LINE_SIZE 364 #if defined(_M_X64) || defined(__x86_64__) || defined(__arm64__) || defined(__aarch64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) 365 #define CRYPTOPP_L1_CACHE_LINE_SIZE 64 368 #define CRYPTOPP_L1_CACHE_LINE_SIZE 32 376 #ifndef CRYPTOPP_ALIGN_DATA 377 #if defined(_MSC_VER) 378 #define CRYPTOPP_ALIGN_DATA(x) __declspec(align(x)) 379 #elif defined(__GNUC__) || (__SUNPRO_CC >= 0x5100) 380 #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x))) 381 #elif defined(__xlc__) || defined(__xlC__) 382 #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x))) 384 #define CRYPTOPP_ALIGN_DATA(x) 389 #if ((defined(__MACH__) && defined(__APPLE__)) && ((CRYPTOPP_LLVM_CLANG_VERSION >= 30600) || (CRYPTOPP_APPLE_CLANG_VERSION >= 70100) || (CRYPTOPP_GCC_VERSION >= 40300))) 390 #define CRYPTOPP_SECTION_INIT __attribute__((section ("__DATA,__data"))) 391 #elif (defined(__ELF__) && (CRYPTOPP_GCC_VERSION >= 40300)) 392 #define CRYPTOPP_SECTION_INIT __attribute__((section ("nocommon"))) 393 #elif defined(__ELF__) && (defined(__xlC__) || defined(__ibmxl__)) 394 #define CRYPTOPP_SECTION_INIT __attribute__((section ("nocommon"))) 396 #define CRYPTOPP_SECTION_INIT 399 #if defined(_MSC_VER) || defined(__fastcall) 400 #define CRYPTOPP_FASTCALL __fastcall 402 #define CRYPTOPP_FASTCALL 406 #define CRYPTOPP_NO_VTABLE __declspec(novtable) 408 #define CRYPTOPP_NO_VTABLE 416 # pragma warning(disable: 4127 4512 4661 4910) 419 # pragma warning(once: 4191 4242 4263 4264 4266 4302 4826 4905 4906 4928) 428 #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE 429 # pragma GCC diagnostic ignored "-Wunknown-pragmas" 430 # pragma GCC diagnostic ignored "-Wunused-function" 436 #if (defined(_MSC_VER) && _MSC_VER <= 1300) || defined(__MWERKS__) || (defined(_STLPORT_VERSION) && ((_STLPORT_VERSION < 0x450) || defined(_STLP_NO_UNCAUGHT_EXCEPT_SUPPORT))) 437 #define CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION 440 #ifndef CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION 441 #define CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE 451 #if (defined(__ILP32__) || defined(_ILP32)) && defined(__x86_64__) 452 #define CRYPTOPP_BOOL_X32 1 456 #if (defined(_M_IX86) || defined(__i386__) || defined(__i386) || defined(_X86_) || defined(__I86__) || defined(__INTEL__)) && !CRYPTOPP_BOOL_X32 457 #define CRYPTOPP_BOOL_X86 1 460 #if (defined(_M_X64) || defined(__x86_64__)) && !CRYPTOPP_BOOL_X32 461 #define CRYPTOPP_BOOL_X64 1 465 #if CRYPTOPP_BOOL_X32 466 # undef CRYPTOPP_BOOL_X64 467 # undef CRYPTOPP_X64_ASM_AVAILABLE 468 # undef CRYPTOPP_X64_MASM_AVAILABLE 472 #if defined(__arm64__) || defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 473 #define CRYPTOPP_BOOL_ARMV8 1 474 #elif defined(__arm__) || defined(_M_ARM) 475 #define CRYPTOPP_BOOL_ARM32 1 479 #if defined(__ppc64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) 480 #define CRYPTOPP_BOOL_PPC64 1 481 #elif defined(__powerpc__) || defined(_ARCH_PPC) 482 #define CRYPTOPP_BOOL_PPC32 1 486 #if defined(__mips64__) 487 #define CRYPTOPP_BOOL_MIPS64 1 488 #elif defined(__mips__) 489 #define CRYPTOPP_BOOL_MIPS32 1 492 #if defined(_MSC_VER) || defined(__BORLANDC__) 493 # define CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY 1 495 # define CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY 1 500 #if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) 503 #if defined(CRYPTOPP_APPLE_CLANG_VERSION) && (CRYPTOPP_APPLE_CLANG_VERSION < 50000) 504 # define CRYPTOPP_DISABLE_ASM 1 509 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x5100) 510 # define CRYPTOPP_DISABLE_ASM 1 513 #if !defined(CRYPTOPP_DISABLE_ASM) && ((defined(_MSC_VER) && defined(_M_IX86)) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))) 515 #define CRYPTOPP_X86_ASM_AVAILABLE 1 517 #if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(_MSC_VER) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__)) 518 #define CRYPTOPP_SSE2_ASM_AVAILABLE 1 521 #if !defined(CRYPTOPP_DISABLE_SSSE3) && (_MSC_VER >= 1500 || CRYPTOPP_GCC_VERSION >= 40300 || defined(__SSSE3__)) 522 #define CRYPTOPP_SSSE3_ASM_AVAILABLE 1 526 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(_MSC_VER) && defined(_M_X64) 527 #define CRYPTOPP_X64_MASM_AVAILABLE 1 530 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(__GNUC__) && defined(__x86_64__) 531 #define CRYPTOPP_X64_ASM_AVAILABLE 1 535 #if !defined(CRYPTOPP_DISABLE_ASM) && (defined(_MSC_VER) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__) || (__SUNPRO_CC >= 0x5100)) 536 #define CRYPTOPP_SSE2_INTRIN_AVAILABLE 1 539 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_SSSE3) 540 # if defined(__SSSE3__) || (_MSC_VER >= 1500) || \ 541 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \ 542 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) 543 #define CRYPTOPP_SSSE3_AVAILABLE 1 550 #if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \ 551 (defined(__SSE4_1__) || (CRYPTOPP_MSC_VERSION >= 1500) || \ 552 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \ 553 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000)) 554 #define CRYPTOPP_SSE41_AVAILABLE 1 557 #if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \ 558 (defined(__SSE4_2__) || (CRYPTOPP_MSC_VERSION >= 1500) || (__SUNPRO_CC >= 0x5110) || \ 559 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || \ 560 (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000)) 561 #define CRYPTOPP_SSE42_AVAILABLE 1 566 #if defined(CRYPTOPP_DISABLE_AESNI) 567 #define CRYPTOPP_DISABLE_CLMUL 1 571 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_CLMUL) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 572 (defined(__PCLMUL__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \ 573 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \ 574 (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) 575 #define CRYPTOPP_CLMUL_AVAILABLE 1 579 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_AESNI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 580 (defined(__AES__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \ 581 (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \ 582 (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) 583 #define CRYPTOPP_AESNI_AVAILABLE 1 587 #if !defined(CRYPTOPP_DISABLE_AVX) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 588 (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \ 589 (CRYPTOPP_GCC_VERSION >= 40700) || (__INTEL_COMPILER >= 1400) || \ 590 (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600)) 591 #define CRYPTOPP_AVX_AVAILABLE 1 595 #if !defined(CRYPTOPP_DISABLE_AVX2) && defined(CRYPTOPP_AVX_AVAILABLE) && \ 596 (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \ 597 (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1400) || \ 598 (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600)) 599 #define CRYPTOPP_AVX2_AVAILABLE 1 604 #if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_SHANI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ 605 (defined(__SHA__) || (CRYPTOPP_MSC_VERSION >= 1900) || (__SUNPRO_CC >= 0x5160) || \ 606 (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1300) || \ 607 (CRYPTOPP_LLVM_CLANG_VERSION >= 30400) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50100)) 608 #define CRYPTOPP_SHANI_AVAILABLE 1 612 #if (defined(__ANDROID__) || defined(ANDROID)) 613 # if (CRYPTOPP_BOOL_X86) 614 # undef CRYPTOPP_SSE41_AVAILABLE 615 # undef CRYPTOPP_SSE42_AVAILABLE 616 # undef CRYPTOPP_CLMUL_AVAILABLE 617 # undef CRYPTOPP_AESNI_AVAILABLE 618 # undef CRYPTOPP_SHANI_AVAILABLE 620 # if (CRYPTOPP_BOOL_X64) 621 # undef CRYPTOPP_CLMUL_AVAILABLE 622 # undef CRYPTOPP_AESNI_AVAILABLE 623 # undef CRYPTOPP_SHANI_AVAILABLE 628 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5130) 629 # undef CRYPTOPP_AESNI_AVAILABLE 634 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5150) 635 # undef CRYPTOPP_CLMUL_AVAILABLE 638 #endif // X86, X32, X64 642 #if (CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8) 646 #if (CRYPTOPP_BIG_ENDIAN) 647 # define CRYPTOPP_DISABLE_ASM 1 653 #if !defined(CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 654 # if defined(__arm__) || defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(_M_ARM) 655 # if (CRYPTOPP_GCC_VERSION >= 40300) || (CRYPTOPP_CLANG_VERSION >= 20800) || \ 656 (CRYPTOPP_MSC_VERSION >= 1700) 657 # define CRYPTOPP_ARM_NEON_AVAILABLE 1 665 #if !defined(CRYPTOPP_ARM_ASIMD_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 666 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 667 # if defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(__ARM_FEATURE_ASIMD) || \ 668 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 30300) || \ 669 (CRYPTOPP_MSC_VERSION >= 1916) 670 # define CRYPTOPP_ARM_NEON_AVAILABLE 1 671 # define CRYPTOPP_ARM_ASIMD_AVAILABLE 1 679 #if !defined(CRYPTOPP_ARM_CRC32_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 680 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 681 # if defined(__ARM_FEATURE_CRC32) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 682 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) 683 # define CRYPTOPP_ARM_CRC32_AVAILABLE 1 691 #if !defined(CRYPTOPP_ARM_PMULL_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 692 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 693 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 694 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) 695 # define CRYPTOPP_ARM_PMULL_AVAILABLE 1 703 #if !defined(CRYPTOPP_ARM_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 704 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 705 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 706 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1910) 707 # define CRYPTOPP_ARM_AES_AVAILABLE 1 715 #if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 716 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 717 # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ 718 (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) 719 # define CRYPTOPP_ARM_SHA1_AVAILABLE 1 720 # define CRYPTOPP_ARM_SHA2_AVAILABLE 1 728 #if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 729 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 730 # if defined(__ARM_FEATURE_SHA3) || (CRYPTOPP_GCC_VERSION >= 80000) || \ 731 (CRYPTOPP_MSC_VERSION >= 5000) 732 # define CRYPTOPP_ARM_SHA512_AVAILABLE 1 733 # define CRYPTOPP_ARM_SHA3_AVAILABLE 1 741 #if !defined(CRYPTOPP_ARM_SM3_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) 742 # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) 743 # if defined(__ARM_FEATURE_SM3) || (CRYPTOPP_GCC_VERSION >= 80000) || \ 744 (CRYPTOPP_MSC_VERSION >= 5000) 745 # define CRYPTOPP_ARM_SM3_AVAILABLE 1 746 # define CRYPTOPP_ARM_SM4_AVAILABLE 1 752 #if !defined(CRYPTOPP_ARM_ACLE_AVAILABLE) 753 # if defined(__aarch32__) || defined(__aarch64__) || (__ARM_ARCH >= 8) || defined(__ARM_ACLE) 754 # if !defined(__ANDROID__) && !defined(ANDROID) && !defined(__APPLE__) 755 # define CRYPTOPP_ARM_ACLE_AVAILABLE 1 762 #if defined(CRYPTOPP_APPLE_CLANG_VERSION) && (CRYPTOPP_APPLE_CLANG_VERSION < 70000) 763 # undef CRYPTOPP_ARM_PMULL_AVAILABLE 767 #if (defined(__ANDROID__) || defined(ANDROID)) && !defined(__ARM_FEATURE_CRC32) 768 # undef CRYPTOPP_ARM_CRC32_AVAILABLE 772 #if (defined(__ANDROID__) || defined(ANDROID)) && !defined(__ARM_FEATURE_CRYPTO) 773 # undef CRYPTOPP_ARM_PMULL_AVAILABLE 774 # undef CRYPTOPP_ARM_AES_AVAILABLE 775 # undef CRYPTOPP_ARM_SHA1_AVAILABLE 776 # undef CRYPTOPP_ARM_SHA2_AVAILABLE 785 #if !defined(CRYPTOPP_DISABLE_ASM) && defined(__arm__) 786 # if defined(__GNUC__) && !defined(__clang__) 787 # define CRYPTOGAMS_ARM_AES 1 791 #endif // ARM32, ARM64 795 #if (CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) 797 #if defined(CRYPTOPP_DISABLE_ALTIVEC) || defined(CRYPTOPP_DISABLE_ASM) 798 # undef CRYPTOPP_DISABLE_ALTIVEC 799 # undef CRYPTOPP_DISABLE_POWER7 800 # undef CRYPTOPP_DISABLE_POWER8 801 # undef CRYPTOPP_DISABLE_POWER9 802 # define CRYPTOPP_DISABLE_ALTIVEC 1 803 # define CRYPTOPP_DISABLE_POWER7 1 804 # define CRYPTOPP_DISABLE_POWER8 1 805 # define CRYPTOPP_DISABLE_POWER9 1 809 #if !defined(CRYPTOPP_ALTIVEC_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ALTIVEC) 810 # if defined(_ARCH_PWR4) || defined(__ALTIVEC__) || \ 811 (CRYPTOPP_XLC_VERSION >= 100000) || (CRYPTOPP_GCC_VERSION >= 40001) || \ 812 (CRYPTOPP_CLANG_VERSION >= 20900) 813 # define CRYPTOPP_ALTIVEC_AVAILABLE 1 818 #if !defined(CRYPTOPP_POWER7_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER7) && defined(CRYPTOPP_ALTIVEC_AVAILABLE) 819 # if defined(_ARCH_PWR7) || (CRYPTOPP_XLC_VERSION >= 100000) || \ 820 (CRYPTOPP_GCC_VERSION >= 40100) || (CRYPTOPP_CLANG_VERSION >= 30100) 821 # define CRYPTOPP_POWER7_AVAILABLE 1 826 #if !defined(CRYPTOPP_POWER8_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8) && defined(CRYPTOPP_POWER7_AVAILABLE) 827 # if defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \ 828 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 70000) 829 # define CRYPTOPP_POWER8_AVAILABLE 1 834 #if !defined(CRYPTOPP_POWER9_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER9) && defined(CRYPTOPP_POWER8_AVAILABLE) 835 # if defined(_ARCH_PWR9) || (CRYPTOPP_XLC_VERSION >= 130200) || \ 836 (CRYPTOPP_GCC_VERSION >= 70000) || (CRYPTOPP_CLANG_VERSION >= 80000) 837 # define CRYPTOPP_POWER9_AVAILABLE 1 841 #if !defined(CRYPTOPP_POWER8_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8_AES) && defined(CRYPTOPP_POWER8_AVAILABLE) 842 # if defined(__CRYPTO__) || defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \ 843 (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 70000) 845 # define CRYPTOPP_POWER8_AES_AVAILABLE 1 846 # define CRYPTOPP_POWER8_VMULL_AVAILABLE 1 847 # define CRYPTOPP_POWER8_SHA_AVAILABLE 1 851 #endif // PPC32, PPC64 856 #if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) && !defined(CRYPTOPP_DISABLE_ASM) 857 #define CRYPTOPP_BOOL_ALIGN16 1 859 #define CRYPTOPP_BOOL_ALIGN16 0 864 #if defined(_MSC_VER) 865 #define CRYPTOPP_MM_MALLOC_AVAILABLE 866 #elif defined(__linux__) || defined(__sun__) || defined(__CYGWIN__) 867 #define CRYPTOPP_MEMALIGN_AVAILABLE 868 #elif defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) 869 #define CRYPTOPP_MALLOC_ALIGNMENT_IS_16 870 #elif (defined(_GNU_SOURCE) || ((_XOPEN_SOURCE + 0) >= 600)) && (_POSIX_ADVISORY_INFO > 0) 871 #define CRYPTOPP_POSIX_MEMALIGN_AVAILABLE 873 #define CRYPTOPP_NO_ALIGNED_ALLOC 877 #if defined(_MSC_VER) 878 # define CRYPTOPP_NOINLINE_DOTDOTDOT 879 # define CRYPTOPP_NOINLINE __declspec(noinline) 880 #elif defined(__xlc__) || defined(__xlC__) || defined(__ibmxl__) 881 # define CRYPTOPP_NOINLINE_DOTDOTDOT ... 882 # define CRYPTOPP_NOINLINE __attribute__((noinline)) 883 #elif defined(__GNUC__) 884 # define CRYPTOPP_NOINLINE_DOTDOTDOT 885 # define CRYPTOPP_NOINLINE __attribute__((noinline)) 887 # define CRYPTOPP_NOINLINE_DOTDOTDOT ... 888 # define CRYPTOPP_NOINLINE 892 #if defined(CRYPTOPP_DOXYGEN_PROCESSING) || defined(__BORLANDC__) 893 # define CRYPTOPP_CONSTANT(x) static const int x; 895 # define CRYPTOPP_CONSTANT(x) enum {x}; 906 #if defined(__APPLE__) 907 # define CRYPTOPP_NO_CPU_FEATURE_PROBES 1 919 #ifndef CRYPTOPP_INIT_PRIORITY 920 # define CRYPTOPP_INIT_PRIORITY 250 926 #ifndef CRYPTOPP_USER_PRIORITY 927 # define CRYPTOPP_USER_PRIORITY (CRYPTOPP_INIT_PRIORITY+101) 931 #if (CRYPTOPP_INIT_PRIORITY > 0) && !(defined(NO_OS_DEPENDENCE) || defined(__APPLE__) || defined(__sun__)) 932 # if (CRYPTOPP_GCC_VERSION >= 30000) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) || (_INTEL_COMPILER >= 800) 933 # define HAVE_GCC_INIT_PRIORITY 1 934 # elif (CRYPTOPP_MSC_VERSION >= 1310) 935 # define HAVE_MSC_INIT_PRIORITY 1 936 # elif defined(__xlc__) || defined(__xlC__) || defined(__ibmxl__) 937 # define HAVE_XLC_INIT_PRIORITY 1 939 #endif // CRYPTOPP_INIT_PRIORITY, NO_OS_DEPENDENCE, Apple, Sun 943 #ifndef NO_OS_DEPENDENCE 945 #if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) 946 #define CRYPTOPP_WIN32_AVAILABLE 949 #if defined(__unix__) || defined(__MACH__) || defined(__NetBSD__) || defined(__sun) 950 #define CRYPTOPP_UNIX_AVAILABLE 953 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) 954 #define CRYPTOPP_BSD_AVAILABLE 957 #if defined(CRYPTOPP_WIN32_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE) 958 # define HIGHRES_TIMER_AVAILABLE 961 #ifdef CRYPTOPP_WIN32_AVAILABLE 962 # if !defined(WINAPI_FAMILY) 963 # define THREAD_TIMER_AVAILABLE 964 # elif defined(WINAPI_FAMILY) 965 # if (WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) 966 # define THREAD_TIMER_AVAILABLE 971 #if defined(CRYPTOPP_UNIX_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) 972 # define NONBLOCKING_RNG_AVAILABLE 973 # define BLOCKING_RNG_AVAILABLE 974 # define OS_RNG_AVAILABLE 978 #if defined(CRYPTOPP_UNIX_AVAILABLE) 979 # define UNIX_SIGNALS_AVAILABLE 1 982 #ifdef CRYPTOPP_WIN32_AVAILABLE 983 # if !defined(WINAPI_FAMILY) 984 # define NONBLOCKING_RNG_AVAILABLE 985 # define OS_RNG_AVAILABLE 986 # elif defined(WINAPI_FAMILY) 987 # if (WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) 988 # define NONBLOCKING_RNG_AVAILABLE 989 # define OS_RNG_AVAILABLE 990 # elif !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) 991 # if ((WINVER >= 0x0A00 ) || (_WIN32_WINNT >= 0x0A00 )) 992 # define NONBLOCKING_RNG_AVAILABLE 993 # define OS_RNG_AVAILABLE 999 #endif // NO_OS_DEPENDENCE 1003 #if defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) 1005 #ifdef CRYPTOPP_EXPORTS 1006 #define CRYPTOPP_IS_DLL 1007 #define CRYPTOPP_DLL __declspec(dllexport) 1008 #elif defined(CRYPTOPP_IMPORTS) 1009 #define CRYPTOPP_IS_DLL 1010 #define CRYPTOPP_DLL __declspec(dllimport) 1012 #define CRYPTOPP_DLL 1016 #define CRYPTOPP_TABLE extern 1017 #define CRYPTOPP_API __cdecl 1019 #else // not CRYPTOPP_WIN32_AVAILABLE 1022 #define CRYPTOPP_TABLE extern 1023 #define CRYPTOPP_DLL 1024 #define CRYPTOPP_API 1026 #endif // CRYPTOPP_WIN32_AVAILABLE 1028 #if defined(__MWERKS__) 1029 #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern class CRYPTOPP_DLL 1030 #elif defined(__BORLANDC__) || defined(__SUNPRO_CC) 1031 #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL 1033 #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern template class CRYPTOPP_DLL 1036 #if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_IMPORTS) 1037 #define CRYPTOPP_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL 1039 #define CRYPTOPP_DLL_TEMPLATE_CLASS CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS 1042 #if defined(__MWERKS__) 1043 #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern class 1044 #elif defined(__BORLANDC__) || defined(__SUNPRO_CC) 1045 #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS template class 1047 #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern template class 1050 #if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_EXPORTS) 1051 #define CRYPTOPP_STATIC_TEMPLATE_CLASS template class 1053 #define CRYPTOPP_STATIC_TEMPLATE_CLASS CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS 1060 #define CRYPTOPP_UNUSED(x) ((void)(x)) 1064 #if (CRYPTOPP_GCC_VERSION >= 40500) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20800) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40200) 1065 # define CRYPTOPP_DEPRECATED(msg) __attribute__((deprecated (msg))) 1066 #elif (CRYPTOPP_GCC_VERSION) 1067 # define CRYPTOPP_DEPRECATED(msg) __attribute__((deprecated)) 1069 # define CRYPTOPP_DEPRECATED(msg) 1081 #ifndef __has_feature 1082 # define __has_feature(x) 0 1085 #if !defined(CRYPTOPP_NO_CXX11) 1086 # if ((_MSC_VER >= 1600) || (__cplusplus >= 201103L)) && !defined(_STLPORT_VERSION) 1087 # define CRYPTOPP_CXX11 1 1096 #if defined(__APPLE__) && defined(__clang__) 1097 # if !(defined(__has_include) && __has_include(<forward_list>)) 1098 # undef CRYPTOPP_CXX11 1103 #if defined(CRYPTOPP_CXX11) 1106 #if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_atomic) || \ 1107 (__INTEL_COMPILER >= 1300) || (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5140) 1108 # define CRYPTOPP_CXX11_ATOMICS 1 1113 #if (CRYPTOPP_MSC_VERSION >= 1700) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || \ 1114 (CRYPTOPP_APPLE_CLANG_VERSION >= 50000) || (__INTEL_COMPILER >= 1200) || \ 1115 (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5130) 1122 # if !defined(__GLIBCXX__) || defined(_GLIBCXX_HAS_GTHREADS) 1123 # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 1125 #endif // synchronization 1131 #if (CRYPTOPP_MSC_VERSION >= 1900) && ((WINVER >= 0x0600) || (_WIN32_WINNT >= 0x0600)) || \ 1132 (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) || \ 1133 (__INTEL_COMPILER >= 1110) || (CRYPTOPP_GCC_VERSION >= 40300) || (__SUNPRO_CC >= 0x5130) 1134 # define CRYPTOPP_CXX11_DYNAMIC_INIT 1 1135 #endif // Dynamic Initialization compilers 1138 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_alignas) || \ 1139 (__INTEL_COMPILER >= 1500) || (CRYPTOPP_GCC_VERSION >= 40800) || (__SUNPRO_CC >= 0x5130) 1140 # define CRYPTOPP_CXX11_ALIGNAS 1 1144 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_alignof) || \ 1145 (__INTEL_COMPILER >= 1500) || (CRYPTOPP_GCC_VERSION >= 40500) || (__SUNPRO_CC >= 0x5130) 1146 # define CRYPTOPP_CXX11_ALIGNOF 1 1150 #if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_lambdas) || \ 1151 (__INTEL_COMPILER >= 1200) || (CRYPTOPP_GCC_VERSION >= 40900) || (__SUNPRO_CC >= 0x5140) 1152 # define CRYPTOPP_CXX11_LAMBDA 1 1156 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_noexcept) || \ 1157 (__INTEL_COMPILER >= 1400) || (CRYPTOPP_GCC_VERSION >= 40600) || (__SUNPRO_CC >= 0x5130) 1158 # define CRYPTOPP_CXX11_NOEXCEPT 1 1159 #endif // noexcept compilers 1162 #if (CRYPTOPP_MSC_VERSION >= 1800) || __has_feature(cxx_variadic_templates) || \ 1163 (__INTEL_COMPILER >= 1210) || (CRYPTOPP_GCC_VERSION >= 40300) || (__SUNPRO_CC >= 0x5130) 1164 # define CRYPTOPP_CXX11_VARIADIC_TEMPLATES 1 1165 #endif // variadic templates 1169 #if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_constexpr) || \ 1170 (__INTEL_COMPILER >= 1600) || (CRYPTOPP_GCC_VERSION >= 40600) || (__SUNPRO_CC >= 0x5130) 1171 # define CRYPTOPP_CXX11_CONSTEXPR 1 1172 #endif // constexpr compilers 1176 #if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_strong_enums) || \ 1177 (__INTEL_COMPILER >= 1400) || (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5120) 1178 # define CRYPTOPP_CXX11_ENUM 1 1179 #endif // constexpr compilers 1182 #if (CRYPTOPP_MSC_VERSION >= 1600) || __has_feature(cxx_nullptr) || \ 1183 (__INTEL_COMPILER >= 1000) || (CRYPTOPP_GCC_VERSION >= 40600) || \ 1184 (__SUNPRO_CC >= 0x5130) || defined(__IBMCPP_NULLPTR) 1185 # define CRYPTOPP_CXX11_NULLPTR 1 1186 #endif // nullptr_t compilers 1188 #endif // CRYPTOPP_CXX11 1193 #if defined(CRYPTOPP_CXX11) && !defined(CRYPTOPP_NO_CXX17) 1194 # if ((_MSC_VER >= 1900) || (__cplusplus >= 201703L)) && !defined(_STLPORT_VERSION) 1195 # define CRYPTOPP_CXX17 1 1200 #if defined(CRYPTOPP_CXX17) 1204 #if defined(__clang__) 1205 # if __EXCEPTIONS && __has_feature(cxx_exceptions) 1206 # if __cpp_lib_uncaught_exceptions 1207 # define CRYPTOPP_CXX17_EXCEPTIONS 1 1210 #elif (CRYPTOPP_MSC_VERSION >= 1900) || (__INTEL_COMPILER >= 1800) || (CRYPTOPP_GCC_VERSION >= 60000) || (__cpp_lib_uncaught_exceptions) 1211 # define CRYPTOPP_CXX17_EXCEPTIONS 1 1212 #endif // uncaught_exceptions compilers 1214 #endif // CRYPTOPP_CXX17 1218 #if defined(CRYPTOPP_CXX11_NOEXCEPT) 1219 # define CRYPTOPP_THROW noexcept(false) 1220 # define CRYPTOPP_NO_THROW noexcept(true) 1222 # define CRYPTOPP_THROW 1223 # define CRYPTOPP_NO_THROW 1224 #endif // CRYPTOPP_CXX11_NOEXCEPT 1227 #if defined(CRYPTOPP_CXX11_CONSTEXPR) 1228 # define CRYPTOPP_STATIC_CONSTEXPR static constexpr 1229 # define CRYPTOPP_CONSTEXPR constexpr 1231 # define CRYPTOPP_STATIC_CONSTEXPR static 1232 # define CRYPTOPP_CONSTEXPR 1233 #endif // CRYPTOPP_CXX11_CONSTEXPR 1236 #if defined(CRYPTOPP_CXX11_ALIGNAS) 1237 # undef CRYPTOPP_ALIGN_DATA 1238 # define CRYPTOPP_ALIGN_DATA(x) alignas(x) 1239 #endif // CRYPTOPP_CXX11_ALIGNAS 1250 #if defined(CRYPTOPP_CXX11_ENUM) 1251 # undef CRYPTOPP_CONSTANT 1252 # define CRYPTOPP_CONSTANT(x) enum : int { x }; 1253 #elif defined(CRYPTOPP_CXX11_CONSTEXPR) 1254 # undef CRYPTOPP_CONSTANT 1255 # define CRYPTOPP_CONSTANT(x) constexpr static int x; 1259 #if defined(CRYPTOPP_CXX11_NULLPTR) && !defined(NULLPTR) 1260 # define NULLPTR nullptr 1261 #elif !defined(NULLPTR) 1262 # define NULLPTR NULL 1263 #endif // CRYPTOPP_CXX11_NULLPTR 1267 #if (defined(__cplusplus) && (__cplusplus >= 199711L) && (__cplusplus < 201402L)) && !defined(CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE) 1268 # error "std::uncaught_exception is not available. This is likely a configuration error." 1271 #endif // CRYPTOPP_CONFIG_H Crypto++ library namespace.