func (c *Aes128Ccm) IsInitialized() bool {
	return c.ccm.Load() != nil
}
IsInitialized returns if the CipherSuite has keying material and can
encrypt/decrypt packets
package ciphersuite
import (
	"crypto/sha256"
	"fmt"
	"hash"
	"sync/atomic"
	"github.com/pion/dtls/v2/pkg/crypto/ciphersuite"
	"github.com/pion/dtls/v2/pkg/crypto/clientcertificate"
	"github.com/pion/dtls/v2/pkg/crypto/prf"
	"github.com/pion/dtls/v2/pkg/protocol/recordlayer"
)
type Aes128Ccm struct {
	ccm                   atomic.Value  
	clientCertificateType clientcertificate.Type
	id                    ID
	psk                   bool
	cryptoCCMTagLen       ciphersuite.CCMTagLen
}
func newAes128Ccm(clientCertificateType clientcertificate.Type, id ID, psk bool, cryptoCCMTagLen ciphersuite.CCMTagLen) *Aes128Ccm {
	return &Aes128Ccm{
		clientCertificateType: clientCertificateType,
		id:                    id,
		psk:                   psk,
		cryptoCCMTagLen:       cryptoCCMTagLen,
	}
}
func (c *Aes128Ccm) CertificateType() clientcertificate.Type {
	return c.clientCertificateType
}
func (c *Aes128Ccm) ID() ID {
	return c.id
}
func (c *Aes128Ccm) String() string {
	return c.id.String()
}
func (c *Aes128Ccm) HashFunc() func() hash.Hash {
	return sha256.New
}
func (c *Aes128Ccm) AuthenticationType() AuthenticationType {
	if c.psk {
		return AuthenticationTypePreSharedKey
	}
	return AuthenticationTypeCertificate
}