Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/crypto/sm4-ce-asm.h
26424 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* SM4 helper macros for Crypto Extensions
4
* Copyright (C) 2022 Tianjia Zhang <[email protected]>
5
*/
6
7
#define SM4_PREPARE(ptr) \
8
ld1 {v24.16b-v27.16b}, [ptr], #64; \
9
ld1 {v28.16b-v31.16b}, [ptr];
10
11
#define SM4_CRYPT_BLK_BE(b0) \
12
sm4e b0.4s, v24.4s; \
13
sm4e b0.4s, v25.4s; \
14
sm4e b0.4s, v26.4s; \
15
sm4e b0.4s, v27.4s; \
16
sm4e b0.4s, v28.4s; \
17
sm4e b0.4s, v29.4s; \
18
sm4e b0.4s, v30.4s; \
19
sm4e b0.4s, v31.4s; \
20
rev64 b0.4s, b0.4s; \
21
ext b0.16b, b0.16b, b0.16b, #8; \
22
rev32 b0.16b, b0.16b;
23
24
#define SM4_CRYPT_BLK(b0) \
25
rev32 b0.16b, b0.16b; \
26
SM4_CRYPT_BLK_BE(b0);
27
28
#define SM4_CRYPT_BLK2_BE(b0, b1) \
29
sm4e b0.4s, v24.4s; \
30
sm4e b1.4s, v24.4s; \
31
sm4e b0.4s, v25.4s; \
32
sm4e b1.4s, v25.4s; \
33
sm4e b0.4s, v26.4s; \
34
sm4e b1.4s, v26.4s; \
35
sm4e b0.4s, v27.4s; \
36
sm4e b1.4s, v27.4s; \
37
sm4e b0.4s, v28.4s; \
38
sm4e b1.4s, v28.4s; \
39
sm4e b0.4s, v29.4s; \
40
sm4e b1.4s, v29.4s; \
41
sm4e b0.4s, v30.4s; \
42
sm4e b1.4s, v30.4s; \
43
sm4e b0.4s, v31.4s; \
44
sm4e b1.4s, v31.4s; \
45
rev64 b0.4s, b0.4s; \
46
rev64 b1.4s, b1.4s; \
47
ext b0.16b, b0.16b, b0.16b, #8; \
48
ext b1.16b, b1.16b, b1.16b, #8; \
49
rev32 b0.16b, b0.16b; \
50
rev32 b1.16b, b1.16b; \
51
52
#define SM4_CRYPT_BLK2(b0, b1) \
53
rev32 b0.16b, b0.16b; \
54
rev32 b1.16b, b1.16b; \
55
SM4_CRYPT_BLK2_BE(b0, b1);
56
57
#define SM4_CRYPT_BLK4_BE(b0, b1, b2, b3) \
58
sm4e b0.4s, v24.4s; \
59
sm4e b1.4s, v24.4s; \
60
sm4e b2.4s, v24.4s; \
61
sm4e b3.4s, v24.4s; \
62
sm4e b0.4s, v25.4s; \
63
sm4e b1.4s, v25.4s; \
64
sm4e b2.4s, v25.4s; \
65
sm4e b3.4s, v25.4s; \
66
sm4e b0.4s, v26.4s; \
67
sm4e b1.4s, v26.4s; \
68
sm4e b2.4s, v26.4s; \
69
sm4e b3.4s, v26.4s; \
70
sm4e b0.4s, v27.4s; \
71
sm4e b1.4s, v27.4s; \
72
sm4e b2.4s, v27.4s; \
73
sm4e b3.4s, v27.4s; \
74
sm4e b0.4s, v28.4s; \
75
sm4e b1.4s, v28.4s; \
76
sm4e b2.4s, v28.4s; \
77
sm4e b3.4s, v28.4s; \
78
sm4e b0.4s, v29.4s; \
79
sm4e b1.4s, v29.4s; \
80
sm4e b2.4s, v29.4s; \
81
sm4e b3.4s, v29.4s; \
82
sm4e b0.4s, v30.4s; \
83
sm4e b1.4s, v30.4s; \
84
sm4e b2.4s, v30.4s; \
85
sm4e b3.4s, v30.4s; \
86
sm4e b0.4s, v31.4s; \
87
sm4e b1.4s, v31.4s; \
88
sm4e b2.4s, v31.4s; \
89
sm4e b3.4s, v31.4s; \
90
rev64 b0.4s, b0.4s; \
91
rev64 b1.4s, b1.4s; \
92
rev64 b2.4s, b2.4s; \
93
rev64 b3.4s, b3.4s; \
94
ext b0.16b, b0.16b, b0.16b, #8; \
95
ext b1.16b, b1.16b, b1.16b, #8; \
96
ext b2.16b, b2.16b, b2.16b, #8; \
97
ext b3.16b, b3.16b, b3.16b, #8; \
98
rev32 b0.16b, b0.16b; \
99
rev32 b1.16b, b1.16b; \
100
rev32 b2.16b, b2.16b; \
101
rev32 b3.16b, b3.16b;
102
103
#define SM4_CRYPT_BLK4(b0, b1, b2, b3) \
104
rev32 b0.16b, b0.16b; \
105
rev32 b1.16b, b1.16b; \
106
rev32 b2.16b, b2.16b; \
107
rev32 b3.16b, b3.16b; \
108
SM4_CRYPT_BLK4_BE(b0, b1, b2, b3);
109
110
#define SM4_CRYPT_BLK8_BE(b0, b1, b2, b3, b4, b5, b6, b7) \
111
sm4e b0.4s, v24.4s; \
112
sm4e b1.4s, v24.4s; \
113
sm4e b2.4s, v24.4s; \
114
sm4e b3.4s, v24.4s; \
115
sm4e b4.4s, v24.4s; \
116
sm4e b5.4s, v24.4s; \
117
sm4e b6.4s, v24.4s; \
118
sm4e b7.4s, v24.4s; \
119
sm4e b0.4s, v25.4s; \
120
sm4e b1.4s, v25.4s; \
121
sm4e b2.4s, v25.4s; \
122
sm4e b3.4s, v25.4s; \
123
sm4e b4.4s, v25.4s; \
124
sm4e b5.4s, v25.4s; \
125
sm4e b6.4s, v25.4s; \
126
sm4e b7.4s, v25.4s; \
127
sm4e b0.4s, v26.4s; \
128
sm4e b1.4s, v26.4s; \
129
sm4e b2.4s, v26.4s; \
130
sm4e b3.4s, v26.4s; \
131
sm4e b4.4s, v26.4s; \
132
sm4e b5.4s, v26.4s; \
133
sm4e b6.4s, v26.4s; \
134
sm4e b7.4s, v26.4s; \
135
sm4e b0.4s, v27.4s; \
136
sm4e b1.4s, v27.4s; \
137
sm4e b2.4s, v27.4s; \
138
sm4e b3.4s, v27.4s; \
139
sm4e b4.4s, v27.4s; \
140
sm4e b5.4s, v27.4s; \
141
sm4e b6.4s, v27.4s; \
142
sm4e b7.4s, v27.4s; \
143
sm4e b0.4s, v28.4s; \
144
sm4e b1.4s, v28.4s; \
145
sm4e b2.4s, v28.4s; \
146
sm4e b3.4s, v28.4s; \
147
sm4e b4.4s, v28.4s; \
148
sm4e b5.4s, v28.4s; \
149
sm4e b6.4s, v28.4s; \
150
sm4e b7.4s, v28.4s; \
151
sm4e b0.4s, v29.4s; \
152
sm4e b1.4s, v29.4s; \
153
sm4e b2.4s, v29.4s; \
154
sm4e b3.4s, v29.4s; \
155
sm4e b4.4s, v29.4s; \
156
sm4e b5.4s, v29.4s; \
157
sm4e b6.4s, v29.4s; \
158
sm4e b7.4s, v29.4s; \
159
sm4e b0.4s, v30.4s; \
160
sm4e b1.4s, v30.4s; \
161
sm4e b2.4s, v30.4s; \
162
sm4e b3.4s, v30.4s; \
163
sm4e b4.4s, v30.4s; \
164
sm4e b5.4s, v30.4s; \
165
sm4e b6.4s, v30.4s; \
166
sm4e b7.4s, v30.4s; \
167
sm4e b0.4s, v31.4s; \
168
sm4e b1.4s, v31.4s; \
169
sm4e b2.4s, v31.4s; \
170
sm4e b3.4s, v31.4s; \
171
sm4e b4.4s, v31.4s; \
172
sm4e b5.4s, v31.4s; \
173
sm4e b6.4s, v31.4s; \
174
sm4e b7.4s, v31.4s; \
175
rev64 b0.4s, b0.4s; \
176
rev64 b1.4s, b1.4s; \
177
rev64 b2.4s, b2.4s; \
178
rev64 b3.4s, b3.4s; \
179
rev64 b4.4s, b4.4s; \
180
rev64 b5.4s, b5.4s; \
181
rev64 b6.4s, b6.4s; \
182
rev64 b7.4s, b7.4s; \
183
ext b0.16b, b0.16b, b0.16b, #8; \
184
ext b1.16b, b1.16b, b1.16b, #8; \
185
ext b2.16b, b2.16b, b2.16b, #8; \
186
ext b3.16b, b3.16b, b3.16b, #8; \
187
ext b4.16b, b4.16b, b4.16b, #8; \
188
ext b5.16b, b5.16b, b5.16b, #8; \
189
ext b6.16b, b6.16b, b6.16b, #8; \
190
ext b7.16b, b7.16b, b7.16b, #8; \
191
rev32 b0.16b, b0.16b; \
192
rev32 b1.16b, b1.16b; \
193
rev32 b2.16b, b2.16b; \
194
rev32 b3.16b, b3.16b; \
195
rev32 b4.16b, b4.16b; \
196
rev32 b5.16b, b5.16b; \
197
rev32 b6.16b, b6.16b; \
198
rev32 b7.16b, b7.16b;
199
200
#define SM4_CRYPT_BLK8(b0, b1, b2, b3, b4, b5, b6, b7) \
201
rev32 b0.16b, b0.16b; \
202
rev32 b1.16b, b1.16b; \
203
rev32 b2.16b, b2.16b; \
204
rev32 b3.16b, b3.16b; \
205
rev32 b4.16b, b4.16b; \
206
rev32 b5.16b, b5.16b; \
207
rev32 b6.16b, b6.16b; \
208
rev32 b7.16b, b7.16b; \
209
SM4_CRYPT_BLK8_BE(b0, b1, b2, b3, b4, b5, b6, b7);
210
211