github.com/decred/dcrlnd@v0.7.6/fuzz/brontide/static_resp_enc_dec.go (about) 1 //go:build gofuzz 2 // +build gofuzz 3 4 package brontidefuzz 5 6 import ( 7 "bytes" 8 "math" 9 ) 10 11 // Fuzz_static_resp_enc_dec is a go-fuzz harness that tests round-trip 12 // encryption and decryption between the responder and the initiator. 13 func Fuzz_static_resp_enc_dec(data []byte) int { 14 // Ensure that length of message is not greater than max allowed size. 15 if len(data) > math.MaxUint16 { 16 return 1 17 } 18 19 // This will return brontide machines with static keys. 20 initiator, responder := getStaticBrontideMachines() 21 22 // Complete the brontide handshake. 23 completeHandshake(initiator, responder) 24 25 var b bytes.Buffer 26 27 // Encrypt the message using WriteMessage w/ responder machine. 28 if err := responder.WriteMessage(data); err != nil { 29 nilAndPanic(initiator, responder, err) 30 } 31 32 // Flush the encrypted message w/ responder machine. 33 if _, err := responder.Flush(&b); err != nil { 34 nilAndPanic(initiator, responder, err) 35 } 36 37 // Decrypt the ciphertext using ReadMessage w/ initiator machine. 38 plaintext, err := initiator.ReadMessage(&b) 39 if err != nil { 40 nilAndPanic(initiator, responder, err) 41 } 42 43 // Check that the decrypted message and the original message are equal. 44 if !bytes.Equal(data, plaintext) { 45 nilAndPanic(initiator, responder, nil) 46 } 47 48 return 1 49 }