github.com/decred/dcrlnd@v0.7.6/fuzz/brontide/random_actthree.go (about) 1 //go:build gofuzz 2 // +build gofuzz 3 4 package brontidefuzz 5 6 import ( 7 "github.com/decred/dcrlnd/brontide" 8 ) 9 10 // Fuzz_random_actthree is a go-fuzz harness for ActThree in the brontide 11 // handshake. 12 func Fuzz_random_actthree(data []byte) int { 13 // Check if data is large enough. 14 if len(data) < brontide.ActThreeSize { 15 return 1 16 } 17 18 // This will return brontide machines with random keys. 19 initiator, responder := getBrontideMachines() 20 21 // Generate ActOne and send to the responder. 22 actOne, err := initiator.GenActOne() 23 if err != nil { 24 nilAndPanic(initiator, responder, err) 25 } 26 27 // Receiving ActOne should succeed, so we panic on error. 28 if err := responder.RecvActOne(actOne); err != nil { 29 nilAndPanic(initiator, responder, err) 30 } 31 32 // Generate ActTwo - this is not sent to the initiator because nothing is 33 // done with the initiator after this point and it would slow down fuzzing. 34 // GenActTwo needs to be called to set the appropriate state in the 35 // responder machine. 36 _, err = responder.GenActTwo() 37 if err != nil { 38 nilAndPanic(initiator, responder, err) 39 } 40 41 // Copy data into [ActThreeSize]byte. 42 var actThree [brontide.ActThreeSize]byte 43 copy(actThree[:], data) 44 45 // Responder receives ActThree, should fail on the MAC check. 46 if err := responder.RecvActThree(actThree); err == nil { 47 nilAndPanic(initiator, responder, nil) 48 } 49 50 return 1 51 }