|  | @@ -1780,9 +1780,13 @@ crypto_generate_dynamic_dh_modulus(void)
 | 
	
		
			
				|  |  |    dynamic_dh_modulus = BN_new();
 | 
	
		
			
				|  |  |    tor_assert(dynamic_dh_modulus);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  dh_parameters = DH_generate_parameters(DH_BYTES*8, DH_GENERATOR, NULL, NULL);
 | 
	
		
			
				|  |  | +  dh_parameters = DH_new();
 | 
	
		
			
				|  |  |    tor_assert(dh_parameters);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  r = DH_generate_parameters_ex(dh_parameters,
 | 
	
		
			
				|  |  | +                                DH_BYTES*8, DH_GENERATOR, NULL);
 | 
	
		
			
				|  |  | +  tor_assert(r == 0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    r = DH_check(dh_parameters, &dh_codes);
 | 
	
		
			
				|  |  |    tor_assert(r && !dh_codes);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3115,6 +3119,14 @@ openssl_dynlock_destroy_cb_(struct CRYPTO_dynlock_value *v,
 | 
	
		
			
				|  |  |    tor_free(v);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0)
 | 
	
		
			
				|  |  | +static void
 | 
	
		
			
				|  |  | +tor_set_openssl_thread_id(CRYPTO_THREADID *threadid)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  CRYPTO_THREADID_set_numeric(threadid, tor_get_thread_id());
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  /** @{ */
 | 
	
		
			
				|  |  |  /** Helper: Construct mutexes, and set callbacks to help OpenSSL handle being
 | 
	
		
			
				|  |  |   * multithreaded. */
 | 
	
	
		
			
				|  | @@ -3128,7 +3140,11 @@ setup_openssl_threading(void)
 | 
	
		
			
				|  |  |    for (i=0; i < n; ++i)
 | 
	
		
			
				|  |  |      openssl_mutexes_[i] = tor_mutex_new();
 | 
	
		
			
				|  |  |    CRYPTO_set_locking_callback(openssl_locking_cb_);
 | 
	
		
			
				|  |  | +#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(1,0,0)
 | 
	
		
			
				|  |  |    CRYPTO_set_id_callback(tor_get_thread_id);
 | 
	
		
			
				|  |  | +#else
 | 
	
		
			
				|  |  | +  CRYPTO_THREADID_set_callback(tor_set_openssl_thread_id);
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  |    CRYPTO_set_dynlock_create_callback(openssl_dynlock_create_cb_);
 | 
	
		
			
				|  |  |    CRYPTO_set_dynlock_lock_callback(openssl_dynlock_lock_cb_);
 | 
	
		
			
				|  |  |    CRYPTO_set_dynlock_destroy_callback(openssl_dynlock_destroy_cb_);
 |