// Copyright 2024 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build (amd64 || arm64 || ppc64 || ppc64le) && !purego package aes //go:generate sh -c "go run ./ctr_arm64_gen.go | asmfmt > ctr_arm64.s" //go:noescape func ctrBlocks1Asm(nr int, xk *[60]uint32, dst, src *[BlockSize]byte, ivlo, ivhi uint64) //go:noescape func ctrBlocks2Asm(nr int, xk *[60]uint32, dst, src *[2 * BlockSize]byte, ivlo, ivhi uint64) //go:noescape func ctrBlocks4Asm(nr int, xk *[60]uint32, dst, src *[4 * BlockSize]byte, ivlo, ivhi uint64) //go:noescape func ctrBlocks8Asm(nr int, xk *[60]uint32, dst, src *[8 * BlockSize]byte, ivlo, ivhi uint64) func ctrBlocks1(b *Block, dst, src *[BlockSize]byte, ivlo, ivhi uint64) { if !supportsAES { ctrBlocks(b, dst[:], src[:], ivlo, ivhi) } else { ctrBlocks1Asm(b.rounds, &b.enc, dst, src, ivlo, ivhi) } } func ctrBlocks2(b *Block, dst, src *[2 * BlockSize]byte, ivlo, ivhi uint64) { if !supportsAES { ctrBlocks(b, dst[:], src[:], ivlo, ivhi) } else { ctrBlocks2Asm(b.rounds, &b.enc, dst, src, ivlo, ivhi) } } func ctrBlocks4(b *Block, dst, src *[4 * BlockSize]byte, ivlo, ivhi uint64) { if !supportsAES { ctrBlocks(b, dst[:], src[:], ivlo, ivhi) } else { ctrBlocks4Asm(b.rounds, &b.enc, dst, src, ivlo, ivhi) } } func ctrBlocks8(b *Block, dst, src *[8 * BlockSize]byte, ivlo, ivhi uint64) { if !supportsAES { ctrBlocks(b, dst[:], src[:], ivlo, ivhi) } else { ctrBlocks8Asm(b.rounds, &b.enc, dst, src, ivlo, ivhi) } }