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