13e9d6bd4SSunila Sahu /* SPDX-License-Identifier: BSD-3-Clause
23e9d6bd4SSunila Sahu * Copyright(c) 2018 Cavium Networks
33e9d6bd4SSunila Sahu */
43e9d6bd4SSunila Sahu
53e9d6bd4SSunila Sahu #ifndef __RTA_COMPAT_H__
63e9d6bd4SSunila Sahu #define __RTA_COMPAT_H__
73e9d6bd4SSunila Sahu
8*17d5bc61SJack Bond-Preston #if OPENSSL_VERSION_NUMBER >= 0x30000000L
9*17d5bc61SJack Bond-Preston static __rte_always_inline void
free_hmac_ctx(EVP_MAC_CTX * ctx)10*17d5bc61SJack Bond-Preston free_hmac_ctx(EVP_MAC_CTX *ctx)
11*17d5bc61SJack Bond-Preston {
12*17d5bc61SJack Bond-Preston EVP_MAC_CTX_free(ctx);
13*17d5bc61SJack Bond-Preston }
14*17d5bc61SJack Bond-Preston
15*17d5bc61SJack Bond-Preston static __rte_always_inline void
free_cmac_ctx(EVP_MAC_CTX * ctx)16*17d5bc61SJack Bond-Preston free_cmac_ctx(EVP_MAC_CTX *ctx)
17*17d5bc61SJack Bond-Preston {
18*17d5bc61SJack Bond-Preston EVP_MAC_CTX_free(ctx);
19*17d5bc61SJack Bond-Preston }
20*17d5bc61SJack Bond-Preston #else
21*17d5bc61SJack Bond-Preston static __rte_always_inline void
free_hmac_ctx(HMAC_CTX * ctx)22*17d5bc61SJack Bond-Preston free_hmac_ctx(HMAC_CTX *ctx)
23*17d5bc61SJack Bond-Preston {
24*17d5bc61SJack Bond-Preston HMAC_CTX_free(ctx);
25*17d5bc61SJack Bond-Preston }
26*17d5bc61SJack Bond-Preston
27*17d5bc61SJack Bond-Preston static __rte_always_inline void
free_cmac_ctx(CMAC_CTX * ctx)28*17d5bc61SJack Bond-Preston free_cmac_ctx(CMAC_CTX *ctx)
29*17d5bc61SJack Bond-Preston {
30*17d5bc61SJack Bond-Preston CMAC_CTX_free(ctx);
31*17d5bc61SJack Bond-Preston }
32*17d5bc61SJack Bond-Preston #endif
33*17d5bc61SJack Bond-Preston
343e9d6bd4SSunila Sahu #if (OPENSSL_VERSION_NUMBER < 0x10100000L)
353e9d6bd4SSunila Sahu
360b5284adSAshish Gupta static __rte_always_inline int
set_rsa_params(RSA * rsa,BIGNUM * p,BIGNUM * q)370b5284adSAshish Gupta set_rsa_params(RSA *rsa, BIGNUM *p, BIGNUM *q)
380b5284adSAshish Gupta {
390b5284adSAshish Gupta rsa->p = p;
400b5284adSAshish Gupta rsa->q = q;
410b5284adSAshish Gupta return 0;
420b5284adSAshish Gupta }
433e9d6bd4SSunila Sahu
440b5284adSAshish Gupta static __rte_always_inline int
set_rsa_crt_params(RSA * rsa,BIGNUM * dmp1,BIGNUM * dmq1,BIGNUM * iqmp)450b5284adSAshish Gupta set_rsa_crt_params(RSA *rsa, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp)
460b5284adSAshish Gupta {
470b5284adSAshish Gupta rsa->dmp1 = dmp1;
480b5284adSAshish Gupta rsa->dmq1 = dmq1;
490b5284adSAshish Gupta rsa->iqmp = iqmp;
500b5284adSAshish Gupta return 0;
510b5284adSAshish Gupta }
523e9d6bd4SSunila Sahu
530b5284adSAshish Gupta static __rte_always_inline int
set_rsa_keys(RSA * rsa,BIGNUM * n,BIGNUM * e,BIGNUM * d)540b5284adSAshish Gupta set_rsa_keys(RSA *rsa, BIGNUM *n, BIGNUM *e, BIGNUM *d)
550b5284adSAshish Gupta {
560b5284adSAshish Gupta rsa->n = n;
570b5284adSAshish Gupta rsa->e = e;
580b5284adSAshish Gupta rsa->d = d;
590b5284adSAshish Gupta return 0;
600b5284adSAshish Gupta }
613e9d6bd4SSunila Sahu
620b5284adSAshish Gupta static __rte_always_inline int
set_dh_params(DH * dh,BIGNUM * p,BIGNUM * g)630b5284adSAshish Gupta set_dh_params(DH *dh, BIGNUM *p, BIGNUM *g)
640b5284adSAshish Gupta {
650b5284adSAshish Gupta dh->p = p;
660b5284adSAshish Gupta dh->q = NULL;
670b5284adSAshish Gupta dh->g = g;
680b5284adSAshish Gupta return 0;
690b5284adSAshish Gupta }
70ac42813aSSunila Sahu
710b5284adSAshish Gupta static __rte_always_inline int
set_dh_priv_key(DH * dh,BIGNUM * priv_key)720b5284adSAshish Gupta set_dh_priv_key(DH *dh, BIGNUM *priv_key)
730b5284adSAshish Gupta {
740b5284adSAshish Gupta dh->priv_key = priv_key;
750b5284adSAshish Gupta return 0;
760b5284adSAshish Gupta }
77ac42813aSSunila Sahu
780b5284adSAshish Gupta static __rte_always_inline int
set_dsa_params(DSA * dsa,BIGNUM * p,BIGNUM * q,BIGNUM * g)790b5284adSAshish Gupta set_dsa_params(DSA *dsa, BIGNUM *p, BIGNUM *q, BIGNUM *g)
800b5284adSAshish Gupta {
810b5284adSAshish Gupta dsa->p = p;
820b5284adSAshish Gupta dsa->q = q;
830b5284adSAshish Gupta dsa->g = g;
840b5284adSAshish Gupta return 0;
850b5284adSAshish Gupta }
86ac42813aSSunila Sahu
870b5284adSAshish Gupta static __rte_always_inline void
get_dh_pub_key(DH * dh,const BIGNUM ** pub_key)880b5284adSAshish Gupta get_dh_pub_key(DH *dh, const BIGNUM **pub_key)
890b5284adSAshish Gupta {
900b5284adSAshish Gupta *pub_key = dh->pub_key;
910b5284adSAshish Gupta }
92ac42813aSSunila Sahu
930b5284adSAshish Gupta static __rte_always_inline void
get_dh_priv_key(DH * dh,const BIGNUM ** priv_key)940b5284adSAshish Gupta get_dh_priv_key(DH *dh, const BIGNUM **priv_key)
950b5284adSAshish Gupta {
960b5284adSAshish Gupta *priv_key = dh->priv_key;
970b5284adSAshish Gupta }
98ac42813aSSunila Sahu
990b5284adSAshish Gupta static __rte_always_inline void
set_dsa_sign(DSA_SIG * sign,BIGNUM * r,BIGNUM * s)1000b5284adSAshish Gupta set_dsa_sign(DSA_SIG *sign, BIGNUM *r, BIGNUM *s)
1010b5284adSAshish Gupta {
1020b5284adSAshish Gupta sign->r = r;
1030b5284adSAshish Gupta sign->s = s;
1040b5284adSAshish Gupta }
105ac42813aSSunila Sahu
1060b5284adSAshish Gupta static __rte_always_inline void
get_dsa_sign(DSA_SIG * sign,const BIGNUM ** r,const BIGNUM ** s)1070b5284adSAshish Gupta get_dsa_sign(DSA_SIG *sign, const BIGNUM **r, const BIGNUM **s)
1080b5284adSAshish Gupta {
1090b5284adSAshish Gupta *r = sign->r;
1100b5284adSAshish Gupta *s = sign->s;
1110b5284adSAshish Gupta }
112ac42813aSSunila Sahu
1130b5284adSAshish Gupta static __rte_always_inline int
set_dsa_keys(DSA * dsa,BIGNUM * pub,BIGNUM * priv)1140b5284adSAshish Gupta set_dsa_keys(DSA *dsa, BIGNUM *pub, BIGNUM *priv)
1150b5284adSAshish Gupta {
1160b5284adSAshish Gupta dsa->pub_key = pub;
1170b5284adSAshish Gupta dsa->priv_key = priv;
1180b5284adSAshish Gupta return 0;
1190b5284adSAshish Gupta }
120ac42813aSSunila Sahu
1210b5284adSAshish Gupta static __rte_always_inline void
set_dsa_pub_key(DSA * dsa,BIGNUM * pub)1220b5284adSAshish Gupta set_dsa_pub_key(DSA *dsa, BIGNUM *pub)
1230b5284adSAshish Gupta {
1240b5284adSAshish Gupta dsa->pub_key = pub;
1250b5284adSAshish Gupta }
126ac42813aSSunila Sahu
1270b5284adSAshish Gupta static __rte_always_inline void
get_dsa_priv_key(DSA * dsa,BIGNUM ** priv_key)1280b5284adSAshish Gupta get_dsa_priv_key(DSA *dsa, BIGNUM **priv_key)
1290b5284adSAshish Gupta {
1300b5284adSAshish Gupta *priv_key = dsa->priv_key;
1310b5284adSAshish Gupta }
132ac42813aSSunila Sahu
1334c7ae22fSKai Ji #elif (OPENSSL_VERSION_NUMBER >= 0x30000000L)
1344c7ae22fSKai Ji static __rte_always_inline void
set_dsa_sign(DSA_SIG * sign,BIGNUM * r,BIGNUM * s)1354c7ae22fSKai Ji set_dsa_sign(DSA_SIG *sign, BIGNUM *r, BIGNUM *s)
1364c7ae22fSKai Ji {
1374c7ae22fSKai Ji DSA_SIG_set0(sign, r, s);
1384c7ae22fSKai Ji }
1394c7ae22fSKai Ji
1404c7ae22fSKai Ji static __rte_always_inline void
get_dsa_sign(DSA_SIG * sign,const BIGNUM ** r,const BIGNUM ** s)1414c7ae22fSKai Ji get_dsa_sign(DSA_SIG *sign, const BIGNUM **r, const BIGNUM **s)
1424c7ae22fSKai Ji {
1434c7ae22fSKai Ji DSA_SIG_get0(sign, r, s);
1444c7ae22fSKai Ji }
1453e9d6bd4SSunila Sahu #else
1463e9d6bd4SSunila Sahu
1470b5284adSAshish Gupta static __rte_always_inline int
set_rsa_params(RSA * rsa,BIGNUM * p,BIGNUM * q)1480b5284adSAshish Gupta set_rsa_params(RSA *rsa, BIGNUM *p, BIGNUM *q)
1490b5284adSAshish Gupta {
1500b5284adSAshish Gupta return !(RSA_set0_factors(rsa, p, q));
1510b5284adSAshish Gupta }
1523e9d6bd4SSunila Sahu
1530b5284adSAshish Gupta static __rte_always_inline int
set_rsa_crt_params(RSA * rsa,BIGNUM * dmp1,BIGNUM * dmq1,BIGNUM * iqmp)1540b5284adSAshish Gupta set_rsa_crt_params(RSA *rsa, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp)
1550b5284adSAshish Gupta {
1560b5284adSAshish Gupta return !(RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp));
1570b5284adSAshish Gupta }
1583e9d6bd4SSunila Sahu
1593e9d6bd4SSunila Sahu /* n, e must be non-null, d can be NULL */
1603e9d6bd4SSunila Sahu
1610b5284adSAshish Gupta static __rte_always_inline int
set_rsa_keys(RSA * rsa,BIGNUM * n,BIGNUM * e,BIGNUM * d)1620b5284adSAshish Gupta set_rsa_keys(RSA *rsa, BIGNUM *n, BIGNUM *e, BIGNUM *d)
1630b5284adSAshish Gupta {
1640b5284adSAshish Gupta return !(RSA_set0_key(rsa, n, e, d));
1650b5284adSAshish Gupta }
166ac42813aSSunila Sahu
1670b5284adSAshish Gupta static __rte_always_inline int
set_dh_params(DH * dh,BIGNUM * p,BIGNUM * g)1680b5284adSAshish Gupta set_dh_params(DH *dh, BIGNUM *p, BIGNUM *g)
1690b5284adSAshish Gupta {
1700b5284adSAshish Gupta return !(DH_set0_pqg(dh, p, NULL, g));
1710b5284adSAshish Gupta }
172ac42813aSSunila Sahu
1730b5284adSAshish Gupta static __rte_always_inline int
set_dh_priv_key(DH * dh,BIGNUM * priv_key)1740b5284adSAshish Gupta set_dh_priv_key(DH *dh, BIGNUM *priv_key)
1750b5284adSAshish Gupta {
1760b5284adSAshish Gupta return !(DH_set0_key(dh, NULL, priv_key));
1770b5284adSAshish Gupta }
178ac42813aSSunila Sahu
1790b5284adSAshish Gupta static __rte_always_inline void
get_dh_pub_key(DH * dh_key,const BIGNUM ** pub_key)1800b5284adSAshish Gupta get_dh_pub_key(DH *dh_key, const BIGNUM **pub_key)
1810b5284adSAshish Gupta {
1820b5284adSAshish Gupta DH_get0_key(dh_key, pub_key, NULL);
1830b5284adSAshish Gupta }
184ac42813aSSunila Sahu
1850b5284adSAshish Gupta static __rte_always_inline void
get_dh_priv_key(DH * dh_key,const BIGNUM ** priv_key)1860b5284adSAshish Gupta get_dh_priv_key(DH *dh_key, const BIGNUM **priv_key)
1870b5284adSAshish Gupta {
1880b5284adSAshish Gupta DH_get0_key(dh_key, NULL, priv_key);
1890b5284adSAshish Gupta }
190ac42813aSSunila Sahu
1910b5284adSAshish Gupta static __rte_always_inline int
set_dsa_params(DSA * dsa,BIGNUM * p,BIGNUM * q,BIGNUM * g)1920b5284adSAshish Gupta set_dsa_params(DSA *dsa, BIGNUM *p, BIGNUM *q, BIGNUM *g)
1930b5284adSAshish Gupta {
1940b5284adSAshish Gupta return !(DSA_set0_pqg(dsa, p, q, g));
1950b5284adSAshish Gupta }
196ac42813aSSunila Sahu
1970b5284adSAshish Gupta static __rte_always_inline void
set_dsa_priv_key(DSA * dsa,BIGNUM * priv_key)1980b5284adSAshish Gupta set_dsa_priv_key(DSA *dsa, BIGNUM *priv_key)
1990b5284adSAshish Gupta {
2000b5284adSAshish Gupta DSA_set0_key(dsa, NULL, priv_key);
2010b5284adSAshish Gupta }
202ac42813aSSunila Sahu
2030b5284adSAshish Gupta static __rte_always_inline void
set_dsa_sign(DSA_SIG * sign,BIGNUM * r,BIGNUM * s)2040b5284adSAshish Gupta set_dsa_sign(DSA_SIG *sign, BIGNUM *r, BIGNUM *s)
2050b5284adSAshish Gupta {
2060b5284adSAshish Gupta DSA_SIG_set0(sign, r, s);
2070b5284adSAshish Gupta }
208ac42813aSSunila Sahu
2090b5284adSAshish Gupta static __rte_always_inline void
get_dsa_sign(DSA_SIG * sign,const BIGNUM ** r,const BIGNUM ** s)2100b5284adSAshish Gupta get_dsa_sign(DSA_SIG *sign, const BIGNUM **r, const BIGNUM **s)
2110b5284adSAshish Gupta {
2120b5284adSAshish Gupta DSA_SIG_get0(sign, r, s);
2130b5284adSAshish Gupta }
214ac42813aSSunila Sahu
2150b5284adSAshish Gupta static __rte_always_inline int
set_dsa_keys(DSA * dsa,BIGNUM * pub,BIGNUM * priv)2160b5284adSAshish Gupta set_dsa_keys(DSA *dsa, BIGNUM *pub, BIGNUM *priv)
2170b5284adSAshish Gupta {
2180b5284adSAshish Gupta return !(DSA_set0_key(dsa, pub, priv));
2190b5284adSAshish Gupta }
220ac42813aSSunila Sahu
2210b5284adSAshish Gupta static __rte_always_inline void
set_dsa_pub_key(DSA * dsa,BIGNUM * pub_key)2220b5284adSAshish Gupta set_dsa_pub_key(DSA *dsa, BIGNUM *pub_key)
2230b5284adSAshish Gupta {
2240b5284adSAshish Gupta DSA_set0_key(dsa, pub_key, NULL);
2250b5284adSAshish Gupta }
2260b5284adSAshish Gupta
2270b5284adSAshish Gupta static __rte_always_inline void
get_dsa_priv_key(DSA * dsa,const BIGNUM ** priv_key)2280b5284adSAshish Gupta get_dsa_priv_key(DSA *dsa, const BIGNUM **priv_key)
2290b5284adSAshish Gupta {
2300b5284adSAshish Gupta DSA_get0_key(dsa, NULL, priv_key);
2310b5284adSAshish Gupta }
232ac42813aSSunila Sahu
2333e9d6bd4SSunila Sahu #endif /* version < 10100000 */
2343e9d6bd4SSunila Sahu
2353e9d6bd4SSunila Sahu #endif /* __RTA_COMPAT_H__ */
236