-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharmcrypto_arm64.go
More file actions
187 lines (159 loc) · 5.26 KB
/
Copy patharmcrypto_arm64.go
File metadata and controls
187 lines (159 loc) · 5.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
//go:build arm64 && !purego
package aes
// Hardware-accelerated AES round functions using ARM Crypto extensions
// armRound performs one AES encryption round using ARM Crypto
//
//go:noescape
func armRound(block *Block, roundKey *Block)
// armFinalRound performs the final AES encryption round using ARM Crypto
//
//go:noescape
func armFinalRound(block *Block, roundKey *Block)
// armInvRound performs one AES decryption round using ARM Crypto
//
//go:noescape
func armInvRound(block *Block, roundKey *Block)
// armInvFinalRound performs the final AES decryption round using ARM Crypto
//
//go:noescape
func armInvFinalRound(block *Block, roundKey *Block)
// armInvMixColumns performs inverse MixColumns using ARM Crypto
//
//go:noescape
func armInvMixColumns(block *Block)
// armRoundKeyFirst performs one AES encryption round with key XOR first using ARM Crypto
//
//go:noescape
func armRoundKeyFirst(block *Block, roundKey *Block)
// armFinalRoundKeyFirst performs the final AES encryption round with key XOR first using ARM Crypto
//
//go:noescape
func armFinalRoundKeyFirst(block *Block, roundKey *Block)
// armInvRoundKeyFirst performs one AES decryption round with key XOR first using ARM Crypto
//
//go:noescape
func armInvRoundKeyFirst(block *Block, roundKey *Block)
// armInvFinalRoundKeyFirst performs the final AES decryption round with key XOR first using ARM Crypto
//
//go:noescape
func armInvFinalRoundKeyFirst(block *Block, roundKey *Block)
// armRoundNoKey performs one AES encryption round without AddRoundKey using ARM Crypto
//
//go:noescape
func armRoundNoKey(block *Block)
// armFinalRoundNoKey performs the final AES encryption round without AddRoundKey using ARM Crypto
//
//go:noescape
func armFinalRoundNoKey(block *Block)
// armInvRoundNoKey performs one AES decryption round without AddRoundKey using ARM Crypto
//
//go:noescape
func armInvRoundNoKey(block *Block)
// armInvFinalRoundNoKey performs the final AES decryption round without AddRoundKey using ARM Crypto
//
//go:noescape
func armInvFinalRoundNoKey(block *Block)
// RoundHW performs one AES encryption round with hardware acceleration if available
func RoundHW(block *Block, roundKey *Block) {
if CPU.HasARMCrypto {
armRound(block, roundKey)
} else {
Round(block, roundKey)
}
}
// FinalRoundHW performs the final AES encryption round with hardware acceleration if available
func FinalRoundHW(block *Block, roundKey *Block) {
if CPU.HasARMCrypto {
armFinalRound(block, roundKey)
} else {
FinalRound(block, roundKey)
}
}
// InvRoundHW performs one AES decryption round with hardware acceleration if available
func InvRoundHW(block *Block, roundKey *Block) {
if CPU.HasARMCrypto {
armInvRound(block, roundKey)
} else {
InvRound(block, roundKey)
}
}
// InvFinalRoundHW performs the final AES decryption round with hardware acceleration if available
func InvFinalRoundHW(block *Block, roundKey *Block) {
if CPU.HasARMCrypto {
armInvFinalRound(block, roundKey)
} else {
InvFinalRound(block, roundKey)
}
}
// InvMixColumnsHW performs inverse MixColumns with hardware acceleration if available
func InvMixColumnsHW(block *Block) {
if CPU.HasARMCrypto {
armInvMixColumns(block)
} else {
InvMixColumns(block)
}
}
// RoundKeyFirstHW performs one AES encryption round (key XOR first) with hardware acceleration if available
func RoundKeyFirstHW(block *Block, roundKey *Block) {
if CPU.HasARMCrypto {
armRoundKeyFirst(block, roundKey)
} else {
RoundKeyFirst(block, roundKey)
}
}
// FinalRoundKeyFirstHW performs the final AES encryption round (key XOR first) with hardware acceleration if available
func FinalRoundKeyFirstHW(block *Block, roundKey *Block) {
if CPU.HasARMCrypto {
armFinalRoundKeyFirst(block, roundKey)
} else {
FinalRoundKeyFirst(block, roundKey)
}
}
// InvRoundKeyFirstHW performs one AES decryption round (key XOR first) with hardware acceleration if available
func InvRoundKeyFirstHW(block *Block, roundKey *Block) {
if CPU.HasARMCrypto {
armInvRoundKeyFirst(block, roundKey)
} else {
InvRoundKeyFirst(block, roundKey)
}
}
// InvFinalRoundKeyFirstHW performs the final AES decryption round (key XOR first) with hardware acceleration if available
func InvFinalRoundKeyFirstHW(block *Block, roundKey *Block) {
if CPU.HasARMCrypto {
armInvFinalRoundKeyFirst(block, roundKey)
} else {
InvFinalRoundKeyFirst(block, roundKey)
}
}
// RoundNoKeyHW performs one AES encryption round without AddRoundKey with hardware acceleration if available
func RoundNoKeyHW(block *Block) {
if CPU.HasARMCrypto {
armRoundNoKey(block)
} else {
RoundNoKey(block)
}
}
// FinalRoundNoKeyHW performs the final AES encryption round without AddRoundKey with hardware acceleration if available
func FinalRoundNoKeyHW(block *Block) {
if CPU.HasARMCrypto {
armFinalRoundNoKey(block)
} else {
FinalRoundNoKey(block)
}
}
// InvRoundNoKeyHW performs one AES decryption round without AddRoundKey with hardware acceleration if available
func InvRoundNoKeyHW(block *Block) {
if CPU.HasARMCrypto {
armInvRoundNoKey(block)
} else {
InvRoundNoKey(block)
}
}
// InvFinalRoundNoKeyHW performs the final AES decryption round without AddRoundKey with hardware acceleration if available
func InvFinalRoundNoKeyHW(block *Block) {
if CPU.HasARMCrypto {
armInvFinalRoundNoKey(block)
} else {
InvFinalRoundNoKey(block)
}
}