xref: /dpdk/drivers/crypto/openssl/compat.h (revision 7917b0d38e92e8b9ec5a870415b791420e10f11a)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Cavium Networks
3  */
4 
5 #ifndef __RTA_COMPAT_H__
6 #define __RTA_COMPAT_H__
7 
8 #if OPENSSL_VERSION_NUMBER >= 0x30000000L
9 static __rte_always_inline void
10 free_hmac_ctx(EVP_MAC_CTX *ctx)
11 {
12 	EVP_MAC_CTX_free(ctx);
13 }
14 
15 static __rte_always_inline void
16 free_cmac_ctx(EVP_MAC_CTX *ctx)
17 {
18 	EVP_MAC_CTX_free(ctx);
19 }
20 #else
21 static __rte_always_inline void
22 free_hmac_ctx(HMAC_CTX *ctx)
23 {
24 	HMAC_CTX_free(ctx);
25 }
26 
27 static __rte_always_inline void
28 free_cmac_ctx(CMAC_CTX *ctx)
29 {
30 	CMAC_CTX_free(ctx);
31 }
32 #endif
33 
34 #if (OPENSSL_VERSION_NUMBER < 0x10100000L)
35 
36 static __rte_always_inline int
37 set_rsa_params(RSA *rsa, BIGNUM *p, BIGNUM *q)
38 {
39 	rsa->p = p;
40 	rsa->q = q;
41 	return 0;
42 }
43 
44 static __rte_always_inline int
45 set_rsa_crt_params(RSA *rsa, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp)
46 {
47 	rsa->dmp1 = dmp1;
48 	rsa->dmq1 = dmq1;
49 	rsa->iqmp = iqmp;
50 	return 0;
51 }
52 
53 static __rte_always_inline int
54 set_rsa_keys(RSA *rsa, BIGNUM *n, BIGNUM *e, BIGNUM *d)
55 {
56 	rsa->n = n;
57 	rsa->e = e;
58 	rsa->d = d;
59 	return 0;
60 }
61 
62 static __rte_always_inline int
63 set_dh_params(DH *dh, BIGNUM *p, BIGNUM *g)
64 {
65 	dh->p = p;
66 	dh->q = NULL;
67 	dh->g = g;
68 	return 0;
69 }
70 
71 static __rte_always_inline int
72 set_dh_priv_key(DH *dh, BIGNUM *priv_key)
73 {
74 	dh->priv_key = priv_key;
75 	return 0;
76 }
77 
78 static __rte_always_inline int
79 set_dsa_params(DSA *dsa, BIGNUM *p, BIGNUM *q, BIGNUM *g)
80 {
81 	dsa->p = p;
82 	dsa->q = q;
83 	dsa->g = g;
84 	return 0;
85 }
86 
87 static __rte_always_inline void
88 get_dh_pub_key(DH *dh, const BIGNUM **pub_key)
89 {
90 	*pub_key = dh->pub_key;
91 }
92 
93 static __rte_always_inline void
94 get_dh_priv_key(DH *dh, const BIGNUM **priv_key)
95 {
96 	*priv_key = dh->priv_key;
97 }
98 
99 static __rte_always_inline void
100 set_dsa_sign(DSA_SIG *sign, BIGNUM *r, BIGNUM *s)
101 {
102 	sign->r = r;
103 	sign->s = s;
104 }
105 
106 static __rte_always_inline void
107 get_dsa_sign(DSA_SIG *sign, const BIGNUM **r, const BIGNUM **s)
108 {
109 	*r = sign->r;
110 	*s = sign->s;
111 }
112 
113 static __rte_always_inline int
114 set_dsa_keys(DSA *dsa, BIGNUM *pub, BIGNUM *priv)
115 {
116 	dsa->pub_key = pub;
117 	dsa->priv_key = priv;
118 	return 0;
119 }
120 
121 static __rte_always_inline void
122 set_dsa_pub_key(DSA *dsa, BIGNUM *pub)
123 {
124 	dsa->pub_key = pub;
125 }
126 
127 static __rte_always_inline void
128 get_dsa_priv_key(DSA *dsa, BIGNUM **priv_key)
129 {
130 	*priv_key = dsa->priv_key;
131 }
132 
133 #elif (OPENSSL_VERSION_NUMBER >= 0x30000000L)
134 static __rte_always_inline void
135 set_dsa_sign(DSA_SIG *sign, BIGNUM *r, BIGNUM *s)
136 {
137 	DSA_SIG_set0(sign, r, s);
138 }
139 
140 static __rte_always_inline void
141 get_dsa_sign(DSA_SIG *sign, const BIGNUM **r, const BIGNUM **s)
142 {
143 	DSA_SIG_get0(sign, r, s);
144 }
145 #else
146 
147 static __rte_always_inline int
148 set_rsa_params(RSA *rsa, BIGNUM *p, BIGNUM *q)
149 {
150 	return !(RSA_set0_factors(rsa, p, q));
151 }
152 
153 static __rte_always_inline int
154 set_rsa_crt_params(RSA *rsa, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp)
155 {
156 	return !(RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp));
157 }
158 
159 /* n, e must be non-null, d can be NULL */
160 
161 static __rte_always_inline  int
162 set_rsa_keys(RSA *rsa, BIGNUM *n, BIGNUM *e, BIGNUM *d)
163 {
164 	return !(RSA_set0_key(rsa, n, e, d));
165 }
166 
167 static __rte_always_inline int
168 set_dh_params(DH *dh, BIGNUM *p, BIGNUM *g)
169 {
170 	return !(DH_set0_pqg(dh, p, NULL, g));
171 }
172 
173 static __rte_always_inline int
174 set_dh_priv_key(DH *dh, BIGNUM *priv_key)
175 {
176 	return !(DH_set0_key(dh, NULL, priv_key));
177 }
178 
179 static __rte_always_inline void
180 get_dh_pub_key(DH *dh_key, const BIGNUM **pub_key)
181 {
182 	DH_get0_key(dh_key, pub_key, NULL);
183 }
184 
185 static __rte_always_inline void
186 get_dh_priv_key(DH *dh_key, const BIGNUM **priv_key)
187 {
188 	DH_get0_key(dh_key, NULL, priv_key);
189 }
190 
191 static __rte_always_inline int
192 set_dsa_params(DSA *dsa, BIGNUM *p, BIGNUM *q, BIGNUM *g)
193 {
194 	return !(DSA_set0_pqg(dsa, p, q, g));
195 }
196 
197 static __rte_always_inline void
198 set_dsa_priv_key(DSA *dsa, BIGNUM *priv_key)
199 {
200 	DSA_set0_key(dsa, NULL, priv_key);
201 }
202 
203 static __rte_always_inline void
204 set_dsa_sign(DSA_SIG *sign, BIGNUM *r, BIGNUM *s)
205 {
206 	DSA_SIG_set0(sign, r, s);
207 }
208 
209 static __rte_always_inline void
210 get_dsa_sign(DSA_SIG *sign, const BIGNUM **r, const BIGNUM **s)
211 {
212 	DSA_SIG_get0(sign, r, s);
213 }
214 
215 static __rte_always_inline int
216 set_dsa_keys(DSA *dsa, BIGNUM *pub, BIGNUM *priv)
217 {
218 	return !(DSA_set0_key(dsa, pub, priv));
219 }
220 
221 static __rte_always_inline void
222 set_dsa_pub_key(DSA *dsa, BIGNUM *pub_key)
223 {
224 	DSA_set0_key(dsa, pub_key, NULL);
225 }
226 
227 static __rte_always_inline void
228 get_dsa_priv_key(DSA *dsa, const BIGNUM **priv_key)
229 {
230 	DSA_get0_key(dsa, NULL, priv_key);
231 }
232 
233 #endif /* version < 10100000 */
234 
235 #endif /* __RTA_COMPAT_H__ */
236