1f391d6bcSXin LI /* 2f391d6bcSXin LI * libssl_compat.h -- OpenSSL v1.1 compatibility shims 3f391d6bcSXin LI * 4f391d6bcSXin LI * --------------------------------------------------------------------- 5f391d6bcSXin LI * 6f391d6bcSXin LI * Written by Juergen Perlinger <perlinger@ntp.org> for the NTP project 7f391d6bcSXin LI * 8f391d6bcSXin LI * Based on an idea by Kurt Roeckx <kurt@roeckx.be> 9f391d6bcSXin LI * 10f391d6bcSXin LI * --------------------------------------------------------------------- 11f391d6bcSXin LI * This is a clean room implementation of shim functions that have 12f391d6bcSXin LI * counterparts in the OpenSSL v1.1 API but not in earlier versions. 13f391d6bcSXin LI * 14f391d6bcSXin LI * If the OpenSSL version used for compilation needs the shims (that is, 15f391d6bcSXin LI * does not provide the new functions) the names of these functions are 16f391d6bcSXin LI * redirected to our shims. 17f391d6bcSXin LI * --------------------------------------------------------------------- 18f391d6bcSXin LI */ 19f391d6bcSXin LI 20f391d6bcSXin LI #ifndef NTP_LIBSSL_COMPAT_H 21f391d6bcSXin LI #define NTP_LIBSSL_COMPAT_H 22f391d6bcSXin LI 23f391d6bcSXin LI #include "openssl/evp.h" 24f391d6bcSXin LI #include "openssl/dsa.h" 25f391d6bcSXin LI #include "openssl/rsa.h" 26f391d6bcSXin LI 27*f0574f5cSXin LI #ifndef OPENSSL_VERSION_NUMBER 28*f0574f5cSXin LI #define OPENSSL_VERSION_NUMBER SSLEAY_VERSION_NUMBER 29*f0574f5cSXin LI #endif 30*f0574f5cSXin LI 31*f0574f5cSXin LI #ifndef OPENSSL_VERSION_TEXT 32*f0574f5cSXin LI #define OPENSSL_VERSION_TEXT SSLEAY_VERSION_TEXT 33*f0574f5cSXin LI #endif 34*f0574f5cSXin LI 35*f0574f5cSXin LI #ifndef OPENSSL_VERSION 36*f0574f5cSXin LI #define OPENSSL_VERSION SSLEAY_VERSION 37*f0574f5cSXin LI #endif 38*f0574f5cSXin LI 39f391d6bcSXin LI /* ----------------------------------------------------------------- */ 40f391d6bcSXin LI #if OPENSSL_VERSION_NUMBER < 0x10100000L 41f391d6bcSXin LI /* ----------------------------------------------------------------- */ 42f391d6bcSXin LI 43f391d6bcSXin LI # include <openssl/objects.h> 44f391d6bcSXin LI # include <openssl/x509.h> 45f391d6bcSXin LI 46f391d6bcSXin LI /* shim the new-style API on an old-style OpenSSL */ 47f391d6bcSXin LI 48f391d6bcSXin LI extern BN_GENCB* sslshimBN_GENCB_new(void); 49f391d6bcSXin LI extern void sslshimBN_GENCB_free(BN_GENCB*); 50f391d6bcSXin LI 51f391d6bcSXin LI extern EVP_MD_CTX* sslshim_EVP_MD_CTX_new(void); 52f391d6bcSXin LI extern void sslshim_EVP_MD_CTX_free(EVP_MD_CTX *ctx); 53f391d6bcSXin LI 54f391d6bcSXin LI extern int sslshim_EVP_PKEY_id(const EVP_PKEY * pkey); 55f391d6bcSXin LI extern int sslshim_EVP_PKEY_base_id(const EVP_PKEY * pkey); 56f391d6bcSXin LI extern RSA* sslshim_EVP_PKEY_get0_RSA(EVP_PKEY * pkey); 57f391d6bcSXin LI extern DSA* sslshim_EVP_PKEY_get0_DSA(EVP_PKEY * pkey); 58f391d6bcSXin LI 59f391d6bcSXin LI extern void sslshim_RSA_get0_key(const RSA *prsa, const BIGNUM **pn, 60f391d6bcSXin LI const BIGNUM **pe, const BIGNUM **pd); 61f391d6bcSXin LI extern int sslshim_RSA_set0_key(RSA *prsa, BIGNUM *n, 62f391d6bcSXin LI BIGNUM *e, BIGNUM *d); 63f391d6bcSXin LI extern void sslshim_RSA_get0_factors(const RSA *prsa, const BIGNUM **pp, 64f391d6bcSXin LI const BIGNUM **pq); 65f391d6bcSXin LI extern int sslshim_RSA_set0_factors(RSA *prsar, BIGNUM *p, BIGNUM *q); 66f391d6bcSXin LI extern int sslshim_RSA_set0_crt_params(RSA *prsa, BIGNUM *dmp1, 67f391d6bcSXin LI BIGNUM *dmq1, BIGNUM *iqmp); 68f391d6bcSXin LI 69f391d6bcSXin LI extern void sslshim_DSA_SIG_get0(const DSA_SIG *psig, const BIGNUM **pr, 70f391d6bcSXin LI const BIGNUM **ps); 71f391d6bcSXin LI extern int sslshim_DSA_SIG_set0(DSA_SIG *psig, BIGNUM *r, BIGNUM *s); 72f391d6bcSXin LI extern void sslshim_DSA_get0_pqg(const DSA *pdsa, const BIGNUM **pp, 73f391d6bcSXin LI const BIGNUM **pq, const BIGNUM **pg); 74f391d6bcSXin LI extern int sslshim_DSA_set0_pqg(DSA *pdsa, BIGNUM *p, BIGNUM *q, BIGNUM *g); 75f391d6bcSXin LI extern void sslshim_DSA_get0_key(const DSA *pdsa, const BIGNUM **ppub_key, 76f391d6bcSXin LI const BIGNUM **ppriv_key); 77f391d6bcSXin LI extern int sslshim_DSA_set0_key(DSA *pdsa, BIGNUM *pub_key, 78f391d6bcSXin LI BIGNUM *priv_key); 79f391d6bcSXin LI 80f391d6bcSXin LI extern int sslshim_X509_get_signature_nid(const X509 *x); 81f391d6bcSXin LI 82f391d6bcSXin LI #define BN_GENCB_new sslshimBN_GENCB_new 83f391d6bcSXin LI #define BN_GENCB_free sslshimBN_GENCB_free 84f391d6bcSXin LI 85f391d6bcSXin LI #define EVP_MD_CTX_new sslshim_EVP_MD_CTX_new 86f391d6bcSXin LI #define EVP_MD_CTX_free sslshim_EVP_MD_CTX_free 87f391d6bcSXin LI 88f391d6bcSXin LI #define EVP_PKEY_id sslshim_EVP_PKEY_id 89f391d6bcSXin LI #define EVP_PKEY_base_id sslshim_EVP_PKEY_base_id 90f391d6bcSXin LI #define EVP_PKEY_get0_RSA sslshim_EVP_PKEY_get0_RSA 91f391d6bcSXin LI #define EVP_PKEY_get0_DSA sslshim_EVP_PKEY_get0_DSA 92f391d6bcSXin LI 93f391d6bcSXin LI #define RSA_get0_key sslshim_RSA_get0_key 94f391d6bcSXin LI #define RSA_set0_key sslshim_RSA_set0_key 95f391d6bcSXin LI #define RSA_get0_factors sslshim_RSA_get0_factors 96f391d6bcSXin LI #define RSA_set0_factors sslshim_RSA_set0_factors 97f391d6bcSXin LI #define RSA_set0_crt_params sslshim_RSA_set0_crt_params 98f391d6bcSXin LI 99f391d6bcSXin LI #define DSA_SIG_get0 sslshim_DSA_SIG_get0 100f391d6bcSXin LI #define DSA_SIG_set0 sslshim_DSA_SIG_set0 101f391d6bcSXin LI #define DSA_get0_pqg sslshim_DSA_get0_pqg 102f391d6bcSXin LI #define DSA_set0_pqg sslshim_DSA_set0_pqg 103f391d6bcSXin LI #define DSA_get0_key sslshim_DSA_get0_key 104f391d6bcSXin LI #define DSA_set0_key sslshim_DSA_set0_key 105f391d6bcSXin LI 106f391d6bcSXin LI #define X509_get_signature_nid sslshim_X509_get_signature_nid 107f391d6bcSXin LI 108*f0574f5cSXin LI #define OpenSSL_version_num SSLeay 109*f0574f5cSXin LI #define OpenSSL_version SSLeay_version 110*f0574f5cSXin LI #define X509_get0_notBefore X509_get_notBefore 111*f0574f5cSXin LI #define X509_getm_notBefore X509_get_notBefore 112*f0574f5cSXin LI #define X509_get0_notAfter X509_get_notAfter 113*f0574f5cSXin LI #define X509_getm_notAfter X509_get_notAfter 114*f0574f5cSXin LI 115f391d6bcSXin LI /* ----------------------------------------------------------------- */ 116f391d6bcSXin LI #endif /* OPENSSL_VERSION_NUMBER < v1.1.0 */ 117f391d6bcSXin LI /* ----------------------------------------------------------------- */ 118f391d6bcSXin LI 119f391d6bcSXin LI #endif /* NTP_LIBSSL_COMPAT_H */ 120