1 /** 2 * Compile-time constants for conditional compilation 3 * 4 * Copyright: 5 * (C) 2014-2015 Jack Lloyd 6 * (C) 2014-2015 Etienne Cimon 7 * 8 * License: 9 * Botan is released under the Simplified BSD License (see LICENSE.md) 10 */ 11 module botan.constants; 12 13 public import botan_math.mp_types; 14 enum LogLevel = Debug; 15 16 enum SKIP_TRANSFORM_TEST = false; 17 enum SKIP_X509_TEST = false; 18 enum SKIP_BLOCK_TEST = false; 19 enum SKIP_CVC_TEST = false; // TODO: EAC11 ECDSA Key decoding 20 enum SKIP_CRYPTOBOX_TEST = false; 21 enum SKIP_RFC3394_TEST = false; 22 enum SKIP_TSS_TEST = false; 23 enum SKIP_HASH_TEST = false; 24 enum SKIP_KDF_TEST = false; 25 enum SKIP_COMPRESSION_TEST = false; 26 enum SKIP_MAC_TEST = false; 27 enum SKIP_BIGINT_TEST = false; 28 enum SKIP_EC_GFP_TEST = false; 29 enum SKIP_AEAD_TEST = false; 30 enum SKIP_OCB_TEST = false; 31 enum SKIP_CIPHER_MODE_TEST = false; 32 enum SKIP_BCRYPT_TEST = false; 33 enum SKIP_PASSHASH9_TEST = false; 34 enum SKIP_PBKDF_TEST = false; 35 enum SKIP_HKDF_TEST = false; 36 enum SKIP_CURVE25519_TEST = false; 37 enum SKIP_DH_TEST = false; 38 enum SKIP_DLIES_TEST = false; 39 enum SKIP_DSA_TEST = false; 40 enum SKIP_ECDH_TEST = false; 41 enum SKIP_ECDSA_TEST = false; 42 enum SKIP_ELGAMAL_TEST = false; 43 enum SKIP_GOST_TEST = false; 44 enum SKIP_NR_TEST = false; 45 enum SKIP_RFC6979_TEST = false; 46 enum SKIP_RSA_TEST = false; 47 enum SKIP_RW_TEST = false; 48 enum SKIP_X509_KEY_TEST = false; 49 enum SKIP_RNG_TEST = false; 50 enum SKIP_STREAM_CIPHER_TEST = false; 51 enum SKIP_TLS_TEST = false; 52 53 version(CanTest) { enum BOTAN_HAS_TESTS = true; } 54 else enum BOTAN_HAS_TESTS = false; 55 56 57 // This indicates the corresponding Botan (C++) version numbers 58 enum BOTAN_VERSION_MAJOR = 1; 59 enum BOTAN_VERSION_MINOR = 12; 60 enum BOTAN_VERSION_PATCH = 3; 61 enum BOTAN_VERSION_DATESTAMP = 20151109; 62 enum BOTAN_VERSION_RELEASE_TYPE = "unreleased"; 63 enum BOTAN_VERSION_VC_REVISION = "git:6661c489929afc6c83c3038518dc37fd58938f3a"; 64 enum BOTAN_DISTRIBUTION_INFO = "unspecified"; 65 66 enum BOTAN_TARGET_CPU_HAS_KNOWN_ENDIANNESS = true; 67 enum BOTAN_TARGET_UNALIGNED_MEMORY_ACCESS_OK = true; 68 enum BOTAN_TARGET_HAS_NATIVE_UINT128 = false; 69 enum DEFAULT_BUFFERSIZE = 4096; 70 enum TLS_DEFAULT_BUFFERSIZE = 4096; 71 72 enum BOTAN_MEM_POOL_CHUNK_SIZE = 64*1024; 73 enum BOTAN_BLOCK_CIPHER_PAR_MULT = 4; 74 75 enum BOTAN_KARAT_MUL_THRESHOLD = 32; 76 enum BOTAN_KARAT_SQR_THRESHOLD = 32; 77 enum BOTAN_RNG_MAX_OUTPUT_BEFORE_RESEED = 512; 78 enum BOTAN_RNG_RESEED_POLL_BITS = 128; 79 80 // todo: Make version specifiers for the below constants 81 enum BOTAN_HAS_CIPHER_MODE_PADDING = true; 82 enum BOTAN_HAS_AUTO_SEEDING_RNG = true; 83 enum BOTAN_HAS_CODEC_FILTERS = true; 84 enum BOTAN_HAS_HKDF = true; 85 86 version (unittest) enum BOTAN_TEST = true; 87 else enum BOTAN_TEST = false; 88 89 version(D_InlineAsm_X86) { enum BOTAN_HAS_DMD_X86_INLINE_ASM = true; 90 enum BOTAN_HAS_DMD_X86_64_INLINE_ASM = false; } 91 else version(D_InlineAsm_X86_64){ enum BOTAN_HAS_DMD_X86_INLINE_ASM = false; 92 enum BOTAN_HAS_DMD_X86_64_INLINE_ASM = true; } 93 else { enum BOTAN_HAS_DMD_X86_INLINE_ASM = false; 94 enum BOTAN_HAS_DMD_X86_64_INLINE_ASM = false; } 95 96 version(FORCE_SSE4) { enum BOTAN_FORCE_SSE4 = true; } 97 else enum BOTAN_FORCE_SSE4 = false; 98 version(SIMD_SSE2) { enum BOTAN_HAS_SIMD_SSE2 = true; static assert(BOTAN_HAS_SIMD); } 99 else enum BOTAN_HAS_SIMD_SSE2 = false; 100 version(SIMD_Altivec) { static if (BOTAN_TARGET_CPU_IS_PPC_FAMILY) 101 enum BOTAN_HAS_SIMD_ALTIVEC = true; 102 else enum BOTAN_HAS_SIMD_ALTIVEC = false; } 103 else enum BOTAN_HAS_SIMD_ALTIVEC = false; 104 version(SIMD_Scalar) { enum BOTAN_HAS_SIMD_SCALAR = true; } 105 else enum BOTAN_HAS_SIMD_SCALAR = false; 106 107 static if (BOTAN_HAS_SIMD_SCALAR || BOTAN_HAS_SIMD_ALTIVEC || BOTAN_HAS_SIMD_SSE2) 108 enum BOTAN_HAS_SIMD_OPS = true; 109 else 110 enum BOTAN_HAS_SIMD_OPS = false; 111 112 static if (BOTAN_HAS_X86_ARCH && BOTAN_HAS_SIMD_SSE2) pragma(msg, "Error: SIMD_SSE2 cannot be enabled on x86 architecture."); 113 114 version(No_SSE_Intrinsics){ enum BOTAN_NO_SSE_INTRINSICS = true; static assert(!BOTAN_HAS_SIMD_SSE2); } 115 else enum BOTAN_NO_SSE_INTRINSICS = false; 116 117 version(Bench) { enum BOTAN_HAS_BENCHMARK = true; } 118 else enum BOTAN_HAS_BENCHMARK = false; 119 120 version(Self_Tests) { enum BOTAN_HAS_SELFTESTS = true; } 121 else enum BOTAN_HAS_SELFTESTS = false; 122 version(RT_Test) { enum BOTAN_PUBLIC_KEY_STRONG_CHECKS_ON_LOAD = true; } 123 else enum BOTAN_PUBLIC_KEY_STRONG_CHECKS_ON_LOAD = false; 124 version(RT_Test_Priv) { enum BOTAN_PRIVATE_KEY_STRONG_CHECKS_ON_LOAD = true; } 125 else enum BOTAN_PRIVATE_KEY_STRONG_CHECKS_ON_LOAD = false; 126 version(RT_Test_Priv_Gen){ enum BOTAN_PRIVATE_KEY_STRONG_CHECKS_ON_GENERATE = true; } 127 else enum BOTAN_PRIVATE_KEY_STRONG_CHECKS_ON_GENERATE = false; 128 version(PUBKEY) { enum BOTAN_HAS_PUBLIC_KEY_CRYPTO = true; } 129 else enum BOTAN_HAS_PUBLIC_KEY_CRYPTO = false; 130 version(TLS) { enum BOTAN_HAS_TLS = true; } 131 else enum BOTAN_HAS_TLS = false; 132 version(X509) { enum BOTAN_HAS_X509_CERTIFICATES = true; } 133 else enum BOTAN_HAS_X509_CERTIFICATES = false; 134 version(CVC) { enum BOTAN_HAS_CARD_VERIFIABLE_CERTIFICATES = true; } 135 else enum BOTAN_HAS_CARD_VERIFIABLE_CERTIFICATES = false; 136 version(SQLite) { enum BOTAN_HAS_SQLITE = true; } 137 else enum BOTAN_HAS_SQLITE = false; 138 version(AONT) { enum BOTAN_HAS_AONT = true; } 139 else enum BOTAN_HAS_AONT = false; 140 version(CryptoBox) { enum BOTAN_HAS_CRYPTOBOX = true; } 141 else enum BOTAN_HAS_CRYPTOBOX = false; 142 version(CryptoBox_PSK) { enum BOTAN_HAS_CRYPTOBOX_PSK = true; } 143 else enum BOTAN_HAS_CRYPTOBOX_PSK = false; 144 version(FPE_FE1) { enum BOTAN_HAS_FPE_FE1 = true; } 145 else enum BOTAN_HAS_FPE_FE1 = false; 146 version(RFC3394) { enum BOTAN_HAS_RFC3394_KEYWRAP = true; } 147 else enum BOTAN_HAS_RFC3394_KEYWRAP = false; 148 version(PassHash9) { enum BOTAN_HAS_PASSHASH9 = true; } 149 else enum BOTAN_HAS_PASSHASH9 = false; 150 version(BCrypt) { enum BOTAN_HAS_BCRYPT = true; } 151 else enum BOTAN_HAS_BCRYPT = false; 152 version(SRP6) { enum BOTAN_HAS_SRP6 = true; } 153 else enum BOTAN_HAS_SRP6 = false; 154 version(TSS) { enum BOTAN_HAS_THRESHOLD_SECRET_SHARING = true; } 155 else enum BOTAN_HAS_THRESHOLD_SECRET_SHARING = false; 156 version(KDF1) { enum BOTAN_HAS_KDF1 = true; } 157 else enum BOTAN_HAS_KDF1 = false; 158 version(KDF2) { enum BOTAN_HAS_KDF2 = true; } 159 else enum BOTAN_HAS_KDF2 = false; 160 version(X942_PRF) { enum BOTAN_HAS_X942_PRF = true; } 161 else enum BOTAN_HAS_X942_PRF = false; 162 version(SSL_V3_PRF) { enum BOTAN_HAS_SSL_V3_PRF = true; } 163 else enum BOTAN_HAS_SSL_V3_PRF = false; 164 version(TLS_V10_PRF) { enum BOTAN_HAS_TLS_V10_PRF = true; } 165 else enum BOTAN_HAS_TLS_V10_PRF = false; 166 version(TLS_V12_PRF) { enum BOTAN_HAS_TLS_V12_PRF = true; } 167 else enum BOTAN_HAS_TLS_V12_PRF = false; 168 version(AES_NI) { enum BOTAN_HAS_AES_NI = true; static assert(BOTAN_HAS_SIMD); } 169 else enum BOTAN_HAS_AES_NI = false; 170 version(Serpent_x86_32) { enum BOTAN_HAS_SERPENT_X86_32 = true; static assert(BOTAN_HAS_X86_ARCH, ERR_ARCH); } 171 else enum BOTAN_HAS_SERPENT_X86_32 = false; 172 version(MD4_x86_32) { enum BOTAN_HAS_MD4_X86_32 = true; static assert(BOTAN_HAS_X86_ARCH, ERR_ARCH); } 173 else enum BOTAN_HAS_MD4_X86_32 = false; 174 version(MD5_x86_32) { enum BOTAN_HAS_MD5_X86_32 = true; static assert(BOTAN_HAS_X86_ARCH, ERR_ARCH); } 175 else enum BOTAN_HAS_MD5_X86_32 = false; 176 version(SHA1_x86_64) { enum BOTAN_HAS_SHA1_X86_64 = true; static assert(BOTAN_HAS_X86_64_ARCH, ERR_ARCH); } 177 else enum BOTAN_HAS_SHA1_X86_64 = false; 178 version(SHA1_x86_32) { enum BOTAN_HAS_SHA1_X86_32 = true; static assert(BOTAN_HAS_X86_ARCH, ERR_ARCH); } 179 else enum BOTAN_HAS_SHA1_X86_32 = false; 180 version(CFB) { enum BOTAN_HAS_MODE_CFB = true; } 181 else enum BOTAN_HAS_MODE_CFB = false; 182 version(ECB) { enum BOTAN_HAS_MODE_ECB = true; } 183 else enum BOTAN_HAS_MODE_ECB = false; 184 version(CBC) { enum BOTAN_HAS_MODE_CBC = true; } 185 else enum BOTAN_HAS_MODE_CBC = false; 186 version(XTS) { enum BOTAN_HAS_MODE_XTS = true; } 187 else enum BOTAN_HAS_MODE_XTS = false; 188 version(OFB) { enum BOTAN_HAS_OFB = true; } 189 else enum BOTAN_HAS_OFB = false; 190 version(CTR_BE) { enum BOTAN_HAS_CTR_BE = true; } 191 else enum BOTAN_HAS_CTR_BE = false; 192 version(AEAD_FILTER) { enum BOTAN_HAS_AEAD_FILTER = true; } 193 else enum BOTAN_HAS_AEAD_FILTER = false; 194 version(AEAD_CCM) { enum BOTAN_HAS_AEAD_CCM = true; } 195 else enum BOTAN_HAS_AEAD_CCM = false; 196 version(AEAD_EAX) { enum BOTAN_HAS_AEAD_EAX = true; } 197 else enum BOTAN_HAS_AEAD_EAX = false; 198 version(AEAD_OCB) { enum BOTAN_HAS_AEAD_OCB = true; } 199 else enum BOTAN_HAS_AEAD_OCB = false; 200 version(AEAD_GCM) { enum BOTAN_HAS_AEAD_GCM = true; } 201 else enum BOTAN_HAS_AEAD_GCM = false; 202 version(AEAD_SIV) { enum BOTAN_HAS_AEAD_SIV = true; } 203 else enum BOTAN_HAS_AEAD_SIV = false; 204 version(AEAD_CHACHA20_POLY1305){enum BOTAN_HAS_AEAD_CHACHA20_POLY1305 = true; } 205 else enum BOTAN_HAS_AEAD_CHACHA20_POLY1305 = false; 206 207 version(RFC6979) { enum BOTAN_HAS_RFC6979_GENERATOR = true; } 208 else enum BOTAN_HAS_RFC6979_GENERATOR = false; 209 version(RSA) { enum BOTAN_HAS_RSA = true; } 210 else enum BOTAN_HAS_RSA = false; 211 version(RW) { enum BOTAN_HAS_RW = true; } 212 else enum BOTAN_HAS_RW = false; 213 version(DLIES) { enum BOTAN_HAS_DLIES = true; } 214 else enum BOTAN_HAS_DLIES = false; 215 version(DSA) { enum BOTAN_HAS_DSA = true; } 216 else enum BOTAN_HAS_DSA = false; 217 version(ECDSA) { enum BOTAN_HAS_ECDSA = true; } 218 else enum BOTAN_HAS_ECDSA = false; 219 version(ElGamal) { enum BOTAN_HAS_ELGAMAL = true; } 220 else enum BOTAN_HAS_ELGAMAL = false; 221 version(GOST_3410) { enum BOTAN_HAS_GOST_34_10_2001 = true; } 222 else enum BOTAN_HAS_GOST_34_10_2001 = false; 223 version(Nyberg_Rueppel) { enum BOTAN_HAS_NYBERG_RUEPPEL = true; } 224 else enum BOTAN_HAS_NYBERG_RUEPPEL = false; 225 version(Diffie_Hellman) { enum BOTAN_HAS_DIFFIE_HELLMAN = true; } 226 else enum BOTAN_HAS_DIFFIE_HELLMAN = false; 227 version(ECDH) { enum BOTAN_HAS_ECDH = true; } 228 else enum BOTAN_HAS_ECDH = false; 229 version(Curve25519) { enum BOTAN_HAS_CURVE25519 = true; } 230 else enum BOTAN_HAS_CURVE25519 = false; 231 version(AES) { enum BOTAN_HAS_AES = true; } 232 else enum BOTAN_HAS_AES = false; 233 version(Blowfish) { enum BOTAN_HAS_BLOWFISH = true; } 234 else enum BOTAN_HAS_BLOWFISH = false; 235 version(Camellia) { enum BOTAN_HAS_CAMELLIA = true; } 236 else enum BOTAN_HAS_CAMELLIA = false; 237 version(CAST) { enum BOTAN_HAS_CAST = true; } 238 else enum BOTAN_HAS_CAST = false; 239 version(Cascade) { enum BOTAN_HAS_CASCADE = true; } 240 else enum BOTAN_HAS_CASCADE = false; 241 version(DES) { enum BOTAN_HAS_DES = true; } 242 else enum BOTAN_HAS_DES = false; 243 version(GOST_28147) { enum BOTAN_HAS_GOST_28147_89 = true; } 244 else enum BOTAN_HAS_GOST_28147_89 = false; 245 version(IDEA) { enum BOTAN_HAS_IDEA = true; } 246 else enum BOTAN_HAS_IDEA = false; 247 version(KASUMI) { enum BOTAN_HAS_KASUMI = true; } 248 else enum BOTAN_HAS_KASUMI = false; 249 version(LION) { enum BOTAN_HAS_LION = true; } 250 else enum BOTAN_HAS_LION = false; 251 version(MARS) { enum BOTAN_HAS_MARS = true; } 252 else enum BOTAN_HAS_MARS = false; 253 version(MISTY1) { enum BOTAN_HAS_MISTY1 = true; } 254 else enum BOTAN_HAS_MISTY1 = false; 255 version(NOEKEON) { enum BOTAN_HAS_NOEKEON = true; } 256 else enum BOTAN_HAS_NOEKEON = false; 257 version(RC2) { enum BOTAN_HAS_RC2 = true; } 258 else enum BOTAN_HAS_RC2 = false; 259 version(RC5) { enum BOTAN_HAS_RC5 = true; } 260 else enum BOTAN_HAS_RC5 = false; 261 version(RC6) { enum BOTAN_HAS_RC6 = true; } 262 else enum BOTAN_HAS_RC6 = false; 263 version(SAFER) { enum BOTAN_HAS_SAFER = true; } 264 else enum BOTAN_HAS_SAFER = false; 265 version(SEED) { enum BOTAN_HAS_SEED = true; } 266 else enum BOTAN_HAS_SEED = false; 267 version(Serpent) { enum BOTAN_HAS_SERPENT = true; } 268 else enum BOTAN_HAS_SERPENT = false; 269 version(TEA) { enum BOTAN_HAS_TEA = true; } 270 else enum BOTAN_HAS_TEA = false; 271 version(Twofish) { enum BOTAN_HAS_TWOFISH = true; } 272 else enum BOTAN_HAS_TWOFISH = false; 273 version(Threefish) { enum BOTAN_HAS_THREEFISH_512 = true; } 274 else enum BOTAN_HAS_THREEFISH_512 = false; 275 version(XTEA) { enum BOTAN_HAS_XTEA = true; } 276 else enum BOTAN_HAS_XTEA = false; 277 version(Adler32) { enum BOTAN_HAS_ADLER32 = true; } 278 else enum BOTAN_HAS_ADLER32 = false; 279 version(CRC24) { enum BOTAN_HAS_CRC24 = true; } 280 else enum BOTAN_HAS_CRC24 = false; 281 version(CRC32) { enum BOTAN_HAS_CRC32 = true; } 282 else enum BOTAN_HAS_CRC32 = false; 283 version(GOST_3411) { enum BOTAN_HAS_GOST_34_11 = true; } 284 else enum BOTAN_HAS_GOST_34_11 = false; 285 version(HAS_160) { enum BOTAN_HAS_HAS_160 = true; } 286 else enum BOTAN_HAS_HAS_160 = false; 287 version(Keccak) { enum BOTAN_HAS_KECCAK = true; } 288 else enum BOTAN_HAS_KECCAK = false; 289 version(MD2) { enum BOTAN_HAS_MD2 = true; } 290 else enum BOTAN_HAS_MD2 = false; 291 version(MD4) { enum BOTAN_HAS_MD4 = true; } 292 else enum BOTAN_HAS_MD4 = false; 293 version(MD5) { enum BOTAN_HAS_MD5 = true; } 294 else enum BOTAN_HAS_MD5 = false; 295 version(RIPEMD_128) { enum BOTAN_HAS_RIPEMD_128 = true; } 296 else enum BOTAN_HAS_RIPEMD_128 = false; 297 version(RIPEMD_160) { enum BOTAN_HAS_RIPEMD_160 = true; } 298 else enum BOTAN_HAS_RIPEMD_160 = false; 299 version(SHA1) { enum BOTAN_HAS_SHA1 = true; } 300 else enum BOTAN_HAS_SHA1 = false; 301 version(SHA2_32) { enum BOTAN_HAS_SHA2_32 = true; } 302 else enum BOTAN_HAS_SHA2_32 = false; 303 version(SHA2_64) { enum BOTAN_HAS_SHA2_64 = true; } 304 else enum BOTAN_HAS_SHA2_64 = false; 305 version(Skein_512) { enum BOTAN_HAS_SKEIN_512 = true; } 306 else enum BOTAN_HAS_SKEIN_512 = false; 307 version(Tiger) { enum BOTAN_HAS_TIGER = true; } 308 else enum BOTAN_HAS_TIGER = false; 309 version(Whirlpool) { enum BOTAN_HAS_WHIRLPOOL = true; } 310 else enum BOTAN_HAS_WHIRLPOOL = false; 311 version(ParallelHash) { enum BOTAN_HAS_PARALLEL_HASH = true; } 312 else enum BOTAN_HAS_PARALLEL_HASH = false; 313 version(Comb4P) { enum BOTAN_HAS_COMB4P = true; } 314 else enum BOTAN_HAS_COMB4P = false; 315 version(POLY1305) { enum BOTAN_HAS_POLY1305 = true; } 316 else enum BOTAN_HAS_POLY1305 = false; 317 version(CBC_MAC) { enum BOTAN_HAS_CBC_MAC = true; } 318 else enum BOTAN_HAS_CBC_MAC = false; 319 version(CMAC) { enum BOTAN_HAS_CMAC = true; } 320 else enum BOTAN_HAS_CMAC = false; 321 version(HMAC) { enum BOTAN_HAS_HMAC = true; } 322 else enum BOTAN_HAS_HMAC = false; 323 version(SSL3_MAC) { enum BOTAN_HAS_SSL3_MAC = true; } 324 else enum BOTAN_HAS_SSL3_MAC = false; 325 version(ANSI_X919_MAC) { enum BOTAN_HAS_ANSI_X919_MAC = true; } 326 else enum BOTAN_HAS_ANSI_X919_MAC = false; 327 version(PBKDF1) { enum BOTAN_HAS_PBKDF1 = true; } 328 else enum BOTAN_HAS_PBKDF1 = false; 329 version(PBKDF2) { enum BOTAN_HAS_PBKDF2 = true; } 330 else enum BOTAN_HAS_PBKDF2 = false; 331 version(RC4) { enum BOTAN_HAS_RC4 = true; } 332 else enum BOTAN_HAS_RC4 = false; 333 version(ChaCha) { enum BOTAN_HAS_CHACHA = true; } 334 else enum BOTAN_HAS_CHACHA = false; 335 version(Salsa20) { enum BOTAN_HAS_SALSA20 = true; } 336 else enum BOTAN_HAS_SALSA20 = false; 337 version(AES_SSSE3) { debug enum BOTAN_HAS_AES_SSSE3 = true; static assert(BOTAN_HAS_SIMD); } 338 else enum BOTAN_HAS_AES_SSSE3 = false; 339 version(Serpent_SIMD) { enum BOTAN_HAS_SERPENT_SIMD = true; static assert(BOTAN_HAS_SIMD_OPS); } 340 else enum BOTAN_HAS_SERPENT_SIMD = false; 341 version(Threefish_512_AVX2){ enum BOTAN_HAS_THREEFISH_512_AVX2 = true; static assert(BOTAN_HAS_SIMD_ALTIVEC); } 342 else enum BOTAN_HAS_THREEFISH_512_AVX2 = false; 343 version(Noekeon_SIMD) { enum BOTAN_HAS_NOEKEON_SIMD = true; static assert(BOTAN_HAS_SIMD_OPS); } 344 else enum BOTAN_HAS_NOEKEON_SIMD = false; 345 version(XTEA_SIMD) { enum BOTAN_HAS_XTEA_SIMD = true; static assert(BOTAN_HAS_SIMD_OPS); } 346 else enum BOTAN_HAS_XTEA_SIMD = false; 347 version(IDEA_SSE2 ) { enum BOTAN_HAS_IDEA_SSE2 = true; static assert(BOTAN_HAS_SIMD); } 348 else enum BOTAN_HAS_IDEA_SSE2 = false; 349 version(SHA1_SSE2) { enum BOTAN_HAS_SHA1_SSE2 = true; static assert(BOTAN_HAS_SIMD); } 350 else enum BOTAN_HAS_SHA1_SSE2 = false; 351 352 353 version(Engine_ASM) { enum BOTAN_HAS_ENGINE_ASSEMBLER = true; } 354 else enum BOTAN_HAS_ENGINE_ASSEMBLER = false; 355 version(Engine_AES_ISA) { enum BOTAN_HAS_ENGINE_AES_ISA = true; } 356 else enum BOTAN_HAS_ENGINE_AES_ISA = false; 357 version(Engine_SIMD) { enum BOTAN_HAS_ENGINE_SIMD = true; static assert(BOTAN_HAS_SIMD); } 358 else enum BOTAN_HAS_ENGINE_SIMD = false; 359 version(Engine_GNU_MP) { enum BOTAN_HAS_ENGINE_GNU_MP = true; } 360 else enum BOTAN_HAS_ENGINE_GNU_MP = false; 361 version(Engine_OPENSSL) { enum BOTAN_HAS_ENGINE_OPENSSL = true; } 362 else enum BOTAN_HAS_ENGINE_OPENSSL = false; 363 version(Entropy_HRTimer) { enum BOTAN_HAS_ENTROPY_SRC_HIGH_RESOLUTION_TIMER = true; } 364 else enum BOTAN_HAS_ENTROPY_SRC_HIGH_RESOLUTION_TIMER = false; 365 version(Entropy_Rdrand) { enum BOTAN_HAS_ENTROPY_SRC_RDRAND = true; } 366 else enum BOTAN_HAS_ENTROPY_SRC_RDRAND = false; 367 version(Entropy_DevRand) { enum BOTAN_HAS_ENTROPY_SRC_DEV_RANDOM = true; } 368 else enum BOTAN_HAS_ENTROPY_SRC_DEV_RANDOM = false; 369 version(Entropy_EGD) { enum BOTAN_HAS_ENTROPY_SRC_EGD = true; } 370 else enum BOTAN_HAS_ENTROPY_SRC_EGD = false; 371 version(Entropy_UnixProc){ enum BOTAN_HAS_ENTROPY_SRC_UNIX_PROCESS_RUNNER = true; } 372 else enum BOTAN_HAS_ENTROPY_SRC_UNIX_PROCESS_RUNNER = false; 373 version(Entropy_BEOS) { enum BOTAN_HAS_ENTROPY_SRC_BEOS = true; } 374 else enum BOTAN_HAS_ENTROPY_SRC_BEOS = false; 375 version(Entropy_CAPI) { enum BOTAN_HAS_ENTROPY_SRC_CAPI = true; } 376 else enum BOTAN_HAS_ENTROPY_SRC_CAPI = false; 377 version(Entropy_Win32) { enum BOTAN_HAS_ENTROPY_SRC_WIN32 = true; } 378 else enum BOTAN_HAS_ENTROPY_SRC_WIN32 = false; 379 version(Entropy_ProcWalk){ enum BOTAN_HAS_ENTROPY_SRC_PROC_WALKER = true; } 380 else enum BOTAN_HAS_ENTROPY_SRC_PROC_WALKER = false; 381 version(EMSA1) { enum BOTAN_HAS_EMSA1 = true; } 382 else enum BOTAN_HAS_EMSA1 = false; 383 version(EMSA1_BSI) { enum BOTAN_HAS_EMSA1_BSI = true; } 384 else enum BOTAN_HAS_EMSA1_BSI = false; 385 version(EMSA_X931) { enum BOTAN_HAS_EMSA_X931 = true; } 386 else enum BOTAN_HAS_EMSA_X931 = false; 387 version(EMSA_PKCS1) { enum BOTAN_HAS_EMSA_PKCS1 = true; } 388 else enum BOTAN_HAS_EMSA_PKCS1 = false; 389 version(EMSA_PSSR) { enum BOTAN_HAS_EMSA_PSSR = true; } 390 else enum BOTAN_HAS_EMSA_PSSR = false; 391 version(EMSA_RAW) { enum BOTAN_HAS_EMSA_RAW = true; } 392 else enum BOTAN_HAS_EMSA_RAW = false; 393 version(EME_OAEP) { enum BOTAN_HAS_EME_OAEP = true; } 394 else enum BOTAN_HAS_EME_OAEP = false; 395 version(EME_PKCS1v15) { enum BOTAN_HAS_EME_PKCS1_V15 = true; } 396 else enum BOTAN_HAS_EME_PKCS1_V15 = false; 397 version(PBE_PKCSv20) { enum BOTAN_HAS_PBE_PKCS_V20 = true; } 398 else enum BOTAN_HAS_PBE_PKCS_V20 = false; 399 version(GCM_CLMUL) { enum BOTAN_HAS_GCM_CLMUL = true; static assert(BOTAN_HAS_SIMD); } 400 else enum BOTAN_HAS_GCM_CLMUL = false; 401 402 version(X931_RNG) { enum BOTAN_HAS_X931_RNG = true; } 403 else enum BOTAN_HAS_X931_RNG = false; 404 version(HMAC_DRBG) { enum BOTAN_HAS_HMAC_DRBG = true; } 405 else enum BOTAN_HAS_HMAC_DRBG = false; 406 407 version(ZLib) { enum BOTAN_HAS_ZLIB = true; } 408 else enum BOTAN_HAS_ZLIB = false; 409 version(Bzip2) { enum BOTAN_HAS_BZIP2 = true; } 410 else enum BOTAN_HAS_BZIP2 = false; 411 version(LZMA) { enum BOTAN_HAS_LZMA = true; } 412 else enum BOTAN_HAS_LZMA = false; 413 414 version(OPENSSL_NO_SHA) { enum BOTAN_HAS_OPENSSL_NO_SHA = true; } 415 else enum BOTAN_HAS_OPENSSL_NO_SHA = false; 416 version(OPENSSL_NO_SHA256) { enum BOTAN_HAS_OPENSSL_NO_SHA256 = true; } 417 else enum BOTAN_HAS_OPENSSL_NO_SHA256 = false; 418 version(OPENSSL_NO_SHA512) { enum BOTAN_HAS_OPENSSL_NO_SHA512 = true; } 419 else enum BOTAN_HAS_OPENSSL_NO_SHA512 = false; 420 version(OPENSSL_NO_MD2) { enum BOTAN_HAS_OPENSSL_NO_MD2 = true; } 421 else enum BOTAN_HAS_OPENSSL_NO_MD2 = false; 422 version(OPENSSL_NO_MD4) { enum BOTAN_HAS_OPENSSL_NO_MD4 = true; } 423 else enum BOTAN_HAS_OPENSSL_NO_MD4 = false; 424 version(OPENSSL_NO_MD5) { enum BOTAN_HAS_OPENSSL_NO_MD5 = true; } 425 else enum BOTAN_HAS_OPENSSL_NO_MD5 = false; 426 version(OPENSSL_NO_RIPEMD) { enum BOTAN_HAS_OPENSSL_NO_RIPEMD = true; } 427 else enum BOTAN_HAS_OPENSSL_NO_RIPEMD = false; 428 429 430 version(OPENSSL_NO_AES) { enum BOTAN_HAS_OPENSSL_NO_AES = true; } 431 else enum BOTAN_HAS_OPENSSL_NO_AES = false; 432 version(OPENSSL_NO_DES) { enum BOTAN_HAS_OPENSSL_NO_DES = true; } 433 else enum BOTAN_HAS_OPENSSL_NO_DES = false; 434 version(OPENSSL_NO_BF) { enum BOTAN_HAS_OPENSSL_NO_BF = true; } 435 else enum BOTAN_HAS_OPENSSL_NO_BF = false; 436 version(OPENSSL_NO_CAST) { enum BOTAN_HAS_OPENSSL_NO_CAST = true; } 437 else enum BOTAN_HAS_OPENSSL_NO_CAST = false; 438 version(OPENSSL_NO_CAMELLIA){ enum BOTAN_HAS_OPENSSL_NO_CAMELLIA = true; } 439 else enum BOTAN_HAS_OPENSSL_NO_CAMELLIA = false; 440 version(OPENSSL_NO_RC2) { enum BOTAN_HAS_OPENSSL_NO_RC2 = true; } 441 else enum BOTAN_HAS_OPENSSL_NO_RC2 = false; 442 version(OPENSSL_NO_RC5) { enum BOTAN_HAS_OPENSSL_NO_RC5 = true; } 443 else enum BOTAN_HAS_OPENSSL_NO_RC5 = false; 444 version(OPENSSL_NO_IDEA) { enum BOTAN_HAS_OPENSSL_NO_IDEA = true; } 445 else enum BOTAN_HAS_OPENSSL_NO_IDEA = false; 446 version(OPENSSL_NO_SEED) { enum BOTAN_HAS_OPENSSL_NO_SEED = true; } 447 else enum BOTAN_HAS_OPENSSL_NO_SEED = false; 448 449 // workaround for DMD bug in release 450 static if (!__traits(compiles, BOTAN_HAS_AES_SSSE3)) enum BOTAN_HAS_AES_SSSE3 = false; 451 452 enum { // LogLevel 453 Trace, 454 Info, 455 Debug, 456 Error, 457 None 458 } 459 460 void logTrace(ARGS...)(lazy ARGS args) { 461 static if (LogLevel <= Trace) { 462 import std.stdio: writeln; 463 writeln("T: ", args); 464 } 465 } 466 467 void logInfo(ARGS...)(lazy ARGS args) { 468 static if (LogLevel <= Info) { 469 import std.stdio: writeln; 470 writeln("I: ", args); 471 } 472 } 473 474 void logDebug(ARGS...)(lazy ARGS args) { 475 476 static if (LogLevel <= Debug) { 477 import std.stdio: writeln; 478 writeln("D: ", args); 479 } 480 } 481 482 void logError(ARGS...)(lazy ARGS args) { 483 static if (LogLevel <= Error) { 484 import std.stdio: writeln, stderr; 485 stderr.writeln("E: ", args); 486 } 487 }