#include <openssl/err.h>
|
#include <openssl/opensslv.h>
|
#include <openssl/rand.h>
|
#include <openssl/ssl.h>
|
|
#include <libhfuzz/libhfuzz.h>
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
#if defined(LIBRESSL_VERSION_NUMBER)
|
#define HF_SSL_IS_LIBRESSL 1
|
#endif
|
#if defined(BORINGSSL_API_VERSION)
|
#define HF_SSL_IS_BORINGSSL 1
|
#endif
|
#if !defined(LIBRESSL_VERSION_NUMBER) && !defined(BORINGSSL_API_VERSION) && \
|
OPENSSL_VERSION_NUMBER >= 0x10100000
|
#define HF_SSL_IS_OPENSSL_GE_1_1 1
|
#endif
|
#if !defined(LIBRESSL_VERSION_NUMBER) && !defined(BORINGSSL_API_VERSION) && \
|
defined(OPENSSL_VERSION_NUMBER)
|
#define HF_SSL_IS_OPENSSL
|
#endif
|
|
#define FUZZTIME 1485898104
|
time_t __wrap_time(time_t* t) {
|
if (t != NULL) *t = FUZZTIME;
|
return FUZZTIME;
|
}
|
|
#if defined(HF_SSL_IS_BORINGSSL)
|
static int hf_rnd(unsigned char* buf, size_t num)
|
#else /* defined(HF_SSL_IS_BORINGSSL) */
|
static int hf_rnd(unsigned char* buf, int num)
|
#endif /* defined(HF_SSL_IS_BORINGSSL) */
|
{
|
for (size_t v = 0; v < num; v++) {
|
buf[v] = v + 1;
|
}
|
return 1;
|
}
|
|
static int hf_stat(void) {
|
return 1;
|
}
|
|
static RAND_METHOD hf_method = {
|
NULL,
|
hf_rnd,
|
NULL,
|
NULL,
|
hf_rnd,
|
hf_stat,
|
};
|
|
static void HFResetRand(void) {
|
RAND_set_rand_method(&hf_method);
|
}
|
|
#if defined(HF_SSL_FROM_STDIN)
|
int LLVMFuzzerInitialize(int* argc, char*** argv) __attribute__((weak));
|
|
int main(int argc, char** argv) {
|
if (LLVMFuzzerInitialize) {
|
LLVMFuzzerInitialize(&argc, &argv);
|
}
|
return LLVMFuzzerTestOneInput(NULL, 0U);
|
}
|
#endif /* defined(HF_SSL_FROM_STDIN) */
|
#ifdef __cplusplus
|
} // extern "C"
|
#endif
|
|
static void HFInit(void) {
|
SSL_library_init();
|
OpenSSL_add_ssl_algorithms();
|
ERR_load_crypto_strings();
|
}
|