1310419Sdelphij/* 2310419Sdelphij * libssl_compat.h -- OpenSSL v1.1 compatibility shims 3310419Sdelphij * 4310419Sdelphij * --------------------------------------------------------------------- 5310419Sdelphij * 6310419Sdelphij * Written by Juergen Perlinger <perlinger@ntp.org> for the NTP project 7310419Sdelphij * 8310419Sdelphij * Based on an idea by Kurt Roeckx <kurt@roeckx.be> 9310419Sdelphij * 10310419Sdelphij * --------------------------------------------------------------------- 11310419Sdelphij * This is a clean room implementation of shim functions that have 12310419Sdelphij * counterparts in the OpenSSL v1.1 API but not in earlier versions. 13310419Sdelphij * 14310419Sdelphij * If the OpenSSL version used for compilation needs the shims (that is, 15310419Sdelphij * does not provide the new functions) the names of these functions are 16310419Sdelphij * redirected to our shims. 17310419Sdelphij * --------------------------------------------------------------------- 18310419Sdelphij */ 19310419Sdelphij 20310419Sdelphij#ifndef NTP_LIBSSL_COMPAT_H 21310419Sdelphij#define NTP_LIBSSL_COMPAT_H 22310419Sdelphij 23310419Sdelphij#include "openssl/evp.h" 24310419Sdelphij#include "openssl/dsa.h" 25310419Sdelphij#include "openssl/rsa.h" 26310419Sdelphij 27310419Sdelphij/* ----------------------------------------------------------------- */ 28310419Sdelphij#if OPENSSL_VERSION_NUMBER < 0x10100000L 29310419Sdelphij/* ----------------------------------------------------------------- */ 30310419Sdelphij 31310419Sdelphij# include <openssl/objects.h> 32310419Sdelphij# include <openssl/x509.h> 33310419Sdelphij 34310419Sdelphij/* shim the new-style API on an old-style OpenSSL */ 35310419Sdelphij 36310419Sdelphijextern BN_GENCB* sslshimBN_GENCB_new(void); 37310419Sdelphijextern void sslshimBN_GENCB_free(BN_GENCB*); 38310419Sdelphij 39310419Sdelphijextern EVP_MD_CTX* sslshim_EVP_MD_CTX_new(void); 40310419Sdelphijextern void sslshim_EVP_MD_CTX_free(EVP_MD_CTX *ctx); 41310419Sdelphij 42310419Sdelphijextern int sslshim_EVP_PKEY_id(const EVP_PKEY * pkey); 43310419Sdelphijextern int sslshim_EVP_PKEY_base_id(const EVP_PKEY * pkey); 44310419Sdelphijextern RSA* sslshim_EVP_PKEY_get0_RSA(EVP_PKEY * pkey); 45310419Sdelphijextern DSA* sslshim_EVP_PKEY_get0_DSA(EVP_PKEY * pkey); 46310419Sdelphij 47310419Sdelphijextern void sslshim_RSA_get0_key(const RSA *prsa, const BIGNUM **pn, 48310419Sdelphij const BIGNUM **pe, const BIGNUM **pd); 49310419Sdelphijextern int sslshim_RSA_set0_key(RSA *prsa, BIGNUM *n, 50310419Sdelphij BIGNUM *e, BIGNUM *d); 51310419Sdelphijextern void sslshim_RSA_get0_factors(const RSA *prsa, const BIGNUM **pp, 52310419Sdelphij const BIGNUM **pq); 53310419Sdelphijextern int sslshim_RSA_set0_factors(RSA *prsar, BIGNUM *p, BIGNUM *q); 54310419Sdelphijextern int sslshim_RSA_set0_crt_params(RSA *prsa, BIGNUM *dmp1, 55310419Sdelphij BIGNUM *dmq1, BIGNUM *iqmp); 56310419Sdelphij 57310419Sdelphijextern void sslshim_DSA_SIG_get0(const DSA_SIG *psig, const BIGNUM **pr, 58310419Sdelphij const BIGNUM **ps); 59310419Sdelphijextern int sslshim_DSA_SIG_set0(DSA_SIG *psig, BIGNUM *r, BIGNUM *s); 60310419Sdelphijextern void sslshim_DSA_get0_pqg(const DSA *pdsa, const BIGNUM **pp, 61310419Sdelphij const BIGNUM **pq, const BIGNUM **pg); 62310419Sdelphijextern int sslshim_DSA_set0_pqg(DSA *pdsa, BIGNUM *p, BIGNUM *q, BIGNUM *g); 63310419Sdelphijextern void sslshim_DSA_get0_key(const DSA *pdsa, const BIGNUM **ppub_key, 64310419Sdelphij const BIGNUM **ppriv_key); 65310419Sdelphijextern int sslshim_DSA_set0_key(DSA *pdsa, BIGNUM *pub_key, 66310419Sdelphij BIGNUM *priv_key); 67310419Sdelphij 68310419Sdelphijextern int sslshim_X509_get_signature_nid(const X509 *x); 69310419Sdelphij 70310419Sdelphij#define BN_GENCB_new sslshimBN_GENCB_new 71310419Sdelphij#define BN_GENCB_free sslshimBN_GENCB_free 72310419Sdelphij 73310419Sdelphij#define EVP_MD_CTX_new sslshim_EVP_MD_CTX_new 74310419Sdelphij#define EVP_MD_CTX_free sslshim_EVP_MD_CTX_free 75310419Sdelphij 76310419Sdelphij#define EVP_PKEY_id sslshim_EVP_PKEY_id 77310419Sdelphij#define EVP_PKEY_base_id sslshim_EVP_PKEY_base_id 78310419Sdelphij#define EVP_PKEY_get0_RSA sslshim_EVP_PKEY_get0_RSA 79310419Sdelphij#define EVP_PKEY_get0_DSA sslshim_EVP_PKEY_get0_DSA 80310419Sdelphij 81310419Sdelphij#define RSA_get0_key sslshim_RSA_get0_key 82310419Sdelphij#define RSA_set0_key sslshim_RSA_set0_key 83310419Sdelphij#define RSA_get0_factors sslshim_RSA_get0_factors 84310419Sdelphij#define RSA_set0_factors sslshim_RSA_set0_factors 85310419Sdelphij#define RSA_set0_crt_params sslshim_RSA_set0_crt_params 86310419Sdelphij 87310419Sdelphij#define DSA_SIG_get0 sslshim_DSA_SIG_get0 88310419Sdelphij#define DSA_SIG_set0 sslshim_DSA_SIG_set0 89310419Sdelphij#define DSA_get0_pqg sslshim_DSA_get0_pqg 90310419Sdelphij#define DSA_set0_pqg sslshim_DSA_set0_pqg 91310419Sdelphij#define DSA_get0_key sslshim_DSA_get0_key 92310419Sdelphij#define DSA_set0_key sslshim_DSA_set0_key 93310419Sdelphij 94310419Sdelphij#define X509_get_signature_nid sslshim_X509_get_signature_nid 95310419Sdelphij 96310419Sdelphij/* ----------------------------------------------------------------- */ 97310419Sdelphij#endif /* OPENSSL_VERSION_NUMBER < v1.1.0 */ 98310419Sdelphij/* ----------------------------------------------------------------- */ 99310419Sdelphij 100310419Sdelphij#endif /* NTP_LIBSSL_COMPAT_H */ 101