1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | * SM3 AVX accelerated transform. |
4 | * specified in: https://datatracker.ietf.org/doc/html/draft-sca-cfrg-sm3-02 |
5 | * |
6 | * Copyright (C) 2021 Jussi Kivilinna <jussi.kivilinna@iki.fi> |
7 | * Copyright (C) 2021 Tianjia Zhang <tianjia.zhang@linux.alibaba.com> |
8 | */ |
9 | |
10 | /* Based on SM3 AES/BMI2 accelerated work by libgcrypt at: |
11 | * https://gnupg.org/software/libgcrypt/index.html |
12 | */ |
13 | |
14 | #include <linux/linkage.h> |
15 | #include <linux/cfi_types.h> |
16 | #include <asm/frame.h> |
17 | |
18 | /* Context structure */ |
19 | |
20 | #define state_h0 0 |
21 | #define state_h1 4 |
22 | #define state_h2 8 |
23 | #define state_h3 12 |
24 | #define state_h4 16 |
25 | #define state_h5 20 |
26 | #define state_h6 24 |
27 | #define state_h7 28 |
28 | |
29 | /* Constants */ |
30 | |
31 | /* Round constant macros */ |
32 | |
33 | #define K0 2043430169 /* 0x79cc4519 */ |
34 | #define K1 -208106958 /* 0xf3988a32 */ |
35 | #define K2 -416213915 /* 0xe7311465 */ |
36 | #define K3 -832427829 /* 0xce6228cb */ |
37 | #define K4 -1664855657 /* 0x9cc45197 */ |
38 | #define K5 965255983 /* 0x3988a32f */ |
39 | #define K6 1930511966 /* 0x7311465e */ |
40 | #define K7 -433943364 /* 0xe6228cbc */ |
41 | #define K8 -867886727 /* 0xcc451979 */ |
42 | #define K9 -1735773453 /* 0x988a32f3 */ |
43 | #define K10 823420391 /* 0x311465e7 */ |
44 | #define K11 1646840782 /* 0x6228cbce */ |
45 | #define K12 -1001285732 /* 0xc451979c */ |
46 | #define K13 -2002571463 /* 0x88a32f39 */ |
47 | #define K14 289824371 /* 0x11465e73 */ |
48 | #define K15 579648742 /* 0x228cbce6 */ |
49 | #define K16 -1651869049 /* 0x9d8a7a87 */ |
50 | #define K17 991229199 /* 0x3b14f50f */ |
51 | #define K18 1982458398 /* 0x7629ea1e */ |
52 | #define K19 -330050500 /* 0xec53d43c */ |
53 | #define K20 -660100999 /* 0xd8a7a879 */ |
54 | #define K21 -1320201997 /* 0xb14f50f3 */ |
55 | #define K22 1654563303 /* 0x629ea1e7 */ |
56 | #define K23 -985840690 /* 0xc53d43ce */ |
57 | #define K24 -1971681379 /* 0x8a7a879d */ |
58 | #define K25 351604539 /* 0x14f50f3b */ |
59 | #define K26 703209078 /* 0x29ea1e76 */ |
60 | #define K27 1406418156 /* 0x53d43cec */ |
61 | #define K28 -1482130984 /* 0xa7a879d8 */ |
62 | #define K29 1330705329 /* 0x4f50f3b1 */ |
63 | #define K30 -1633556638 /* 0x9ea1e762 */ |
64 | #define K31 1027854021 /* 0x3d43cec5 */ |
65 | #define K32 2055708042 /* 0x7a879d8a */ |
66 | #define K33 -183551212 /* 0xf50f3b14 */ |
67 | #define K34 -367102423 /* 0xea1e7629 */ |
68 | #define K35 -734204845 /* 0xd43cec53 */ |
69 | #define K36 -1468409689 /* 0xa879d8a7 */ |
70 | #define K37 1358147919 /* 0x50f3b14f */ |
71 | #define K38 -1578671458 /* 0xa1e7629e */ |
72 | #define K39 1137624381 /* 0x43cec53d */ |
73 | #define K40 -2019718534 /* 0x879d8a7a */ |
74 | #define K41 255530229 /* 0x0f3b14f5 */ |
75 | #define K42 511060458 /* 0x1e7629ea */ |
76 | #define K43 1022120916 /* 0x3cec53d4 */ |
77 | #define K44 2044241832 /* 0x79d8a7a8 */ |
78 | #define K45 -206483632 /* 0xf3b14f50 */ |
79 | #define K46 -412967263 /* 0xe7629ea1 */ |
80 | #define K47 -825934525 /* 0xcec53d43 */ |
81 | #define K48 -1651869049 /* 0x9d8a7a87 */ |
82 | #define K49 991229199 /* 0x3b14f50f */ |
83 | #define K50 1982458398 /* 0x7629ea1e */ |
84 | #define K51 -330050500 /* 0xec53d43c */ |
85 | #define K52 -660100999 /* 0xd8a7a879 */ |
86 | #define K53 -1320201997 /* 0xb14f50f3 */ |
87 | #define K54 1654563303 /* 0x629ea1e7 */ |
88 | #define K55 -985840690 /* 0xc53d43ce */ |
89 | #define K56 -1971681379 /* 0x8a7a879d */ |
90 | #define K57 351604539 /* 0x14f50f3b */ |
91 | #define K58 703209078 /* 0x29ea1e76 */ |
92 | #define K59 1406418156 /* 0x53d43cec */ |
93 | #define K60 -1482130984 /* 0xa7a879d8 */ |
94 | #define K61 1330705329 /* 0x4f50f3b1 */ |
95 | #define K62 -1633556638 /* 0x9ea1e762 */ |
96 | #define K63 1027854021 /* 0x3d43cec5 */ |
97 | |
98 | /* Register macros */ |
99 | |
100 | #define RSTATE %rdi |
101 | #define RDATA %rsi |
102 | #define RNBLKS %rdx |
103 | |
104 | #define t0 %eax |
105 | #define t1 |
---|