GH408 follow-on: update buflen
[openssl.git] / apps / ecparam.c
index 082df260ab2837bb8dfa0024e81399ca8e2e5b11..5a98f454fb5f035d6cef3f70bb9d3a55c6ee71cc 100644 (file)
@@ -70,7 +70,6 @@
 
 #include <openssl/opensslconf.h>
 #ifndef OPENSSL_NO_EC
-# include <assert.h>
 # include <stdio.h>
 # include <stdlib.h>
 # include <time.h>
@@ -117,14 +116,14 @@ OPTIONS ecparam_options[] = {
     {NULL}
 };
 
-OPT_PAIR forms[] = {
+static OPT_PAIR forms[] = {
     {"compressed", POINT_CONVERSION_COMPRESSED},
     {"uncompressed", POINT_CONVERSION_UNCOMPRESSED},
     {"hybrid", POINT_CONVERSION_HYBRID},
     {NULL}
 };
 
-OPT_PAIR encodings[] = {
+static OPT_PAIR encodings[] = {
     {"named_curve", OPENSSL_EC_NAMED_CURVE},
     {"explicit", 0},
     {NULL}
@@ -142,8 +141,8 @@ int ecparam_main(int argc, char **argv)
     unsigned char *buffer = NULL;
     OPTION_CHOICE o;
     int asn1_flag = OPENSSL_EC_NAMED_CURVE, new_asn1_flag = 0;
-    int informat = FORMAT_PEM, outformat = FORMAT_PEM, noout = 0, C = 0, ret =
-        1;
+    int informat = FORMAT_PEM, outformat = FORMAT_PEM, noout = 0, C = 0;
+    int ret = 1, private = 0;
     int list_curves = 0, no_seed = 0, check = 0, new_form = 0;
     int text = 0, i, need_rand = 0, genkey = 0;
 
@@ -219,11 +218,15 @@ int ecparam_main(int argc, char **argv)
     }
     argc = opt_num_rest();
     argv = opt_rest();
+    private = genkey ? 1 : 0;
 
-    in = bio_open_default(infile, RB(informat));
+    if (!app_load_modules(NULL))
+        goto end;
+
+    in = bio_open_default(infile, 'r', informat);
     if (in == NULL)
         goto end;
-    out = bio_open_default(outfile, WB(outformat));
+    out = bio_open_owner(outfile, outformat, private);
     if (out == NULL)
         goto end;
 
@@ -232,7 +235,7 @@ int ecparam_main(int argc, char **argv)
         size_t crv_len = EC_get_builtin_curves(NULL, 0);
         size_t n;
 
-        curves = app_malloc((int)(sizeof *curves * crv_len), "list curves");
+        curves = app_malloc((int)sizeof(*curves) * crv_len, "list curves");
         if (!EC_get_builtin_curves(curves, crv_len)) {
             OPENSSL_free(curves);
             goto end;
@@ -265,11 +268,11 @@ int ecparam_main(int argc, char **argv)
          * are the same as the curves prime192v1 and prime256v1 defined in
          * X9.62)
          */
-        if (!strcmp(curve_name, "secp192r1")) {
+        if (strcmp(curve_name, "secp192r1") == 0) {
             BIO_printf(bio_err, "using curve name prime192v1 "
                        "instead of secp192r1\n");
             nid = NID_X9_62_prime192v1;
-        } else if (!strcmp(curve_name, "secp256r1")) {
+        } else if (strcmp(curve_name, "secp256r1") == 0) {
             BIO_printf(bio_err, "using curve name prime256v1 "
                        "instead of secp256r1\n");
             nid = NID_X9_62_prime256v1;
@@ -323,8 +326,9 @@ int ecparam_main(int argc, char **argv)
         if (!EC_GROUP_check(group, NULL)) {
             BIO_printf(bio_err, "failed\n");
             ERR_print_errors(bio_err);
-        } else
-            BIO_printf(bio_err, "ok\n");
+            goto end;
+        }
+        BIO_printf(bio_err, "ok\n");
 
     }
 
@@ -470,6 +474,7 @@ int ecparam_main(int argc, char **argv)
             EC_KEY_free(eckey);
             goto end;
         }
+        assert(private);
         if (outformat == FORMAT_ASN1)
             i = i2d_ECPrivateKey_bio(out, eckey);
         else
@@ -489,8 +494,7 @@ int ecparam_main(int argc, char **argv)
     BN_free(ec_gen);
     BN_free(ec_order);
     BN_free(ec_cofactor);
-    if (buffer)
-        OPENSSL_free(buffer);
+    OPENSSL_free(buffer);
     BIO_free(in);
     BIO_free_all(out);
     EC_GROUP_free(group);