diff options
| author | Arne Schwabe <arne@rfc2549.org> | 2014-04-23 09:56:37 +0200 | 
|---|---|---|
| committer | Arne Schwabe <arne@rfc2549.org> | 2014-04-23 09:56:37 +0200 | 
| commit | e436c963f0976b885a7db04681344779e26dd3b5 (patch) | |
| tree | 240663106f32e02e1c34080656f4ef21a2e1776e /main/openssl/crypto/ecdsa/ecs_lib.c | |
| parent | 6a99715a9b072fa249e79c98cd9f03991f0f1219 (diff) | |
Update OpenSSL to 1.0.1g and statically link OpenVPN with it
Diffstat (limited to 'main/openssl/crypto/ecdsa/ecs_lib.c')
| -rw-r--r-- | main/openssl/crypto/ecdsa/ecs_lib.c | 32 | 
1 files changed, 29 insertions, 3 deletions
| diff --git a/main/openssl/crypto/ecdsa/ecs_lib.c b/main/openssl/crypto/ecdsa/ecs_lib.c index 2ebae3aa..814a6bf4 100644 --- a/main/openssl/crypto/ecdsa/ecs_lib.c +++ b/main/openssl/crypto/ecdsa/ecs_lib.c @@ -60,6 +60,9 @@  #endif  #include <openssl/err.h>  #include <openssl/bn.h> +#ifdef OPENSSL_FIPS +#include <openssl/fips.h> +#endif  const char ECDSA_version[]="ECDSA" OPENSSL_VERSION_PTEXT; @@ -77,7 +80,16 @@ void ECDSA_set_default_method(const ECDSA_METHOD *meth)  const ECDSA_METHOD *ECDSA_get_default_method(void)  {  	if(!default_ECDSA_method)  +		{ +#ifdef OPENSSL_FIPS +		if (FIPS_mode()) +			return FIPS_ecdsa_openssl(); +		else +			return ECDSA_OpenSSL(); +#else  		default_ECDSA_method = ECDSA_OpenSSL(); +#endif +		}  	return default_ECDSA_method;  } @@ -188,12 +200,26 @@ ECDSA_DATA *ecdsa_check(EC_KEY *key)  		ecdsa_data = (ECDSA_DATA *)ecdsa_data_new();  		if (ecdsa_data == NULL)  			return NULL; -		EC_KEY_insert_key_method_data(key, (void *)ecdsa_data, -			ecdsa_data_dup, ecdsa_data_free, ecdsa_data_free); +		data = EC_KEY_insert_key_method_data(key, (void *)ecdsa_data, +			   ecdsa_data_dup, ecdsa_data_free, ecdsa_data_free); +		if (data != NULL) +			{ +			/* Another thread raced us to install the key_method +			 * data and won. */ +			ecdsa_data_free(ecdsa_data); +			ecdsa_data = (ECDSA_DATA *)data; +			}  	}  	else  		ecdsa_data = (ECDSA_DATA *)data; -	 +#ifdef OPENSSL_FIPS +	if (FIPS_mode() && !(ecdsa_data->flags & ECDSA_FLAG_FIPS_METHOD) +			&& !(EC_KEY_get_flags(key) & EC_FLAG_NON_FIPS_ALLOW)) +		{ +		ECDSAerr(ECDSA_F_ECDSA_CHECK, ECDSA_R_NON_FIPS_METHOD); +		return NULL; +		} +#endif  	return ecdsa_data;  } | 
