1*cdfa2a7eSchristos /* $NetBSD: libssl_compat.h,v 1.2 2020/05/25 20:47:19 christos Exp $ */ 2067f5680Schristos 35645e8e7Schristos /* 45645e8e7Schristos * libssl_compat.h -- OpenSSL v1.1 compatibility shims 55645e8e7Schristos * 65645e8e7Schristos * --------------------------------------------------------------------- 75645e8e7Schristos * 85645e8e7Schristos * Written by Juergen Perlinger <perlinger@ntp.org> for the NTP project 95645e8e7Schristos * 105645e8e7Schristos * Based on an idea by Kurt Roeckx <kurt@roeckx.be> 115645e8e7Schristos * 125645e8e7Schristos * --------------------------------------------------------------------- 135645e8e7Schristos * This is a clean room implementation of shim functions that have 145645e8e7Schristos * counterparts in the OpenSSL v1.1 API but not in earlier versions. 155645e8e7Schristos * 165645e8e7Schristos * If the OpenSSL version used for compilation needs the shims (that is, 175645e8e7Schristos * does not provide the new functions) the names of these functions are 185645e8e7Schristos * redirected to our shims. 195645e8e7Schristos * --------------------------------------------------------------------- 205645e8e7Schristos */ 215645e8e7Schristos 225645e8e7Schristos #ifndef NTP_LIBSSL_COMPAT_H 235645e8e7Schristos #define NTP_LIBSSL_COMPAT_H 245645e8e7Schristos 255645e8e7Schristos #include "openssl/evp.h" 265645e8e7Schristos #include "openssl/dsa.h" 275645e8e7Schristos #include "openssl/rsa.h" 285645e8e7Schristos 293e3909feSchristos #ifndef OPENSSL_VERSION_NUMBER 303e3909feSchristos #define OPENSSL_VERSION_NUMBER SSLEAY_VERSION_NUMBER 313e3909feSchristos #endif 323e3909feSchristos 333e3909feSchristos #ifndef OPENSSL_VERSION_TEXT 343e3909feSchristos #define OPENSSL_VERSION_TEXT SSLEAY_VERSION_TEXT 353e3909feSchristos #endif 363e3909feSchristos 373e3909feSchristos #ifndef OPENSSL_VERSION 383e3909feSchristos #define OPENSSL_VERSION SSLEAY_VERSION 393e3909feSchristos #endif 403e3909feSchristos 415645e8e7Schristos /* ----------------------------------------------------------------- */ 425645e8e7Schristos #if OPENSSL_VERSION_NUMBER < 0x10100000L 435645e8e7Schristos /* ----------------------------------------------------------------- */ 445645e8e7Schristos 455645e8e7Schristos # include <openssl/objects.h> 465645e8e7Schristos # include <openssl/x509.h> 475645e8e7Schristos 485645e8e7Schristos /* shim the new-style API on an old-style OpenSSL */ 495645e8e7Schristos 505645e8e7Schristos extern BN_GENCB* sslshimBN_GENCB_new(void); 515645e8e7Schristos extern void sslshimBN_GENCB_free(BN_GENCB*); 525645e8e7Schristos 535645e8e7Schristos extern EVP_MD_CTX* sslshim_EVP_MD_CTX_new(void); 545645e8e7Schristos extern void sslshim_EVP_MD_CTX_free(EVP_MD_CTX *ctx); 555645e8e7Schristos 565645e8e7Schristos extern int sslshim_EVP_PKEY_id(const EVP_PKEY * pkey); 575645e8e7Schristos extern int sslshim_EVP_PKEY_base_id(const EVP_PKEY * pkey); 585645e8e7Schristos extern RSA* sslshim_EVP_PKEY_get0_RSA(EVP_PKEY * pkey); 595645e8e7Schristos extern DSA* sslshim_EVP_PKEY_get0_DSA(EVP_PKEY * pkey); 605645e8e7Schristos 615645e8e7Schristos extern void sslshim_RSA_get0_key(const RSA *prsa, const BIGNUM **pn, 625645e8e7Schristos const BIGNUM **pe, const BIGNUM **pd); 635645e8e7Schristos extern int sslshim_RSA_set0_key(RSA *prsa, BIGNUM *n, 645645e8e7Schristos BIGNUM *e, BIGNUM *d); 655645e8e7Schristos extern void sslshim_RSA_get0_factors(const RSA *prsa, const BIGNUM **pp, 665645e8e7Schristos const BIGNUM **pq); 675645e8e7Schristos extern int sslshim_RSA_set0_factors(RSA *prsar, BIGNUM *p, BIGNUM *q); 685645e8e7Schristos extern int sslshim_RSA_set0_crt_params(RSA *prsa, BIGNUM *dmp1, 695645e8e7Schristos BIGNUM *dmq1, BIGNUM *iqmp); 705645e8e7Schristos 715645e8e7Schristos extern void sslshim_DSA_SIG_get0(const DSA_SIG *psig, const BIGNUM **pr, 725645e8e7Schristos const BIGNUM **ps); 735645e8e7Schristos extern int sslshim_DSA_SIG_set0(DSA_SIG *psig, BIGNUM *r, BIGNUM *s); 745645e8e7Schristos extern void sslshim_DSA_get0_pqg(const DSA *pdsa, const BIGNUM **pp, 755645e8e7Schristos const BIGNUM **pq, const BIGNUM **pg); 765645e8e7Schristos extern int sslshim_DSA_set0_pqg(DSA *pdsa, BIGNUM *p, BIGNUM *q, BIGNUM *g); 775645e8e7Schristos extern void sslshim_DSA_get0_key(const DSA *pdsa, const BIGNUM **ppub_key, 785645e8e7Schristos const BIGNUM **ppriv_key); 795645e8e7Schristos extern int sslshim_DSA_set0_key(DSA *pdsa, BIGNUM *pub_key, 805645e8e7Schristos BIGNUM *priv_key); 815645e8e7Schristos 825645e8e7Schristos extern int sslshim_X509_get_signature_nid(const X509 *x); 835645e8e7Schristos 845645e8e7Schristos #define BN_GENCB_new sslshimBN_GENCB_new 855645e8e7Schristos #define BN_GENCB_free sslshimBN_GENCB_free 865645e8e7Schristos 875645e8e7Schristos #define EVP_MD_CTX_new sslshim_EVP_MD_CTX_new 885645e8e7Schristos #define EVP_MD_CTX_free sslshim_EVP_MD_CTX_free 895645e8e7Schristos 905645e8e7Schristos #define EVP_PKEY_id sslshim_EVP_PKEY_id 915645e8e7Schristos #define EVP_PKEY_base_id sslshim_EVP_PKEY_base_id 925645e8e7Schristos #define EVP_PKEY_get0_RSA sslshim_EVP_PKEY_get0_RSA 935645e8e7Schristos #define EVP_PKEY_get0_DSA sslshim_EVP_PKEY_get0_DSA 945645e8e7Schristos 955645e8e7Schristos #define RSA_get0_key sslshim_RSA_get0_key 965645e8e7Schristos #define RSA_set0_key sslshim_RSA_set0_key 975645e8e7Schristos #define RSA_get0_factors sslshim_RSA_get0_factors 985645e8e7Schristos #define RSA_set0_factors sslshim_RSA_set0_factors 995645e8e7Schristos #define RSA_set0_crt_params sslshim_RSA_set0_crt_params 1005645e8e7Schristos 1015645e8e7Schristos #define DSA_SIG_get0 sslshim_DSA_SIG_get0 1025645e8e7Schristos #define DSA_SIG_set0 sslshim_DSA_SIG_set0 1035645e8e7Schristos #define DSA_get0_pqg sslshim_DSA_get0_pqg 1045645e8e7Schristos #define DSA_set0_pqg sslshim_DSA_set0_pqg 1055645e8e7Schristos #define DSA_get0_key sslshim_DSA_get0_key 1065645e8e7Schristos #define DSA_set0_key sslshim_DSA_set0_key 1075645e8e7Schristos 1085645e8e7Schristos #define X509_get_signature_nid sslshim_X509_get_signature_nid 1095645e8e7Schristos 1103e3909feSchristos #define OpenSSL_version_num SSLeay 1113e3909feSchristos #define OpenSSL_version SSLeay_version 1123e3909feSchristos #define X509_get0_notBefore X509_get_notBefore 1133e3909feSchristos #define X509_getm_notBefore X509_get_notBefore 1143e3909feSchristos #define X509_get0_notAfter X509_get_notAfter 1153e3909feSchristos #define X509_getm_notAfter X509_get_notAfter 1163e3909feSchristos 1175645e8e7Schristos /* ----------------------------------------------------------------- */ 1185645e8e7Schristos #endif /* OPENSSL_VERSION_NUMBER < v1.1.0 */ 1195645e8e7Schristos /* ----------------------------------------------------------------- */ 1205645e8e7Schristos 1215645e8e7Schristos #endif /* NTP_LIBSSL_COMPAT_H */ 122