Make {RSA,DSA,DH}_new_method obtain and release an ENGINE

functional reference.
This commit is contained in:
Dr. Stephen Henson 2002-03-09 18:24:14 +00:00
parent a1a4e8b6bb
commit 1619add90c
7 changed files with 47 additions and 14 deletions

View File

@ -195,7 +195,7 @@ void ERR_load_DH_strings(void);
#define DH_F_DH_COMPUTE_KEY 102 #define DH_F_DH_COMPUTE_KEY 102
#define DH_F_DH_GENERATE_KEY 103 #define DH_F_DH_GENERATE_KEY 103
#define DH_F_DH_GENERATE_PARAMETERS 104 #define DH_F_DH_GENERATE_PARAMETERS 104
#define DH_F_DH_NEW 105 #define DH_F_DH_NEW_METHOD 105
/* Reason codes. */ /* Reason codes. */
#define DH_R_NO_PRIVATE_VALUE 100 #define DH_R_NO_PRIVATE_VALUE 100

View File

@ -71,7 +71,7 @@ static ERR_STRING_DATA DH_str_functs[]=
{ERR_PACK(0,DH_F_DH_COMPUTE_KEY,0), "DH_compute_key"}, {ERR_PACK(0,DH_F_DH_COMPUTE_KEY,0), "DH_compute_key"},
{ERR_PACK(0,DH_F_DH_GENERATE_KEY,0), "DH_generate_key"}, {ERR_PACK(0,DH_F_DH_GENERATE_KEY,0), "DH_generate_key"},
{ERR_PACK(0,DH_F_DH_GENERATE_PARAMETERS,0), "DH_generate_parameters"}, {ERR_PACK(0,DH_F_DH_GENERATE_PARAMETERS,0), "DH_generate_parameters"},
{ERR_PACK(0,DH_F_DH_NEW,0), "DH_new"}, {ERR_PACK(0,DH_F_DH_NEW_METHOD,0), "DH_new_method"},
{0,NULL} {0,NULL}
}; };

View File

@ -107,20 +107,29 @@ DH *DH_new_method(ENGINE *engine)
ret=(DH *)OPENSSL_malloc(sizeof(DH)); ret=(DH *)OPENSSL_malloc(sizeof(DH));
if (ret == NULL) if (ret == NULL)
{ {
DHerr(DH_F_DH_NEW,ERR_R_MALLOC_FAILURE); DHerr(DH_F_DH_NEW_METHOD,ERR_R_MALLOC_FAILURE);
return(NULL); return(NULL);
} }
ret->meth = DH_get_default_method(); ret->meth = DH_get_default_method();
ret->engine = engine; if (engine)
if(!ret->engine) {
if (!ENGINE_init(engine))
{
DSAerr(DH_F_DH_NEW_METHOD, ERR_R_ENGINE_LIB);
OPENSSL_free(ret);
return NULL;
}
ret->engine = engine;
}
else
ret->engine = ENGINE_get_default_DH(); ret->engine = ENGINE_get_default_DH();
if(ret->engine) if(ret->engine)
{ {
ret->meth = ENGINE_get_DH(ret->engine); ret->meth = ENGINE_get_DH(ret->engine);
if(!ret->meth) if(!ret->meth)
{ {
DHerr(DH_F_DH_NEW,ERR_R_ENGINE_LIB); DHerr(DH_F_DH_NEW_METHOD,ERR_R_ENGINE_LIB);
ENGINE_finish(ret->engine); ENGINE_finish(ret->engine);
OPENSSL_free(ret); OPENSSL_free(ret);
return NULL; return NULL;
@ -145,6 +154,8 @@ DH *DH_new_method(ENGINE *engine)
CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data); CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data);
if ((ret->meth->init != NULL) && !ret->meth->init(ret)) if ((ret->meth->init != NULL) && !ret->meth->init(ret))
{ {
if (ret->engine)
ENGINE_finish(ret->engine);
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data);
OPENSSL_free(ret); OPENSSL_free(ret);
ret=NULL; ret=NULL;

View File

@ -230,7 +230,7 @@ void ERR_load_DSA_strings(void);
#define DSA_F_DSAPARAMS_PRINT_FP 101 #define DSA_F_DSAPARAMS_PRINT_FP 101
#define DSA_F_DSA_DO_SIGN 112 #define DSA_F_DSA_DO_SIGN 112
#define DSA_F_DSA_DO_VERIFY 113 #define DSA_F_DSA_DO_VERIFY 113
#define DSA_F_DSA_NEW 103 #define DSA_F_DSA_NEW_METHOD 103
#define DSA_F_DSA_PRINT 104 #define DSA_F_DSA_PRINT 104
#define DSA_F_DSA_PRINT_FP 105 #define DSA_F_DSA_PRINT_FP 105
#define DSA_F_DSA_SIGN 106 #define DSA_F_DSA_SIGN 106

View File

@ -71,7 +71,7 @@ static ERR_STRING_DATA DSA_str_functs[]=
{ERR_PACK(0,DSA_F_DSAPARAMS_PRINT_FP,0), "DSAparams_print_fp"}, {ERR_PACK(0,DSA_F_DSAPARAMS_PRINT_FP,0), "DSAparams_print_fp"},
{ERR_PACK(0,DSA_F_DSA_DO_SIGN,0), "DSA_do_sign"}, {ERR_PACK(0,DSA_F_DSA_DO_SIGN,0), "DSA_do_sign"},
{ERR_PACK(0,DSA_F_DSA_DO_VERIFY,0), "DSA_do_verify"}, {ERR_PACK(0,DSA_F_DSA_DO_VERIFY,0), "DSA_do_verify"},
{ERR_PACK(0,DSA_F_DSA_NEW,0), "DSA_new"}, {ERR_PACK(0,DSA_F_DSA_NEW_METHOD,0), "DSA_new_method"},
{ERR_PACK(0,DSA_F_DSA_PRINT,0), "DSA_print"}, {ERR_PACK(0,DSA_F_DSA_PRINT,0), "DSA_print"},
{ERR_PACK(0,DSA_F_DSA_PRINT_FP,0), "DSA_print_fp"}, {ERR_PACK(0,DSA_F_DSA_PRINT_FP,0), "DSA_print_fp"},
{ERR_PACK(0,DSA_F_DSA_SIGN,0), "DSA_sign"}, {ERR_PACK(0,DSA_F_DSA_SIGN,0), "DSA_sign"},

View File

@ -110,19 +110,28 @@ DSA *DSA_new_method(ENGINE *engine)
ret=(DSA *)OPENSSL_malloc(sizeof(DSA)); ret=(DSA *)OPENSSL_malloc(sizeof(DSA));
if (ret == NULL) if (ret == NULL)
{ {
DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE); DSAerr(DSA_F_DSA_NEW_METHOD,ERR_R_MALLOC_FAILURE);
return(NULL); return(NULL);
} }
ret->meth = DSA_get_default_method(); ret->meth = DSA_get_default_method();
ret->engine = engine; if (engine)
if(!ret->engine) {
if (!ENGINE_init(engine))
{
DSAerr(DSA_F_DSA_NEW_METHOD, ERR_R_ENGINE_LIB);
OPENSSL_free(ret);
return NULL;
}
ret->engine = engine;
}
else
ret->engine = ENGINE_get_default_DSA(); ret->engine = ENGINE_get_default_DSA();
if(ret->engine) if(ret->engine)
{ {
ret->meth = ENGINE_get_DSA(ret->engine); ret->meth = ENGINE_get_DSA(ret->engine);
if(!ret->meth) if(!ret->meth)
{ {
DSAerr(DSA_F_DSA_NEW, DSAerr(DSA_F_DSA_NEW_METHOD,
ERR_R_ENGINE_LIB); ERR_R_ENGINE_LIB);
ENGINE_finish(ret->engine); ENGINE_finish(ret->engine);
OPENSSL_free(ret); OPENSSL_free(ret);
@ -149,6 +158,8 @@ DSA *DSA_new_method(ENGINE *engine)
CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DSA, ret, &ret->ex_data); CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DSA, ret, &ret->ex_data);
if ((ret->meth->init != NULL) && !ret->meth->init(ret)) if ((ret->meth->init != NULL) && !ret->meth->init(ret))
{ {
if (ret->engine)
ENGINE_finish(ret->engine);
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DSA, ret, &ret->ex_data); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DSA, ret, &ret->ex_data);
OPENSSL_free(ret); OPENSSL_free(ret);
ret=NULL; ret=NULL;

View File

@ -130,8 +130,17 @@ RSA *RSA_new_method(ENGINE *engine)
} }
ret->meth = RSA_get_default_method(); ret->meth = RSA_get_default_method();
ret->engine = engine; if (engine)
if(!ret->engine) {
if (!ENGINE_init(engine))
{
RSAerr(RSA_F_RSA_NEW_METHOD, ERR_R_ENGINE_LIB);
OPENSSL_free(ret);
return NULL;
}
ret->engine = engine;
}
else
ret->engine = ENGINE_get_default_RSA(); ret->engine = ENGINE_get_default_RSA();
if(ret->engine) if(ret->engine)
{ {
@ -166,6 +175,8 @@ RSA *RSA_new_method(ENGINE *engine)
CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data); CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data);
if ((ret->meth->init != NULL) && !ret->meth->init(ret)) if ((ret->meth->init != NULL) && !ret->meth->init(ret))
{ {
if (ret->engine)
ENGINE_finish(ret->engine);
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data);
OPENSSL_free(ret); OPENSSL_free(ret);
ret=NULL; ret=NULL;