- ECDSA *ret;
-
- ret=(ECDSA *)OPENSSL_malloc(sizeof(ECDSA));
- if (ret == NULL)
- {
- ECDSAerr(ECDSA_F_ECDSA_NEW,ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
-
- ret->meth = ECDSA_get_default_method();
- ret->engine = engine;
- if (!ret->engine)
- ret->engine = ENGINE_get_default_ECDSA();
- if (ret->engine)
- {
- ret->meth = ENGINE_get_ECDSA(ret->engine);
- if (!ret->meth)
- {
- ECDSAerr(ECDSA_R_ECDSA_F_ECDSA_NEW, ERR_R_ENGINE_LIB);
- ENGINE_finish(ret->engine);
- OPENSSL_free(ret);
- return NULL;
- }
- }
-
- ret->version = 1;
- ret->conversion_form = ECDSA_get_default_conversion_form();
- ret->group = NULL;
-
- ret->pub_key = NULL;
- ret->priv_key = NULL;
-
- ret->kinv = NULL;
- ret->r = NULL;
-
- ret->enc_flag = 0;
-
- ret->references = 1;
- ret->flags = ret->meth->flags;
- CRYPTO_new_ex_data(CRYPTO_EX_INDEX_ECDSA, ret, &ret->ex_data);
- if ((ret->meth->init != NULL) && !ret->meth->init(ret))
- {
- CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDSA, ret, &ret->ex_data);
- OPENSSL_free(ret);
- ret=NULL;
- }
-
- return(ret);