Support for DSA keygen, fix for genpkey.

This commit is contained in:
Dr. Stephen Henson
2006-04-12 11:14:11 +00:00
parent c927df3fa1
commit 75ef718820
4 changed files with 25 additions and 4 deletions

View File

@@ -87,7 +87,7 @@ int MAIN(int argc, char **argv)
int badarg = 0; int badarg = 0;
int ret = 1; int ret = 1;
int do_param = -1; int do_param = 0;
if (bio_err == NULL) if (bio_err == NULL)
bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
@@ -147,8 +147,6 @@ int MAIN(int argc, char **argv)
{ {
if (!args[1]) if (!args[1])
goto bad; goto bad;
if (do_param == -1)
do_param = 0;
if (!init_gen_str(bio_err, &ctx, *(++args),e, do_param)) if (!init_gen_str(bio_err, &ctx, *(++args),e, do_param))
goto end; goto end;
} }

View File

@@ -279,6 +279,7 @@ void ERR_load_DSA_strings(void);
#define DSA_F_DSA_VERIFY 108 #define DSA_F_DSA_VERIFY 108
#define DSA_F_I2D_DSA_SIG 111 #define DSA_F_I2D_DSA_SIG 111
#define DSA_F_PKEY_DSA_CTRL 120 #define DSA_F_PKEY_DSA_CTRL 120
#define DSA_F_PKEY_DSA_KEYGEN 121
#define DSA_F_SIG_CB 114 #define DSA_F_SIG_CB 114
/* Reason codes. */ /* Reason codes. */
@@ -288,6 +289,7 @@ void ERR_load_DSA_strings(void);
#define DSA_R_DECODE_ERROR 104 #define DSA_R_DECODE_ERROR 104
#define DSA_R_INVALID_DIGEST_TYPE 106 #define DSA_R_INVALID_DIGEST_TYPE 106
#define DSA_R_MISSING_PARAMETERS 101 #define DSA_R_MISSING_PARAMETERS 101
#define DSA_R_NO_PARAMETERS_SET 107
#define DSA_R_PARAMETER_ENCODING_ERROR 105 #define DSA_R_PARAMETER_ENCODING_ERROR 105
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -89,6 +89,7 @@ static ERR_STRING_DATA DSA_str_functs[]=
{ERR_FUNC(DSA_F_DSA_VERIFY), "DSA_verify"}, {ERR_FUNC(DSA_F_DSA_VERIFY), "DSA_verify"},
{ERR_FUNC(DSA_F_I2D_DSA_SIG), "i2d_DSA_SIG"}, {ERR_FUNC(DSA_F_I2D_DSA_SIG), "i2d_DSA_SIG"},
{ERR_FUNC(DSA_F_PKEY_DSA_CTRL), "PKEY_DSA_CTRL"}, {ERR_FUNC(DSA_F_PKEY_DSA_CTRL), "PKEY_DSA_CTRL"},
{ERR_FUNC(DSA_F_PKEY_DSA_KEYGEN), "PKEY_DSA_KEYGEN"},
{ERR_FUNC(DSA_F_SIG_CB), "SIG_CB"}, {ERR_FUNC(DSA_F_SIG_CB), "SIG_CB"},
{0,NULL} {0,NULL}
}; };
@@ -101,6 +102,7 @@ static ERR_STRING_DATA DSA_str_reasons[]=
{ERR_REASON(DSA_R_DECODE_ERROR) ,"decode error"}, {ERR_REASON(DSA_R_DECODE_ERROR) ,"decode error"},
{ERR_REASON(DSA_R_INVALID_DIGEST_TYPE) ,"invalid digest type"}, {ERR_REASON(DSA_R_INVALID_DIGEST_TYPE) ,"invalid digest type"},
{ERR_REASON(DSA_R_MISSING_PARAMETERS) ,"missing parameters"}, {ERR_REASON(DSA_R_MISSING_PARAMETERS) ,"missing parameters"},
{ERR_REASON(DSA_R_NO_PARAMETERS_SET) ,"no parameters set"},
{ERR_REASON(DSA_R_PARAMETER_ENCODING_ERROR),"parameter encoding error"}, {ERR_REASON(DSA_R_PARAMETER_ENCODING_ERROR),"parameter encoding error"},
{0,NULL} {0,NULL}
}; };

View File

@@ -200,6 +200,24 @@ static int pkey_dsa_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
return ret; return ret;
} }
static int pkey_dsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
{
DSA *dsa = NULL;
if (ctx->pkey == NULL)
{
DSAerr(DSA_F_PKEY_DSA_KEYGEN, DSA_R_NO_PARAMETERS_SET);
return 0;
}
dsa = DSA_new();
if (!dsa)
return 0;
EVP_PKEY_assign_DSA(pkey, dsa);
/* Note: if error return, pkey is freed by parent routine */
if (!EVP_PKEY_copy_parameters(pkey, ctx->pkey))
return 0;
return DSA_generate_key(pkey->pkey.dsa);
}
const EVP_PKEY_METHOD dsa_pkey_meth = const EVP_PKEY_METHOD dsa_pkey_meth =
{ {
EVP_PKEY_DSA, EVP_PKEY_DSA,
@@ -210,7 +228,8 @@ const EVP_PKEY_METHOD dsa_pkey_meth =
0, 0,
pkey_dsa_paramgen, pkey_dsa_paramgen,
0,0, 0,
pkey_dsa_keygen,
0, 0,
pkey_dsa_sign, pkey_dsa_sign,