X-Git-Url: https://git.openssl.org/?a=blobdiff_plain;f=apps%2Fecparam.c;h=12eed703de6960102336daa03939f312b47c2b3e;hb=f4d8b29a26cc3ee0ef37e2073c192bdbb2b796c4;hp=33b24781e3f28f201cd3223289c5c8a7223b4df8;hpb=4333b89f504e7a8de9c42a0d27f68530b5301848;p=openssl.git diff --git a/apps/ecparam.c b/apps/ecparam.c index 33b24781e3..12eed703de 100644 --- a/apps/ecparam.c +++ b/apps/ecparam.c @@ -22,7 +22,7 @@ #include "ec_common.h" typedef enum OPTION_choice { - OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, + OPT_COMMON, OPT_INFORM, OPT_OUTFORM, OPT_IN, OPT_OUT, OPT_TEXT, OPT_CHECK, OPT_LIST_CURVES, OPT_NO_SEED, OPT_NOOUT, OPT_NAME, OPT_CONV_FORM, OPT_PARAM_ENC, OPT_GENKEY, OPT_ENGINE, OPT_CHECK_NAMED, @@ -100,7 +100,7 @@ int ecparam_main(int argc, char **argv) OSSL_ENCODER_CTX *ectx_key = NULL, *ectx_params = NULL; OSSL_DECODER_CTX *dctx_params = NULL; ENGINE *e = NULL; - BIO *in = NULL, *out = NULL; + BIO *out = NULL; char *curve_name = NULL; char *asn1_encoding = NULL; char *point_format = NULL; @@ -190,11 +190,11 @@ int ecparam_main(int argc, char **argv) if (argc != 0) goto opthelp; + if (!app_RAND_load()) + goto end; + private = genkey ? 1 : 0; - in = bio_open_default(infile, 'r', informat); - if (in == NULL) - goto end; out = bio_open_owner(outfile, outformat, private); if (out == NULL) goto end; @@ -228,7 +228,11 @@ int ecparam_main(int argc, char **argv) OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT, point_format, 0); *p = OSSL_PARAM_construct_end(); - gctx_params = EVP_PKEY_CTX_new_from_name(NULL, "ec", NULL); + + if (strcasecmp(curve_name, "SM2") == 0) + gctx_params = EVP_PKEY_CTX_new_from_name(NULL, "sm2", NULL); + else + gctx_params = EVP_PKEY_CTX_new_from_name(NULL, "ec", NULL); if (gctx_params == NULL || EVP_PKEY_keygen_init(gctx_params) <= 0 || EVP_PKEY_CTX_set_params(gctx_params, params) <= 0 @@ -237,8 +241,8 @@ int ecparam_main(int argc, char **argv) goto end; } } else { - params_key = load_keyparams(infile, 1, "EC", "EC parameters"); - if (!EVP_PKEY_is_a(params_key, "EC")) + params_key = load_keyparams(infile, informat, 1, "EC", "EC parameters"); + if (params_key == NULL || !EVP_PKEY_is_a(params_key, "EC")) goto end; if (point_format && !EVP_PKEY_set_utf8_string_param( @@ -291,7 +295,7 @@ int ecparam_main(int argc, char **argv) noout = 1; if (!noout) { - ectx_params = OSSL_ENCODER_CTX_new_by_EVP_PKEY( + ectx_params = OSSL_ENCODER_CTX_new_for_pkey( params_key, OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS, outformat == FORMAT_ASN1 ? "DER" : "PEM", NULL, NULL); if (!OSSL_ENCODER_to_bio(ectx_params, out)) { @@ -316,7 +320,7 @@ int ecparam_main(int argc, char **argv) goto end; } assert(private); - ectx_key = OSSL_ENCODER_CTX_new_by_EVP_PKEY( + ectx_key = OSSL_ENCODER_CTX_new_for_pkey( key, OSSL_KEYMGMT_SELECT_ALL, outformat == FORMAT_ASN1 ? "DER" : "PEM", NULL, NULL); if (!OSSL_ENCODER_to_bio(ectx_key, out)) { @@ -339,7 +343,6 @@ end: OSSL_DECODER_CTX_free(dctx_params); OSSL_ENCODER_CTX_free(ectx_params); OSSL_ENCODER_CTX_free(ectx_key); - BIO_free(in); BIO_free_all(out); return ret; }