diff options
Diffstat (limited to 'lib/mbedtls-2.27.0/programs/fuzz/common.c')
-rw-r--r-- | lib/mbedtls-2.27.0/programs/fuzz/common.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/mbedtls-2.27.0/programs/fuzz/common.c b/lib/mbedtls-2.27.0/programs/fuzz/common.c new file mode 100644 index 0000000..ac39ee2 --- /dev/null +++ b/lib/mbedtls-2.27.0/programs/fuzz/common.c @@ -0,0 +1,96 @@ +#include "common.h" +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "mbedtls/ctr_drbg.h" + +mbedtls_time_t dummy_constant_time( mbedtls_time_t* time ) +{ + (void) time; + return 0x5af2a056; +} + +void dummy_init() +{ +#if defined(MBEDTLS_PLATFORM_TIME_ALT) + mbedtls_platform_set_time( dummy_constant_time ); +#else + fprintf(stderr, "Warning: fuzzing without constant time\n"); +#endif +} + +int dummy_send( void *ctx, const unsigned char *buf, size_t len ) +{ + //silence warning about unused parameter + (void) ctx; + (void) buf; + + //pretends we wrote everything ok + if( len > INT_MAX ) { + return( -1 ); + } + return( (int) len ); +} + +int fuzz_recv( void *ctx, unsigned char *buf, size_t len ) +{ + //reads from the buffer from fuzzer + fuzzBufferOffset_t * biomemfuzz = (fuzzBufferOffset_t *) ctx; + + if(biomemfuzz->Offset == biomemfuzz->Size) { + //EOF + return( 0 ); + } + if( len > INT_MAX ) { + return( -1 ); + } + if( len + biomemfuzz->Offset > biomemfuzz->Size ) { + //do not overflow + len = biomemfuzz->Size - biomemfuzz->Offset; + } + memcpy(buf, biomemfuzz->Data + biomemfuzz->Offset, len); + biomemfuzz->Offset += len; + return( (int) len ); +} + +int dummy_random( void *p_rng, unsigned char *output, size_t output_len ) +{ + int ret; + size_t i; + +#if defined(MBEDTLS_CTR_DRBG_C) + //use mbedtls_ctr_drbg_random to find bugs in it + ret = mbedtls_ctr_drbg_random(p_rng, output, output_len); +#else + (void) p_rng; + ret = 0; +#endif + for (i=0; i<output_len; i++) { + //replace result with pseudo random + output[i] = (unsigned char) rand(); + } + return( ret ); +} + +int dummy_entropy( void *data, unsigned char *output, size_t len ) +{ + size_t i; + (void) data; + + //use mbedtls_entropy_func to find bugs in it + //test performance impact of entropy + //ret = mbedtls_entropy_func(data, output, len); + for (i=0; i<len; i++) { + //replace result with pseudo random + output[i] = (unsigned char) rand(); + } + return( 0 ); +} + +int fuzz_recv_timeout( void *ctx, unsigned char *buf, size_t len, + uint32_t timeout ) +{ + (void) timeout; + + return fuzz_recv(ctx, buf, len); +} |