Get rid of warn_binary
[openssl.git] / apps / ecparam.c
index 33b24781e3f28f201cd3223289c5c8a7223b4df8..12eed703de6960102336daa03939f312b47c2b3e 100644 (file)
@@ -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;
 }