1 /*===---- riscv_crypto.h - RISC-V Zk* intrinsics ---------------------------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===-----------------------------------------------------------------------===
8 */
9
10 #ifndef __RISCV_CRYPTO_H
11 #define __RISCV_CRYPTO_H
12
13 #include <stdint.h>
14
15 #if defined(__cplusplus)
16 extern "C" {
17 #endif
18
19 #if defined(__riscv_zknd)
20 #if __riscv_xlen == 32
21 #define __riscv_aes32dsi(x, y, bs) __builtin_riscv_aes32dsi(x, y, bs)
22 #define __riscv_aes32dsmi(x, y, bs) __builtin_riscv_aes32dsmi(x, y, bs)
23 #endif
24
25 #if __riscv_xlen == 64
26 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_aes64ds(uint64_t __x,uint64_t __y)27 __riscv_aes64ds(uint64_t __x, uint64_t __y) {
28 return __builtin_riscv_aes64ds(__x, __y);
29 }
30
31 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_aes64dsm(uint64_t __x,uint64_t __y)32 __riscv_aes64dsm(uint64_t __x, uint64_t __y) {
33 return __builtin_riscv_aes64dsm(__x, __y);
34 }
35
36 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_aes64im(uint64_t __x)37 __riscv_aes64im(uint64_t __x) {
38 return __builtin_riscv_aes64im(__x);
39 }
40 #endif
41 #endif // defined(__riscv_zknd)
42
43 #if defined(__riscv_zkne)
44 #if __riscv_xlen == 32
45 #define __riscv_aes32esi(x, y, bs) __builtin_riscv_aes32esi(x, y, bs)
46 #define __riscv_aes32esmi(x, y, bs) __builtin_riscv_aes32esmi(x, y, bs)
47 #endif
48
49 #if __riscv_xlen == 64
50 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_aes64es(uint64_t __x,uint64_t __y)51 __riscv_aes64es(uint64_t __x, uint64_t __y) {
52 return __builtin_riscv_aes64es(__x, __y);
53 }
54
55 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_aes64esm(uint64_t __x,uint64_t __y)56 __riscv_aes64esm(uint64_t __x, uint64_t __y) {
57 return __builtin_riscv_aes64esm(__x, __y);
58 }
59 #endif
60 #endif // defined(__riscv_zkne)
61
62 #if defined(__riscv_zknd) || defined(__riscv_zkne)
63 #if __riscv_xlen == 64
64 #define __riscv_aes64ks1i(x, rnum) __builtin_riscv_aes64ks1i(x, rnum)
65
66 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_aes64ks2(uint64_t __x,uint64_t __y)67 __riscv_aes64ks2(uint64_t __x, uint64_t __y) {
68 return __builtin_riscv_aes64ks2(__x, __y);
69 }
70 #endif
71 #endif // defined(__riscv_zknd) || defined(__riscv_zkne)
72
73 #if defined(__riscv_zknh)
74 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha256sig0(uint32_t __x)75 __riscv_sha256sig0(uint32_t __x) {
76 return __builtin_riscv_sha256sig0(__x);
77 }
78
79 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha256sig1(uint32_t __x)80 __riscv_sha256sig1(uint32_t __x) {
81 return __builtin_riscv_sha256sig1(__x);
82 }
83
84 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha256sum0(uint32_t __x)85 __riscv_sha256sum0(uint32_t __x) {
86 return __builtin_riscv_sha256sum0(__x);
87 }
88
89 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha256sum1(uint32_t __x)90 __riscv_sha256sum1(uint32_t __x) {
91 return __builtin_riscv_sha256sum1(__x);
92 }
93
94 #if __riscv_xlen == 32
95 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sig0h(uint32_t __x,uint32_t __y)96 __riscv_sha512sig0h(uint32_t __x, uint32_t __y) {
97 return __builtin_riscv_sha512sig0h(__x, __y);
98 }
99
100 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sig0l(uint32_t __x,uint32_t __y)101 __riscv_sha512sig0l(uint32_t __x, uint32_t __y) {
102 return __builtin_riscv_sha512sig0l(__x, __y);
103 }
104
105 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sig1h(uint32_t __x,uint32_t __y)106 __riscv_sha512sig1h(uint32_t __x, uint32_t __y) {
107 return __builtin_riscv_sha512sig1h(__x, __y);
108 }
109
110 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sig1l(uint32_t __x,uint32_t __y)111 __riscv_sha512sig1l(uint32_t __x, uint32_t __y) {
112 return __builtin_riscv_sha512sig1l(__x, __y);
113 }
114
115 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sum0r(uint32_t __x,uint32_t __y)116 __riscv_sha512sum0r(uint32_t __x, uint32_t __y) {
117 return __builtin_riscv_sha512sum0r(__x, __y);
118 }
119
120 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sum1r(uint32_t __x,uint32_t __y)121 __riscv_sha512sum1r(uint32_t __x, uint32_t __y) {
122 return __builtin_riscv_sha512sum1r(__x, __y);
123 }
124 #endif
125
126 #if __riscv_xlen == 64
127 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sig0(uint64_t __x)128 __riscv_sha512sig0(uint64_t __x) {
129 return __builtin_riscv_sha512sig0(__x);
130 }
131
132 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sig1(uint64_t __x)133 __riscv_sha512sig1(uint64_t __x) {
134 return __builtin_riscv_sha512sig1(__x);
135 }
136
137 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sum0(uint64_t __x)138 __riscv_sha512sum0(uint64_t __x) {
139 return __builtin_riscv_sha512sum0(__x);
140 }
141
142 static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__riscv_sha512sum1(uint64_t __x)143 __riscv_sha512sum1(uint64_t __x) {
144 return __builtin_riscv_sha512sum1(__x);
145 }
146 #endif
147 #endif // defined(__riscv_zknh)
148
149 #if defined(__riscv_zksh)
150 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sm3p0(uint32_t __x)151 __riscv_sm3p0(uint32_t __x) {
152 return __builtin_riscv_sm3p0(__x);
153 }
154
155 static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__riscv_sm3p1(uint32_t __x)156 __riscv_sm3p1(uint32_t __x) {
157 return __builtin_riscv_sm3p1(__x);
158 }
159 #endif // defined(__riscv_zksh)
160
161 #if defined(__riscv_zksed)
162 #define __riscv_sm4ed(x, y, bs) __builtin_riscv_sm4ed(x, y, bs);
163 #define __riscv_sm4ks(x, y, bs) __builtin_riscv_sm4ks(x, y, bs);
164 #endif // defined(__riscv_zksed)
165
166 #if defined(__cplusplus)
167 }
168 #endif
169
170 #endif
171