From b572350a922187d43dd4629c3b43e19979fae3ef Mon Sep 17 00:00:00 2001
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
Date: Tue, 25 Sep 2018 15:30:04 +0800
Subject: [PATCH] ipsec-tools: add openssl 1.1 support

To: equeiroz@troianet.com.br

This patch updates the calls to openssl 1.1 API, and adds a
compatibility layer so it compiles with (at least) openssl 1.0.2, I
haven't tested it with lower versions, but all that's needed is to edit
the openssl_compat.* files and add the missing functions there--they're
usually trivial.

Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>

Upstream-Status: Submitted [https://sourceforge.net/p/ipsec-tools/mailman/message/36327963/]
https://github.com/openwrt/packages/blob/master/net/ipsec-tools/patches/015-openssl-1.1.patch

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
 src/racoon/Makefile.am      |  10 +--
 src/racoon/algorithm.c      |   6 +-
 src/racoon/crypto_openssl.c | 197 +++++++++++++++++++++-------------------
 src/racoon/crypto_openssl.h |   2 +-
 src/racoon/eaytest.c        |   7 +-
 src/racoon/ipsec_doi.c      |   2 +-
 src/racoon/openssl_compat.c | 213 ++++++++++++++++++++++++++++++++++++++++++++
 src/racoon/openssl_compat.h |  45 ++++++++++
 src/racoon/plainrsa-gen.c   |  41 +++++----
 src/racoon/prsa_par.y       |  28 ++++--
 src/racoon/rsalist.c        |   5 +-
 11 files changed, 430 insertions(+), 126 deletions(-)
 create mode 100644 src/racoon/openssl_compat.c
 create mode 100644 src/racoon/openssl_compat.h

diff --git a/src/racoon/Makefile.am b/src/racoon/Makefile.am
index 0662957..272b009 100644
--- a/src/racoon/Makefile.am
+++ b/src/racoon/Makefile.am
@@ -4,7 +4,7 @@ sbin_PROGRAMS = racoon racoonctl plainrsa-gen
 noinst_PROGRAMS = eaytest
 include_racoon_HEADERS = racoonctl.h var.h vmbuf.h misc.h gcmalloc.h admin.h \
 	schedule.h sockmisc.h isakmp_var.h isakmp.h isakmp_xauth.h \
-	isakmp_cfg.h isakmp_unity.h ipsec_doi.h evt.h
+	isakmp_cfg.h isakmp_unity.h ipsec_doi.h evt.h openssl_compat.h
 lib_LTLIBRARIES = libracoon.la
 
 adminsockdir=${localstatedir}/racoon
@@ -32,7 +32,7 @@ racoon_SOURCES = \
 	gssapi.c dnssec.c getcertsbyname.c privsep.c \
 	pfkey.c admin.c evt.c ipsec_doi.c oakley.c grabmyaddr.c vendorid.c \
 	policy.c localconf.c remoteconf.c crypto_openssl.c algorithm.c \
-	proposal.c sainfo.c strnames.c \
+	openssl_compat.c proposal.c sainfo.c strnames.c \
 	plog.c logger.c schedule.c str2val.c \
 	safefile.c backupsa.c genlist.c rsalist.c \
 	cftoken.l cfparse.y prsa_tok.l prsa_par.y 
@@ -51,12 +51,12 @@ libracoon_la_SOURCES = kmpstat.c vmbuf.c sockmisc.c misc.c
 libracoon_la_CFLAGS = -DNOUSE_PRIVSEP $(AM_CFLAGS)
 
 plainrsa_gen_SOURCES = plainrsa-gen.c plog.c \
-	crypto_openssl.c logger.c 
+	crypto_openssl.c logger.c openssl_compat.c
 EXTRA_plainrsa_gen_SOURCES = $(MISSING_ALGOS)
 plainrsa_gen_LDADD = $(CRYPTOBJS) vmbuf.o misc.o
 plainrsa_gen_DEPENDENCIES = $(CRYPTOBJS) vmbuf.o misc.o
 
-eaytest_SOURCES = eaytest.c plog.c logger.c
+eaytest_SOURCES = eaytest.c plog.c logger.c openssl_compat.c
 EXTRA_eaytest_SOURCES = missing/crypto/sha2/sha2.c
 eaytest_LDADD =	crypto_openssl_test.o vmbuf.o str2val.o misc_noplog.o \
 	$(CRYPTOBJS)
@@ -75,7 +75,7 @@ noinst_HEADERS = \
 	debugrm.h         isakmp.h      misc.h          sainfo.h \
 	dhgroup.h         isakmp_agg.h  netdb_dnssec.h  schedule.h \
 	isakmp_cfg.h      isakmp_xauth.h isakmp_unity.h isakmp_frag.h \
-	throttle.h	  privsep.h \
+	throttle.h	  privsep.h     openssl_compat.h \
 	cfparse_proto.h	  cftoken_proto.h genlist.h     rsalist.h \
 	missing/crypto/sha2/sha2.h missing/crypto/rijndael/rijndael_local.h \
 	missing/crypto/rijndael/rijndael-api-fst.h \
diff --git a/src/racoon/algorithm.c b/src/racoon/algorithm.c
index 3fd50f6..66c874b 100644
--- a/src/racoon/algorithm.c
+++ b/src/racoon/algorithm.c
@@ -128,7 +128,7 @@ static struct enc_algorithm oakley_encdef[] = {
 { "aes",	algtype_aes,	OAKLEY_ATTR_ENC_ALG_AES,	16,
 		eay_aes_encrypt,	eay_aes_decrypt,
 		eay_aes_weakkey,	eay_aes_keylen, },
-#ifdef HAVE_OPENSSL_CAMELLIA_H
+#if defined(HAVE_OPENSSL_CAMELLIA_H) && ! defined(OPENSSL_NO_CAMELLIA)
 { "camellia",	algtype_camellia,	OAKLEY_ATTR_ENC_ALG_CAMELLIA,	16,
 		eay_camellia_encrypt,	eay_camellia_decrypt,
 		eay_camellia_weakkey,	eay_camellia_keylen, },
@@ -168,7 +168,7 @@ static struct enc_algorithm ipsec_encdef[] = {
 { "twofish",	algtype_twofish,	IPSECDOI_ESP_TWOFISH,		16,
 		NULL,			NULL,
 		NULL,			eay_twofish_keylen, },
-#ifdef HAVE_OPENSSL_IDEA_H
+#if defined(HAVE_OPENSSL_IDEA_H) && ! defined(OPENSSL_NO_IDEA)
 { "3idea",	algtype_3idea,		IPSECDOI_ESP_3IDEA,		8,
 		NULL,			NULL,
 		NULL,			NULL, },
@@ -179,7 +179,7 @@ static struct enc_algorithm ipsec_encdef[] = {
 { "rc4",	algtype_rc4,		IPSECDOI_ESP_RC4,		8,
 		NULL,			NULL,
 		NULL,			NULL, },
-#ifdef HAVE_OPENSSL_CAMELLIA_H
+#if defined(HAVE_OPENSSL_CAMELLIA_H) && ! defined(OPENSSL_NO_CAMELLIA)
 { "camellia",	algtype_camellia,	IPSECDOI_ESP_CAMELLIA,		16,
 		NULL,			NULL,
 		NULL,			eay_camellia_keylen, },
diff --git a/src/racoon/crypto_openssl.c b/src/racoon/crypto_openssl.c
index 55b076a..8fb358f 100644
--- a/src/racoon/crypto_openssl.c
+++ b/src/racoon/crypto_openssl.c
@@ -90,6 +90,7 @@
 #endif
 #endif
 #include "plog.h"
+#include "openssl_compat.h"
 
 #define USE_NEW_DES_API
 
@@ -316,9 +317,12 @@ eay_cmp_asn1dn(n1, n2)
 			i = idx+1;
 			goto end;
 		}
-		if ((ea->value->length == 1 && ea->value->data[0] == '*') ||
-		    (eb->value->length == 1 && eb->value->data[0] == '*')) {
-	    		if (OBJ_cmp(ea->object,eb->object)) {
+		ASN1_STRING *sa = X509_NAME_ENTRY_get_data(ea);
+		ASN1_STRING *sb = X509_NAME_ENTRY_get_data(eb);
+		if ((ASN1_STRING_length(sa) == 1 && ASN1_STRING_get0_data(sa)[0] == '*') ||
+		    (ASN1_STRING_length(sb) == 1 && ASN1_STRING_get0_data(sb)[0] == '*')) {
+	    		if (OBJ_cmp(X509_NAME_ENTRY_get_object(ea),
+				    X509_NAME_ENTRY_get_object(eb))) {
 				i = idx+1;
 				goto end;
 	    		}
@@ -430,7 +434,7 @@ cb_check_cert_local(ok, ctx)
 
 	if (!ok) {
 		X509_NAME_oneline(
-				X509_get_subject_name(ctx->current_cert),
+				X509_get_subject_name(X509_STORE_CTX_get_current_cert(ctx)),
 				buf,
 				256);
 		/*
@@ -438,7 +442,8 @@ cb_check_cert_local(ok, ctx)
 		 * ok if they are self signed. But we should still warn
 		 * the user.
  		 */
-		switch (ctx->error) {
+		int ctx_error = X509_STORE_CTX_get_error(ctx);
+		switch (ctx_error) {
 		case X509_V_ERR_CERT_HAS_EXPIRED:
 		case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
 		case X509_V_ERR_INVALID_CA:
@@ -453,9 +458,9 @@ cb_check_cert_local(ok, ctx)
 		}
 		plog(log_tag, LOCATION, NULL,
 			"%s(%d) at depth:%d SubjectName:%s\n",
-			X509_verify_cert_error_string(ctx->error),
-			ctx->error,
-			ctx->error_depth,
+			X509_verify_cert_error_string(ctx_error),
+			ctx_error,
+			X509_STORE_CTX_get_error_depth(ctx),
 			buf);
 	}
 	ERR_clear_error();
@@ -477,10 +482,11 @@ cb_check_cert_remote(ok, ctx)
 
 	if (!ok) {
 		X509_NAME_oneline(
-				X509_get_subject_name(ctx->current_cert),
+				X509_get_subject_name(X509_STORE_CTX_get_current_cert(ctx)),
 				buf,
 				256);
-		switch (ctx->error) {
+		int ctx_error=X509_STORE_CTX_get_error(ctx);
+		switch (ctx_error) {
 		case X509_V_ERR_UNABLE_TO_GET_CRL:
 			ok = 1;
 			log_tag = LLV_WARNING;
@@ -490,9 +496,9 @@ cb_check_cert_remote(ok, ctx)
 		}
 		plog(log_tag, LOCATION, NULL,
 			"%s(%d) at depth:%d SubjectName:%s\n",
-			X509_verify_cert_error_string(ctx->error),
-			ctx->error,
-			ctx->error_depth,
+			X509_verify_cert_error_string(ctx_error),
+			ctx_error,
+			X509_STORE_CTX_get_error_depth(ctx),
 			buf);
 	}
 	ERR_clear_error();
@@ -516,14 +522,15 @@ eay_get_x509asn1subjectname(cert)
 	if (x509 == NULL)
 		goto error;
 
+	X509_NAME *subject_name = X509_get_subject_name(x509);
 	/* get the length of the name */
-	len = i2d_X509_NAME(x509->cert_info->subject, NULL);
+	len = i2d_X509_NAME(subject_name, NULL);
 	name = vmalloc(len);
 	if (!name)
 		goto error;
 	/* get the name */
 	bp = (unsigned char *) name->v;
-	len = i2d_X509_NAME(x509->cert_info->subject, &bp);
+	len = i2d_X509_NAME(subject_name, &bp);
 
 	X509_free(x509);
 
@@ -661,15 +668,16 @@ eay_get_x509asn1issuername(cert)
 	if (x509 == NULL)
 		goto error;
 
+	X509_NAME *issuer_name = X509_get_issuer_name(x509);
 	/* get the length of the name */
-	len = i2d_X509_NAME(x509->cert_info->issuer, NULL);
+	len = i2d_X509_NAME(issuer_name, NULL);
 	name = vmalloc(len);
 	if (name == NULL)
 		goto error;
 
 	/* get the name */
 	bp = (unsigned char *) name->v;
-	len = i2d_X509_NAME(x509->cert_info->issuer, &bp);
+	len = i2d_X509_NAME(issuer_name, &bp);
 
 	X509_free(x509);
 
@@ -850,7 +858,7 @@ eay_check_x509sign(source, sig, cert)
 		return -1;
 	}
 
-	res = eay_rsa_verify(source, sig, evp->pkey.rsa);
+	res = eay_rsa_verify(source, sig, EVP_PKEY_get0_RSA(evp));
 
 	EVP_PKEY_free(evp);
 	X509_free(x509);
@@ -992,7 +1000,7 @@ eay_get_x509sign(src, privkey)
 	if (evp == NULL)
 		return NULL;
 
-	sig = eay_rsa_sign(src, evp->pkey.rsa);
+	sig = eay_rsa_sign(src, EVP_PKEY_get0_RSA(evp));
 
 	EVP_PKEY_free(evp);
 
@@ -1079,7 +1087,11 @@ eay_strerror()
 	int line, flags;
 	unsigned long es;
 
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+	es = 0; /* even when allowed by OPENSSL_API_COMPAT, it is defined as 0 */
+#else
 	es = CRYPTO_thread_id();
+#endif
 
 	while ((l = ERR_get_error_line_data(&file, &line, &data, &flags)) != 0){
 		n = snprintf(ebuf + len, sizeof(ebuf) - len,
@@ -1100,7 +1112,7 @@ vchar_t *
 evp_crypt(vchar_t *data, vchar_t *key, vchar_t *iv, const EVP_CIPHER *e, int enc)
 {
 	vchar_t *res;
-	EVP_CIPHER_CTX ctx;
+	EVP_CIPHER_CTX *ctx;
 
 	if (!e)
 		return NULL;
@@ -1111,7 +1123,7 @@ evp_crypt(vchar_t *data, vchar_t *key, vchar_t *iv, const EVP_CIPHER *e, int enc
 	if ((res = vmalloc(data->l)) == NULL)
 		return NULL;
 
-	EVP_CIPHER_CTX_init(&ctx);
+	ctx = EVP_CIPHER_CTX_new();
 
 	switch(EVP_CIPHER_nid(e)){
 	case NID_bf_cbc:
@@ -1125,54 +1137,41 @@ evp_crypt(vchar_t *data, vchar_t *key, vchar_t *iv, const EVP_CIPHER *e, int enc
 		/* XXX: can we do that also for algos with a fixed key size ?
 		 */
 		/* init context without key/iv
-         */
-        if (!EVP_CipherInit(&ctx, e, NULL, NULL, enc))
-        {
-            OpenSSL_BUG();
-            vfree(res);
-            return NULL;
-        }
+                 */
+		if (!EVP_CipherInit(ctx, e, NULL, NULL, enc))
+			goto out;
 		
-        /* update key size
-         */
-        if (!EVP_CIPHER_CTX_set_key_length(&ctx, key->l))
-        {
-            OpenSSL_BUG();
-            vfree(res);
-            return NULL;
-        }
-
-        /* finalize context init with desired key size
-         */
-        if (!EVP_CipherInit(&ctx, NULL, (u_char *) key->v,
+		/* update key size
+		 */
+		if (!EVP_CIPHER_CTX_set_key_length(ctx, key->l))
+			goto out;
+
+		/* finalize context init with desired key size
+		 */
+		if (!EVP_CipherInit(ctx, NULL, (u_char *) key->v,
 							(u_char *) iv->v, enc))
-        {
-            OpenSSL_BUG();
-            vfree(res);
-            return NULL;
-		}
+			goto out;
 		break;
 	default:
-		if (!EVP_CipherInit(&ctx, e, (u_char *) key->v, 
-							(u_char *) iv->v, enc)) {
-			OpenSSL_BUG();
-			vfree(res);
-			return NULL;
-		}
+		if (!EVP_CipherInit(ctx, e, (u_char *) key->v,
+							(u_char *) iv->v, enc))
+            		goto out;
 	}
 
 	/* disable openssl padding */
-	EVP_CIPHER_CTX_set_padding(&ctx, 0); 
+	EVP_CIPHER_CTX_set_padding(ctx, 0);
 	
-	if (!EVP_Cipher(&ctx, (u_char *) res->v, (u_char *) data->v, data->l)) {
-		OpenSSL_BUG();
-		vfree(res);
-		return NULL;
-	}
+	if (!EVP_Cipher(ctx, (u_char *) res->v, (u_char *) data->v, data->l))
+		goto out;
 
-	EVP_CIPHER_CTX_cleanup(&ctx);
+	EVP_CIPHER_CTX_free(ctx);
 
 	return res;
+out:
+	EVP_CIPHER_CTX_free(ctx);
+	OpenSSL_BUG();
+	vfree(res);
+	return NULL;
 }
 
 int
@@ -1230,7 +1229,7 @@ eay_des_keylen(len)
 	return evp_keylen(len, EVP_des_cbc());
 }
 
-#ifdef HAVE_OPENSSL_IDEA_H
+#if defined(HAVE_OPENSSL_IDEA_H) && ! defined(OPENSSL_NO_IDEA)
 /*
  * IDEA-CBC
  */
@@ -1587,7 +1586,7 @@ eay_aes_keylen(len)
 	return len;
 }
 
-#if defined(HAVE_OPENSSL_CAMELLIA_H)
+#if defined(HAVE_OPENSSL_CAMELLIA_H) && ! defined(OPENSSL_NO_CAMELLIA)
 /*
  * CAMELLIA-CBC
  */
@@ -1680,9 +1679,9 @@ eay_hmac_init(key, md)
 	vchar_t *key;
 	const EVP_MD *md;
 {
-	HMAC_CTX *c = racoon_malloc(sizeof(*c));
+	HMAC_CTX *c = HMAC_CTX_new();
 
-	HMAC_Init(c, key->v, key->l, md);
+	HMAC_Init_ex(c, key->v, key->l, md, NULL);
 
 	return (caddr_t)c;
 }
@@ -1761,8 +1760,7 @@ eay_hmacsha2_512_final(c)
 
 	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
 	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
+	HMAC_CTX_free((HMAC_CTX *)c);
 
 	if (SHA512_DIGEST_LENGTH != res->l) {
 		plog(LLV_ERROR, LOCATION, NULL,
@@ -1811,8 +1809,7 @@ eay_hmacsha2_384_final(c)
 
 	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
 	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
+	HMAC_CTX_free((HMAC_CTX *)c);
 
 	if (SHA384_DIGEST_LENGTH != res->l) {
 		plog(LLV_ERROR, LOCATION, NULL,
@@ -1861,8 +1858,7 @@ eay_hmacsha2_256_final(c)
 
 	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
 	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
+	HMAC_CTX_free((HMAC_CTX *)c);
 
 	if (SHA256_DIGEST_LENGTH != res->l) {
 		plog(LLV_ERROR, LOCATION, NULL,
@@ -1912,8 +1908,7 @@ eay_hmacsha1_final(c)
 
 	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
 	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
+	HMAC_CTX_free((HMAC_CTX *)c);
 
 	if (SHA_DIGEST_LENGTH != res->l) {
 		plog(LLV_ERROR, LOCATION, NULL,
@@ -1962,8 +1957,7 @@ eay_hmacmd5_final(c)
 
 	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
 	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
+	HMAC_CTX_free((HMAC_CTX *)c);
 
 	if (MD5_DIGEST_LENGTH != res->l) {
 		plog(LLV_ERROR, LOCATION, NULL,
@@ -2266,6 +2260,7 @@ eay_dh_generate(prime, g, publen, pub, priv)
 	u_int32_t g;
 {
 	BIGNUM *p = NULL;
+	BIGNUM *BNg = NULL;
 	DH *dh = NULL;
 	int error = -1;
 
@@ -2276,25 +2271,28 @@ eay_dh_generate(prime, g, publen, pub, priv)
 
 	if ((dh = DH_new()) == NULL)
 		goto end;
-	dh->p = p;
-	p = NULL;	/* p is now part of dh structure */
-	dh->g = NULL;
-	if ((dh->g = BN_new()) == NULL)
+	if ((BNg = BN_new()) == NULL)
 		goto end;
-	if (!BN_set_word(dh->g, g))
+	if (!BN_set_word(BNg, g))
 		goto end;
+	if (! DH_set0_pqg(dh, p, NULL, BNg))
+		goto end;
+	BNg = NULL;
+	p = NULL;	/* p is now part of dh structure */
 
 	if (publen != 0)
-		dh->length = publen;
+		DH_set_length(dh, publen);
 
 	/* generate public and private number */
 	if (!DH_generate_key(dh))
 		goto end;
 
 	/* copy results to buffers */
-	if (eay_bn2v(pub, dh->pub_key) < 0)
+	BIGNUM *pub_key, *priv_key;
+	DH_get0_key(dh, (const BIGNUM**) &pub_key, (const BIGNUM**) &priv_key);
+	if (eay_bn2v(pub, pub_key) < 0)
 		goto end;
-	if (eay_bn2v(priv, dh->priv_key) < 0) {
+	if (eay_bn2v(priv, priv_key) < 0) {
 		vfree(*pub);
 		goto end;
 	}
@@ -2306,6 +2304,8 @@ end:
 		DH_free(dh);
 	if (p != 0)
 		BN_free(p);
+	if (BNg != 0)
+		BN_free(BNg);
 	return(error);
 }
 
@@ -2319,6 +2319,10 @@ eay_dh_compute(prime, g, pub, priv, pub2, key)
 	int l;
 	unsigned char *v = NULL;
 	int error = -1;
+	BIGNUM *p = BN_new();
+	BIGNUM *BNg = BN_new();
+	BIGNUM *pub_key = BN_new();
+	BIGNUM *priv_key = BN_new();
 
 	/* make public number to compute */
 	if (eay_v2bn(&dh_pub, pub2) < 0)
@@ -2327,19 +2331,21 @@ eay_dh_compute(prime, g, pub, priv, pub2, key)
 	/* make DH structure */
 	if ((dh = DH_new()) == NULL)
 		goto end;
-	if (eay_v2bn(&dh->p, prime) < 0)
+	if (p == NULL || BNg == NULL || pub_key == NULL || priv_key == NULL)
 		goto end;
-	if (eay_v2bn(&dh->pub_key, pub) < 0)
+
+	if (eay_v2bn(&p, prime) < 0)
 		goto end;
-	if (eay_v2bn(&dh->priv_key, priv) < 0)
+	if (eay_v2bn(&pub_key, pub) < 0)
 		goto end;
-	dh->length = pub2->l * 8;
-
-	dh->g = NULL;
-	if ((dh->g = BN_new()) == NULL)
+	if (eay_v2bn(&priv_key, priv) < 0)
 		goto end;
-	if (!BN_set_word(dh->g, g))
+	if (!BN_set_word(BNg, g))
 		goto end;
+	DH_set0_key(dh, pub_key, priv_key);
+	DH_set_length(dh, pub2->l * 8);
+	DH_set0_pqg(dh, p, NULL, BNg);
+	pub_key = priv_key = p = BNg = NULL;
 
 	if ((v = racoon_calloc(prime->l, sizeof(u_char))) == NULL)
 		goto end;
@@ -2350,6 +2356,14 @@ eay_dh_compute(prime, g, pub, priv, pub2, key)
 	error = 0;
 
 end:
+	if (p != NULL)
+		BN_free(p);
+	if (BNg != NULL)
+		BN_free(BNg);
+	if (pub_key != NULL)
+		BN_free(pub_key);
+	if (priv_key != NULL)
+		BN_free(priv_key);
 	if (dh_pub != NULL)
 		BN_free(dh_pub);
 	if (dh != NULL)
@@ -2400,12 +2414,14 @@ eay_bn2v(var, bn)
 void
 eay_init()
 {
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
 	OpenSSL_add_all_algorithms();
 	ERR_load_crypto_strings();
 #ifdef HAVE_OPENSSL_ENGINE_H
 	ENGINE_load_builtin_engines();
 	ENGINE_register_all_complete();
 #endif
+#endif
 }
 
 vchar_t *
@@ -2504,8 +2520,7 @@ binbuf_pubkey2rsa(vchar_t *binbuf)
 		goto out;
 	}
 	
-	rsa_pub->n = mod;
-	rsa_pub->e = exp;
+	RSA_set0_key(rsa_pub, mod, exp, NULL);
 
 out:
 	return rsa_pub;
@@ -2582,5 +2597,5 @@ eay_random()
 const char *
 eay_version()
 {
-	return SSLeay_version(SSLEAY_VERSION);
+	return OpenSSL_version(OPENSSL_VERSION);
 }
diff --git a/src/racoon/crypto_openssl.h b/src/racoon/crypto_openssl.h
index 66fac73..ee5b765 100644
--- a/src/racoon/crypto_openssl.h
+++ b/src/racoon/crypto_openssl.h
@@ -124,7 +124,7 @@ extern vchar_t *eay_aes_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
 extern int eay_aes_weakkey __P((vchar_t *));
 extern int eay_aes_keylen __P((int));
 
-#if defined(HAVE_OPENSSL_CAMELLIA_H)
+#if defined(HAVE_OPENSSL_CAMELLIA_H) && ! defined(OPENSSL_NO_CAMELLIA)
 /* Camellia */
 extern vchar_t *eay_camellia_encrypt __P((vchar_t *, vchar_t *, vchar_t *));
 extern vchar_t *eay_camellia_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
diff --git a/src/racoon/eaytest.c b/src/racoon/eaytest.c
index d609e4f..d2d20da 100644
--- a/src/racoon/eaytest.c
+++ b/src/racoon/eaytest.c
@@ -62,6 +62,7 @@
 #include "dhgroup.h"
 #include "crypto_openssl.h"
 #include "gnuc.h"
+#include "openssl_compat.h"
 
 #include "package_version.h"
 
@@ -103,7 +104,7 @@ rsa_verify_with_pubkey(src, sig, pubkey_txt)
 		printf ("PEM_read_PUBKEY(): %s\n", eay_strerror());
 		return -1;
 	}
-	error = eay_check_rsasign(src, sig, evp->pkey.rsa);
+	error = eay_check_rsasign(src, sig, EVP_PKEY_get0_RSA(evp));
 
 	return error;
 }
@@ -698,7 +699,7 @@ ciphertest(ac, av)
 			  eay_cast_encrypt, eay_cast_decrypt) < 0)
 	  return -1;
 	
-#ifdef HAVE_OPENSSL_IDEA_H
+#if defined(HAVE_OPENSSL_IDEA_H) && ! defined(OPENSSL_NO_IDEA)
 	if (ciphertest_1 ("IDEA",
 			  &data, 8,
 			  &key, key.l,
@@ -715,7 +716,7 @@ ciphertest(ac, av)
 			  eay_rc5_encrypt, eay_rc5_decrypt) < 0)
 	  return -1;
 #endif
-#if defined(HAVE_OPENSSL_CAMELLIA_H)
+#if defined(HAVE_OPENSSL_CAMELLIA_H) && ! defined(OPENSSL_NO_CAMELLIA)
 	if (ciphertest_1 ("CAMELLIA",
 			  &data, 16,
 			  &key, key.l,
diff --git a/src/racoon/ipsec_doi.c b/src/racoon/ipsec_doi.c
index 08e4325..7b1604d 100644
--- a/src/racoon/ipsec_doi.c
+++ b/src/racoon/ipsec_doi.c
@@ -715,7 +715,7 @@ out:
 	/* key length must not be specified on some algorithms */
 	if (keylen) {
 		if (sa->enctype == OAKLEY_ATTR_ENC_ALG_DES
-#ifdef HAVE_OPENSSL_IDEA_H
+#if defined(HAVE_OPENSSL_IDEA_H) && ! defined(OPENSSL_NO_IDEA)
 		 || sa->enctype == OAKLEY_ATTR_ENC_ALG_IDEA
 #endif
 		 || sa->enctype == OAKLEY_ATTR_ENC_ALG_3DES) {
diff --git a/src/racoon/openssl_compat.c b/src/racoon/openssl_compat.c
new file mode 100644
index 0000000..864b5fb
--- /dev/null
+++ b/src/racoon/openssl_compat.c
@@ -0,0 +1,213 @@
+/*
+ * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "openssl_compat.h"
+
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+
+#include <string.h>
+
+static void *OPENSSL_zalloc(size_t num)
+{
+    void *ret = OPENSSL_malloc(num);
+
+    if (ret != NULL)
+        memset(ret, 0, num);
+    return ret;
+}
+
+int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
+{
+    /* If the fields n and e in r are NULL, the corresponding input
+     * parameters MUST be non-NULL for n and e.  d may be
+     * left NULL (in case only the public key is used).
+     */
+    if ((r->n == NULL && n == NULL)
+        || (r->e == NULL && e == NULL))
+        return 0;
+
+    if (n != NULL) {
+        BN_free(r->n);
+        r->n = n;
+    }
+    if (e != NULL) {
+        BN_free(r->e);
+        r->e = e;
+    }
+    if (d != NULL) {
+        BN_free(r->d);
+        r->d = d;
+    }
+
+    return 1;
+}
+
+int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q)
+{
+    /* If the fields p and q in r are NULL, the corresponding input
+     * parameters MUST be non-NULL.
+     */
+    if ((r->p == NULL && p == NULL)
+        || (r->q == NULL && q == NULL))
+        return 0;
+
+    if (p != NULL) {
+        BN_free(r->p);
+        r->p = p;
+    }
+    if (q != NULL) {
+        BN_free(r->q);
+        r->q = q;
+    }
+
+    return 1;
+}
+
+int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp)
+{
+    /* If the fields dmp1, dmq1 and iqmp in r are NULL, the corresponding input
+     * parameters MUST be non-NULL.
+     */
+    if ((r->dmp1 == NULL && dmp1 == NULL)
+        || (r->dmq1 == NULL && dmq1 == NULL)
+        || (r->iqmp == NULL && iqmp == NULL))
+        return 0;
+
+    if (dmp1 != NULL) {
+        BN_free(r->dmp1);
+        r->dmp1 = dmp1;
+    }
+    if (dmq1 != NULL) {
+        BN_free(r->dmq1);
+        r->dmq1 = dmq1;
+    }
+    if (iqmp != NULL) {
+        BN_free(r->iqmp);
+        r->iqmp = iqmp;
+    }
+
+    return 1;
+}
+
+void RSA_get0_key(const RSA *r,
+                  const BIGNUM **n, const BIGNUM **e, const BIGNUM **d)
+{
+    if (n != NULL)
+        *n = r->n;
+    if (e != NULL)
+        *e = r->e;
+    if (d != NULL)
+        *d = r->d;
+}
+
+void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q)
+{
+    if (p != NULL)
+        *p = r->p;
+    if (q != NULL)
+        *q = r->q;
+}
+
+void RSA_get0_crt_params(const RSA *r,
+                         const BIGNUM **dmp1, const BIGNUM **dmq1,
+                         const BIGNUM **iqmp)
+{
+    if (dmp1 != NULL)
+        *dmp1 = r->dmp1;
+    if (dmq1 != NULL)
+        *dmq1 = r->dmq1;
+    if (iqmp != NULL)
+        *iqmp = r->iqmp;
+}
+
+int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g)
+{
+    /* If the fields p and g in d are NULL, the corresponding input
+     * parameters MUST be non-NULL.  q may remain NULL.
+     */
+    if ((dh->p == NULL && p == NULL)
+        || (dh->g == NULL && g == NULL))
+        return 0;
+
+    if (p != NULL) {
+        BN_free(dh->p);
+        dh->p = p;
+    }
+    if (q != NULL) {
+        BN_free(dh->q);
+        dh->q = q;
+    }
+    if (g != NULL) {
+        BN_free(dh->g);
+        dh->g = g;
+    }
+
+    if (q != NULL) {
+        dh->length = BN_num_bits(q);
+    }
+
+    return 1;
+}
+
+void DH_get0_key(const DH *dh, const BIGNUM **pub_key, const BIGNUM **priv_key)
+{
+    if (pub_key != NULL)
+        *pub_key = dh->pub_key;
+    if (priv_key != NULL)
+        *priv_key = dh->priv_key;
+}
+
+int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key)
+{
+    /* If the field pub_key in dh is NULL, the corresponding input
+     * parameters MUST be non-NULL.  The priv_key field may
+     * be left NULL.
+     */
+    if (dh->pub_key == NULL && pub_key == NULL)
+        return 0;
+
+    if (pub_key != NULL) {
+        BN_free(dh->pub_key);
+        dh->pub_key = pub_key;
+    }
+    if (priv_key != NULL) {
+        BN_free(dh->priv_key);
+        dh->priv_key = priv_key;
+    }
+
+    return 1;
+}
+
+int DH_set_length(DH *dh, long length)
+{
+    dh->length = length;
+    return 1;
+}
+
+HMAC_CTX *HMAC_CTX_new(void)
+{
+    return OPENSSL_zalloc(sizeof(HMAC_CTX));
+}
+
+void HMAC_CTX_free(HMAC_CTX *ctx)
+{
+    HMAC_CTX_cleanup(ctx);
+    OPENSSL_free(ctx);
+}
+
+RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey)
+{
+    if (pkey->type != EVP_PKEY_RSA) {
+        return NULL;
+    }
+    return pkey->pkey.rsa;
+}
+
+
+#endif /* OPENSSL_VERSION_NUMBER */
diff --git a/src/racoon/openssl_compat.h b/src/racoon/openssl_compat.h
new file mode 100644
index 0000000..9e152c2
--- /dev/null
+++ b/src/racoon/openssl_compat.h
@@ -0,0 +1,45 @@
+#ifndef OPENSSL_COMPAT_H
+#define OPENSSL_COMPAT_H
+
+#include <openssl/opensslv.h>
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+
+#include <openssl/rsa.h>
+#include <openssl/dh.h>
+#include <openssl/evp.h>
+#include <openssl/hmac.h>
+
+int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
+int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q);
+int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp);
+void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d);
+void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);
+void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1, const BIGNUM **iqmp);
+
+int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g);
+void DH_get0_key(const DH *dh, const BIGNUM **pub_key, const BIGNUM **priv_key);
+int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key);
+int DH_set_length(DH *dh, long length);
+
+HMAC_CTX *HMAC_CTX_new(void);
+void HMAC_CTX_free(HMAC_CTX* ctx);
+
+RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey);
+
+#define ASN1_STRING_length(s) s->length
+#define ASN1_STRING_get0_data(s) s->data
+
+#define X509_get_subject_name(x) x->cert_info->subject
+#define X509_get_issuer_name(x) x->cert_info->issuer
+#define X509_NAME_ENTRY_get_data(n) n->value
+#define X509_NAME_ENTRY_get_object(n) n->object
+#define X509_STORE_CTX_get_current_cert(ctx) ctx->current_cert
+#define X509_STORE_CTX_get_error(ctx) ctx->error
+#define X509_STORE_CTX_get_error_depth(ctx) ctx->error_depth
+
+#define OPENSSL_VERSION SSLEAY_VERSION
+#define OpenSSL_version SSLeay_version
+
+#endif /* OPENSSL_VERSION_NUMBER */
+
+#endif /* OPENSSL_COMPAT_H */
diff --git a/src/racoon/plainrsa-gen.c b/src/racoon/plainrsa-gen.c
index cad1861..b949b08 100644
--- a/src/racoon/plainrsa-gen.c
+++ b/src/racoon/plainrsa-gen.c
@@ -60,6 +60,7 @@
 #include "vmbuf.h"
 #include "plog.h"
 #include "crypto_openssl.h"
+#include "openssl_compat.h"
 
 #include "package_version.h"
 
@@ -90,12 +91,14 @@ mix_b64_pubkey(const RSA *key)
 	char *binbuf;
 	long binlen, ret;
 	vchar_t *res;
-	
-	binlen = 1 + BN_num_bytes(key->e) + BN_num_bytes(key->n);
+	const BIGNUM *e, *n;
+
+	RSA_get0_key(key, &n, &e, NULL);
+	binlen = 1 + BN_num_bytes(e) + BN_num_bytes(n);
 	binbuf = malloc(binlen);
 	memset(binbuf, 0, binlen);
-	binbuf[0] = BN_bn2bin(key->e, (unsigned char *) &binbuf[1]);
-	ret = BN_bn2bin(key->n, (unsigned char *) (&binbuf[binbuf[0] + 1]));
+	binbuf[0] = BN_bn2bin(e, (unsigned char *) &binbuf[1]);
+	ret = BN_bn2bin(n, (unsigned char *) (&binbuf[binbuf[0] + 1]));
 	if (1 + binbuf[0] + ret != binlen) {
 		plog(LLV_ERROR, LOCATION, NULL,
 		     "Pubkey generation failed. This is really strange...\n");
@@ -131,16 +134,20 @@ print_rsa_key(FILE *fp, const RSA *key)
 	
 	fprintf(fp, "# : PUB 0s%s\n", pubkey64->v);
 	fprintf(fp, ": RSA\t{\n");
-	fprintf(fp, "\t# RSA %d bits\n", BN_num_bits(key->n));
+	const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp;
+	RSA_get0_key(key, &n, &e, &d);
+	RSA_get0_factors(key, &p, &q);
+	RSA_get0_crt_params(key, &dmp1, &dmq1, &iqmp);
+	fprintf(fp, "\t# RSA %d bits\n", BN_num_bits(n));
 	fprintf(fp, "\t# pubkey=0s%s\n", pubkey64->v);
-	fprintf(fp, "\tModulus: 0x%s\n", lowercase(BN_bn2hex(key->n)));
-	fprintf(fp, "\tPublicExponent: 0x%s\n", lowercase(BN_bn2hex(key->e)));
-	fprintf(fp, "\tPrivateExponent: 0x%s\n", lowercase(BN_bn2hex(key->d)));
-	fprintf(fp, "\tPrime1: 0x%s\n", lowercase(BN_bn2hex(key->p)));
-	fprintf(fp, "\tPrime2: 0x%s\n", lowercase(BN_bn2hex(key->q)));
-	fprintf(fp, "\tExponent1: 0x%s\n", lowercase(BN_bn2hex(key->dmp1)));
-	fprintf(fp, "\tExponent2: 0x%s\n", lowercase(BN_bn2hex(key->dmq1)));
-	fprintf(fp, "\tCoefficient: 0x%s\n", lowercase(BN_bn2hex(key->iqmp)));
+	fprintf(fp, "\tModulus: 0x%s\n", lowercase(BN_bn2hex(n)));
+	fprintf(fp, "\tPublicExponent: 0x%s\n", lowercase(BN_bn2hex(e)));
+	fprintf(fp, "\tPrivateExponent: 0x%s\n", lowercase(BN_bn2hex(d)));
+	fprintf(fp, "\tPrime1: 0x%s\n", lowercase(BN_bn2hex(p)));
+	fprintf(fp, "\tPrime2: 0x%s\n", lowercase(BN_bn2hex(q)));
+	fprintf(fp, "\tExponent1: 0x%s\n", lowercase(BN_bn2hex(dmp1)));
+	fprintf(fp, "\tExponent2: 0x%s\n", lowercase(BN_bn2hex(dmq1)));
+	fprintf(fp, "\tCoefficient: 0x%s\n", lowercase(BN_bn2hex(iqmp)));
 	fprintf(fp, "  }\n");
 
 	vfree(pubkey64);
@@ -203,11 +210,13 @@ int
 gen_rsa_key(FILE *fp, size_t bits, unsigned long exp)
 {
 	int ret;
-	RSA *key;
+	RSA *key = RSA_new();
+	BIGNUM *e = BN_new();
 
-	key = RSA_generate_key(bits, exp, NULL, NULL);
-	if (!key) {
+	BN_set_word(e, exp);
+	if (! RSA_generate_key_ex(key, bits, e, NULL)) {
 		fprintf(stderr, "RSA_generate_key(): %s\n", eay_strerror());
+		RSA_free(key);
 		return -1;
 	}
 	
diff --git a/src/racoon/prsa_par.y b/src/racoon/prsa_par.y
index 1987e4d..27ce4c6 100644
--- a/src/racoon/prsa_par.y
+++ b/src/racoon/prsa_par.y
@@ -68,6 +68,7 @@
 #include "isakmp_var.h"
 #include "handler.h"
 #include "crypto_openssl.h"
+#include "openssl_compat.h"
 #include "sockmisc.h"
 #include "rsalist.h"
 
@@ -85,7 +86,18 @@ char *prsa_cur_fname = NULL;
 struct genlist *prsa_cur_list = NULL;
 enum rsa_key_type prsa_cur_type = RSA_TYPE_ANY;
 
-static RSA *rsa_cur;
+struct my_rsa_st {
+	BIGNUM *n;
+	BIGNUM *e;
+	BIGNUM *d;
+	BIGNUM *p;
+	BIGNUM *q;
+	BIGNUM *dmp1;
+	BIGNUM *dmq1;
+	BIGNUM *iqmp;
+};
+
+static struct my_rsa_st *rsa_cur;
 
 void
 prsaerror(const char *s, ...)
@@ -201,8 +213,12 @@ rsa_statement:
 				rsa_cur->iqmp = NULL;
 			}
 		}
-		$$ = rsa_cur;
-		rsa_cur = RSA_new();
+		RSA * rsa_tmp = RSA_new();
+		RSA_set0_key(rsa_tmp, rsa_cur->n, rsa_cur->e, rsa_cur->d);
+		RSA_set0_factors(rsa_tmp, rsa_cur->p, rsa_cur->q);
+		RSA_set0_crt_params(rsa_tmp, rsa_cur->dmp1, rsa_cur->dmq1, rsa_cur->iqmp);
+		$$ = rsa_tmp;
+		memset(rsa_cur, 0, sizeof(struct my_rsa_st));
 	}
 	| TAG_PUB BASE64
 	{
@@ -351,10 +367,12 @@ prsa_parse_file(struct genlist *list, char *fname, enum rsa_key_type type)
 	prsa_cur_fname = fname;
 	prsa_cur_list = list;
 	prsa_cur_type = type;
-	rsa_cur = RSA_new();
+	rsa_cur = malloc(sizeof(struct my_rsa_st));
+	memset(rsa_cur, 0, sizeof(struct my_rsa_st));
 	ret = prsaparse();
 	if (rsa_cur) {
-		RSA_free(rsa_cur);
+		memset(rsa_cur, 0, sizeof(struct my_rsa_st));
+		free(rsa_cur);
 		rsa_cur = NULL;
 	}
 	fclose (fp);
diff --git a/src/racoon/rsalist.c b/src/racoon/rsalist.c
index f152c82..96e8363 100644
--- a/src/racoon/rsalist.c
+++ b/src/racoon/rsalist.c
@@ -52,6 +52,7 @@
 #include "genlist.h"
 #include "remoteconf.h"
 #include "crypto_openssl.h"
+#include "openssl_compat.h"
 
 #ifndef LIST_FIRST
 #define LIST_FIRST(head)        ((head)->lh_first)
@@ -98,7 +99,9 @@ rsa_key_dup(struct rsa_key *key)
 		return NULL;
 
 	if (key->rsa) {
-		new->rsa = key->rsa->d != NULL ? RSAPrivateKey_dup(key->rsa) : RSAPublicKey_dup(key->rsa);
+		const BIGNUM *d;
+		RSA_get0_key(key->rsa, NULL, NULL, &d);
+		new->rsa = (d != NULL ? RSAPrivateKey_dup(key->rsa) : RSAPublicKey_dup(key->rsa));
 		if (new->rsa == NULL)
 			goto dup_error;
 	}
-- 
2.7.4

