diff options
Diffstat (limited to 'src/tests/test_fuzz.cpp')
-rw-r--r-- | src/tests/test_fuzz.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/tests/test_fuzz.cpp b/src/tests/test_fuzz.cpp new file mode 100644 index 000000000..a44110f24 --- /dev/null +++ b/src/tests/test_fuzz.cpp @@ -0,0 +1,68 @@ +/* +* (C) 2015 Jack Lloyd +* +* Botan is released under the Simplified BSD License (see license.txt) +*/ + +#include "tests.h" +#include <chrono> +#include <iostream> + +#if defined(BOTAN_HAS_X509_CERTIFICATES) + +#include <botan/x509cert.h> +#include <botan/x509_crl.h> +#include <botan/internal/filesystem.h> +#include <botan/base64.h> + +#endif + +namespace { + +size_t test_x509_fuzz() + { + size_t fails = 0; + +#if defined(BOTAN_HAS_X509_CERTIFICATES) + + size_t tests = 0; + const std::string fuzz_data = TEST_DATA_DIR "/fuzz"; + + for(auto vec: Botan::get_files_recursive(fuzz_data + "/x509")) + { + ++tests; + + auto start = std::chrono::system_clock::now(); + try + { + // TODO: check for memory consumption? + Botan::X509_Certificate cert(vec); + } + catch(std::exception& e) + { + //std::cout << e.what() << "\n"; + } + auto end = std::chrono::system_clock::now(); + + uint64_t duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count(); + + if(duration > 100) + { + std::cout << "Fuzz test " << vec << " took " << duration << " ms\n"; + } + } + + test_report("Fuzz Checks", tests, fails); +#endif + + return fails; + } + +} + +size_t test_fuzzer() + { + size_t fails = 0; + fails += test_x509_fuzz(); + return fails; + } |