xref: /freebsd-src/contrib/ntp/include/libssl_compat.h (revision f0574f5cf69e168cc4ea71ebbe5fdec9ec9a3dfe)
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