Name Description Size
assert.cpp 1366
assert.h Called when an assertion fails Throws an Exception object 6686
bit_ops.h If top bit of arg is set, return ~0. Otherwise return 0. 3495
boost
bswap.h Swap a 16 bit integer 2521
calendar.cpp Portable replacement for timegm, _mkgmtime, etc Algorithm due to Howard Hinnant See https://howardhinnant.github.io/date_algorithms.html#days_from_civil for details and explaination. The code is slightly simplified by our assumption that the date is at least 1970, which is sufficient for our purposes. 3629
calendar.h Struct representing a particular date and time 2498
charset.cpp Convert from UTF-8 to ISO 8859-1 6555
charset.h Convert a sequence of UCS-2 (big endian) characters to a UTF-8 string This is used for ASN.1 BMPString type @param ucs2 the sequence of UCS-2 characters @param len length of ucs2 in bytes, must be a multiple of 2 2031
codec_base.h Perform encoding using the base provided @param base object giving access to the encodings specifications @param output an array of at least base.encode_max_output bytes @param input is some binary data @param input_length length of input in bytes @param input_consumed is an output parameter which says how many bytes of input were actually consumed. If less than input_length, then the range input[consumed:length] should be passed in later along with more input. @param final_inputs true iff this is the last input, in which case padding chars will be applied if needed @return number of bytes written to output 6777
compiler.h This header is included in both C++ and C (via ffi.h) and should only contain macro definitions. Avoid C++ style // comments in this file. 5918
cpuid
ct_utils.cpp Ensure at runtime that offset <= input_length. This is an invalid input, but we can't throw without using the poisoned value. Instead, if it happens, set offset to be equal to the input length (so output_bytes becomes 0 and the returned vector is empty) 2415
ct_utils.h Use valgrind to mark the contents of memory as being undefined. Valgrind will accept operations which manipulate undefined values, but will warn if an undefined value is used to decided a conditional jump or a load/store address. So if we poison all of our inputs we can confirm that the operations in question are truly const time when compiled by whatever compiler is in use. Even better, the VALGRIND_MAKE_MEM_* macros work even when the program is not run under valgrind (though with a few cycles of overhead, which is unfortunate in final binaries as these annotations tend to be used in fairly important loops). This approach was first used in ctgrind (https://github.com/agl/ctgrind) but calling the valgrind mecheck API directly works just as well and doesn't require a custom patched valgrind. 10104
data_src.cpp Read a single byte from the DataSource 4676
data_src.h This class represents an abstract data source object. 5416
database.h Bind statement parameters 2348
donna128.h 3187
dyn_load
exceptn.cpp 5674
exceptn.h Different types of errors that might occur 12883
filesystem.cpp 3348
filesystem.h No_Filesystem_Access Exception 649
ghash
http_util
info.txt 462
loadstor.h Byte extraction @param byte_num which byte to extract, 0 == highest byte @param input the value to extract from @return byte byte_num of input 17830
locking_allocator
mem_ops.cpp 1407
mem_ops.h Allocate a memory buffer by some method. This should only be used for primitive types (uint8_t, uint32_t, etc). @param elems the number of elements @param elem_size the size of each element @return pointer to allocated and zeroed memory, or throw std::bad_alloc on failure 9927
mem_pool
mul128.h Perform a 64x64->128 bit multiplication 3455
mutex.h 1039
os_utils.cpp Call memset through a static volatile pointer, which the compiler should not elide. This construct should be safe in conforming compilers, but who knows. I did confirm that on x86-64 GCC 6.1 and Clang 3.8 both create code that saves the memset address in the data segment and unconditionally loads and jumps to that address. 20544
os_utils.h This header is internal (not installed) and these functions are not intended to be called by applications. However they are given public visibility (using BOTAN_TEST_API macro) for the tests. This also probably allows them to be overridden by the application on ELF systems, but this hasn't been tested. 6205
parsing.cpp Convert a string into a time duration 10885
parsing.h Parse a SCAN-style algorithm name @param scan_name the name @return the name components 4925
poly_dbl
prefetch.h 822
read_cfg.cpp 1303
read_kv.cpp 1780
rotate.h Bit rotation left by a compile-time constant amount @param input the input word @return input rotated left by ROT bits 2664
rounding.h Round up @param n a non-negative integer @param align_to the alignment boundary @return n rounded up to a multiple of align_to 1054
safeint.h 951
simd
socket
sqlite3
stl_compatibility.h std::make_unique functionality similar as we have in C++14. C++11 version based on proposal for C++14 implemenatation by Stephan T. Lavavej source: https://isocpp.org/files/papers/N3656.txt 1868
stl_util.h Return the keys of a map as a std::set 2356
thread_utils
timer.cpp 3442
timer.h 4146
types.h @mainpage Botan Crypto Library API Reference <dl> <dt>Abstract Base Classes<dd> BlockCipher, HashFunction, KDF, MessageAuthenticationCode, RandomNumberGenerator, StreamCipher, SymmetricAlgorithm, AEAD_Mode, Cipher_Mode <dt>Public Key Interface Classes<dd> PK_Key_Agreement, PK_Signer, PK_Verifier, PK_Encryptor, PK_Decryptor <dt>Authenticated Encryption Modes<dd> @ref CCM_Mode "CCM", @ref ChaCha20Poly1305_Mode "ChaCha20Poly1305", @ref EAX_Mode "EAX", @ref GCM_Mode "GCM", @ref OCB_Mode "OCB", @ref SIV_Mode "SIV" <dt>Block Ciphers<dd> @ref aria.h "ARIA", @ref aes.h "AES", @ref Blowfish, @ref camellia.h "Camellia", @ref Cascade_Cipher "Cascade", @ref CAST_128 "CAST-128", @ref CAST_128 "CAST-256", DES, @ref DESX "DES-X", @ref TripleDES "3DES", @ref GOST_28147_89 "GOST 28147-89", IDEA, KASUMI, Lion, MISTY1, Noekeon, SEED, Serpent, SHACAL2, SM4, @ref Threefish_512 "Threefish", Twofish, XTEA <dt>Stream Ciphers<dd> ChaCha, @ref CTR_BE "CTR", OFB, RC4, Salsa20 <dt>Hash Functions<dd> BLAKE2b, @ref GOST_34_11 "GOST 34.11", @ref Keccak_1600 "Keccak", MD4, MD5, @ref RIPEMD_160 "RIPEMD-160", @ref SHA_160 "SHA-1", @ref SHA_224 "SHA-224", @ref SHA_256 "SHA-256", @ref SHA_384 "SHA-384", @ref SHA_512 "SHA-512", @ref Skein_512 "Skein-512", SM3, Streebog, Tiger, Whirlpool <dt>Non-Cryptographic Checksums<dd> Adler32, CRC24, CRC32 <dt>Message Authentication Codes<dd> @ref CBC_MAC "CBC-MAC", CMAC, HMAC, Poly1305, SipHash, ANSI_X919_MAC <dt>Random Number Generators<dd> AutoSeeded_RNG, HMAC_DRBG, Processor_RNG, System_RNG <dt>Key Derivation<dd> HKDF, @ref KDF1 "KDF1 (IEEE 1363)", @ref KDF1_18033 "KDF1 (ISO 18033-2)", @ref KDF2 "KDF2 (IEEE 1363)", @ref sp800_108.h "SP800-108", @ref SP800_56C "SP800-56C", @ref PKCS5_PBKDF1 "PBKDF1 (PKCS#5), @ref PKCS5_PBKDF2 "PBKDF2 (PKCS#5)" <dt>Password Hashing<dd> @ref argon2.h "Argon2", @ref scrypt.h "scrypt", @ref bcrypt.h "bcrypt", @ref passhash9.h "passhash9" <dt>Public Key Cryptosystems<dd> @ref dlies.h "DLIES", @ref ecies.h "ECIES", @ref elgamal.h "ElGamal" @ref rsa.h "RSA", @ref newhope.h "NewHope", @ref mceliece.h "McEliece" and @ref mceies.h "MCEIES", @ref sm2.h "SM2" <dt>Public Key Signature Schemes<dd> @ref dsa.h "DSA", @ref ecdsa.h "ECDSA", @ref ecgdsa.h "ECGDSA", @ref eckcdsa.h "ECKCDSA", @ref gost_3410.h "GOST 34.10-2001", @ref sm2.h "SM2", @ref xmss.h "XMSS" <dt>Key Agreement<dd> @ref dh.h "DH", @ref ecdh.h "ECDH" <dt>Compression<dd> @ref bzip2.h "bzip2", @ref lzma.h "lzma", @ref zlib.h "zlib" <dt>TLS<dd> TLS::Client, TLS::Server, TLS::Policy, TLS::Protocol_Version, TLS::Callbacks, TLS::Ciphersuite, TLS::Session, TLS::Session_Manager, Credentials_Manager <dt>X.509<dd> X509_Certificate, X509_CRL, X509_CA, Certificate_Extension, PKCS10_Request, X509_Cert_Options, Certificate_Store, Certificate_Store_In_SQL, Certificate_Store_In_SQLite </dl> 4529
uuid
version.cpp These are intentionally compiled rather than inlined, so an application running against a shared library can test the true version they are running against. 2503
version.h Get information describing the version 2598