1 // SPDX-License-Identifier: BSD-2-Clause
2 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
3  *
4  * LibTomCrypt is a library that provides various cryptographic
5  * algorithms in a highly modular and flexible manner.
6  *
7  * The library is free for all purposes without any express
8  * guarantee it works.
9  */
10 #include "tomcrypt_private.h"
11 
12 /**
13   @file crypt.c
14   Build strings, Tom St Denis
15 */
16 #define NAME_VALUE(s) #s"="NAME(s)
17 #define NAME(s) #s
18 
19 const char *crypt_build_settings =
20    "LibTomCrypt " SCRYPT " (www.libtom.net)\n"
21    "LibTomCrypt is public domain software.\n"
22 #if defined(INCLUDE_BUILD_DATE)
23    "Built on " __DATE__ " at " __TIME__ "\n"
24 #endif
25    "\n\nEndianness: "
26 #if defined(ENDIAN_NEUTRAL)
27    "neutral/"
28 #endif
29 #if defined(ENDIAN_LITTLE)
30    "little"
31 #elif defined(ENDIAN_BIG)
32    "big"
33 #endif
34    #if defined(ENDIAN_32BITWORD)
35    " (32-bit words)\n"
36    #elif defined(ENDIAN_64BITWORD)
37    " (64-bit words)\n"
38    #else
39    " (no wordsize defined)\n"
40    #endif
41    "Clean stack: "
42 #if defined(LTC_CLEAN_STACK)
43    "enabled\n"
44 #else
45    "disabled\n"
46 #endif
47    "\nCiphers built-in:\n"
48 #if defined(LTC_BLOWFISH)
49    "   Blowfish\n"
50 #endif
51 #if defined(LTC_RC2)
52    "   RC2\n"
53 #endif
54 #if defined(LTC_RC5)
55    "   RC5\n"
56 #endif
57 #if defined(LTC_RC6)
58    "   RC6\n"
59 #endif
60 #if defined(LTC_SAFERP)
61    "   Safer+\n"
62 #endif
63 #if defined(LTC_SAFER)
64    "   Safer\n"
65 #endif
66 #if defined(LTC_RIJNDAEL)
67    "   Rijndael\n"
68 #endif
69 #if defined(LTC_XTEA)
70    "   XTEA\n"
71 #endif
72 #if defined(LTC_TWOFISH)
73    "   Twofish "
74    #if defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES)
75        "(small, tables, all_tables)\n"
76    #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES)
77        "(small, tables)\n"
78    #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_ALL_TABLES)
79        "(small, all_tables)\n"
80    #elif defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES)
81        "(tables, all_tables)\n"
82    #elif defined(LTC_TWOFISH_SMALL)
83        "(small)\n"
84    #elif defined(LTC_TWOFISH_TABLES)
85        "(tables)\n"
86    #elif defined(LTC_TWOFISH_ALL_TABLES)
87        "(all_tables)\n"
88    #else
89        "\n"
90    #endif
91 #endif
92 #if defined(LTC_DES)
93    "   DES\n"
94 #endif
95 #if defined(LTC_CAST5)
96    "   CAST5\n"
97 #endif
98 #if defined(LTC_NOEKEON)
99    "   Noekeon\n"
100 #endif
101 #if defined(LTC_SKIPJACK)
102    "   Skipjack\n"
103 #endif
104 #if defined(LTC_KHAZAD)
105    "   Khazad\n"
106 #endif
107 #if defined(LTC_ANUBIS)
108    "   Anubis "
109 #endif
110 #if defined(LTC_ANUBIS_TWEAK)
111    " (tweaked)"
112 #endif
113    "\n"
114 #if defined(LTC_KSEED)
115    "   KSEED\n"
116 #endif
117 #if defined(LTC_KASUMI)
118    "   KASUMI\n"
119 #endif
120 #if defined(LTC_MULTI2)
121    "   MULTI2\n"
122 #endif
123 #if defined(LTC_CAMELLIA)
124    "   Camellia\n"
125 #endif
126 #if defined(LTC_IDEA)
127    "   IDEA\n"
128 #endif
129 #if defined(LTC_SERPENT)
130    "   Serpent\n"
131 #endif
132    "Stream ciphers built-in:\n"
133 #if defined(LTC_CHACHA)
134    "   ChaCha\n"
135 #endif
136 #if defined(LTC_SALSA20)
137    "   Salsa20\n"
138 #endif
139 #if defined(LTC_XSALSA20)
140    "   XSalsa20\n"
141 #endif
142 #if defined(LTC_SOSEMANUK)
143    "   Sosemanuk\n"
144 #endif
145 #if defined(LTC_RABBIT)
146    "   Rabbit\n"
147 #endif
148 #if defined(LTC_RC4_STREAM)
149    "   RC4\n"
150 #endif
151 #if defined(LTC_SOBER128_STREAM)
152    "   SOBER128\n"
153 #endif
154 
155     "\nHashes built-in:\n"
156 #if defined(LTC_SHA3)
157    "   SHA3\n"
158 #endif
159 #if defined(LTC_KECCAK)
160    "   KECCAK\n"
161 #endif
162 #if defined(LTC_SHA512)
163    "   SHA-512\n"
164 #endif
165 #if defined(LTC_SHA384)
166    "   SHA-384\n"
167 #endif
168 #if defined(LTC_SHA512_256)
169    "   SHA-512/256\n"
170 #endif
171 #if defined(LTC_SHA256)
172    "   SHA-256\n"
173 #endif
174 #if defined(LTC_SHA512_224)
175    "   SHA-512/224\n"
176 #endif
177 #if defined(LTC_SHA224)
178    "   SHA-224\n"
179 #endif
180 #if defined(LTC_TIGER)
181    "   TIGER\n"
182 #endif
183 #if defined(LTC_SHA1)
184    "   SHA1\n"
185 #endif
186 #if defined(LTC_MD5)
187    "   MD5\n"
188 #endif
189 #if defined(LTC_MD4)
190    "   MD4\n"
191 #endif
192 #if defined(LTC_MD2)
193    "   MD2\n"
194 #endif
195 #if defined(LTC_RIPEMD128)
196    "   RIPEMD128\n"
197 #endif
198 #if defined(LTC_RIPEMD160)
199    "   RIPEMD160\n"
200 #endif
201 #if defined(LTC_RIPEMD256)
202    "   RIPEMD256\n"
203 #endif
204 #if defined(LTC_RIPEMD320)
205    "   RIPEMD320\n"
206 #endif
207 #if defined(LTC_WHIRLPOOL)
208    "   WHIRLPOOL\n"
209 #endif
210 #if defined(LTC_BLAKE2S)
211    "   BLAKE2S\n"
212 #endif
213 #if defined(LTC_BLAKE2B)
214    "   BLAKE2B\n"
215 #endif
216 #if defined(LTC_CHC_HASH)
217    "   CHC_HASH\n"
218 #endif
219 
220     "\nBlock Chaining Modes:\n"
221 #if defined(LTC_CFB_MODE)
222     "   CFB\n"
223 #endif
224 #if defined(LTC_OFB_MODE)
225     "   OFB\n"
226 #endif
227 #if defined(LTC_ECB_MODE)
228     "   ECB\n"
229 #endif
230 #if defined(LTC_CBC_MODE)
231     "   CBC\n"
232 #endif
233 #if defined(LTC_CTR_MODE)
234     "   CTR\n"
235 #endif
236 #if defined(LTC_LRW_MODE)
237     "   LRW"
238 #if defined(LTC_LRW_TABLES)
239     " (tables) "
240 #endif
241     "\n"
242 #endif
243 #if defined(LTC_F8_MODE)
244     "   F8\n"
245 #endif
246 #if defined(LTC_XTS_MODE)
247     "   XTS\n"
248 #endif
249 
250     "\nMACs:\n"
251 #if defined(LTC_HMAC)
252     "   HMAC\n"
253 #endif
254 #if defined(LTC_OMAC)
255     "   OMAC\n"
256 #endif
257 #if defined(LTC_PMAC)
258     "   PMAC\n"
259 #endif
260 #if defined(LTC_PELICAN)
261     "   PELICAN\n"
262 #endif
263 #if defined(LTC_XCBC)
264     "   XCBC\n"
265 #endif
266 #if defined(LTC_F9_MODE)
267     "   F9\n"
268 #endif
269 #if defined(LTC_POLY1305)
270     "   POLY1305\n"
271 #endif
272 #if defined(LTC_BLAKE2SMAC)
273     "   BLAKE2S MAC\n"
274 #endif
275 #if defined(LTC_BLAKE2BMAC)
276     "   BLAKE2B MAC\n"
277 #endif
278 
279     "\nENC + AUTH modes:\n"
280 #if defined(LTC_EAX_MODE)
281     "   EAX\n"
282 #endif
283 #if defined(LTC_OCB_MODE)
284     "   OCB\n"
285 #endif
286 #if defined(LTC_OCB3_MODE)
287     "   OCB3\n"
288 #endif
289 #if defined(LTC_CCM_MODE)
290     "   CCM\n"
291 #endif
292 #if defined(LTC_GCM_MODE)
293     "   GCM"
294 #if defined(LTC_GCM_TABLES)
295     " (tables) "
296 #endif
297 #if defined(LTC_GCM_TABLES_SSE2)
298     " (SSE2) "
299 #endif
300    "\n"
301 #endif
302 #if defined(LTC_CHACHA20POLY1305_MODE)
303     "   CHACHA20POLY1305\n"
304 #endif
305 
306     "\nPRNG:\n"
307 #if defined(LTC_YARROW)
308     "   Yarrow ("NAME_VALUE(LTC_YARROW_AES)")\n"
309 #endif
310 #if defined(LTC_SPRNG)
311     "   SPRNG\n"
312 #endif
313 #if defined(LTC_RC4)
314     "   RC4\n"
315 #endif
316 #if defined(LTC_CHACHA20_PRNG)
317     "   ChaCha20\n"
318 #endif
319 #if defined(LTC_FORTUNA)
320     "   Fortuna (" NAME_VALUE(LTC_FORTUNA_POOLS) ", "
321 #if defined(LTC_FORTUNA_RESEED_RATELIMIT_TIMED)
322     "LTC_FORTUNA_RESEED_RATELIMIT_TIMED, "
323 #else
324     "LTC_FORTUNA_RESEED_RATELIMIT_STATIC, " NAME_VALUE(LTC_FORTUNA_WD)
325 #endif
326     ")\n"
327 #endif
328 #if defined(LTC_SOBER128)
329     "   SOBER128\n"
330 #endif
331 
332     "\nPK Crypto:\n"
333 #if defined(LTC_MRSA)
334     "   RSA"
335 #if defined(LTC_RSA_BLINDING) && defined(LTC_RSA_CRT_HARDENING)
336     " (with blinding and CRT hardening)"
337 #elif defined(LTC_RSA_BLINDING)
338     " (with blinding)"
339 #elif defined(LTC_RSA_CRT_HARDENING)
340     " (with CRT hardening)"
341 #endif
342     "\n"
343 #endif
344 #if defined(LTC_MDH)
345     "   DH\n"
346 #endif
347 #if defined(LTC_MECC)
348     "   ECC"
349 #if defined(LTC_ECC_TIMING_RESISTANT)
350     " (with blinding)"
351 #endif
352     "\n"
353 #endif
354 #if defined(LTC_MDSA)
355     "   DSA\n"
356 #endif
357 #if defined(LTC_CURVE25519)
358 #if defined(LTC_CURVE25519)
359     "   Ed25519\n"
360 #endif
361 #if defined(LTC_CURVE25519)
362     "   X25519\n"
363 #endif
364 #endif
365 #if defined(LTC_PK_MAX_RETRIES)
366     "   "NAME_VALUE(LTC_PK_MAX_RETRIES)"\n"
367 #endif
368 
369     "\nMPI (Math):\n"
370 #if defined(LTC_MPI)
371     "   LTC_MPI\n"
372 #endif
373 #if defined(LTM_DESC)
374     "   LTM_DESC\n"
375 #endif
376 #if defined(TFM_DESC)
377     "   TFM_DESC\n"
378 #endif
379 #if defined(GMP_DESC)
380     "   GMP_DESC\n"
381 #endif
382 #if defined(LTC_MILLER_RABIN_REPS)
383     "   "NAME_VALUE(LTC_MILLER_RABIN_REPS)"\n"
384 #endif
385 
386     "\nCompiler:\n"
387 #if defined(_WIN64)
388     "   WIN64 platform detected.\n"
389 #elif defined(_WIN32)
390     "   WIN32 platform detected.\n"
391 #endif
392 #if defined(__CYGWIN__)
393     "   CYGWIN Detected.\n"
394 #endif
395 #if defined(__DJGPP__)
396     "   DJGPP Detected.\n"
397 #endif
398 #if defined(_MSC_VER)
399     "   MSVC compiler detected.\n"
400 #endif
401 #if defined(__clang_version__)
402     "   Clang compiler " __clang_version__ ".\n"
403 #elif defined(INTEL_CC)
404     "   Intel C Compiler " __VERSION__ ".\n"
405 #elif defined(__GNUC__)         /* clang and icc also define __GNUC__ */
406     "   GCC compiler " __VERSION__ ".\n"
407 #endif
408 
409 #if defined(__x86_64__)
410     "   x86-64 detected.\n"
411 #endif
412 #if defined(LTC_PPC32)
413     "   PPC32 detected.\n"
414 #endif
415 
416     "\nVarious others: "
417 #if defined(ARGTYPE)
418     " " NAME_VALUE(ARGTYPE) " "
419 #endif
420 #if defined(LTC_ADLER32)
421     " ADLER32 "
422 #endif
423 #if defined(LTC_BASE64)
424     " BASE64 "
425 #endif
426 #if defined(LTC_BASE64_URL)
427     " BASE64-URL-SAFE "
428 #endif
429 #if defined(LTC_BASE32)
430     " BASE32 "
431 #endif
432 #if defined(LTC_BASE16)
433     " BASE16 "
434 #endif
435 #if defined(LTC_CRC32)
436     " CRC32 "
437 #endif
438 #if defined(LTC_DER)
439     " DER "
440     " " NAME_VALUE(LTC_DER_MAX_RECURSION) " "
441 #endif
442 #if defined(LTC_PKCS_1)
443     " PKCS#1 "
444 #endif
445 #if defined(LTC_PKCS_5)
446     " PKCS#5 "
447 #endif
448 #if defined(LTC_PKCS_8)
449     " PKCS#8 "
450 #endif
451 #if defined(LTC_PKCS_12)
452     " PKCS#12 "
453 #endif
454 #if defined(LTC_PADDING)
455     " PADDING "
456 #endif
457 #if defined(LTC_HKDF)
458     " HKDF "
459 #endif
460 #if defined(LTC_PBES)
461     " PBES1 "
462     " PBES2 "
463 #endif
464 #if defined(LTC_SSH)
465     " SSH "
466 #endif
467 #if defined(LTC_DEVRANDOM)
468     " LTC_DEVRANDOM "
469 #endif
470 #if defined(LTC_TRY_URANDOM_FIRST)
471     " LTC_TRY_URANDOM_FIRST "
472 #endif
473 #if defined(LTC_RNG_GET_BYTES)
474     " LTC_RNG_GET_BYTES "
475 #endif
476 #if defined(LTC_RNG_MAKE_PRNG)
477     " LTC_RNG_MAKE_PRNG "
478 #endif
479 #if defined(LTC_PRNG_ENABLE_LTC_RNG)
480     " LTC_PRNG_ENABLE_LTC_RNG "
481 #endif
482 #if defined(LTC_HASH_HELPERS)
483     " LTC_HASH_HELPERS "
484 #endif
485 #if defined(LTC_VALGRIND)
486     " LTC_VALGRIND "
487 #endif
488 #if defined(LTC_TEST)
489     " LTC_TEST "
490 #endif
491 #if defined(LTC_TEST_DBG)
492     " " NAME_VALUE(LTC_TEST_DBG) " "
493 #endif
494 #if defined(LTC_TEST_EXT)
495     " LTC_TEST_EXT "
496 #endif
497 #if defined(LTC_SMALL_CODE)
498     " LTC_SMALL_CODE "
499 #endif
500 #if defined(LTC_NO_FILE)
501     " LTC_NO_FILE "
502 #endif
503 #if defined(LTC_FILE_READ_BUFSIZE)
504     " " NAME_VALUE(LTC_FILE_READ_BUFSIZE) " "
505 #endif
506 #if defined(LTC_FAST)
507     " LTC_FAST "
508 #endif
509 #if defined(LTC_NO_FAST)
510     " LTC_NO_FAST "
511 #endif
512 #if defined(LTC_NO_BSWAP)
513     " LTC_NO_BSWAP "
514 #endif
515 #if defined(LTC_NO_ASM)
516     " LTC_NO_ASM "
517 #endif
518 #if defined(LTC_ROx_ASM)
519     " LTC_ROx_ASM "
520 #if defined(LTC_NO_ROLC)
521     " LTC_NO_ROLC "
522 #endif
523 #endif
524 #if defined(LTC_NO_TEST)
525     " LTC_NO_TEST "
526 #endif
527 #if defined(LTC_NO_TABLES)
528     " LTC_NO_TABLES "
529 #endif
530 #if defined(LTC_PTHREAD)
531     " LTC_PTHREAD "
532 #endif
533 #if defined(LTC_EASY)
534     " LTC_EASY "
535 #endif
536 #if defined(LTC_MECC_ACCEL)
537     " LTC_MECC_ACCEL "
538 #endif
539 #if defined(LTC_MECC_FP)
540     " LTC_MECC_FP "
541 #endif
542 #if defined(LTC_ECC_SHAMIR)
543     " LTC_ECC_SHAMIR "
544 #endif
545 #if defined(LTC_CLOCK_GETTIME)
546     " LTC_CLOCK_GETTIME "
547 #endif
548     "\n"
549     ;
550 
551 
552 /* ref:         $Format:%D$ */
553 /* git commit:  $Format:%H$ */
554 /* commit time: $Format:%ai$ */
555