In golangs AES crypto package cipher_amd64.go makes use of functions that are defined in assembler code (asm_amd64.s). In the mentioned go file only the function headers are defined:
// defined in asm_amd64.s
func encryptBlockAsm(nr int, xk *uint32, dst, src *byte)
func decryptBlockAsm(nr int, xk *uint32, dst, src *byte)
func expandKeyAsm(nr int, key *byte, enc *uint32, dec *uint32)
How can I use these functions in my own code? Just declaring the headers and importing "crypto/aes" as in the mentioned .go file does not work (undefined: expandKeyAsm
).
Thank you very much!
asm_amd64.s
contents over to your packageExample (with the asm_amd64.s in the same package):
package main
import "fmt"
func encryptBlockAsm(nr int, xk *uint32, dst, src *byte)
func decryptBlockAsm(nr int, xk *uint32, dst, src *byte)
func expandKeyAsm(nr int, key *byte, enc *uint32, dec *uint32)
func main() {
var nr int
var xk uint32
var dst byte
var src byte
fmt.Printf("Before:\t%v, %v, %v, %v
", nr, xk, dst, src)
encryptBlockAsm(nr, &xk, &dst, &src)
fmt.Printf("After:\t%v, %v, %v, %v
", nr, xk, dst, src)
}
Yields:
Before: 0, 0, 0, 0
After: 0, 0, 231, 173
I have no idea what the inputs should be but at least it demonstrates this does something :)