2024-09-30 11:36:06 +08:00
|
|
|
//go:build (amd64 || arm64 || ppc64 || ppc64le) && !purego
|
2022-07-15 16:42:39 +08:00
|
|
|
|
|
|
|
package zuc
|
|
|
|
|
2024-01-24 13:11:09 +08:00
|
|
|
import (
|
|
|
|
"github.com/emmansun/gmsm/internal/cpuid"
|
|
|
|
)
|
2022-07-15 16:42:39 +08:00
|
|
|
|
2024-09-30 17:27:26 +08:00
|
|
|
var supportsGFMUL = cpuid.HasGFMUL || cpuid.HasVPMSUMD
|
2022-07-15 16:42:39 +08:00
|
|
|
|
|
|
|
//go:noescape
|
2024-11-11 17:53:57 +08:00
|
|
|
func eiaRoundTag4(t *uint32, keyStream *uint32, p *byte)
|
2022-07-15 16:42:39 +08:00
|
|
|
|
|
|
|
func block(m *ZUC128Mac, p []byte) {
|
|
|
|
if supportsGFMUL {
|
|
|
|
for len(p) >= chunk {
|
|
|
|
m.genKeywords(m.k0[4:])
|
2024-11-11 17:53:57 +08:00
|
|
|
eiaRoundTag4(&m.t, &m.k0[0], &p[0])
|
2022-07-15 16:42:39 +08:00
|
|
|
p = p[chunk:]
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
blockGeneric(m, p)
|
|
|
|
}
|
|
|
|
}
|