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