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 ))
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
240typedef unsigned char byte;
241typedef unsigned short word16;
242typedef unsigned int word32;
244typedef signed char sbyte;
245typedef signed short sword16;
246typedef 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
267const 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
338const unsigned int WORD_SIZE =
sizeof(word);
339const 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
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
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
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
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
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
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
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
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
1004#define CRYPTOPP_TABLE extern
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
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
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
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
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
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
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
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
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
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
1218#if defined(CRYPTOPP_CXX11_ALIGNAS)
1219# undef CRYPTOPP_ALIGN_DATA
1220# define CRYPTOPP_ALIGN_DATA(x) alignas(x)
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
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."
Crypto++ library namespace.