// +build gofuzz

package brontidefuzz

import (
	"github.com/lightningnetwork/lnd/brontide"
)

// Fuzz_random_acttwo is a go-fuzz harness for ActTwo in the brontide
// handshake.
func Fuzz_random_acttwo(data []byte) int {
	// Check if data is large enough.
	if len(data) < brontide.ActTwoSize {
		return 1
	}

	// This will return brontide machines with random keys.
	initiator, _ := getBrontideMachines()

	// Generate ActOne - this isn't sent to the responder because nothing is
	// done with the responder machine and this would slow down fuzzing.
	// GenActOne needs to be called to set the appropriate state in the
	// initiator machine.
	_, err := initiator.GenActOne()
	if err != nil {
		nilAndPanic(initiator, nil, err)
	}

	// Copy data into [ActTwoSize]byte.
	var actTwo [brontide.ActTwoSize]byte
	copy(actTwo[:], data)

	// Initiator receives ActTwo, should fail.
	if err := initiator.RecvActTwo(actTwo); err == nil {
		nilAndPanic(initiator, nil, nil)
	}

	return 1
}
