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