12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // Copyright 2012 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.
- // +build amd64
- package aes
- // defined in asm_$GOARCH.s
- func hasAsm() bool
- 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)
- var useAsm = hasAsm()
- func encryptBlock(xk []uint32, dst, src []byte) {
- if useAsm {
- encryptBlockAsm(len(xk)/4-1, &xk[0], &dst[0], &src[0])
- } else {
- encryptBlockGo(xk, dst, src)
- }
- }
- func decryptBlock(xk []uint32, dst, src []byte) {
- if useAsm {
- decryptBlockAsm(len(xk)/4-1, &xk[0], &dst[0], &src[0])
- } else {
- decryptBlockGo(xk, dst, src)
- }
- }
- func expandKey(key []byte, enc, dec []uint32) {
- if useAsm {
- rounds := 10
- switch len(key) {
- case 128 / 8:
- rounds = 10
- case 192 / 8:
- rounds = 12
- case 256 / 8:
- rounds = 14
- }
- expandKeyAsm(rounds, &key[0], &enc[0], &dec[0])
- } else {
- expandKeyGo(key, enc, dec)
- }
- }
|