mirror of
https://github.com/emmansun/gmsm.git
synced 2025-04-22 02:06:18 +08:00
32 lines
733 B
Go
32 lines
733 B
Go
//go:build (amd64 && !generic) || (arm64 && !generic)
|
|
// +build amd64,!generic arm64,!generic
|
|
|
|
package zuc
|
|
|
|
import (
|
|
"github.com/emmansun/gmsm/internal/subtle"
|
|
)
|
|
|
|
//go:noescape
|
|
func genKeyStreamRev32Asm(keyStream []byte, pState *zucState32)
|
|
|
|
func xorKeyStream(c *zucState32, dst, src []byte) {
|
|
if supportsAES {
|
|
words := len(src) / 4
|
|
// handle complete words first
|
|
if words > 0 {
|
|
dstWords := dst[:words*4]
|
|
genKeyStreamRev32Asm(dstWords, c)
|
|
subtle.XORBytes(dst, src, dstWords)
|
|
}
|
|
// handle remain bytes
|
|
if words*4 < len(src) {
|
|
var singleWord [4]byte
|
|
genKeyStreamRev32Asm(singleWord[:], c)
|
|
subtle.XORBytes(dst[words*4:], src[words*4:], singleWord[:])
|
|
}
|
|
} else {
|
|
xorKeyStreamGeneric(c, dst, src)
|
|
}
|
|
}
|