Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / libgo / go / crypto / aes / cipher_asm.go
1 // Copyright 2012 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // +build amd64
6
7 package aes
8
9 // defined in asm_$GOARCH.s
10 func hasAsm() bool
11 func encryptBlockAsm(nr int, xk *uint32, dst, src *byte)
12 func decryptBlockAsm(nr int, xk *uint32, dst, src *byte)
13 func expandKeyAsm(nr int, key *byte, enc *uint32, dec *uint32)
14
15 var useAsm = hasAsm()
16
17 func encryptBlock(xk []uint32, dst, src []byte) {
18         if useAsm {
19                 encryptBlockAsm(len(xk)/4-1, &xk[0], &dst[0], &src[0])
20         } else {
21                 encryptBlockGo(xk, dst, src)
22         }
23 }
24 func decryptBlock(xk []uint32, dst, src []byte) {
25         if useAsm {
26                 decryptBlockAsm(len(xk)/4-1, &xk[0], &dst[0], &src[0])
27         } else {
28                 decryptBlockGo(xk, dst, src)
29         }
30 }
31 func expandKey(key []byte, enc, dec []uint32) {
32         if useAsm {
33                 rounds := 10
34                 switch len(key) {
35                 case 128 / 8:
36                         rounds = 10
37                 case 192 / 8:
38                         rounds = 12
39                 case 256 / 8:
40                         rounds = 14
41                 }
42                 expandKeyAsm(rounds, &key[0], &enc[0], &dec[0])
43         } else {
44                 expandKeyGo(key, enc, dec)
45         }
46 }