Line data Source code
1 : #if !FD_HAS_HOSTED 2 : #error "This target requires FD_HAS_HOSTED" 3 : #endif 4 : 5 : #include <stdio.h> 6 : #include <stdlib.h> 7 : 8 : #include "../../util/fd_util.h" 9 : #include "fd_secp256k1.h" 10 : 11 : int 12 : LLVMFuzzerInitialize( int * argc, 13 18 : char *** argv ) { 14 : /* Set up shell without signal handlers */ 15 18 : putenv( "FD_LOG_BACKTRACE=0" ); 16 18 : fd_boot( argc, argv ); 17 18 : atexit( fd_halt ); 18 18 : fd_log_level_core_set(3); /* crash on warning log */ 19 18 : return 0; 20 18 : } 21 : 22 : struct verification_test { 23 : uchar msg[ 32 ]; 24 : uchar sig[ 64 ]; 25 : uchar pub[ 64 ]; 26 : }; 27 : typedef struct verification_test verification_test_t; 28 : 29 : int 30 : LLVMFuzzerTestOneInput( uchar const * data, 31 : ulong size ) { 32 : if( FD_UNLIKELY( size<sizeof(verification_test_t) ) ) return -1; 33 : 34 : verification_test_t * const test = ( verification_test_t * const ) data; 35 : uchar _pub[ 64 ]; uchar * pub = _pub; 36 : 37 : for ( int recid=0; recid<=3; recid++ ) { 38 : void * res = fd_secp256k1_recover(pub, test->msg, test->sig, recid); 39 : if ( FD_UNLIKELY( res != NULL && !memcmp( pub, test->pub, 64UL ) ) ) { 40 : // was able to verify fuzz input 41 : __builtin_trap(); 42 : } 43 : } 44 : 45 : return 0; 46 : }