xref: /dflybsd-src/lib/libssh/openbsd-compat/openssl-compat.h (revision 2c81fb9c483cc2c8f293c3c199fac04d266b4e1b)
12c0338ffSzrj /*
22c0338ffSzrj  * Copyright (c) 2005 Darren Tucker <dtucker@zip.com.au>
32c0338ffSzrj  *
42c0338ffSzrj  * Permission to use, copy, modify, and distribute this software for any
52c0338ffSzrj  * purpose with or without fee is hereby granted, provided that the above
62c0338ffSzrj  * copyright notice and this permission notice appear in all copies.
72c0338ffSzrj  *
82c0338ffSzrj  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
92c0338ffSzrj  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
102c0338ffSzrj  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
112c0338ffSzrj  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
122c0338ffSzrj  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
132c0338ffSzrj  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
142c0338ffSzrj  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
152c0338ffSzrj  */
162c0338ffSzrj 
172c0338ffSzrj #ifndef _OPENSSL_COMPAT_H
182c0338ffSzrj #define _OPENSSL_COMPAT_H
192c0338ffSzrj 
202c0338ffSzrj #include "includes.h"
212c0338ffSzrj #ifdef WITH_OPENSSL
222c0338ffSzrj 
232c0338ffSzrj #include <openssl/opensslv.h>
242c0338ffSzrj #include <openssl/crypto.h>
252c0338ffSzrj #include <openssl/evp.h>
262c0338ffSzrj #include <openssl/rsa.h>
272c0338ffSzrj #include <openssl/dsa.h>
28bc9cc675SDaniel Fojt #ifdef OPENSSL_HAS_ECC
292c0338ffSzrj #include <openssl/ecdsa.h>
30bc9cc675SDaniel Fojt #endif
312c0338ffSzrj #include <openssl/dh.h>
322c0338ffSzrj 
332c0338ffSzrj int ssh_compatible_openssl(long, long);
342c0338ffSzrj void ssh_libcrypto_init(void);
352c0338ffSzrj 
36*2c81fb9cSAntonio Huete Jimenez #if (OPENSSL_VERSION_NUMBER < 0x1000100fL)
37*2c81fb9cSAntonio Huete Jimenez # error OpenSSL 1.0.1 or greater is required
38*2c81fb9cSAntonio Huete Jimenez #endif
39*2c81fb9cSAntonio Huete Jimenez 
40*2c81fb9cSAntonio Huete Jimenez #ifndef OPENSSL_VERSION
41*2c81fb9cSAntonio Huete Jimenez # define OPENSSL_VERSION	SSLEAY_VERSION
42*2c81fb9cSAntonio Huete Jimenez #endif
43*2c81fb9cSAntonio Huete Jimenez 
44*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_OPENSSL_VERSION
45*2c81fb9cSAntonio Huete Jimenez # define OpenSSL_version(x)	SSLeay_version(x)
46*2c81fb9cSAntonio Huete Jimenez #endif
47*2c81fb9cSAntonio Huete Jimenez 
48*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_OPENSSL_VERSION_NUM
49*2c81fb9cSAntonio Huete Jimenez # define OpenSSL_version_num	SSLeay
50*2c81fb9cSAntonio Huete Jimenez #endif
51*2c81fb9cSAntonio Huete Jimenez 
522c0338ffSzrj #if OPENSSL_VERSION_NUMBER < 0x10000001L
532c0338ffSzrj # define LIBCRYPTO_EVP_INL_TYPE unsigned int
542c0338ffSzrj #else
552c0338ffSzrj # define LIBCRYPTO_EVP_INL_TYPE size_t
562c0338ffSzrj #endif
572c0338ffSzrj 
582c0338ffSzrj #ifndef OPENSSL_RSA_MAX_MODULUS_BITS
592c0338ffSzrj # define OPENSSL_RSA_MAX_MODULUS_BITS	16384
602c0338ffSzrj #endif
612c0338ffSzrj #ifndef OPENSSL_DSA_MAX_MODULUS_BITS
622c0338ffSzrj # define OPENSSL_DSA_MAX_MODULUS_BITS	10000
632c0338ffSzrj #endif
642c0338ffSzrj 
65*2c81fb9cSAntonio Huete Jimenez #ifdef LIBRESSL_VERSION_NUMBER
66*2c81fb9cSAntonio Huete Jimenez # if LIBRESSL_VERSION_NUMBER < 0x3010000fL
67*2c81fb9cSAntonio Huete Jimenez #  define HAVE_BROKEN_CHACHA20
68*2c81fb9cSAntonio Huete Jimenez # endif
69*2c81fb9cSAntonio Huete Jimenez #endif
70*2c81fb9cSAntonio Huete Jimenez 
71*2c81fb9cSAntonio Huete Jimenez /* LibreSSL/OpenSSL 1.1x API compat */
72*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DSA_GET0_PQG
73*2c81fb9cSAntonio Huete Jimenez void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q,
74*2c81fb9cSAntonio Huete Jimenez     const BIGNUM **g);
75*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_DSA_GET0_PQG */
76*2c81fb9cSAntonio Huete Jimenez 
77*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DSA_SET0_PQG
78*2c81fb9cSAntonio Huete Jimenez int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g);
79*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_DSA_SET0_PQG */
80*2c81fb9cSAntonio Huete Jimenez 
81*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DSA_GET0_KEY
82*2c81fb9cSAntonio Huete Jimenez void DSA_get0_key(const DSA *d, const BIGNUM **pub_key,
83*2c81fb9cSAntonio Huete Jimenez     const BIGNUM **priv_key);
84*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_DSA_GET0_KEY */
85*2c81fb9cSAntonio Huete Jimenez 
86*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DSA_SET0_KEY
87*2c81fb9cSAntonio Huete Jimenez int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key);
88*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_DSA_SET0_KEY */
89*2c81fb9cSAntonio Huete Jimenez 
90*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_EVP_CIPHER_CTX_GET_IV
91*2c81fb9cSAntonio Huete Jimenez # ifdef HAVE_EVP_CIPHER_CTX_GET_UPDATED_IV
92*2c81fb9cSAntonio Huete Jimenez #  define EVP_CIPHER_CTX_get_iv EVP_CIPHER_CTX_get_updated_iv
93*2c81fb9cSAntonio Huete Jimenez # else /* HAVE_EVP_CIPHER_CTX_GET_UPDATED_IV */
94*2c81fb9cSAntonio Huete Jimenez int EVP_CIPHER_CTX_get_iv(const EVP_CIPHER_CTX *ctx,
95*2c81fb9cSAntonio Huete Jimenez     unsigned char *iv, size_t len);
96*2c81fb9cSAntonio Huete Jimenez # endif /* HAVE_EVP_CIPHER_CTX_GET_UPDATED_IV */
97*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_EVP_CIPHER_CTX_GET_IV */
98*2c81fb9cSAntonio Huete Jimenez 
99*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_EVP_CIPHER_CTX_SET_IV
100*2c81fb9cSAntonio Huete Jimenez int EVP_CIPHER_CTX_set_iv(EVP_CIPHER_CTX *ctx,
101*2c81fb9cSAntonio Huete Jimenez     const unsigned char *iv, size_t len);
102*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_EVP_CIPHER_CTX_SET_IV */
103*2c81fb9cSAntonio Huete Jimenez 
104*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_GET0_KEY
105*2c81fb9cSAntonio Huete Jimenez void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e,
106*2c81fb9cSAntonio Huete Jimenez     const BIGNUM **d);
107*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_GET0_KEY */
108*2c81fb9cSAntonio Huete Jimenez 
109*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_SET0_KEY
110*2c81fb9cSAntonio Huete Jimenez int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
111*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_SET0_KEY */
112*2c81fb9cSAntonio Huete Jimenez 
113*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_GET0_CRT_PARAMS
114*2c81fb9cSAntonio Huete Jimenez void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1,
115*2c81fb9cSAntonio Huete Jimenez     const BIGNUM **iqmp);
116*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_GET0_CRT_PARAMS */
117*2c81fb9cSAntonio Huete Jimenez 
118*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_SET0_CRT_PARAMS
119*2c81fb9cSAntonio Huete Jimenez int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp);
120*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_SET0_CRT_PARAMS */
121*2c81fb9cSAntonio Huete Jimenez 
122*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_GET0_FACTORS
123*2c81fb9cSAntonio Huete Jimenez void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);
124*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_GET0_FACTORS */
125*2c81fb9cSAntonio Huete Jimenez 
126*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_SET0_FACTORS
127*2c81fb9cSAntonio Huete Jimenez int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q);
128*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_SET0_FACTORS */
129*2c81fb9cSAntonio Huete Jimenez 
130*2c81fb9cSAntonio Huete Jimenez #ifndef DSA_SIG_GET0
131*2c81fb9cSAntonio Huete Jimenez void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
132*2c81fb9cSAntonio Huete Jimenez #endif /* DSA_SIG_GET0 */
133*2c81fb9cSAntonio Huete Jimenez 
134*2c81fb9cSAntonio Huete Jimenez #ifndef DSA_SIG_SET0
135*2c81fb9cSAntonio Huete Jimenez int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s);
136*2c81fb9cSAntonio Huete Jimenez #endif /* DSA_SIG_SET0 */
137*2c81fb9cSAntonio Huete Jimenez 
138*2c81fb9cSAntonio Huete Jimenez #ifdef OPENSSL_HAS_ECC
139*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_ECDSA_SIG_GET0
140*2c81fb9cSAntonio Huete Jimenez void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
141*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_ECDSA_SIG_GET0 */
142*2c81fb9cSAntonio Huete Jimenez 
143*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_ECDSA_SIG_SET0
144*2c81fb9cSAntonio Huete Jimenez int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s);
145*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_ECDSA_SIG_SET0 */
146*2c81fb9cSAntonio Huete Jimenez #endif /* OPENSSL_HAS_ECC */
147*2c81fb9cSAntonio Huete Jimenez 
148*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DH_GET0_PQG
149*2c81fb9cSAntonio Huete Jimenez void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q,
150*2c81fb9cSAntonio Huete Jimenez     const BIGNUM **g);
151*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_DH_GET0_PQG */
152*2c81fb9cSAntonio Huete Jimenez 
153*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DH_SET0_PQG
154*2c81fb9cSAntonio Huete Jimenez int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g);
155*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_DH_SET0_PQG */
156*2c81fb9cSAntonio Huete Jimenez 
157*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DH_GET0_KEY
158*2c81fb9cSAntonio Huete Jimenez void DH_get0_key(const DH *dh, const BIGNUM **pub_key, const BIGNUM **priv_key);
159*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_DH_GET0_KEY */
160*2c81fb9cSAntonio Huete Jimenez 
161*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DH_SET0_KEY
162*2c81fb9cSAntonio Huete Jimenez int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key);
163*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_DH_SET0_KEY */
164*2c81fb9cSAntonio Huete Jimenez 
165*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DH_SET_LENGTH
166*2c81fb9cSAntonio Huete Jimenez int DH_set_length(DH *dh, long length);
167*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_DH_SET_LENGTH */
168*2c81fb9cSAntonio Huete Jimenez 
169*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_METH_FREE
170*2c81fb9cSAntonio Huete Jimenez void RSA_meth_free(RSA_METHOD *meth);
171*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_METH_FREE */
172*2c81fb9cSAntonio Huete Jimenez 
173*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_METH_DUP
174*2c81fb9cSAntonio Huete Jimenez RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth);
175*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_METH_DUP */
176*2c81fb9cSAntonio Huete Jimenez 
177*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_METH_SET1_NAME
178*2c81fb9cSAntonio Huete Jimenez int RSA_meth_set1_name(RSA_METHOD *meth, const char *name);
179*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_METH_SET1_NAME */
180*2c81fb9cSAntonio Huete Jimenez 
181*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_METH_GET_FINISH
182*2c81fb9cSAntonio Huete Jimenez int (*RSA_meth_get_finish(const RSA_METHOD *meth))(RSA *rsa);
183*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_METH_GET_FINISH */
184*2c81fb9cSAntonio Huete Jimenez 
185*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_METH_SET_PRIV_ENC
186*2c81fb9cSAntonio Huete Jimenez int RSA_meth_set_priv_enc(RSA_METHOD *meth, int (*priv_enc)(int flen,
187*2c81fb9cSAntonio Huete Jimenez     const unsigned char *from, unsigned char *to, RSA *rsa, int padding));
188*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_METH_SET_PRIV_ENC */
189*2c81fb9cSAntonio Huete Jimenez 
190*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_METH_SET_PRIV_DEC
191*2c81fb9cSAntonio Huete Jimenez int RSA_meth_set_priv_dec(RSA_METHOD *meth, int (*priv_dec)(int flen,
192*2c81fb9cSAntonio Huete Jimenez     const unsigned char *from, unsigned char *to, RSA *rsa, int padding));
193*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_METH_SET_PRIV_DEC */
194*2c81fb9cSAntonio Huete Jimenez 
195*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RSA_METH_SET_FINISH
196*2c81fb9cSAntonio Huete Jimenez int RSA_meth_set_finish(RSA_METHOD *meth, int (*finish)(RSA *rsa));
197*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_RSA_METH_SET_FINISH */
198*2c81fb9cSAntonio Huete Jimenez 
199*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_EVP_PKEY_GET0_RSA
200*2c81fb9cSAntonio Huete Jimenez RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey);
201*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_EVP_PKEY_GET0_RSA */
202*2c81fb9cSAntonio Huete Jimenez 
203*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_EVP_MD_CTX_new
204*2c81fb9cSAntonio Huete Jimenez EVP_MD_CTX *EVP_MD_CTX_new(void);
205*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_EVP_MD_CTX_new */
206*2c81fb9cSAntonio Huete Jimenez 
207*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_EVP_MD_CTX_free
208*2c81fb9cSAntonio Huete Jimenez void EVP_MD_CTX_free(EVP_MD_CTX *ctx);
209*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_EVP_MD_CTX_free */
210*2c81fb9cSAntonio Huete Jimenez 
2112c0338ffSzrj #endif /* WITH_OPENSSL */
2122c0338ffSzrj #endif /* _OPENSSL_COMPAT_H */
213