summaryrefslogtreecommitdiff
path: root/src/usr.bin/openssl/ecparam.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr.bin/openssl/ecparam.c')
-rw-r--r--src/usr.bin/openssl/ecparam.c116
1 files changed, 58 insertions, 58 deletions
diff --git a/src/usr.bin/openssl/ecparam.c b/src/usr.bin/openssl/ecparam.c
index 52ccc491fc..933cd3eb69 100644
--- a/src/usr.bin/openssl/ecparam.c
+++ b/src/usr.bin/openssl/ecparam.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ecparam.c,v 1.22 2022/11/11 17:07:38 joshua Exp $ */ 1/* $OpenBSD: ecparam.c,v 1.23 2023/03/06 14:32:06 tb Exp $ */
2/* 2/*
3 * Written by Nils Larsch for the OpenSSL project. 3 * Written by Nils Larsch for the OpenSSL project.
4 */ 4 */
@@ -107,21 +107,21 @@ static struct {
107 char *outfile; 107 char *outfile;
108 int outformat; 108 int outformat;
109 int text; 109 int text;
110} ecparam_config; 110} cfg;
111 111
112static int 112static int
113ecparam_opt_form(char *arg) 113ecparam_opt_form(char *arg)
114{ 114{
115 if (strcmp(arg, "compressed") == 0) 115 if (strcmp(arg, "compressed") == 0)
116 ecparam_config.form = POINT_CONVERSION_COMPRESSED; 116 cfg.form = POINT_CONVERSION_COMPRESSED;
117 else if (strcmp(arg, "uncompressed") == 0) 117 else if (strcmp(arg, "uncompressed") == 0)
118 ecparam_config.form = POINT_CONVERSION_UNCOMPRESSED; 118 cfg.form = POINT_CONVERSION_UNCOMPRESSED;
119 else if (strcmp(arg, "hybrid") == 0) 119 else if (strcmp(arg, "hybrid") == 0)
120 ecparam_config.form = POINT_CONVERSION_HYBRID; 120 cfg.form = POINT_CONVERSION_HYBRID;
121 else 121 else
122 return (1); 122 return (1);
123 123
124 ecparam_config.new_form = 1; 124 cfg.new_form = 1;
125 return (0); 125 return (0);
126} 126}
127 127
@@ -129,13 +129,13 @@ static int
129ecparam_opt_enctype(char *arg) 129ecparam_opt_enctype(char *arg)
130{ 130{
131 if (strcmp(arg, "explicit") == 0) 131 if (strcmp(arg, "explicit") == 0)
132 ecparam_config.asn1_flag = 0; 132 cfg.asn1_flag = 0;
133 else if (strcmp(arg, "named_curve") == 0) 133 else if (strcmp(arg, "named_curve") == 0)
134 ecparam_config.asn1_flag = OPENSSL_EC_NAMED_CURVE; 134 cfg.asn1_flag = OPENSSL_EC_NAMED_CURVE;
135 else 135 else
136 return (1); 136 return (1);
137 137
138 ecparam_config.new_asn1_flag = 1; 138 cfg.new_asn1_flag = 1;
139 return (0); 139 return (0);
140} 140}
141 141
@@ -144,13 +144,13 @@ static const struct option ecparam_options[] = {
144 .name = "C", 144 .name = "C",
145 .desc = "Convert the EC parameters into C code", 145 .desc = "Convert the EC parameters into C code",
146 .type = OPTION_FLAG, 146 .type = OPTION_FLAG,
147 .opt.flag = &ecparam_config.C, 147 .opt.flag = &cfg.C,
148 }, 148 },
149 { 149 {
150 .name = "check", 150 .name = "check",
151 .desc = "Validate the elliptic curve parameters", 151 .desc = "Validate the elliptic curve parameters",
152 .type = OPTION_FLAG, 152 .type = OPTION_FLAG,
153 .opt.flag = &ecparam_config.check, 153 .opt.flag = &cfg.check,
154 }, 154 },
155 { 155 {
156 .name = "conv_form", 156 .name = "conv_form",
@@ -165,61 +165,61 @@ static const struct option ecparam_options[] = {
165 .desc = "Generate an EC private key using the specified " 165 .desc = "Generate an EC private key using the specified "
166 "parameters", 166 "parameters",
167 .type = OPTION_FLAG, 167 .type = OPTION_FLAG,
168 .opt.flag = &ecparam_config.genkey, 168 .opt.flag = &cfg.genkey,
169 }, 169 },
170 { 170 {
171 .name = "in", 171 .name = "in",
172 .argname = "file", 172 .argname = "file",
173 .desc = "Input file to read parameters from (default stdin)", 173 .desc = "Input file to read parameters from (default stdin)",
174 .type = OPTION_ARG, 174 .type = OPTION_ARG,
175 .opt.arg = &ecparam_config.infile, 175 .opt.arg = &cfg.infile,
176 }, 176 },
177 { 177 {
178 .name = "inform", 178 .name = "inform",
179 .argname = "format", 179 .argname = "format",
180 .desc = "Input format (DER or PEM)", 180 .desc = "Input format (DER or PEM)",
181 .type = OPTION_ARG_FORMAT, 181 .type = OPTION_ARG_FORMAT,
182 .opt.value = &ecparam_config.informat, 182 .opt.value = &cfg.informat,
183 }, 183 },
184 { 184 {
185 .name = "list_curves", 185 .name = "list_curves",
186 .desc = "Print list of all currently implemented EC " 186 .desc = "Print list of all currently implemented EC "
187 "parameter names", 187 "parameter names",
188 .type = OPTION_FLAG, 188 .type = OPTION_FLAG,
189 .opt.flag = &ecparam_config.list_curves, 189 .opt.flag = &cfg.list_curves,
190 }, 190 },
191 { 191 {
192 .name = "name", 192 .name = "name",
193 .argname = "curve", 193 .argname = "curve",
194 .desc = "Use the EC parameters with the specified name", 194 .desc = "Use the EC parameters with the specified name",
195 .type = OPTION_ARG, 195 .type = OPTION_ARG,
196 .opt.arg = &ecparam_config.curve_name, 196 .opt.arg = &cfg.curve_name,
197 }, 197 },
198 { 198 {
199 .name = "no_seed", 199 .name = "no_seed",
200 .desc = "Do not output seed with explicit parameter encoding", 200 .desc = "Do not output seed with explicit parameter encoding",
201 .type = OPTION_FLAG, 201 .type = OPTION_FLAG,
202 .opt.flag = &ecparam_config.no_seed, 202 .opt.flag = &cfg.no_seed,
203 }, 203 },
204 { 204 {
205 .name = "noout", 205 .name = "noout",
206 .desc = "Do not output encoded version of EC parameters", 206 .desc = "Do not output encoded version of EC parameters",
207 .type = OPTION_FLAG, 207 .type = OPTION_FLAG,
208 .opt.flag = &ecparam_config.noout, 208 .opt.flag = &cfg.noout,
209 }, 209 },
210 { 210 {
211 .name = "out", 211 .name = "out",
212 .argname = "file", 212 .argname = "file",
213 .desc = "Output file to write parameters to (default stdout)", 213 .desc = "Output file to write parameters to (default stdout)",
214 .type = OPTION_ARG, 214 .type = OPTION_ARG,
215 .opt.arg = &ecparam_config.outfile, 215 .opt.arg = &cfg.outfile,
216 }, 216 },
217 { 217 {
218 .name = "outform", 218 .name = "outform",
219 .argname = "format", 219 .argname = "format",
220 .desc = "Output format (DER or PEM)", 220 .desc = "Output format (DER or PEM)",
221 .type = OPTION_ARG_FORMAT, 221 .type = OPTION_ARG_FORMAT,
222 .opt.value = &ecparam_config.outformat, 222 .opt.value = &cfg.outformat,
223 }, 223 },
224 { 224 {
225 .name = "param_enc", 225 .name = "param_enc",
@@ -233,7 +233,7 @@ static const struct option ecparam_options[] = {
233 .name = "text", 233 .name = "text",
234 .desc = "Print out the EC parameters in human readable form", 234 .desc = "Print out the EC parameters in human readable form",
235 .type = OPTION_FLAG, 235 .type = OPTION_FLAG,
236 .opt.flag = &ecparam_config.text, 236 .opt.flag = &cfg.text,
237 }, 237 },
238 {NULL}, 238 {NULL},
239}; 239};
@@ -264,11 +264,11 @@ ecparam_main(int argc, char **argv)
264 exit(1); 264 exit(1);
265 } 265 }
266 266
267 memset(&ecparam_config, 0, sizeof(ecparam_config)); 267 memset(&cfg, 0, sizeof(cfg));
268 ecparam_config.asn1_flag = OPENSSL_EC_NAMED_CURVE; 268 cfg.asn1_flag = OPENSSL_EC_NAMED_CURVE;
269 ecparam_config.form = POINT_CONVERSION_UNCOMPRESSED; 269 cfg.form = POINT_CONVERSION_UNCOMPRESSED;
270 ecparam_config.informat = FORMAT_PEM; 270 cfg.informat = FORMAT_PEM;
271 ecparam_config.outformat = FORMAT_PEM; 271 cfg.outformat = FORMAT_PEM;
272 272
273 if (options_parse(argc, argv, ecparam_options, NULL, NULL) != 0) { 273 if (options_parse(argc, argv, ecparam_options, NULL, NULL) != 0) {
274 ecparam_usage(); 274 ecparam_usage();
@@ -281,24 +281,24 @@ ecparam_main(int argc, char **argv)
281 ERR_print_errors(bio_err); 281 ERR_print_errors(bio_err);
282 goto end; 282 goto end;
283 } 283 }
284 if (ecparam_config.infile == NULL) 284 if (cfg.infile == NULL)
285 BIO_set_fp(in, stdin, BIO_NOCLOSE); 285 BIO_set_fp(in, stdin, BIO_NOCLOSE);
286 else { 286 else {
287 if (BIO_read_filename(in, ecparam_config.infile) <= 0) { 287 if (BIO_read_filename(in, cfg.infile) <= 0) {
288 perror(ecparam_config.infile); 288 perror(cfg.infile);
289 goto end; 289 goto end;
290 } 290 }
291 } 291 }
292 if (ecparam_config.outfile == NULL) { 292 if (cfg.outfile == NULL) {
293 BIO_set_fp(out, stdout, BIO_NOCLOSE); 293 BIO_set_fp(out, stdout, BIO_NOCLOSE);
294 } else { 294 } else {
295 if (BIO_write_filename(out, ecparam_config.outfile) <= 0) { 295 if (BIO_write_filename(out, cfg.outfile) <= 0) {
296 perror(ecparam_config.outfile); 296 perror(cfg.outfile);
297 goto end; 297 goto end;
298 } 298 }
299 } 299 }
300 300
301 if (ecparam_config.list_curves) { 301 if (cfg.list_curves) {
302 EC_builtin_curve *curves = NULL; 302 EC_builtin_curve *curves = NULL;
303 size_t crv_len = 0; 303 size_t crv_len = 0;
304 size_t n = 0; 304 size_t n = 0;
@@ -331,7 +331,7 @@ ecparam_main(int argc, char **argv)
331 ret = 0; 331 ret = 0;
332 goto end; 332 goto end;
333 } 333 }
334 if (ecparam_config.curve_name != NULL) { 334 if (cfg.curve_name != NULL) {
335 int nid; 335 int nid;
336 336
337 /* 337 /*
@@ -339,36 +339,36 @@ ecparam_main(int argc, char **argv)
339 * secp256r1 (which are the same as the curves prime192v1 and 339 * secp256r1 (which are the same as the curves prime192v1 and
340 * prime256v1 defined in X9.62) 340 * prime256v1 defined in X9.62)
341 */ 341 */
342 if (!strcmp(ecparam_config.curve_name, "secp192r1")) { 342 if (!strcmp(cfg.curve_name, "secp192r1")) {
343 BIO_printf(bio_err, "using curve name prime192v1 " 343 BIO_printf(bio_err, "using curve name prime192v1 "
344 "instead of secp192r1\n"); 344 "instead of secp192r1\n");
345 nid = NID_X9_62_prime192v1; 345 nid = NID_X9_62_prime192v1;
346 } else if (!strcmp(ecparam_config.curve_name, "secp256r1")) { 346 } else if (!strcmp(cfg.curve_name, "secp256r1")) {
347 BIO_printf(bio_err, "using curve name prime256v1 " 347 BIO_printf(bio_err, "using curve name prime256v1 "
348 "instead of secp256r1\n"); 348 "instead of secp256r1\n");
349 nid = NID_X9_62_prime256v1; 349 nid = NID_X9_62_prime256v1;
350 } else 350 } else
351 nid = OBJ_sn2nid(ecparam_config.curve_name); 351 nid = OBJ_sn2nid(cfg.curve_name);
352 352
353 if (nid == 0) 353 if (nid == 0)
354 nid = EC_curve_nist2nid(ecparam_config.curve_name); 354 nid = EC_curve_nist2nid(cfg.curve_name);
355 355
356 if (nid == 0) { 356 if (nid == 0) {
357 BIO_printf(bio_err, "unknown curve name (%s)\n", 357 BIO_printf(bio_err, "unknown curve name (%s)\n",
358 ecparam_config.curve_name); 358 cfg.curve_name);
359 goto end; 359 goto end;
360 } 360 }
361 group = EC_GROUP_new_by_curve_name(nid); 361 group = EC_GROUP_new_by_curve_name(nid);
362 if (group == NULL) { 362 if (group == NULL) {
363 BIO_printf(bio_err, "unable to create curve (%s)\n", 363 BIO_printf(bio_err, "unable to create curve (%s)\n",
364 ecparam_config.curve_name); 364 cfg.curve_name);
365 goto end; 365 goto end;
366 } 366 }
367 EC_GROUP_set_asn1_flag(group, ecparam_config.asn1_flag); 367 EC_GROUP_set_asn1_flag(group, cfg.asn1_flag);
368 EC_GROUP_set_point_conversion_form(group, ecparam_config.form); 368 EC_GROUP_set_point_conversion_form(group, cfg.form);
369 } else if (ecparam_config.informat == FORMAT_ASN1) { 369 } else if (cfg.informat == FORMAT_ASN1) {
370 group = d2i_ECPKParameters_bio(in, NULL); 370 group = d2i_ECPKParameters_bio(in, NULL);
371 } else if (ecparam_config.informat == FORMAT_PEM) { 371 } else if (cfg.informat == FORMAT_PEM) {
372 group = PEM_read_bio_ECPKParameters(in, NULL, NULL, NULL); 372 group = PEM_read_bio_ECPKParameters(in, NULL, NULL, NULL);
373 } else { 373 } else {
374 BIO_printf(bio_err, "bad input format specified\n"); 374 BIO_printf(bio_err, "bad input format specified\n");
@@ -381,20 +381,20 @@ ecparam_main(int argc, char **argv)
381 ERR_print_errors(bio_err); 381 ERR_print_errors(bio_err);
382 goto end; 382 goto end;
383 } 383 }
384 if (ecparam_config.new_form) 384 if (cfg.new_form)
385 EC_GROUP_set_point_conversion_form(group, ecparam_config.form); 385 EC_GROUP_set_point_conversion_form(group, cfg.form);
386 386
387 if (ecparam_config.new_asn1_flag) 387 if (cfg.new_asn1_flag)
388 EC_GROUP_set_asn1_flag(group, ecparam_config.asn1_flag); 388 EC_GROUP_set_asn1_flag(group, cfg.asn1_flag);
389 389
390 if (ecparam_config.no_seed) 390 if (cfg.no_seed)
391 EC_GROUP_set_seed(group, NULL, 0); 391 EC_GROUP_set_seed(group, NULL, 0);
392 392
393 if (ecparam_config.text) { 393 if (cfg.text) {
394 if (!ECPKParameters_print(out, group, 0)) 394 if (!ECPKParameters_print(out, group, 0))
395 goto end; 395 goto end;
396 } 396 }
397 if (ecparam_config.check) { 397 if (cfg.check) {
398 BIO_printf(bio_err, "checking elliptic curve parameters: "); 398 BIO_printf(bio_err, "checking elliptic curve parameters: ");
399 if (!EC_GROUP_check(group, NULL)) { 399 if (!EC_GROUP_check(group, NULL)) {
400 BIO_printf(bio_err, "failed\n"); 400 BIO_printf(bio_err, "failed\n");
@@ -403,7 +403,7 @@ ecparam_main(int argc, char **argv)
403 BIO_printf(bio_err, "ok\n"); 403 BIO_printf(bio_err, "ok\n");
404 404
405 } 405 }
406 if (ecparam_config.C) { 406 if (cfg.C) {
407 size_t buf_len = 0, tmp_len = 0; 407 size_t buf_len = 0, tmp_len = 0;
408 const EC_POINT *point; 408 const EC_POINT *point;
409 int is_prime, len = 0; 409 int is_prime, len = 0;
@@ -516,10 +516,10 @@ ecparam_main(int argc, char **argv)
516 BIO_printf(out, "\t\t}\n"); 516 BIO_printf(out, "\t\t}\n");
517 BIO_printf(out, "\treturn(group);\n\t}\n"); 517 BIO_printf(out, "\treturn(group);\n\t}\n");
518 } 518 }
519 if (!ecparam_config.noout) { 519 if (!cfg.noout) {
520 if (ecparam_config.outformat == FORMAT_ASN1) 520 if (cfg.outformat == FORMAT_ASN1)
521 i = i2d_ECPKParameters_bio(out, group); 521 i = i2d_ECPKParameters_bio(out, group);
522 else if (ecparam_config.outformat == FORMAT_PEM) 522 else if (cfg.outformat == FORMAT_PEM)
523 i = PEM_write_bio_ECPKParameters(out, group); 523 i = PEM_write_bio_ECPKParameters(out, group);
524 else { 524 else {
525 BIO_printf(bio_err, "bad output format specified for" 525 BIO_printf(bio_err, "bad output format specified for"
@@ -533,7 +533,7 @@ ecparam_main(int argc, char **argv)
533 goto end; 533 goto end;
534 } 534 }
535 } 535 }
536 if (ecparam_config.genkey) { 536 if (cfg.genkey) {
537 EC_KEY *eckey = EC_KEY_new(); 537 EC_KEY *eckey = EC_KEY_new();
538 538
539 if (eckey == NULL) 539 if (eckey == NULL)
@@ -548,9 +548,9 @@ ecparam_main(int argc, char **argv)
548 EC_KEY_free(eckey); 548 EC_KEY_free(eckey);
549 goto end; 549 goto end;
550 } 550 }
551 if (ecparam_config.outformat == FORMAT_ASN1) 551 if (cfg.outformat == FORMAT_ASN1)
552 i = i2d_ECPrivateKey_bio(out, eckey); 552 i = i2d_ECPrivateKey_bio(out, eckey);
553 else if (ecparam_config.outformat == FORMAT_PEM) 553 else if (cfg.outformat == FORMAT_PEM)
554 i = PEM_write_bio_ECPrivateKey(out, eckey, NULL, 554 i = PEM_write_bio_ECPrivateKey(out, eckey, NULL,
555 NULL, 0, NULL, NULL); 555 NULL, 0, NULL, NULL);
556 else { 556 else {