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  }