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