34 lines
895 B
Go
34 lines
895 B
Go
// In amd64, Encrypt4 implemented
|
|
package sm4
|
|
|
|
import "xdx.jelly/xgcl/internal/subtle"
|
|
|
|
//go:noescape
|
|
func encrypt4(dst []byte, src []byte, rk []uint32)
|
|
|
|
func (c *sm4CipherAsm) Encrypt4(dst, src []byte) {
|
|
if len(src) < BlockSize {
|
|
panic("gcl/sm/sm4/Encrypt: input not full block")
|
|
}
|
|
if len(dst) < BlockSize {
|
|
panic("gcl/sm/sm4/Encrypt: output not full block")
|
|
}
|
|
if subtle.InexactOverlap(dst[:BlockSize], src[:BlockSize]) {
|
|
panic("gcl/sm/sm4/Encrypt: invalid buffer overlap")
|
|
}
|
|
encrypt4(dst, src, c.encKey[:])
|
|
}
|
|
|
|
func (c *sm4CipherAsm) Decrypt4(dst, src []byte) {
|
|
if len(src) < BlockSize {
|
|
panic("gcl/sm/sm4/Decrypt: input not full block")
|
|
}
|
|
if len(dst) < BlockSize {
|
|
panic("gcl/sm/sm4/Decrypt: output not full block")
|
|
}
|
|
if subtle.InexactOverlap(dst[:BlockSize], src[:BlockSize]) {
|
|
panic("gcl/sm/sm4/Decrypt: invalid buffer overlap")
|
|
}
|
|
encrypt4(dst, src, c.decKey[:])
|
|
}
|