4309441
diff -u -r mod_auth_openidc-1.8.10.1/src/jose/apr_jose.h jose/apr_jose.h
4309441
--- mod_auth_openidc-1.8.10.1/src/jose/apr_jose.h	2016-07-11 09:14:40.000000000 -0400
4309441
+++  mod_auth_openidc-fb1fd4c/src/jose/apr_jose.h	2017-02-17 18:52:41.331955735 -0500
4309441
@@ -319,4 +319,10 @@
4309441
 
4309441
 apr_byte_t apr_jwt_memcmp(const void *in_a, const void *in_b, size_t len);
4309441
 
4309441
+#if (OPENSSL_VERSION_NUMBER < 0x10100000)
4309441
+#include <openssl/ec.h>
4309441
+	EVP_MD_CTX * EVP_MD_CTX_new();
4309441
+	void EVP_MD_CTX_free(EVP_MD_CTX *);
4309441
+#endif
4309441
+
4309441
 #endif /* _APR_JOSE_H_ */
4309441
diff -u -r mod_auth_openidc-1.8.10.1/src/jose/apr_jwe.c jose/apr_jwe.c
4309441
--- mod_auth_openidc-1.8.10.1/src/jose/apr_jwe.c	2016-07-11 09:14:40.000000000 -0400
4309441
+++  mod_auth_openidc-fb1fd4c/src/jose/apr_jwe.c	2017-02-17 18:52:41.331955735 -0500
4309441
@@ -175,10 +175,14 @@
4309441
 				jwk->key.rsa->private_exponent_len, private_exp);
4309441
 	}
4309441
 
4309441
+	/* private_exp is NULL for public keys */
4309441
+#if OPENSSL_VERSION_NUMBER >= 0x10100005L
4309441
+	RSA_set0_key(key, modulus, exponent, private_exp);
4309441
+#else
4309441
 	key->n = modulus;
4309441
 	key->e = exponent;
4309441
-	/* private_exp is NULL for public keys */
4309441
 	key->d = private_exp;
4309441
+#endif
4309441
 
4309441
 	return key;
4309441
 }
4309441
@@ -489,10 +493,10 @@
4309441
 	unsigned char *plaintext = apr_palloc(pool, p_len + AES_BLOCK_SIZE);
4309441
 
4309441
 	/* initialize decryption context */
4309441
-	EVP_CIPHER_CTX decrypt_ctx;
4309441
-	EVP_CIPHER_CTX_init(&decrypt_ctx);
4309441
+	EVP_CIPHER_CTX *decrypt_ctx = EVP_CIPHER_CTX_new();
4309441
+	EVP_CIPHER_CTX_init(decrypt_ctx);
4309441
 	/* pass the extracted encryption key and Initialization Vector */
4309441
-	if (!EVP_DecryptInit_ex(&decrypt_ctx,
4309441
+	if (!EVP_DecryptInit_ex(decrypt_ctx,
4309441
 			apr_jwe_enc_to_openssl_cipher(header->enc), NULL, enc_key,
4309441
 			(const unsigned char *) iv->value)) {
4309441
 		apr_jwt_error_openssl(err, "EVP_DecryptInit_ex");
4309441
@@ -500,14 +504,14 @@
4309441
 	}
4309441
 
4309441
 	/* decrypt the ciphertext in to the plaintext */
4309441
-	if (!EVP_DecryptUpdate(&decrypt_ctx, plaintext, &p_len,
4309441
+	if (!EVP_DecryptUpdate(decrypt_ctx, plaintext, &p_len,
4309441
 			(const unsigned char *) cipher_text->value, cipher_text->len)) {
4309441
 		apr_jwt_error_openssl(err, "EVP_DecryptUpdate");
4309441
 		return FALSE;
4309441
 	}
4309441
 
4309441
 	/* decrypt the remaining bits/padding */
4309441
-	if (!EVP_DecryptFinal_ex(&decrypt_ctx, plaintext + p_len, &f_len)) {
4309441
+	if (!EVP_DecryptFinal_ex(decrypt_ctx, plaintext + p_len, &f_len)) {
4309441
 		apr_jwt_error_openssl(err, "EVP_DecryptFinal_ex");
4309441
 		return FALSE;
4309441
 	}
4309441
@@ -516,7 +520,7 @@
4309441
 	*decrypted = (char *) plaintext;
4309441
 
4309441
 	/* cleanup */
4309441
-	EVP_CIPHER_CTX_cleanup(&decrypt_ctx);
4309441
+	EVP_CIPHER_CTX_free(decrypt_ctx);
4309441
 
4309441
 	/* if we got here, all must be fine */
4309441
 	return TRUE;
4309441
diff -u -r mod_auth_openidc-1.8.10.1/src/jose/apr_jwk.c jose/apr_jwk.c
4309441
--- mod_auth_openidc-1.8.10.1/src/jose/apr_jwk.c	2016-07-11 09:14:40.000000000 -0400
4309441
+++  mod_auth_openidc-fb1fd4c/src/jose/apr_jwk.c	2017-02-17 18:52:41.332955699 -0500
4309441
@@ -153,21 +153,30 @@
4309441
 		goto end;
4309441
 	}
4309441
 
4309441
+	const BIGNUM *rsa_n, *rsa_e, *rsa_d;
4309441
+#if OPENSSL_VERSION_NUMBER >= 0x10100005L
4309441
+	RSA_get0_key(rsa, &rsa_n, &rsa_e, &rsa_d);
4309441
+#else
4309441
+	rsa_n=rsa->n;
4309441
+	rsa_e=rsa->e;
4309441
+	rsa_d=rsa->d;
4309441
+#endif
4309441
+
4309441
 	/* convert the modulus bignum in to a key/len */
4309441
-	key->modulus_len = BN_num_bytes(rsa->n);
4309441
+	key->modulus_len = BN_num_bytes(rsa_n);
4309441
 	key->modulus = apr_pcalloc(pool, key->modulus_len);
4309441
-	BN_bn2bin(rsa->n, key->modulus);
4309441
+	BN_bn2bin(rsa_n, key->modulus);
4309441
 
4309441
 	/* convert the exponent bignum in to a key/len */
4309441
-	key->exponent_len = BN_num_bytes(rsa->e);
4309441
+	key->exponent_len = BN_num_bytes(rsa_e);
4309441
 	key->exponent = apr_pcalloc(pool, key->exponent_len);
4309441
-	BN_bn2bin(rsa->e, key->exponent);
4309441
+	BN_bn2bin(rsa_e, key->exponent);
4309441
 
4309441
 	/* convert the private exponent bignum in to a key/len */
4309441
-	if (rsa->d != NULL) {
4309441
-		key->private_exponent_len = BN_num_bytes(rsa->d);
4309441
+	if (rsa_d != NULL) {
4309441
+		key->private_exponent_len = BN_num_bytes(rsa_d);
4309441
 		key->private_exponent = apr_pcalloc(pool, key->private_exponent_len);
4309441
-		BN_bn2bin(rsa->d, key->private_exponent);
4309441
+		BN_bn2bin(rsa_d, key->private_exponent);
4309441
 	}
4309441
 
4309441
 	RSA_free(rsa);
4309441
diff -u -r mod_auth_openidc-1.8.10.1/src/jose/apr_jws.c jose/apr_jws.c
4309441
--- mod_auth_openidc-1.8.10.1/src/jose/apr_jws.c	2016-07-11 09:14:40.000000000 -0400
4309441
+++  mod_auth_openidc-fb1fd4c/src/jose/apr_jws.c	2017-02-17 18:52:41.332955699 -0500
4309441
@@ -219,8 +219,8 @@
4309441
 		unsigned char **output, unsigned int *output_len, apr_jwt_error_t *err) {
4309441
 	unsigned char md_value[EVP_MAX_MD_SIZE];
4309441
 
4309441
-	EVP_MD_CTX ctx;
4309441
-	EVP_MD_CTX_init(&ctx;;
4309441
+	EVP_MD_CTX *ctx = EVP_MD_CTX_new();
4309441
+	EVP_MD_CTX_init(ctx);
4309441
 
4309441
 	const EVP_MD *evp_digest = NULL;
4309441
 	if ((evp_digest = EVP_get_digestbyname(s_digest)) == NULL) {
4309441
@@ -230,20 +230,20 @@
4309441
 		return FALSE;
4309441
 	}
4309441
 
4309441
-	if (!EVP_DigestInit_ex(&ctx, evp_digest, NULL)) {
4309441
+	if (!EVP_DigestInit_ex(ctx, evp_digest, NULL)) {
4309441
 		apr_jwt_error_openssl(err, "EVP_DigestInit_ex");
4309441
 		return FALSE;
4309441
 	}
4309441
-	if (!EVP_DigestUpdate(&ctx, input, input_len)) {
4309441
+	if (!EVP_DigestUpdate(ctx, input, input_len)) {
4309441
 		apr_jwt_error_openssl(err, "EVP_DigestUpdate");
4309441
 		return FALSE;
4309441
 	}
4309441
-	if (!EVP_DigestFinal_ex(&ctx, md_value, output_len)) {
4309441
+	if (!EVP_DigestFinal_ex(ctx, md_value, output_len)) {
4309441
 		apr_jwt_error_openssl(err, "EVP_DigestFinal_ex");
4309441
 		return FALSE;
4309441
 	}
4309441
 
4309441
-	EVP_MD_CTX_cleanup(&ctx;;
4309441
+	EVP_MD_CTX_free(ctx);
4309441
 
4309441
 	*output = apr_pcalloc(pool, *output_len);
4309441
 	memcpy(*output, md_value, *output_len);
4309441
@@ -303,8 +303,8 @@
4309441
 	if ((digest = apr_jws_crypto_alg_to_evp(pool, jwt->header.alg, err)) == NULL)
4309441
 		return FALSE;
4309441
 
4309441
-	EVP_MD_CTX ctx;
4309441
-	EVP_MD_CTX_init(&ctx;;
4309441
+	EVP_MD_CTX *ctx = EVP_MD_CTX_new();
4309441
+	EVP_MD_CTX_init(ctx);
4309441
 
4309441
 	RSA * privkey = RSA_new();
4309441
 
4309441
@@ -317,9 +317,13 @@
4309441
 	BN_bin2bn(jwk->key.rsa->private_exponent,
4309441
 			jwk->key.rsa->private_exponent_len, private_exponent);
4309441
 
4309441
+#if OPENSSL_VERSION_NUMBER >= 0x10100005L
4309441
+	RSA_set0_key(privkey, modulus, exponent, private_exponent);
4309441
+#else
4309441
 	privkey->n = modulus;
4309441
 	privkey->e = exponent;
4309441
 	privkey->d = private_exponent;
4309441
+#endif
4309441
 
4309441
 	EVP_PKEY* pRsaKey = EVP_PKEY_new();
4309441
 	if (!EVP_PKEY_assign_RSA(pRsaKey, privkey)) {
4309441
@@ -333,15 +337,15 @@
4309441
 		unsigned char *pDigest = apr_pcalloc(pool, RSA_size(privkey));
4309441
 		unsigned int uDigestLen = RSA_size(privkey);
4309441
 
4309441
-		if (!EVP_DigestInit(&ctx, digest)) {
4309441
+		if (!EVP_DigestInit(ctx, digest)) {
4309441
 			apr_jwt_error_openssl(err, "EVP_DigestInit");
4309441
 			goto end;
4309441
 		}
4309441
-		if (!EVP_DigestUpdate(&ctx, jwt->message, strlen(jwt->message))) {
4309441
+		if (!EVP_DigestUpdate(ctx, jwt->message, strlen(jwt->message))) {
4309441
 			apr_jwt_error_openssl(err, "EVP_DigestUpdate");
4309441
 			goto end;
4309441
 		}
4309441
-		if (!EVP_DigestFinal(&ctx, pDigest, &uDigestLen)) {
4309441
+		if (!EVP_DigestFinal(ctx, pDigest, &uDigestLen)) {
4309441
 			apr_jwt_error_openssl(err, "wrong key? EVP_DigestFinal");
4309441
 			goto end;
4309441
 		}
4309441
@@ -371,17 +375,17 @@
4309441
 
4309441
 	} else {
4309441
 
4309441
-		if (!EVP_SignInit_ex(&ctx, digest, NULL)) {
4309441
+		if (!EVP_SignInit_ex(ctx, digest, NULL)) {
4309441
 			apr_jwt_error_openssl(err, "EVP_SignInit_ex");
4309441
 			goto end;
4309441
 		}
4309441
 
4309441
-		if (!EVP_SignUpdate(&ctx, jwt->message, strlen(jwt->message))) {
4309441
+		if (!EVP_SignUpdate(ctx, jwt->message, strlen(jwt->message))) {
4309441
 			apr_jwt_error_openssl(err, "EVP_SignUpdate");
4309441
 			goto end;
4309441
 		}
4309441
 
4309441
-		if (!EVP_SignFinal(&ctx, (unsigned char *) jwt->signature.bytes,
4309441
+		if (!EVP_SignFinal(ctx, (unsigned char *) jwt->signature.bytes,
4309441
 				(unsigned int *) &jwt->signature.length, pRsaKey)) {
4309441
 			apr_jwt_error_openssl(err, "wrong key? EVP_SignFinal");
4309441
 			goto end;
4309441
@@ -398,7 +402,7 @@
4309441
 	} else if (privkey) {
4309441
 		RSA_free(privkey);
4309441
 	}
4309441
-	EVP_MD_CTX_cleanup(&ctx;;
4309441
+	EVP_MD_CTX_free(ctx);
4309441
 
4309441
 	return rc;
4309441
 }
4309441
@@ -416,8 +420,8 @@
4309441
 	if ((digest = apr_jws_crypto_alg_to_evp(pool, jwt->header.alg, err)) == NULL)
4309441
 		return FALSE;
4309441
 
4309441
-	EVP_MD_CTX ctx;
4309441
-	EVP_MD_CTX_init(&ctx;;
4309441
+	EVP_MD_CTX *ctx = EVP_MD_CTX_new();
4309441
+	EVP_MD_CTX_init(ctx);
4309441
 
4309441
 	RSA * pubkey = RSA_new();
4309441
 
4309441
@@ -427,8 +431,12 @@
4309441
 	BN_bin2bn(jwk->key.rsa->modulus, jwk->key.rsa->modulus_len, modulus);
4309441
 	BN_bin2bn(jwk->key.rsa->exponent, jwk->key.rsa->exponent_len, exponent);
4309441
 
4309441
+#if OPENSSL_VERSION_NUMBER >= 0x10100005L
4309441
+	RSA_set0_key(pubkey, modulus, exponent, NULL);
4309441
+#else
4309441
 	pubkey->n = modulus;
4309441
 	pubkey->e = exponent;
4309441
+#endif
4309441
 
4309441
 	EVP_PKEY* pRsaKey = EVP_PKEY_new();
4309441
 	if (!EVP_PKEY_assign_RSA(pRsaKey, pubkey)) {
4309441
@@ -451,15 +459,15 @@
4309441
 		unsigned char *pDigest = apr_pcalloc(pool, RSA_size(pubkey));
4309441
 		unsigned int uDigestLen = RSA_size(pubkey);
4309441
 
4309441
-		if (!EVP_DigestInit(&ctx, digest)) {
4309441
+		if (!EVP_DigestInit(ctx, digest)) {
4309441
 			apr_jwt_error_openssl(err, "EVP_DigestInit");
4309441
 			goto end;
4309441
 		}
4309441
-		if (!EVP_DigestUpdate(&ctx, jwt->message, strlen(jwt->message))) {
4309441
+		if (!EVP_DigestUpdate(ctx, jwt->message, strlen(jwt->message))) {
4309441
 			apr_jwt_error_openssl(err, "EVP_DigestUpdate");
4309441
 			goto end;
4309441
 		}
4309441
-		if (!EVP_DigestFinal(&ctx, pDigest, &uDigestLen)) {
4309441
+		if (!EVP_DigestFinal(ctx, pDigest, &uDigestLen)) {
4309441
 			apr_jwt_error_openssl(err, "wrong key? EVP_DigestFinal");
4309441
 			goto end;
4309441
 		}
4309441
@@ -477,16 +485,16 @@
4309441
 	} else if (apr_jws_signature_starts_with(pool, jwt->header.alg,
4309441
 			"RS") == TRUE) {
4309441
 
4309441
-		if (!EVP_VerifyInit_ex(&ctx, digest, NULL)) {
4309441
+		if (!EVP_VerifyInit_ex(ctx, digest, NULL)) {
4309441
 			apr_jwt_error_openssl(err, "EVP_VerifyInit_ex");
4309441
 			goto end;
4309441
 		}
4309441
-		if (!EVP_VerifyUpdate(&ctx, jwt->message, strlen(jwt->message))) {
4309441
+		if (!EVP_VerifyUpdate(ctx, jwt->message, strlen(jwt->message))) {
4309441
 			apr_jwt_error_openssl(err, "EVP_VerifyUpdate");
4309441
 			goto end;
4309441
 		}
4309441
 		
4309441
-		int rv = EVP_VerifyFinal(&ctx, (const unsigned char *) jwt->signature.bytes,
4309441
+		int rv = EVP_VerifyFinal(ctx, (const unsigned char *) jwt->signature.bytes,
4309441
 				jwt->signature.length, pRsaKey);
4309441
 
4309441
 		if (rv < 0) {
4309441
@@ -508,7 +516,7 @@
4309441
 	} else if (pubkey) {
4309441
 		RSA_free(pubkey);
4309441
 	}
4309441
-	EVP_MD_CTX_cleanup(&ctx;;
4309441
+	EVP_MD_CTX_free(ctx);
4309441
 
4309441
 	return rc;
4309441
 }
4309441
diff -u -r mod_auth_openidc-1.8.10.1/src/jose/apr_jwt.c jose/apr_jwt.c
4309441
--- mod_auth_openidc-1.8.10.1/src/jose/apr_jwt.c	2016-07-11 09:14:40.000000000 -0400
4309441
+++  mod_auth_openidc-fb1fd4c/src/jose/apr_jwt.c	2017-02-17 18:52:41.332955699 -0500
4309441
@@ -496,12 +496,12 @@
4309441
 
4309441
 static void apr_jwt_serialize_message(apr_pool_t *pool, apr_jwt_t *jwt) {
4309441
 
4309441
-	char *s_hdr = json_dumps(jwt->header.value.json, JSON_ENCODE_ANY);
4309441
+	char *s_hdr = json_dumps(jwt->header.value.json, JSON_COMPACT);
4309441
 	apr_jwt_base64url_encode(pool, &jwt->header.value.str, s_hdr, strlen(s_hdr),
4309441
 			0);
4309441
 	free(s_hdr);
4309441
 
4309441
-	char *s_payload = json_dumps(jwt->payload.value.json, JSON_ENCODE_ANY);
4309441
+	char *s_payload = json_dumps(jwt->payload.value.json, JSON_COMPACT);
4309441
 	apr_jwt_base64url_encode(pool, &jwt->payload.value.str, s_payload,
4309441
 			strlen(s_payload), 0);
4309441
 	free(s_payload);
4309441
@@ -589,3 +589,13 @@
4309441
 			jwt->signature.length, 0);
4309441
 	return apr_psprintf(pool, "%s.%s", jwt->message, b64sig);
4309441
 }
4309441
+
4309441
+#if (OPENSSL_VERSION_NUMBER < 0x10100000)
4309441
+EVP_MD_CTX * EVP_MD_CTX_new() {
4309441
+	return malloc(sizeof(EVP_MD_CTX));
4309441
+}
4309441
+void EVP_MD_CTX_free(EVP_MD_CTX *ctx) {
4309441
+	if (ctx) free(ctx);
4309441
+}
4309441
+
4309441
+#endif