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