INNER CODE UNIT · Go

NewCMAC

emmansun/gmsm · cbcmac/cbcmac.go:245

func NewCMAC(b cipher.Block, size int) StreamingMAC {
	if size <= 0 || size > b.BlockSize() {
		panic("cbcmac: invalid size")
	}
	blockSize := b.BlockSize()
	k1 := make([]byte, blockSize)
	k2 := make([]byte, blockSize)
	b.Encrypt(k1, k1)
	msb := shiftLeft(k1)
	k1[len(k1)-1] ^= msb * 0b10000111

	copy(k2, k1)
	msb = shiftLeft(k2)
	k2[len(k2)-1] ^= msb * 0b10000111

	d := &cmac{b: b, k1: k1, k2: k2, size: size}
	d.blockSize = blockSize
	d.tag = make([]byte, blockSize)

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…