Line data Source code
1 : #if !FD_HAS_HOSTED 2 : #error "This target requires FD_HAS_HOSTED" 3 : #endif 4 : 5 : #include <assert.h> 6 : #include <stdio.h> 7 : #include <stdlib.h> 8 : 9 : #include "../../util/fd_util.h" 10 : #include "../../util/sanitize/fd_fuzz.h" 11 : #include "fd_ed25519.h" 12 : 13 : int 14 : LLVMFuzzerInitialize( int * argc, 15 18 : char *** argv ) { 16 : /* Set up shell without signal handlers */ 17 18 : putenv( "FD_LOG_BACKTRACE=0" ); 18 18 : fd_boot( argc, argv ); 19 18 : atexit( fd_halt ); 20 18 : fd_log_level_core_set(3); /* crash on warning log */ 21 18 : return 0; 22 18 : } 23 : 24 : struct signature_test { 25 : uchar prv[ 32 ]; 26 : uchar msg[ ]; 27 : }; 28 : typedef struct signature_test signature_test_t; 29 : 30 : int 31 : LLVMFuzzerTestOneInput( uchar const * data, 32 12 : ulong size ) { 33 12 : if( FD_UNLIKELY( size<32UL ) ) return -1; 34 : 35 12 : signature_test_t * const test = ( signature_test_t * const ) data; 36 12 : ulong sz = size-32UL; 37 : 38 12 : fd_sha512_t _sha[1]; 39 12 : fd_sha512_t *sha = fd_sha512_join( fd_sha512_new( _sha ) ); 40 : 41 12 : uchar pub[ 32 ]; 42 12 : fd_ed25519_public_from_private( pub, test->prv, sha ); 43 : 44 12 : uchar sig[ 64 ]; 45 12 : void * sig_result = fd_ed25519_sign( sig, test->msg, sz, pub, test->prv, sha ); 46 12 : int cmp = memcmp( ( char * ) sig, ( char * ) sig_result, 64UL ); 47 12 : assert( cmp == 0 ); 48 : 49 0 : int verify_result = fd_ed25519_verify( test->msg, sz, sig, pub, sha ); 50 12 : assert( verify_result == FD_ED25519_SUCCESS ); 51 : 52 12 : FD_FUZZ_MUST_BE_COVERED; 53 12 : return 0; 54 12 : }