package quic

import (
	
	
	
	
	

	
)

type statelessResetter struct {
	mx sync.Mutex
	h  hash.Hash
}

// newStatelessRetter creates a new stateless reset generator.
// It is valid to use a nil key. In that case, a random key will be used.
// This makes is impossible for on-path attackers to shut down established connections.
func newStatelessResetter( *StatelessResetKey) *statelessResetter {
	var  hash.Hash
	if  != nil {
		 = hmac.New(sha256.New, [:])
	} else {
		 := make([]byte, 32)
		_, _ = rand.Read()
		 = hmac.New(sha256.New, )
	}
	return &statelessResetter{h: }
}

func ( *statelessResetter) ( protocol.ConnectionID) protocol.StatelessResetToken {
	.mx.Lock()
	defer .mx.Unlock()

	var  protocol.StatelessResetToken
	.h.Write(.Bytes())
	copy([:], .h.Sum(nil))
	.h.Reset()
	return 
}