f82653cb06
This allows gofuzz to store the mutating input as coverage if it reaches any new coverage, even if it didn't make it to the end of the test.
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
// +build gofuzz
|
|
|
|
package brontidefuzz
|
|
|
|
import (
|
|
"bytes"
|
|
"math"
|
|
)
|
|
|
|
// Fuzz_random_resp_enc_dec is a go-fuzz harness that tests round-trip
|
|
// encryption and decryption between the responder and the initiator.
|
|
func Fuzz_random_resp_enc_dec(data []byte) int {
|
|
// Ensure that length of message is not greater than max allowed size.
|
|
if len(data) > math.MaxUint16 {
|
|
return 1
|
|
}
|
|
|
|
// This will return brontide machines with random keys.
|
|
initiator, responder := getBrontideMachines()
|
|
|
|
// Complete the brontide handshake.
|
|
completeHandshake(initiator, responder)
|
|
|
|
var b bytes.Buffer
|
|
|
|
// Encrypt the message using WriteMessage w/ responder machine.
|
|
if err := responder.WriteMessage(data); err != nil {
|
|
nilAndPanic(initiator, responder, err)
|
|
}
|
|
|
|
// Flush the encrypted message w/ responder machine.
|
|
if _, err := responder.Flush(&b); err != nil {
|
|
nilAndPanic(initiator, responder, err)
|
|
}
|
|
|
|
// Decrypt the ciphertext using ReadMessage w/ initiator machine.
|
|
plaintext, err := initiator.ReadMessage(&b)
|
|
if err != nil {
|
|
nilAndPanic(initiator, responder, err)
|
|
}
|
|
|
|
// Check that the decrypted message and the original message are equal.
|
|
if !bytes.Equal(data, plaintext) {
|
|
nilAndPanic(initiator, responder, nil)
|
|
}
|
|
|
|
return 1
|
|
}
|