ECDH_DATA *ecdh_check(EC_KEY *key) { ECDH_DATA *ecdh_data; void *data = EC_KEY_get_key_method_data(key, ecdh_data_dup, ecdh_data_free, ecdh_data_free); if (data == NULL) { ecdh_data = (ECDH_DATA *)ecdh_data_new(); if (ecdh_data == NULL) return NULL; data = EC_KEY_insert_key_method_data(key, (void *)ecdh_data, ecdh_data_dup, ecdh_data_free, ecdh_data_free); if (data != NULL) { /* * Another thread raced us to install the key_method data and * won. */ ecdh_data_free(ecdh_data); ecdh_data = (ECDH_DATA *)data; } } else ecdh_data = (ECDH_DATA *)data; return ecdh_data; }
ECDSA_DATA *ecdsa_check(EC_KEY *key) { ECDSA_DATA *ecdsa_data; void *data = EC_KEY_get_key_method_data(key, ecdsa_data_dup, ecdsa_data_free, ecdsa_data_free); if (data == NULL) { 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); } 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; }
ECDSA_DATA *ecdsa_check(EC_KEY *key) { ECDSA_DATA *ecdsa_data; void *data = EC_KEY_get_key_method_data(key, ecdsa_data_dup, ecdsa_data_free, ecdsa_data_free); if (data == NULL) { ecdsa_data = (ECDSA_DATA *)ecdsa_data_new(); if (ecdsa_data == NULL) return NULL; 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; }
ECDSA_DATA *ecdsa_check(EC_KEY *key) { ECDSA_DATA *ecdsa_data; void *data = EC_KEY_get_key_method_data(key, ecdsa_data_dup, ecdsa_data_free, ecdsa_data_free); if (data == NULL) { 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); } else ecdsa_data = (ECDSA_DATA *)data; return ecdsa_data; }