diff options
Diffstat (limited to '')
44 files changed, 3260 insertions, 3260 deletions
diff --git a/src/usr.bin/openssl/asn1pars.c b/src/usr.bin/openssl/asn1pars.c index 6f7fa18512..5824b0ea14 100644 --- a/src/usr.bin/openssl/asn1pars.c +++ b/src/usr.bin/openssl/asn1pars.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: asn1pars.c,v 1.12 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: asn1pars.c,v 1.13 2023/03/06 14:32:05 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -86,14 +86,14 @@ static struct { | |||
| 86 | int offset; | 86 | int offset; |
| 87 | char *oidfile; | 87 | char *oidfile; |
| 88 | STACK_OF(OPENSSL_STRING) *osk; | 88 | STACK_OF(OPENSSL_STRING) *osk; |
| 89 | } asn1pars_config; | 89 | } cfg; |
| 90 | 90 | ||
| 91 | static int | 91 | static int |
| 92 | asn1pars_opt_dlimit(char *arg) | 92 | asn1pars_opt_dlimit(char *arg) |
| 93 | { | 93 | { |
| 94 | const char *errstr; | 94 | const char *errstr; |
| 95 | 95 | ||
| 96 | asn1pars_config.dump = strtonum(arg, 1, INT_MAX, &errstr); | 96 | cfg.dump = strtonum(arg, 1, INT_MAX, &errstr); |
| 97 | if (errstr) { | 97 | if (errstr) { |
| 98 | fprintf(stderr, "-dlimit must be from 1 to INT_MAX: %s\n", | 98 | fprintf(stderr, "-dlimit must be from 1 to INT_MAX: %s\n", |
| 99 | errstr); | 99 | errstr); |
| @@ -107,7 +107,7 @@ asn1pars_opt_length(char *arg) | |||
| 107 | { | 107 | { |
| 108 | const char *errstr; | 108 | const char *errstr; |
| 109 | 109 | ||
| 110 | asn1pars_config.length = strtonum(arg, 1, UINT_MAX, &errstr); | 110 | cfg.length = strtonum(arg, 1, UINT_MAX, &errstr); |
| 111 | if (errstr) { | 111 | if (errstr) { |
| 112 | fprintf(stderr, "-length must be from 1 to UINT_MAX: %s\n", | 112 | fprintf(stderr, "-length must be from 1 to UINT_MAX: %s\n", |
| 113 | errstr); | 113 | errstr); |
| @@ -119,7 +119,7 @@ asn1pars_opt_length(char *arg) | |||
| 119 | static int | 119 | static int |
| 120 | asn1pars_opt_strparse(char *arg) | 120 | asn1pars_opt_strparse(char *arg) |
| 121 | { | 121 | { |
| 122 | if (sk_OPENSSL_STRING_push(asn1pars_config.osk, arg) == 0) { | 122 | if (sk_OPENSSL_STRING_push(cfg.osk, arg) == 0) { |
| 123 | fprintf(stderr, "-strparse cannot add argument\n"); | 123 | fprintf(stderr, "-strparse cannot add argument\n"); |
| 124 | return (-1); | 124 | return (-1); |
| 125 | } | 125 | } |
| @@ -132,7 +132,7 @@ static const struct option asn1pars_options[] = { | |||
| 132 | .desc = "Dump unknown data in hex form", | 132 | .desc = "Dump unknown data in hex form", |
| 133 | .type = OPTION_VALUE, | 133 | .type = OPTION_VALUE, |
| 134 | .value = -1, | 134 | .value = -1, |
| 135 | .opt.value = &asn1pars_config.dump, | 135 | .opt.value = &cfg.dump, |
| 136 | }, | 136 | }, |
| 137 | { | 137 | { |
| 138 | .name = "dlimit", | 138 | .name = "dlimit", |
| @@ -146,34 +146,34 @@ static const struct option asn1pars_options[] = { | |||
| 146 | .argname = "file", | 146 | .argname = "file", |
| 147 | .desc = "File to generate ASN.1 structure from", | 147 | .desc = "File to generate ASN.1 structure from", |
| 148 | .type = OPTION_ARG, | 148 | .type = OPTION_ARG, |
| 149 | .opt.arg = &asn1pars_config.genconf, | 149 | .opt.arg = &cfg.genconf, |
| 150 | }, | 150 | }, |
| 151 | { | 151 | { |
| 152 | .name = "genstr", | 152 | .name = "genstr", |
| 153 | .argname = "string", | 153 | .argname = "string", |
| 154 | .desc = "String to generate ASN.1 structure from", | 154 | .desc = "String to generate ASN.1 structure from", |
| 155 | .type = OPTION_ARG, | 155 | .type = OPTION_ARG, |
| 156 | .opt.arg = &asn1pars_config.genstr, | 156 | .opt.arg = &cfg.genstr, |
| 157 | }, | 157 | }, |
| 158 | { | 158 | { |
| 159 | .name = "i", | 159 | .name = "i", |
| 160 | .desc = "Indent output according to depth of structures", | 160 | .desc = "Indent output according to depth of structures", |
| 161 | .type = OPTION_FLAG, | 161 | .type = OPTION_FLAG, |
| 162 | .opt.flag = &asn1pars_config.indent, | 162 | .opt.flag = &cfg.indent, |
| 163 | }, | 163 | }, |
| 164 | { | 164 | { |
| 165 | .name = "in", | 165 | .name = "in", |
| 166 | .argname = "file", | 166 | .argname = "file", |
| 167 | .desc = "The input file (default stdin)", | 167 | .desc = "The input file (default stdin)", |
| 168 | .type = OPTION_ARG, | 168 | .type = OPTION_ARG, |
| 169 | .opt.arg = &asn1pars_config.infile, | 169 | .opt.arg = &cfg.infile, |
| 170 | }, | 170 | }, |
| 171 | { | 171 | { |
| 172 | .name = "inform", | 172 | .name = "inform", |
| 173 | .argname = "fmt", | 173 | .argname = "fmt", |
| 174 | .desc = "Input format (DER, TXT or PEM (default))", | 174 | .desc = "Input format (DER, TXT or PEM (default))", |
| 175 | .type = OPTION_ARG_FORMAT, | 175 | .type = OPTION_ARG_FORMAT, |
| 176 | .opt.value = &asn1pars_config.informat, | 176 | .opt.value = &cfg.informat, |
| 177 | }, | 177 | }, |
| 178 | { | 178 | { |
| 179 | .name = "length", | 179 | .name = "length", |
| @@ -186,28 +186,28 @@ static const struct option asn1pars_options[] = { | |||
| 186 | .name = "noout", | 186 | .name = "noout", |
| 187 | .desc = "Do not produce any output", | 187 | .desc = "Do not produce any output", |
| 188 | .type = OPTION_FLAG, | 188 | .type = OPTION_FLAG, |
| 189 | .opt.flag = &asn1pars_config.noout, | 189 | .opt.flag = &cfg.noout, |
| 190 | }, | 190 | }, |
| 191 | { | 191 | { |
| 192 | .name = "offset", | 192 | .name = "offset", |
| 193 | .argname = "num", | 193 | .argname = "num", |
| 194 | .desc = "Offset to begin parsing", | 194 | .desc = "Offset to begin parsing", |
| 195 | .type = OPTION_ARG_INT, | 195 | .type = OPTION_ARG_INT, |
| 196 | .opt.value = &asn1pars_config.offset, | 196 | .opt.value = &cfg.offset, |
| 197 | }, | 197 | }, |
| 198 | { | 198 | { |
| 199 | .name = "oid", | 199 | .name = "oid", |
| 200 | .argname = "file", | 200 | .argname = "file", |
| 201 | .desc = "File containing additional object identifiers (OIDs)", | 201 | .desc = "File containing additional object identifiers (OIDs)", |
| 202 | .type = OPTION_ARG, | 202 | .type = OPTION_ARG, |
| 203 | .opt.arg = &asn1pars_config.oidfile, | 203 | .opt.arg = &cfg.oidfile, |
| 204 | }, | 204 | }, |
| 205 | { | 205 | { |
| 206 | .name = "out", | 206 | .name = "out", |
| 207 | .argname = "file", | 207 | .argname = "file", |
| 208 | .desc = "Output file in DER format", | 208 | .desc = "Output file in DER format", |
| 209 | .type = OPTION_ARG, | 209 | .type = OPTION_ARG, |
| 210 | .opt.arg = &asn1pars_config.derfile, | 210 | .opt.arg = &cfg.derfile, |
| 211 | }, | 211 | }, |
| 212 | { | 212 | { |
| 213 | .name = "strparse", | 213 | .name = "strparse", |
| @@ -252,10 +252,10 @@ asn1parse_main(int argc, char **argv) | |||
| 252 | exit(1); | 252 | exit(1); |
| 253 | } | 253 | } |
| 254 | 254 | ||
| 255 | memset(&asn1pars_config, 0, sizeof(asn1pars_config)); | 255 | memset(&cfg, 0, sizeof(cfg)); |
| 256 | 256 | ||
| 257 | asn1pars_config.informat = FORMAT_PEM; | 257 | cfg.informat = FORMAT_PEM; |
| 258 | if ((asn1pars_config.osk = sk_OPENSSL_STRING_new_null()) == NULL) { | 258 | if ((cfg.osk = sk_OPENSSL_STRING_new_null()) == NULL) { |
| 259 | BIO_printf(bio_err, "Memory allocation failure\n"); | 259 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 260 | goto end; | 260 | goto end; |
| 261 | } | 261 | } |
| @@ -273,28 +273,28 @@ asn1parse_main(int argc, char **argv) | |||
| 273 | } | 273 | } |
| 274 | BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); | 274 | BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); |
| 275 | 275 | ||
| 276 | if (asn1pars_config.oidfile != NULL) { | 276 | if (cfg.oidfile != NULL) { |
| 277 | if (BIO_read_filename(in, asn1pars_config.oidfile) <= 0) { | 277 | if (BIO_read_filename(in, cfg.oidfile) <= 0) { |
| 278 | BIO_printf(bio_err, "problems opening %s\n", | 278 | BIO_printf(bio_err, "problems opening %s\n", |
| 279 | asn1pars_config.oidfile); | 279 | cfg.oidfile); |
| 280 | ERR_print_errors(bio_err); | 280 | ERR_print_errors(bio_err); |
| 281 | goto end; | 281 | goto end; |
| 282 | } | 282 | } |
| 283 | OBJ_create_objects(in); | 283 | OBJ_create_objects(in); |
| 284 | } | 284 | } |
| 285 | if (asn1pars_config.infile == NULL) | 285 | if (cfg.infile == NULL) |
| 286 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 286 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 287 | else { | 287 | else { |
| 288 | if (BIO_read_filename(in, asn1pars_config.infile) <= 0) { | 288 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 289 | perror(asn1pars_config.infile); | 289 | perror(cfg.infile); |
| 290 | goto end; | 290 | goto end; |
| 291 | } | 291 | } |
| 292 | } | 292 | } |
| 293 | 293 | ||
| 294 | if (asn1pars_config.derfile) { | 294 | if (cfg.derfile) { |
| 295 | if (!(derout = BIO_new_file(asn1pars_config.derfile, "wb"))) { | 295 | if (!(derout = BIO_new_file(cfg.derfile, "wb"))) { |
| 296 | BIO_printf(bio_err, "problems opening %s\n", | 296 | BIO_printf(bio_err, "problems opening %s\n", |
| 297 | asn1pars_config.derfile); | 297 | cfg.derfile); |
| 298 | ERR_print_errors(bio_err); | 298 | ERR_print_errors(bio_err); |
| 299 | goto end; | 299 | goto end; |
| 300 | } | 300 | } |
| @@ -304,16 +304,16 @@ asn1parse_main(int argc, char **argv) | |||
| 304 | if (!BUF_MEM_grow(buf, BUFSIZ * 8)) | 304 | if (!BUF_MEM_grow(buf, BUFSIZ * 8)) |
| 305 | goto end; /* Pre-allocate :-) */ | 305 | goto end; /* Pre-allocate :-) */ |
| 306 | 306 | ||
| 307 | if (asn1pars_config.genstr || asn1pars_config.genconf) { | 307 | if (cfg.genstr || cfg.genconf) { |
| 308 | num = do_generate(bio_err, asn1pars_config.genstr, | 308 | num = do_generate(bio_err, cfg.genstr, |
| 309 | asn1pars_config.genconf, buf); | 309 | cfg.genconf, buf); |
| 310 | if (num < 0) { | 310 | if (num < 0) { |
| 311 | ERR_print_errors(bio_err); | 311 | ERR_print_errors(bio_err); |
| 312 | goto end; | 312 | goto end; |
| 313 | } | 313 | } |
| 314 | } else { | 314 | } else { |
| 315 | 315 | ||
| 316 | if (asn1pars_config.informat == FORMAT_PEM) { | 316 | if (cfg.informat == FORMAT_PEM) { |
| 317 | BIO *tmp; | 317 | BIO *tmp; |
| 318 | 318 | ||
| 319 | if ((b64 = BIO_new(BIO_f_base64())) == NULL) | 319 | if ((b64 = BIO_new(BIO_f_base64())) == NULL) |
| @@ -337,20 +337,20 @@ asn1parse_main(int argc, char **argv) | |||
| 337 | 337 | ||
| 338 | /* If any structs to parse go through in sequence */ | 338 | /* If any structs to parse go through in sequence */ |
| 339 | 339 | ||
| 340 | if (sk_OPENSSL_STRING_num(asn1pars_config.osk)) { | 340 | if (sk_OPENSSL_STRING_num(cfg.osk)) { |
| 341 | tmpbuf = (unsigned char *) str; | 341 | tmpbuf = (unsigned char *) str; |
| 342 | tmplen = num; | 342 | tmplen = num; |
| 343 | for (i = 0; i < sk_OPENSSL_STRING_num(asn1pars_config.osk); | 343 | for (i = 0; i < sk_OPENSSL_STRING_num(cfg.osk); |
| 344 | i++) { | 344 | i++) { |
| 345 | ASN1_TYPE *atmp; | 345 | ASN1_TYPE *atmp; |
| 346 | int typ; | 346 | int typ; |
| 347 | j = strtonum( | 347 | j = strtonum( |
| 348 | sk_OPENSSL_STRING_value(asn1pars_config.osk, i), | 348 | sk_OPENSSL_STRING_value(cfg.osk, i), |
| 349 | 1, INT_MAX, &errstr); | 349 | 1, INT_MAX, &errstr); |
| 350 | if (errstr) { | 350 | if (errstr) { |
| 351 | BIO_printf(bio_err, | 351 | BIO_printf(bio_err, |
| 352 | "'%s' is an invalid number: %s\n", | 352 | "'%s' is an invalid number: %s\n", |
| 353 | sk_OPENSSL_STRING_value(asn1pars_config.osk, | 353 | sk_OPENSSL_STRING_value(cfg.osk, |
| 354 | i), errstr); | 354 | i), errstr); |
| 355 | continue; | 355 | continue; |
| 356 | } | 356 | } |
| @@ -380,28 +380,28 @@ asn1parse_main(int argc, char **argv) | |||
| 380 | str = (char *) tmpbuf; | 380 | str = (char *) tmpbuf; |
| 381 | num = tmplen; | 381 | num = tmplen; |
| 382 | } | 382 | } |
| 383 | if (asn1pars_config.offset >= num) { | 383 | if (cfg.offset >= num) { |
| 384 | BIO_printf(bio_err, "Error: offset too large\n"); | 384 | BIO_printf(bio_err, "Error: offset too large\n"); |
| 385 | goto end; | 385 | goto end; |
| 386 | } | 386 | } |
| 387 | num -= asn1pars_config.offset; | 387 | num -= cfg.offset; |
| 388 | 388 | ||
| 389 | if ((asn1pars_config.length == 0) || | 389 | if ((cfg.length == 0) || |
| 390 | ((long)asn1pars_config.length > num)) | 390 | ((long)cfg.length > num)) |
| 391 | asn1pars_config.length = (unsigned int) num; | 391 | cfg.length = (unsigned int) num; |
| 392 | if (derout) { | 392 | if (derout) { |
| 393 | if (BIO_write(derout, str + asn1pars_config.offset, | 393 | if (BIO_write(derout, str + cfg.offset, |
| 394 | asn1pars_config.length) != (int)asn1pars_config.length) { | 394 | cfg.length) != (int)cfg.length) { |
| 395 | BIO_printf(bio_err, "Error writing output\n"); | 395 | BIO_printf(bio_err, "Error writing output\n"); |
| 396 | ERR_print_errors(bio_err); | 396 | ERR_print_errors(bio_err); |
| 397 | goto end; | 397 | goto end; |
| 398 | } | 398 | } |
| 399 | } | 399 | } |
| 400 | if (!asn1pars_config.noout && | 400 | if (!cfg.noout && |
| 401 | !ASN1_parse_dump(out, | 401 | !ASN1_parse_dump(out, |
| 402 | (unsigned char *)&(str[asn1pars_config.offset]), | 402 | (unsigned char *)&(str[cfg.offset]), |
| 403 | asn1pars_config.length, asn1pars_config.indent, | 403 | cfg.length, cfg.indent, |
| 404 | asn1pars_config.dump)) { | 404 | cfg.dump)) { |
| 405 | ERR_print_errors(bio_err); | 405 | ERR_print_errors(bio_err); |
| 406 | goto end; | 406 | goto end; |
| 407 | } | 407 | } |
| @@ -415,7 +415,7 @@ asn1parse_main(int argc, char **argv) | |||
| 415 | ERR_print_errors(bio_err); | 415 | ERR_print_errors(bio_err); |
| 416 | BUF_MEM_free(buf); | 416 | BUF_MEM_free(buf); |
| 417 | ASN1_TYPE_free(at); | 417 | ASN1_TYPE_free(at); |
| 418 | sk_OPENSSL_STRING_free(asn1pars_config.osk); | 418 | sk_OPENSSL_STRING_free(cfg.osk); |
| 419 | OBJ_cleanup(); | 419 | OBJ_cleanup(); |
| 420 | 420 | ||
| 421 | return (ret); | 421 | return (ret); |
diff --git a/src/usr.bin/openssl/ca.c b/src/usr.bin/openssl/ca.c index e13354f4af..369d11ead6 100644 --- a/src/usr.bin/openssl/ca.c +++ b/src/usr.bin/openssl/ca.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ca.c,v 1.54 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: ca.c,v 1.55 2023/03/06 14:32:05 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -207,63 +207,63 @@ static struct { | |||
| 207 | char *startdate; | 207 | char *startdate; |
| 208 | char *subj; | 208 | char *subj; |
| 209 | int verbose; | 209 | int verbose; |
| 210 | } ca_config; | 210 | } cfg; |
| 211 | 211 | ||
| 212 | static int | 212 | static int |
| 213 | ca_opt_chtype_utf8(void) | 213 | ca_opt_chtype_utf8(void) |
| 214 | { | 214 | { |
| 215 | ca_config.chtype = MBSTRING_UTF8; | 215 | cfg.chtype = MBSTRING_UTF8; |
| 216 | return (0); | 216 | return (0); |
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | static int | 219 | static int |
| 220 | ca_opt_crl_ca_compromise(char *arg) | 220 | ca_opt_crl_ca_compromise(char *arg) |
| 221 | { | 221 | { |
| 222 | ca_config.rev_arg = arg; | 222 | cfg.rev_arg = arg; |
| 223 | ca_config.rev_type = REV_CA_COMPROMISE; | 223 | cfg.rev_type = REV_CA_COMPROMISE; |
| 224 | return (0); | 224 | return (0); |
| 225 | } | 225 | } |
| 226 | 226 | ||
| 227 | static int | 227 | static int |
| 228 | ca_opt_crl_compromise(char *arg) | 228 | ca_opt_crl_compromise(char *arg) |
| 229 | { | 229 | { |
| 230 | ca_config.rev_arg = arg; | 230 | cfg.rev_arg = arg; |
| 231 | ca_config.rev_type = REV_KEY_COMPROMISE; | 231 | cfg.rev_type = REV_KEY_COMPROMISE; |
| 232 | return (0); | 232 | return (0); |
| 233 | } | 233 | } |
| 234 | 234 | ||
| 235 | static int | 235 | static int |
| 236 | ca_opt_crl_hold(char *arg) | 236 | ca_opt_crl_hold(char *arg) |
| 237 | { | 237 | { |
| 238 | ca_config.rev_arg = arg; | 238 | cfg.rev_arg = arg; |
| 239 | ca_config.rev_type = REV_HOLD; | 239 | cfg.rev_type = REV_HOLD; |
| 240 | return (0); | 240 | return (0); |
| 241 | } | 241 | } |
| 242 | 242 | ||
| 243 | static int | 243 | static int |
| 244 | ca_opt_crl_reason(char *arg) | 244 | ca_opt_crl_reason(char *arg) |
| 245 | { | 245 | { |
| 246 | ca_config.rev_arg = arg; | 246 | cfg.rev_arg = arg; |
| 247 | ca_config.rev_type = REV_CRL_REASON; | 247 | cfg.rev_type = REV_CRL_REASON; |
| 248 | return (0); | 248 | return (0); |
| 249 | } | 249 | } |
| 250 | 250 | ||
| 251 | static int | 251 | static int |
| 252 | ca_opt_in(char *arg) | 252 | ca_opt_in(char *arg) |
| 253 | { | 253 | { |
| 254 | ca_config.infile = arg; | 254 | cfg.infile = arg; |
| 255 | ca_config.req = 1; | 255 | cfg.req = 1; |
| 256 | return (0); | 256 | return (0); |
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | static int | 259 | static int |
| 260 | ca_opt_infiles(int argc, char **argv, int *argsused) | 260 | ca_opt_infiles(int argc, char **argv, int *argsused) |
| 261 | { | 261 | { |
| 262 | ca_config.infiles_num = argc - 1; | 262 | cfg.infiles_num = argc - 1; |
| 263 | if (ca_config.infiles_num < 1) | 263 | if (cfg.infiles_num < 1) |
| 264 | return (1); | 264 | return (1); |
| 265 | ca_config.infiles = argv + 1; | 265 | cfg.infiles = argv + 1; |
| 266 | ca_config.req = 1; | 266 | cfg.req = 1; |
| 267 | *argsused = argc; | 267 | *argsused = argc; |
| 268 | return (0); | 268 | return (0); |
| 269 | } | 269 | } |
| @@ -271,19 +271,19 @@ ca_opt_infiles(int argc, char **argv, int *argsused) | |||
| 271 | static int | 271 | static int |
| 272 | ca_opt_revoke(char *arg) | 272 | ca_opt_revoke(char *arg) |
| 273 | { | 273 | { |
| 274 | ca_config.infile = arg; | 274 | cfg.infile = arg; |
| 275 | ca_config.dorevoke = 1; | 275 | cfg.dorevoke = 1; |
| 276 | return (0); | 276 | return (0); |
| 277 | } | 277 | } |
| 278 | 278 | ||
| 279 | static int | 279 | static int |
| 280 | ca_opt_sigopt(char *arg) | 280 | ca_opt_sigopt(char *arg) |
| 281 | { | 281 | { |
| 282 | if (ca_config.sigopts == NULL) | 282 | if (cfg.sigopts == NULL) |
| 283 | ca_config.sigopts = sk_OPENSSL_STRING_new_null(); | 283 | cfg.sigopts = sk_OPENSSL_STRING_new_null(); |
| 284 | if (ca_config.sigopts == NULL) | 284 | if (cfg.sigopts == NULL) |
| 285 | return (1); | 285 | return (1); |
| 286 | if (!sk_OPENSSL_STRING_push(ca_config.sigopts, arg)) | 286 | if (!sk_OPENSSL_STRING_push(cfg.sigopts, arg)) |
| 287 | return (1); | 287 | return (1); |
| 288 | return (0); | 288 | return (0); |
| 289 | } | 289 | } |
| @@ -291,16 +291,16 @@ ca_opt_sigopt(char *arg) | |||
| 291 | static int | 291 | static int |
| 292 | ca_opt_spkac(char *arg) | 292 | ca_opt_spkac(char *arg) |
| 293 | { | 293 | { |
| 294 | ca_config.spkac_file = arg; | 294 | cfg.spkac_file = arg; |
| 295 | ca_config.req = 1; | 295 | cfg.req = 1; |
| 296 | return (0); | 296 | return (0); |
| 297 | } | 297 | } |
| 298 | 298 | ||
| 299 | static int | 299 | static int |
| 300 | ca_opt_ss_cert(char *arg) | 300 | ca_opt_ss_cert(char *arg) |
| 301 | { | 301 | { |
| 302 | ca_config.ss_cert_file = arg; | 302 | cfg.ss_cert_file = arg; |
| 303 | ca_config.req = 1; | 303 | cfg.req = 1; |
| 304 | return (0); | 304 | return (0); |
| 305 | } | 305 | } |
| 306 | 306 | ||
| @@ -309,27 +309,27 @@ static const struct option ca_options[] = { | |||
| 309 | .name = "batch", | 309 | .name = "batch", |
| 310 | .desc = "Operate in batch mode", | 310 | .desc = "Operate in batch mode", |
| 311 | .type = OPTION_FLAG, | 311 | .type = OPTION_FLAG, |
| 312 | .opt.flag = &ca_config.batch, | 312 | .opt.flag = &cfg.batch, |
| 313 | }, | 313 | }, |
| 314 | { | 314 | { |
| 315 | .name = "cert", | 315 | .name = "cert", |
| 316 | .argname = "file", | 316 | .argname = "file", |
| 317 | .desc = "File containing the CA certificate", | 317 | .desc = "File containing the CA certificate", |
| 318 | .type = OPTION_ARG, | 318 | .type = OPTION_ARG, |
| 319 | .opt.arg = &ca_config.certfile, | 319 | .opt.arg = &cfg.certfile, |
| 320 | }, | 320 | }, |
| 321 | { | 321 | { |
| 322 | .name = "config", | 322 | .name = "config", |
| 323 | .argname = "file", | 323 | .argname = "file", |
| 324 | .desc = "Specify an alternative configuration file", | 324 | .desc = "Specify an alternative configuration file", |
| 325 | .type = OPTION_ARG, | 325 | .type = OPTION_ARG, |
| 326 | .opt.arg = &ca_config.configfile, | 326 | .opt.arg = &cfg.configfile, |
| 327 | }, | 327 | }, |
| 328 | { | 328 | { |
| 329 | .name = "create_serial", | 329 | .name = "create_serial", |
| 330 | .desc = "If reading serial fails, create a new random serial", | 330 | .desc = "If reading serial fails, create a new random serial", |
| 331 | .type = OPTION_FLAG, | 331 | .type = OPTION_FLAG, |
| 332 | .opt.flag = &ca_config.create_serial, | 332 | .opt.flag = &cfg.create_serial, |
| 333 | }, | 333 | }, |
| 334 | { | 334 | { |
| 335 | .name = "crl_CA_compromise", | 335 | .name = "crl_CA_compromise", |
| @@ -367,62 +367,62 @@ static const struct option ca_options[] = { | |||
| 367 | .argname = "days", | 367 | .argname = "days", |
| 368 | .desc = "Number of days before the next CRL is due", | 368 | .desc = "Number of days before the next CRL is due", |
| 369 | .type = OPTION_ARG_LONG, | 369 | .type = OPTION_ARG_LONG, |
| 370 | .opt.lvalue = &ca_config.crldays, | 370 | .opt.lvalue = &cfg.crldays, |
| 371 | }, | 371 | }, |
| 372 | { | 372 | { |
| 373 | .name = "crlexts", | 373 | .name = "crlexts", |
| 374 | .argname = "section", | 374 | .argname = "section", |
| 375 | .desc = "CRL extension section (override value in config file)", | 375 | .desc = "CRL extension section (override value in config file)", |
| 376 | .type = OPTION_ARG, | 376 | .type = OPTION_ARG, |
| 377 | .opt.arg = &ca_config.crl_ext, | 377 | .opt.arg = &cfg.crl_ext, |
| 378 | }, | 378 | }, |
| 379 | { | 379 | { |
| 380 | .name = "crlhours", | 380 | .name = "crlhours", |
| 381 | .argname = "hours", | 381 | .argname = "hours", |
| 382 | .desc = "Number of hours before the next CRL is due", | 382 | .desc = "Number of hours before the next CRL is due", |
| 383 | .type = OPTION_ARG_LONG, | 383 | .type = OPTION_ARG_LONG, |
| 384 | .opt.lvalue = &ca_config.crlhours, | 384 | .opt.lvalue = &cfg.crlhours, |
| 385 | }, | 385 | }, |
| 386 | { | 386 | { |
| 387 | .name = "crlsec", | 387 | .name = "crlsec", |
| 388 | .argname = "seconds", | 388 | .argname = "seconds", |
| 389 | .desc = "Number of seconds before the next CRL is due", | 389 | .desc = "Number of seconds before the next CRL is due", |
| 390 | .type = OPTION_ARG_LONG, | 390 | .type = OPTION_ARG_LONG, |
| 391 | .opt.lvalue = &ca_config.crlsec, | 391 | .opt.lvalue = &cfg.crlsec, |
| 392 | }, | 392 | }, |
| 393 | { | 393 | { |
| 394 | .name = "days", | 394 | .name = "days", |
| 395 | .argname = "arg", | 395 | .argname = "arg", |
| 396 | .desc = "Number of days to certify the certificate for", | 396 | .desc = "Number of days to certify the certificate for", |
| 397 | .type = OPTION_ARG_LONG, | 397 | .type = OPTION_ARG_LONG, |
| 398 | .opt.lvalue = &ca_config.days, | 398 | .opt.lvalue = &cfg.days, |
| 399 | }, | 399 | }, |
| 400 | { | 400 | { |
| 401 | .name = "enddate", | 401 | .name = "enddate", |
| 402 | .argname = "YYMMDDHHMMSSZ", | 402 | .argname = "YYMMDDHHMMSSZ", |
| 403 | .desc = "Certificate validity notAfter (overrides -days)", | 403 | .desc = "Certificate validity notAfter (overrides -days)", |
| 404 | .type = OPTION_ARG, | 404 | .type = OPTION_ARG, |
| 405 | .opt.arg = &ca_config.enddate, | 405 | .opt.arg = &cfg.enddate, |
| 406 | }, | 406 | }, |
| 407 | { | 407 | { |
| 408 | .name = "extensions", | 408 | .name = "extensions", |
| 409 | .argname = "section", | 409 | .argname = "section", |
| 410 | .desc = "Extension section (override value in config file)", | 410 | .desc = "Extension section (override value in config file)", |
| 411 | .type = OPTION_ARG, | 411 | .type = OPTION_ARG, |
| 412 | .opt.arg = &ca_config.extensions, | 412 | .opt.arg = &cfg.extensions, |
| 413 | }, | 413 | }, |
| 414 | { | 414 | { |
| 415 | .name = "extfile", | 415 | .name = "extfile", |
| 416 | .argname = "file", | 416 | .argname = "file", |
| 417 | .desc = "Configuration file with X509v3 extentions to add", | 417 | .desc = "Configuration file with X509v3 extentions to add", |
| 418 | .type = OPTION_ARG, | 418 | .type = OPTION_ARG, |
| 419 | .opt.arg = &ca_config.extfile, | 419 | .opt.arg = &cfg.extfile, |
| 420 | }, | 420 | }, |
| 421 | { | 421 | { |
| 422 | .name = "gencrl", | 422 | .name = "gencrl", |
| 423 | .desc = "Generate a new CRL", | 423 | .desc = "Generate a new CRL", |
| 424 | .type = OPTION_FLAG, | 424 | .type = OPTION_FLAG, |
| 425 | .opt.flag = &ca_config.gencrl, | 425 | .opt.flag = &cfg.gencrl, |
| 426 | }, | 426 | }, |
| 427 | { | 427 | { |
| 428 | .name = "in", | 428 | .name = "in", |
| @@ -443,93 +443,93 @@ static const struct option ca_options[] = { | |||
| 443 | .argname = "password", | 443 | .argname = "password", |
| 444 | .desc = "Key to decode the private key if it is encrypted", | 444 | .desc = "Key to decode the private key if it is encrypted", |
| 445 | .type = OPTION_ARG, | 445 | .type = OPTION_ARG, |
| 446 | .opt.arg = &ca_config.key, | 446 | .opt.arg = &cfg.key, |
| 447 | }, | 447 | }, |
| 448 | { | 448 | { |
| 449 | .name = "keyfile", | 449 | .name = "keyfile", |
| 450 | .argname = "file", | 450 | .argname = "file", |
| 451 | .desc = "Private key file", | 451 | .desc = "Private key file", |
| 452 | .type = OPTION_ARG, | 452 | .type = OPTION_ARG, |
| 453 | .opt.arg = &ca_config.keyfile, | 453 | .opt.arg = &cfg.keyfile, |
| 454 | }, | 454 | }, |
| 455 | { | 455 | { |
| 456 | .name = "keyform", | 456 | .name = "keyform", |
| 457 | .argname = "fmt", | 457 | .argname = "fmt", |
| 458 | .desc = "Private key file format (DER or PEM (default))", | 458 | .desc = "Private key file format (DER or PEM (default))", |
| 459 | .type = OPTION_ARG_FORMAT, | 459 | .type = OPTION_ARG_FORMAT, |
| 460 | .opt.value = &ca_config.keyform, | 460 | .opt.value = &cfg.keyform, |
| 461 | }, | 461 | }, |
| 462 | { | 462 | { |
| 463 | .name = "md", | 463 | .name = "md", |
| 464 | .argname = "alg", | 464 | .argname = "alg", |
| 465 | .desc = "Message digest to use", | 465 | .desc = "Message digest to use", |
| 466 | .type = OPTION_ARG, | 466 | .type = OPTION_ARG, |
| 467 | .opt.arg = &ca_config.md, | 467 | .opt.arg = &cfg.md, |
| 468 | }, | 468 | }, |
| 469 | { | 469 | { |
| 470 | .name = "msie_hack", | 470 | .name = "msie_hack", |
| 471 | .type = OPTION_FLAG, | 471 | .type = OPTION_FLAG, |
| 472 | .opt.flag = &ca_config.msie_hack, | 472 | .opt.flag = &cfg.msie_hack, |
| 473 | }, | 473 | }, |
| 474 | { | 474 | { |
| 475 | .name = "multivalue-rdn", | 475 | .name = "multivalue-rdn", |
| 476 | .desc = "Enable support for multivalued RDNs", | 476 | .desc = "Enable support for multivalued RDNs", |
| 477 | .type = OPTION_FLAG, | 477 | .type = OPTION_FLAG, |
| 478 | .opt.flag = &ca_config.multirdn, | 478 | .opt.flag = &cfg.multirdn, |
| 479 | }, | 479 | }, |
| 480 | { | 480 | { |
| 481 | .name = "name", | 481 | .name = "name", |
| 482 | .argname = "section", | 482 | .argname = "section", |
| 483 | .desc = "Specifies the configuration file section to use", | 483 | .desc = "Specifies the configuration file section to use", |
| 484 | .type = OPTION_ARG, | 484 | .type = OPTION_ARG, |
| 485 | .opt.arg = &ca_config.section, | 485 | .opt.arg = &cfg.section, |
| 486 | }, | 486 | }, |
| 487 | { | 487 | { |
| 488 | .name = "noemailDN", | 488 | .name = "noemailDN", |
| 489 | .desc = "Do not add the EMAIL field to the DN", | 489 | .desc = "Do not add the EMAIL field to the DN", |
| 490 | .type = OPTION_VALUE, | 490 | .type = OPTION_VALUE, |
| 491 | .opt.value = &ca_config.email_dn, | 491 | .opt.value = &cfg.email_dn, |
| 492 | .value = 0, | 492 | .value = 0, |
| 493 | }, | 493 | }, |
| 494 | { | 494 | { |
| 495 | .name = "notext", | 495 | .name = "notext", |
| 496 | .desc = "Do not print the generated certificate", | 496 | .desc = "Do not print the generated certificate", |
| 497 | .type = OPTION_FLAG, | 497 | .type = OPTION_FLAG, |
| 498 | .opt.flag = &ca_config.notext, | 498 | .opt.flag = &cfg.notext, |
| 499 | }, | 499 | }, |
| 500 | { | 500 | { |
| 501 | .name = "out", | 501 | .name = "out", |
| 502 | .argname = "file", | 502 | .argname = "file", |
| 503 | .desc = "Output file (default stdout)", | 503 | .desc = "Output file (default stdout)", |
| 504 | .type = OPTION_ARG, | 504 | .type = OPTION_ARG, |
| 505 | .opt.arg = &ca_config.outfile, | 505 | .opt.arg = &cfg.outfile, |
| 506 | }, | 506 | }, |
| 507 | { | 507 | { |
| 508 | .name = "outdir", | 508 | .name = "outdir", |
| 509 | .argname = "directory", | 509 | .argname = "directory", |
| 510 | .desc = " Directory to output certificates to", | 510 | .desc = " Directory to output certificates to", |
| 511 | .type = OPTION_ARG, | 511 | .type = OPTION_ARG, |
| 512 | .opt.arg = &ca_config.outdir, | 512 | .opt.arg = &cfg.outdir, |
| 513 | }, | 513 | }, |
| 514 | { | 514 | { |
| 515 | .name = "passin", | 515 | .name = "passin", |
| 516 | .argname = "src", | 516 | .argname = "src", |
| 517 | .desc = "Private key input password source", | 517 | .desc = "Private key input password source", |
| 518 | .type = OPTION_ARG, | 518 | .type = OPTION_ARG, |
| 519 | .opt.arg = &ca_config.passargin, | 519 | .opt.arg = &cfg.passargin, |
| 520 | }, | 520 | }, |
| 521 | { | 521 | { |
| 522 | .name = "policy", | 522 | .name = "policy", |
| 523 | .argname = "name", | 523 | .argname = "name", |
| 524 | .desc = "The CA 'policy' to support", | 524 | .desc = "The CA 'policy' to support", |
| 525 | .type = OPTION_ARG, | 525 | .type = OPTION_ARG, |
| 526 | .opt.arg = &ca_config.policy, | 526 | .opt.arg = &cfg.policy, |
| 527 | }, | 527 | }, |
| 528 | { | 528 | { |
| 529 | .name = "preserveDN", | 529 | .name = "preserveDN", |
| 530 | .desc = "Do not re-order the DN", | 530 | .desc = "Do not re-order the DN", |
| 531 | .type = OPTION_FLAG, | 531 | .type = OPTION_FLAG, |
| 532 | .opt.flag = &ca_config.preserve, | 532 | .opt.flag = &cfg.preserve, |
| 533 | }, | 533 | }, |
| 534 | { | 534 | { |
| 535 | .name = "revoke", | 535 | .name = "revoke", |
| @@ -542,7 +542,7 @@ static const struct option ca_options[] = { | |||
| 542 | .name = "selfsign", | 542 | .name = "selfsign", |
| 543 | .desc = "Sign a certificate using the key associated with it", | 543 | .desc = "Sign a certificate using the key associated with it", |
| 544 | .type = OPTION_FLAG, | 544 | .type = OPTION_FLAG, |
| 545 | .opt.flag = &ca_config.selfsign, | 545 | .opt.flag = &cfg.selfsign, |
| 546 | }, | 546 | }, |
| 547 | { | 547 | { |
| 548 | .name = "sigopt", | 548 | .name = "sigopt", |
| @@ -570,27 +570,27 @@ static const struct option ca_options[] = { | |||
| 570 | .argname = "YYMMDDHHMMSSZ", | 570 | .argname = "YYMMDDHHMMSSZ", |
| 571 | .desc = "Certificate validity notBefore", | 571 | .desc = "Certificate validity notBefore", |
| 572 | .type = OPTION_ARG, | 572 | .type = OPTION_ARG, |
| 573 | .opt.arg = &ca_config.startdate, | 573 | .opt.arg = &cfg.startdate, |
| 574 | }, | 574 | }, |
| 575 | { | 575 | { |
| 576 | .name = "status", | 576 | .name = "status", |
| 577 | .argname = "serial", | 577 | .argname = "serial", |
| 578 | .desc = "Shows certificate status given the serial number", | 578 | .desc = "Shows certificate status given the serial number", |
| 579 | .type = OPTION_ARG, | 579 | .type = OPTION_ARG, |
| 580 | .opt.arg = &ca_config.serial_status, | 580 | .opt.arg = &cfg.serial_status, |
| 581 | }, | 581 | }, |
| 582 | { | 582 | { |
| 583 | .name = "subj", | 583 | .name = "subj", |
| 584 | .argname = "arg", | 584 | .argname = "arg", |
| 585 | .desc = "Use arg instead of request's subject", | 585 | .desc = "Use arg instead of request's subject", |
| 586 | .type = OPTION_ARG, | 586 | .type = OPTION_ARG, |
| 587 | .opt.arg = &ca_config.subj, | 587 | .opt.arg = &cfg.subj, |
| 588 | }, | 588 | }, |
| 589 | { | 589 | { |
| 590 | .name = "updatedb", | 590 | .name = "updatedb", |
| 591 | .desc = "Updates db for expired certificates", | 591 | .desc = "Updates db for expired certificates", |
| 592 | .type = OPTION_FLAG, | 592 | .type = OPTION_FLAG, |
| 593 | .opt.flag = &ca_config.doupdatedb, | 593 | .opt.flag = &cfg.doupdatedb, |
| 594 | }, | 594 | }, |
| 595 | { | 595 | { |
| 596 | .name = "utf8", | 596 | .name = "utf8", |
| @@ -602,7 +602,7 @@ static const struct option ca_options[] = { | |||
| 602 | .name = "verbose", | 602 | .name = "verbose", |
| 603 | .desc = "Verbose output during processing", | 603 | .desc = "Verbose output during processing", |
| 604 | .type = OPTION_FLAG, | 604 | .type = OPTION_FLAG, |
| 605 | .opt.flag = &ca_config.verbose, | 605 | .opt.flag = &cfg.verbose, |
| 606 | }, | 606 | }, |
| 607 | { NULL }, | 607 | { NULL }, |
| 608 | }; | 608 | }; |
| @@ -690,11 +690,11 @@ ca_main(int argc, char **argv) | |||
| 690 | exit(1); | 690 | exit(1); |
| 691 | } | 691 | } |
| 692 | 692 | ||
| 693 | memset(&ca_config, 0, sizeof(ca_config)); | 693 | memset(&cfg, 0, sizeof(cfg)); |
| 694 | ca_config.email_dn = 1; | 694 | cfg.email_dn = 1; |
| 695 | ca_config.keyform = FORMAT_PEM; | 695 | cfg.keyform = FORMAT_PEM; |
| 696 | ca_config.chtype = MBSTRING_ASC; | 696 | cfg.chtype = MBSTRING_ASC; |
| 697 | ca_config.rev_type = REV_NONE; | 697 | cfg.rev_type = REV_NONE; |
| 698 | 698 | ||
| 699 | conf = NULL; | 699 | conf = NULL; |
| 700 | 700 | ||
| @@ -705,37 +705,37 @@ ca_main(int argc, char **argv) | |||
| 705 | 705 | ||
| 706 | /*****************************************************************/ | 706 | /*****************************************************************/ |
| 707 | tofree = NULL; | 707 | tofree = NULL; |
| 708 | if (ca_config.configfile == NULL) | 708 | if (cfg.configfile == NULL) |
| 709 | ca_config.configfile = getenv("OPENSSL_CONF"); | 709 | cfg.configfile = getenv("OPENSSL_CONF"); |
| 710 | if (ca_config.configfile == NULL) { | 710 | if (cfg.configfile == NULL) { |
| 711 | if ((tofree = make_config_name()) == NULL) { | 711 | if ((tofree = make_config_name()) == NULL) { |
| 712 | BIO_printf(bio_err, "error making config file name\n"); | 712 | BIO_printf(bio_err, "error making config file name\n"); |
| 713 | goto err; | 713 | goto err; |
| 714 | } | 714 | } |
| 715 | ca_config.configfile = tofree; | 715 | cfg.configfile = tofree; |
| 716 | } | 716 | } |
| 717 | BIO_printf(bio_err, "Using configuration from %s\n", | 717 | BIO_printf(bio_err, "Using configuration from %s\n", |
| 718 | ca_config.configfile); | 718 | cfg.configfile); |
| 719 | conf = NCONF_new(NULL); | 719 | conf = NCONF_new(NULL); |
| 720 | if (NCONF_load(conf, ca_config.configfile, &errorline) <= 0) { | 720 | if (NCONF_load(conf, cfg.configfile, &errorline) <= 0) { |
| 721 | if (errorline <= 0) | 721 | if (errorline <= 0) |
| 722 | BIO_printf(bio_err, | 722 | BIO_printf(bio_err, |
| 723 | "error loading the config file '%s'\n", | 723 | "error loading the config file '%s'\n", |
| 724 | ca_config.configfile); | 724 | cfg.configfile); |
| 725 | else | 725 | else |
| 726 | BIO_printf(bio_err, | 726 | BIO_printf(bio_err, |
| 727 | "error on line %ld of config file '%s'\n", | 727 | "error on line %ld of config file '%s'\n", |
| 728 | errorline, ca_config.configfile); | 728 | errorline, cfg.configfile); |
| 729 | goto err; | 729 | goto err; |
| 730 | } | 730 | } |
| 731 | free(tofree); | 731 | free(tofree); |
| 732 | tofree = NULL; | 732 | tofree = NULL; |
| 733 | 733 | ||
| 734 | /* Lets get the config section we are using */ | 734 | /* Lets get the config section we are using */ |
| 735 | if (ca_config.section == NULL) { | 735 | if (cfg.section == NULL) { |
| 736 | ca_config.section = NCONF_get_string(conf, BASE_SECTION, | 736 | cfg.section = NCONF_get_string(conf, BASE_SECTION, |
| 737 | ENV_DEFAULT_CA); | 737 | ENV_DEFAULT_CA); |
| 738 | if (ca_config.section == NULL) { | 738 | if (cfg.section == NULL) { |
| 739 | lookup_fail(BASE_SECTION, ENV_DEFAULT_CA); | 739 | lookup_fail(BASE_SECTION, ENV_DEFAULT_CA); |
| 740 | goto err; | 740 | goto err; |
| 741 | } | 741 | } |
| @@ -765,7 +765,7 @@ ca_main(int argc, char **argv) | |||
| 765 | goto err; | 765 | goto err; |
| 766 | } | 766 | } |
| 767 | } | 767 | } |
| 768 | f = NCONF_get_string(conf, ca_config.section, STRING_MASK); | 768 | f = NCONF_get_string(conf, cfg.section, STRING_MASK); |
| 769 | if (f == NULL) | 769 | if (f == NULL) |
| 770 | ERR_clear_error(); | 770 | ERR_clear_error(); |
| 771 | 771 | ||
| @@ -774,15 +774,15 @@ ca_main(int argc, char **argv) | |||
| 774 | "Invalid global string mask setting %s\n", f); | 774 | "Invalid global string mask setting %s\n", f); |
| 775 | goto err; | 775 | goto err; |
| 776 | } | 776 | } |
| 777 | if (ca_config.chtype != MBSTRING_UTF8) { | 777 | if (cfg.chtype != MBSTRING_UTF8) { |
| 778 | f = NCONF_get_string(conf, ca_config.section, UTF8_IN); | 778 | f = NCONF_get_string(conf, cfg.section, UTF8_IN); |
| 779 | if (f == NULL) | 779 | if (f == NULL) |
| 780 | ERR_clear_error(); | 780 | ERR_clear_error(); |
| 781 | else if (strcmp(f, "yes") == 0) | 781 | else if (strcmp(f, "yes") == 0) |
| 782 | ca_config.chtype = MBSTRING_UTF8; | 782 | cfg.chtype = MBSTRING_UTF8; |
| 783 | } | 783 | } |
| 784 | db_attr.unique_subject = 1; | 784 | db_attr.unique_subject = 1; |
| 785 | p = NCONF_get_string(conf, ca_config.section, ENV_UNIQUE_SUBJECT); | 785 | p = NCONF_get_string(conf, cfg.section, ENV_UNIQUE_SUBJECT); |
| 786 | if (p != NULL) { | 786 | if (p != NULL) { |
| 787 | db_attr.unique_subject = parse_yesno(p, 1); | 787 | db_attr.unique_subject = parse_yesno(p, 1); |
| 788 | } else | 788 | } else |
| @@ -798,10 +798,10 @@ ca_main(int argc, char **argv) | |||
| 798 | } | 798 | } |
| 799 | /*****************************************************************/ | 799 | /*****************************************************************/ |
| 800 | /* report status of cert with serial number given on command line */ | 800 | /* report status of cert with serial number given on command line */ |
| 801 | if (ca_config.serial_status) { | 801 | if (cfg.serial_status) { |
| 802 | if ((dbfile = NCONF_get_string(conf, ca_config.section, | 802 | if ((dbfile = NCONF_get_string(conf, cfg.section, |
| 803 | ENV_DATABASE)) == NULL) { | 803 | ENV_DATABASE)) == NULL) { |
| 804 | lookup_fail(ca_config.section, ENV_DATABASE); | 804 | lookup_fail(cfg.section, ENV_DATABASE); |
| 805 | goto err; | 805 | goto err; |
| 806 | } | 806 | } |
| 807 | db = load_index(dbfile, &db_attr); | 807 | db = load_index(dbfile, &db_attr); |
| @@ -811,47 +811,47 @@ ca_main(int argc, char **argv) | |||
| 811 | if (!index_index(db)) | 811 | if (!index_index(db)) |
| 812 | goto err; | 812 | goto err; |
| 813 | 813 | ||
| 814 | if (get_certificate_status(ca_config.serial_status, db) != 1) | 814 | if (get_certificate_status(cfg.serial_status, db) != 1) |
| 815 | BIO_printf(bio_err, "Error verifying serial %s!\n", | 815 | BIO_printf(bio_err, "Error verifying serial %s!\n", |
| 816 | ca_config.serial_status); | 816 | cfg.serial_status); |
| 817 | goto err; | 817 | goto err; |
| 818 | } | 818 | } |
| 819 | /*****************************************************************/ | 819 | /*****************************************************************/ |
| 820 | /* we definitely need a private key, so let's get it */ | 820 | /* we definitely need a private key, so let's get it */ |
| 821 | 821 | ||
| 822 | if ((ca_config.keyfile == NULL) && | 822 | if ((cfg.keyfile == NULL) && |
| 823 | ((ca_config.keyfile = NCONF_get_string(conf, ca_config.section, | 823 | ((cfg.keyfile = NCONF_get_string(conf, cfg.section, |
| 824 | ENV_PRIVATE_KEY)) == NULL)) { | 824 | ENV_PRIVATE_KEY)) == NULL)) { |
| 825 | lookup_fail(ca_config.section, ENV_PRIVATE_KEY); | 825 | lookup_fail(cfg.section, ENV_PRIVATE_KEY); |
| 826 | goto err; | 826 | goto err; |
| 827 | } | 827 | } |
| 828 | if (ca_config.key == NULL) { | 828 | if (cfg.key == NULL) { |
| 829 | free_key = 1; | 829 | free_key = 1; |
| 830 | if (!app_passwd(bio_err, ca_config.passargin, NULL, | 830 | if (!app_passwd(bio_err, cfg.passargin, NULL, |
| 831 | &ca_config.key, NULL)) { | 831 | &cfg.key, NULL)) { |
| 832 | BIO_printf(bio_err, "Error getting password\n"); | 832 | BIO_printf(bio_err, "Error getting password\n"); |
| 833 | goto err; | 833 | goto err; |
| 834 | } | 834 | } |
| 835 | } | 835 | } |
| 836 | pkey = load_key(bio_err, ca_config.keyfile, ca_config.keyform, 0, | 836 | pkey = load_key(bio_err, cfg.keyfile, cfg.keyform, 0, |
| 837 | ca_config.key, "CA private key"); | 837 | cfg.key, "CA private key"); |
| 838 | if (ca_config.key != NULL) | 838 | if (cfg.key != NULL) |
| 839 | explicit_bzero(ca_config.key, strlen(ca_config.key)); | 839 | explicit_bzero(cfg.key, strlen(cfg.key)); |
| 840 | if (pkey == NULL) { | 840 | if (pkey == NULL) { |
| 841 | /* load_key() has already printed an appropriate message */ | 841 | /* load_key() has already printed an appropriate message */ |
| 842 | goto err; | 842 | goto err; |
| 843 | } | 843 | } |
| 844 | /*****************************************************************/ | 844 | /*****************************************************************/ |
| 845 | /* we need a certificate */ | 845 | /* we need a certificate */ |
| 846 | if (!ca_config.selfsign || ca_config.spkac_file != NULL || | 846 | if (!cfg.selfsign || cfg.spkac_file != NULL || |
| 847 | ca_config.ss_cert_file != NULL || ca_config.gencrl) { | 847 | cfg.ss_cert_file != NULL || cfg.gencrl) { |
| 848 | if ((ca_config.certfile == NULL) && | 848 | if ((cfg.certfile == NULL) && |
| 849 | ((ca_config.certfile = NCONF_get_string(conf, | 849 | ((cfg.certfile = NCONF_get_string(conf, |
| 850 | ca_config.section, ENV_CERTIFICATE)) == NULL)) { | 850 | cfg.section, ENV_CERTIFICATE)) == NULL)) { |
| 851 | lookup_fail(ca_config.section, ENV_CERTIFICATE); | 851 | lookup_fail(cfg.section, ENV_CERTIFICATE); |
| 852 | goto err; | 852 | goto err; |
| 853 | } | 853 | } |
| 854 | x509 = load_cert(bio_err, ca_config.certfile, FORMAT_PEM, NULL, | 854 | x509 = load_cert(bio_err, cfg.certfile, FORMAT_PEM, NULL, |
| 855 | "CA certificate"); | 855 | "CA certificate"); |
| 856 | if (x509 == NULL) | 856 | if (x509 == NULL) |
| 857 | goto err; | 857 | goto err; |
| @@ -862,21 +862,21 @@ ca_main(int argc, char **argv) | |||
| 862 | goto err; | 862 | goto err; |
| 863 | } | 863 | } |
| 864 | } | 864 | } |
| 865 | if (!ca_config.selfsign) | 865 | if (!cfg.selfsign) |
| 866 | x509p = x509; | 866 | x509p = x509; |
| 867 | 867 | ||
| 868 | f = NCONF_get_string(conf, BASE_SECTION, ENV_PRESERVE); | 868 | f = NCONF_get_string(conf, BASE_SECTION, ENV_PRESERVE); |
| 869 | if (f == NULL) | 869 | if (f == NULL) |
| 870 | ERR_clear_error(); | 870 | ERR_clear_error(); |
| 871 | if ((f != NULL) && ((*f == 'y') || (*f == 'Y'))) | 871 | if ((f != NULL) && ((*f == 'y') || (*f == 'Y'))) |
| 872 | ca_config.preserve = 1; | 872 | cfg.preserve = 1; |
| 873 | f = NCONF_get_string(conf, BASE_SECTION, ENV_MSIE_HACK); | 873 | f = NCONF_get_string(conf, BASE_SECTION, ENV_MSIE_HACK); |
| 874 | if (f == NULL) | 874 | if (f == NULL) |
| 875 | ERR_clear_error(); | 875 | ERR_clear_error(); |
| 876 | if ((f != NULL) && ((*f == 'y') || (*f == 'Y'))) | 876 | if ((f != NULL) && ((*f == 'y') || (*f == 'Y'))) |
| 877 | ca_config.msie_hack = 1; | 877 | cfg.msie_hack = 1; |
| 878 | 878 | ||
| 879 | f = NCONF_get_string(conf, ca_config.section, ENV_NAMEOPT); | 879 | f = NCONF_get_string(conf, cfg.section, ENV_NAMEOPT); |
| 880 | 880 | ||
| 881 | if (f != NULL) { | 881 | if (f != NULL) { |
| 882 | if (!set_name_ex(&nameopt, f)) { | 882 | if (!set_name_ex(&nameopt, f)) { |
| @@ -888,7 +888,7 @@ ca_main(int argc, char **argv) | |||
| 888 | } else | 888 | } else |
| 889 | ERR_clear_error(); | 889 | ERR_clear_error(); |
| 890 | 890 | ||
| 891 | f = NCONF_get_string(conf, ca_config.section, ENV_CERTOPT); | 891 | f = NCONF_get_string(conf, cfg.section, ENV_CERTOPT); |
| 892 | 892 | ||
| 893 | if (f != NULL) { | 893 | if (f != NULL) { |
| 894 | if (!set_cert_ex(&certopt, f)) { | 894 | if (!set_cert_ex(&certopt, f)) { |
| @@ -900,7 +900,7 @@ ca_main(int argc, char **argv) | |||
| 900 | } else | 900 | } else |
| 901 | ERR_clear_error(); | 901 | ERR_clear_error(); |
| 902 | 902 | ||
| 903 | f = NCONF_get_string(conf, ca_config.section, ENV_EXTCOPY); | 903 | f = NCONF_get_string(conf, cfg.section, ENV_EXTCOPY); |
| 904 | 904 | ||
| 905 | if (f != NULL) { | 905 | if (f != NULL) { |
| 906 | if (!set_ext_copy(&ext_copy, f)) { | 906 | if (!set_ext_copy(&ext_copy, f)) { |
| @@ -913,9 +913,9 @@ ca_main(int argc, char **argv) | |||
| 913 | 913 | ||
| 914 | /*****************************************************************/ | 914 | /*****************************************************************/ |
| 915 | /* lookup where to write new certificates */ | 915 | /* lookup where to write new certificates */ |
| 916 | if (ca_config.outdir == NULL && ca_config.req) { | 916 | if (cfg.outdir == NULL && cfg.req) { |
| 917 | if ((ca_config.outdir = NCONF_get_string(conf, | 917 | if ((cfg.outdir = NCONF_get_string(conf, |
| 918 | ca_config.section, ENV_NEW_CERTS_DIR)) == NULL) { | 918 | cfg.section, ENV_NEW_CERTS_DIR)) == NULL) { |
| 919 | BIO_printf(bio_err, "output directory %s not defined\n", | 919 | BIO_printf(bio_err, "output directory %s not defined\n", |
| 920 | ENV_NEW_CERTS_DIR); | 920 | ENV_NEW_CERTS_DIR); |
| 921 | goto err; | 921 | goto err; |
| @@ -923,9 +923,9 @@ ca_main(int argc, char **argv) | |||
| 923 | } | 923 | } |
| 924 | /*****************************************************************/ | 924 | /*****************************************************************/ |
| 925 | /* we need to load the database file */ | 925 | /* we need to load the database file */ |
| 926 | if ((dbfile = NCONF_get_string(conf, ca_config.section, | 926 | if ((dbfile = NCONF_get_string(conf, cfg.section, |
| 927 | ENV_DATABASE)) == NULL) { | 927 | ENV_DATABASE)) == NULL) { |
| 928 | lookup_fail(ca_config.section, ENV_DATABASE); | 928 | lookup_fail(cfg.section, ENV_DATABASE); |
| 929 | goto err; | 929 | goto err; |
| 930 | } | 930 | } |
| 931 | db = load_index(dbfile, &db_attr); | 931 | db = load_index(dbfile, &db_attr); |
| @@ -976,7 +976,7 @@ ca_main(int argc, char **argv) | |||
| 976 | p++; | 976 | p++; |
| 977 | } | 977 | } |
| 978 | } | 978 | } |
| 979 | if (ca_config.verbose) { | 979 | if (cfg.verbose) { |
| 980 | BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); | 980 | BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); |
| 981 | TXT_DB_write(out, db->db); | 981 | TXT_DB_write(out, db->db); |
| 982 | BIO_printf(bio_err, "%d entries loaded from the database\n", | 982 | BIO_printf(bio_err, "%d entries loaded from the database\n", |
| @@ -988,8 +988,8 @@ ca_main(int argc, char **argv) | |||
| 988 | 988 | ||
| 989 | /*****************************************************************/ | 989 | /*****************************************************************/ |
| 990 | /* Update the db file for expired certificates */ | 990 | /* Update the db file for expired certificates */ |
| 991 | if (ca_config.doupdatedb) { | 991 | if (cfg.doupdatedb) { |
| 992 | if (ca_config.verbose) | 992 | if (cfg.verbose) |
| 993 | BIO_printf(bio_err, "Updating %s ...\n", dbfile); | 993 | BIO_printf(bio_err, "Updating %s ...\n", dbfile); |
| 994 | 994 | ||
| 995 | i = do_updatedb(db); | 995 | i = do_updatedb(db); |
| @@ -997,7 +997,7 @@ ca_main(int argc, char **argv) | |||
| 997 | BIO_printf(bio_err, "Malloc failure\n"); | 997 | BIO_printf(bio_err, "Malloc failure\n"); |
| 998 | goto err; | 998 | goto err; |
| 999 | } else if (i == 0) { | 999 | } else if (i == 0) { |
| 1000 | if (ca_config.verbose) | 1000 | if (cfg.verbose) |
| 1001 | BIO_printf(bio_err, | 1001 | BIO_printf(bio_err, |
| 1002 | "No entries found to mark expired\n"); | 1002 | "No entries found to mark expired\n"); |
| 1003 | } else { | 1003 | } else { |
| @@ -1007,92 +1007,92 @@ ca_main(int argc, char **argv) | |||
| 1007 | if (!rotate_index(dbfile, "new", "old")) | 1007 | if (!rotate_index(dbfile, "new", "old")) |
| 1008 | goto err; | 1008 | goto err; |
| 1009 | 1009 | ||
| 1010 | if (ca_config.verbose) | 1010 | if (cfg.verbose) |
| 1011 | BIO_printf(bio_err, | 1011 | BIO_printf(bio_err, |
| 1012 | "Done. %d entries marked as expired\n", i); | 1012 | "Done. %d entries marked as expired\n", i); |
| 1013 | } | 1013 | } |
| 1014 | } | 1014 | } |
| 1015 | /*****************************************************************/ | 1015 | /*****************************************************************/ |
| 1016 | /* Read extentions config file */ | 1016 | /* Read extentions config file */ |
| 1017 | if (ca_config.extfile != NULL) { | 1017 | if (cfg.extfile != NULL) { |
| 1018 | extconf = NCONF_new(NULL); | 1018 | extconf = NCONF_new(NULL); |
| 1019 | if (NCONF_load(extconf, ca_config.extfile, &errorline) <= 0) { | 1019 | if (NCONF_load(extconf, cfg.extfile, &errorline) <= 0) { |
| 1020 | if (errorline <= 0) | 1020 | if (errorline <= 0) |
| 1021 | BIO_printf(bio_err, | 1021 | BIO_printf(bio_err, |
| 1022 | "ERROR: loading the config file '%s'\n", | 1022 | "ERROR: loading the config file '%s'\n", |
| 1023 | ca_config.extfile); | 1023 | cfg.extfile); |
| 1024 | else | 1024 | else |
| 1025 | BIO_printf(bio_err, | 1025 | BIO_printf(bio_err, |
| 1026 | "ERROR: on line %ld of config file '%s'\n", | 1026 | "ERROR: on line %ld of config file '%s'\n", |
| 1027 | errorline, ca_config.extfile); | 1027 | errorline, cfg.extfile); |
| 1028 | ret = 1; | 1028 | ret = 1; |
| 1029 | goto err; | 1029 | goto err; |
| 1030 | } | 1030 | } |
| 1031 | if (ca_config.verbose) | 1031 | if (cfg.verbose) |
| 1032 | BIO_printf(bio_err, | 1032 | BIO_printf(bio_err, |
| 1033 | "Successfully loaded extensions file %s\n", | 1033 | "Successfully loaded extensions file %s\n", |
| 1034 | ca_config.extfile); | 1034 | cfg.extfile); |
| 1035 | 1035 | ||
| 1036 | /* We can have sections in the ext file */ | 1036 | /* We can have sections in the ext file */ |
| 1037 | if (ca_config.extensions == NULL && | 1037 | if (cfg.extensions == NULL && |
| 1038 | (ca_config.extensions = NCONF_get_string(extconf, "default", | 1038 | (cfg.extensions = NCONF_get_string(extconf, "default", |
| 1039 | "extensions")) == NULL) | 1039 | "extensions")) == NULL) |
| 1040 | ca_config.extensions = "default"; | 1040 | cfg.extensions = "default"; |
| 1041 | } | 1041 | } |
| 1042 | /*****************************************************************/ | 1042 | /*****************************************************************/ |
| 1043 | if (ca_config.req || ca_config.gencrl) { | 1043 | if (cfg.req || cfg.gencrl) { |
| 1044 | if (ca_config.outfile != NULL) { | 1044 | if (cfg.outfile != NULL) { |
| 1045 | if (BIO_write_filename(Sout, ca_config.outfile) <= 0) { | 1045 | if (BIO_write_filename(Sout, cfg.outfile) <= 0) { |
| 1046 | perror(ca_config.outfile); | 1046 | perror(cfg.outfile); |
| 1047 | goto err; | 1047 | goto err; |
| 1048 | } | 1048 | } |
| 1049 | } else { | 1049 | } else { |
| 1050 | BIO_set_fp(Sout, stdout, BIO_NOCLOSE | BIO_FP_TEXT); | 1050 | BIO_set_fp(Sout, stdout, BIO_NOCLOSE | BIO_FP_TEXT); |
| 1051 | } | 1051 | } |
| 1052 | } | 1052 | } |
| 1053 | if ((ca_config.md == NULL) && | 1053 | if ((cfg.md == NULL) && |
| 1054 | ((ca_config.md = NCONF_get_string(conf, ca_config.section, | 1054 | ((cfg.md = NCONF_get_string(conf, cfg.section, |
| 1055 | ENV_DEFAULT_MD)) == NULL)) { | 1055 | ENV_DEFAULT_MD)) == NULL)) { |
| 1056 | lookup_fail(ca_config.section, ENV_DEFAULT_MD); | 1056 | lookup_fail(cfg.section, ENV_DEFAULT_MD); |
| 1057 | goto err; | 1057 | goto err; |
| 1058 | } | 1058 | } |
| 1059 | if (strcmp(ca_config.md, "default") == 0) { | 1059 | if (strcmp(cfg.md, "default") == 0) { |
| 1060 | int def_nid; | 1060 | int def_nid; |
| 1061 | if (EVP_PKEY_get_default_digest_nid(pkey, &def_nid) <= 0) { | 1061 | if (EVP_PKEY_get_default_digest_nid(pkey, &def_nid) <= 0) { |
| 1062 | BIO_puts(bio_err, "no default digest\n"); | 1062 | BIO_puts(bio_err, "no default digest\n"); |
| 1063 | goto err; | 1063 | goto err; |
| 1064 | } | 1064 | } |
| 1065 | ca_config.md = (char *) OBJ_nid2sn(def_nid); | 1065 | cfg.md = (char *) OBJ_nid2sn(def_nid); |
| 1066 | if (ca_config.md == NULL) | 1066 | if (cfg.md == NULL) |
| 1067 | goto err; | 1067 | goto err; |
| 1068 | } | 1068 | } |
| 1069 | if ((dgst = EVP_get_digestbyname(ca_config.md)) == NULL) { | 1069 | if ((dgst = EVP_get_digestbyname(cfg.md)) == NULL) { |
| 1070 | BIO_printf(bio_err, | 1070 | BIO_printf(bio_err, |
| 1071 | "%s is an unsupported message digest type\n", ca_config.md); | 1071 | "%s is an unsupported message digest type\n", cfg.md); |
| 1072 | goto err; | 1072 | goto err; |
| 1073 | } | 1073 | } |
| 1074 | if (ca_config.req) { | 1074 | if (cfg.req) { |
| 1075 | if ((ca_config.email_dn == 1) && | 1075 | if ((cfg.email_dn == 1) && |
| 1076 | ((tmp_email_dn = NCONF_get_string(conf, ca_config.section, | 1076 | ((tmp_email_dn = NCONF_get_string(conf, cfg.section, |
| 1077 | ENV_DEFAULT_EMAIL_DN)) != NULL)) { | 1077 | ENV_DEFAULT_EMAIL_DN)) != NULL)) { |
| 1078 | if (strcmp(tmp_email_dn, "no") == 0) | 1078 | if (strcmp(tmp_email_dn, "no") == 0) |
| 1079 | ca_config.email_dn = 0; | 1079 | cfg.email_dn = 0; |
| 1080 | } | 1080 | } |
| 1081 | if (ca_config.verbose) | 1081 | if (cfg.verbose) |
| 1082 | BIO_printf(bio_err, "message digest is %s\n", | 1082 | BIO_printf(bio_err, "message digest is %s\n", |
| 1083 | OBJ_nid2ln(EVP_MD_type(dgst))); | 1083 | OBJ_nid2ln(EVP_MD_type(dgst))); |
| 1084 | if ((ca_config.policy == NULL) && | 1084 | if ((cfg.policy == NULL) && |
| 1085 | ((ca_config.policy = NCONF_get_string(conf, | 1085 | ((cfg.policy = NCONF_get_string(conf, |
| 1086 | ca_config.section, ENV_POLICY)) == NULL)) { | 1086 | cfg.section, ENV_POLICY)) == NULL)) { |
| 1087 | lookup_fail(ca_config.section, ENV_POLICY); | 1087 | lookup_fail(cfg.section, ENV_POLICY); |
| 1088 | goto err; | 1088 | goto err; |
| 1089 | } | 1089 | } |
| 1090 | if (ca_config.verbose) | 1090 | if (cfg.verbose) |
| 1091 | BIO_printf(bio_err, "policy is %s\n", ca_config.policy); | 1091 | BIO_printf(bio_err, "policy is %s\n", cfg.policy); |
| 1092 | 1092 | ||
| 1093 | if ((serialfile = NCONF_get_string(conf, ca_config.section, | 1093 | if ((serialfile = NCONF_get_string(conf, cfg.section, |
| 1094 | ENV_SERIAL)) == NULL) { | 1094 | ENV_SERIAL)) == NULL) { |
| 1095 | lookup_fail(ca_config.section, ENV_SERIAL); | 1095 | lookup_fail(cfg.section, ENV_SERIAL); |
| 1096 | goto err; | 1096 | goto err; |
| 1097 | } | 1097 | } |
| 1098 | if (extconf == NULL) { | 1098 | if (extconf == NULL) { |
| @@ -1100,59 +1100,59 @@ ca_main(int argc, char **argv) | |||
| 1100 | * no '-extfile' option, so we look for extensions in | 1100 | * no '-extfile' option, so we look for extensions in |
| 1101 | * the main configuration file | 1101 | * the main configuration file |
| 1102 | */ | 1102 | */ |
| 1103 | if (ca_config.extensions == NULL) { | 1103 | if (cfg.extensions == NULL) { |
| 1104 | ca_config.extensions = NCONF_get_string(conf, | 1104 | cfg.extensions = NCONF_get_string(conf, |
| 1105 | ca_config.section, ENV_EXTENSIONS); | 1105 | cfg.section, ENV_EXTENSIONS); |
| 1106 | if (ca_config.extensions == NULL) | 1106 | if (cfg.extensions == NULL) |
| 1107 | ERR_clear_error(); | 1107 | ERR_clear_error(); |
| 1108 | } | 1108 | } |
| 1109 | if (ca_config.extensions != NULL) { | 1109 | if (cfg.extensions != NULL) { |
| 1110 | /* Check syntax of file */ | 1110 | /* Check syntax of file */ |
| 1111 | X509V3_CTX ctx; | 1111 | X509V3_CTX ctx; |
| 1112 | X509V3_set_ctx_test(&ctx); | 1112 | X509V3_set_ctx_test(&ctx); |
| 1113 | X509V3_set_nconf(&ctx, conf); | 1113 | X509V3_set_nconf(&ctx, conf); |
| 1114 | if (!X509V3_EXT_add_nconf(conf, &ctx, | 1114 | if (!X509V3_EXT_add_nconf(conf, &ctx, |
| 1115 | ca_config.extensions, NULL)) { | 1115 | cfg.extensions, NULL)) { |
| 1116 | BIO_printf(bio_err, | 1116 | BIO_printf(bio_err, |
| 1117 | "Error Loading extension section %s\n", | 1117 | "Error Loading extension section %s\n", |
| 1118 | ca_config.extensions); | 1118 | cfg.extensions); |
| 1119 | ret = 1; | 1119 | ret = 1; |
| 1120 | goto err; | 1120 | goto err; |
| 1121 | } | 1121 | } |
| 1122 | } | 1122 | } |
| 1123 | } | 1123 | } |
| 1124 | if (ca_config.startdate == NULL) { | 1124 | if (cfg.startdate == NULL) { |
| 1125 | ca_config.startdate = NCONF_get_string(conf, | 1125 | cfg.startdate = NCONF_get_string(conf, |
| 1126 | ca_config.section, ENV_DEFAULT_STARTDATE); | 1126 | cfg.section, ENV_DEFAULT_STARTDATE); |
| 1127 | if (ca_config.startdate == NULL) | 1127 | if (cfg.startdate == NULL) |
| 1128 | ERR_clear_error(); | 1128 | ERR_clear_error(); |
| 1129 | } | 1129 | } |
| 1130 | if (ca_config.startdate == NULL) | 1130 | if (cfg.startdate == NULL) |
| 1131 | ca_config.startdate = "today"; | 1131 | cfg.startdate = "today"; |
| 1132 | 1132 | ||
| 1133 | if (ca_config.enddate == NULL) { | 1133 | if (cfg.enddate == NULL) { |
| 1134 | ca_config.enddate = NCONF_get_string(conf, | 1134 | cfg.enddate = NCONF_get_string(conf, |
| 1135 | ca_config.section, ENV_DEFAULT_ENDDATE); | 1135 | cfg.section, ENV_DEFAULT_ENDDATE); |
| 1136 | if (ca_config.enddate == NULL) | 1136 | if (cfg.enddate == NULL) |
| 1137 | ERR_clear_error(); | 1137 | ERR_clear_error(); |
| 1138 | } | 1138 | } |
| 1139 | if (ca_config.days == 0 && ca_config.enddate == NULL) { | 1139 | if (cfg.days == 0 && cfg.enddate == NULL) { |
| 1140 | if (!NCONF_get_number(conf, ca_config.section, | 1140 | if (!NCONF_get_number(conf, cfg.section, |
| 1141 | ENV_DEFAULT_DAYS, &ca_config.days)) | 1141 | ENV_DEFAULT_DAYS, &cfg.days)) |
| 1142 | ca_config.days = 0; | 1142 | cfg.days = 0; |
| 1143 | } | 1143 | } |
| 1144 | if (ca_config.enddate == NULL && ca_config.days == 0) { | 1144 | if (cfg.enddate == NULL && cfg.days == 0) { |
| 1145 | BIO_printf(bio_err, | 1145 | BIO_printf(bio_err, |
| 1146 | "cannot lookup how many days to certify for\n"); | 1146 | "cannot lookup how many days to certify for\n"); |
| 1147 | goto err; | 1147 | goto err; |
| 1148 | } | 1148 | } |
| 1149 | if ((serial = load_serial(serialfile, ca_config.create_serial, | 1149 | if ((serial = load_serial(serialfile, cfg.create_serial, |
| 1150 | NULL)) == NULL) { | 1150 | NULL)) == NULL) { |
| 1151 | BIO_printf(bio_err, | 1151 | BIO_printf(bio_err, |
| 1152 | "error while loading serial number\n"); | 1152 | "error while loading serial number\n"); |
| 1153 | goto err; | 1153 | goto err; |
| 1154 | } | 1154 | } |
| 1155 | if (ca_config.verbose) { | 1155 | if (cfg.verbose) { |
| 1156 | if (BN_is_zero(serial)) | 1156 | if (BN_is_zero(serial)) |
| 1157 | BIO_printf(bio_err, | 1157 | BIO_printf(bio_err, |
| 1158 | "next serial number is 00\n"); | 1158 | "next serial number is 00\n"); |
| @@ -1164,25 +1164,25 @@ ca_main(int argc, char **argv) | |||
| 1164 | free(f); | 1164 | free(f); |
| 1165 | } | 1165 | } |
| 1166 | } | 1166 | } |
| 1167 | if ((attribs = NCONF_get_section(conf, ca_config.policy)) == | 1167 | if ((attribs = NCONF_get_section(conf, cfg.policy)) == |
| 1168 | NULL) { | 1168 | NULL) { |
| 1169 | BIO_printf(bio_err, "unable to find 'section' for %s\n", | 1169 | BIO_printf(bio_err, "unable to find 'section' for %s\n", |
| 1170 | ca_config.policy); | 1170 | cfg.policy); |
| 1171 | goto err; | 1171 | goto err; |
| 1172 | } | 1172 | } |
| 1173 | if ((cert_sk = sk_X509_new_null()) == NULL) { | 1173 | if ((cert_sk = sk_X509_new_null()) == NULL) { |
| 1174 | BIO_printf(bio_err, "Memory allocation failure\n"); | 1174 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 1175 | goto err; | 1175 | goto err; |
| 1176 | } | 1176 | } |
| 1177 | if (ca_config.spkac_file != NULL) { | 1177 | if (cfg.spkac_file != NULL) { |
| 1178 | total++; | 1178 | total++; |
| 1179 | j = certify_spkac(&x, ca_config.spkac_file, pkey, x509, | 1179 | j = certify_spkac(&x, cfg.spkac_file, pkey, x509, |
| 1180 | dgst, ca_config.sigopts, attribs, db, serial, | 1180 | dgst, cfg.sigopts, attribs, db, serial, |
| 1181 | ca_config.subj, ca_config.chtype, | 1181 | cfg.subj, cfg.chtype, |
| 1182 | ca_config.multirdn, ca_config.email_dn, | 1182 | cfg.multirdn, cfg.email_dn, |
| 1183 | ca_config.startdate, ca_config.enddate, | 1183 | cfg.startdate, cfg.enddate, |
| 1184 | ca_config.days, ca_config.extensions, conf, | 1184 | cfg.days, cfg.extensions, conf, |
| 1185 | ca_config.verbose, certopt, nameopt, default_op, | 1185 | cfg.verbose, certopt, nameopt, default_op, |
| 1186 | ext_copy); | 1186 | ext_copy); |
| 1187 | if (j < 0) | 1187 | if (j < 0) |
| 1188 | goto err; | 1188 | goto err; |
| @@ -1196,21 +1196,21 @@ ca_main(int argc, char **argv) | |||
| 1196 | "Memory allocation failure\n"); | 1196 | "Memory allocation failure\n"); |
| 1197 | goto err; | 1197 | goto err; |
| 1198 | } | 1198 | } |
| 1199 | if (ca_config.outfile != NULL) { | 1199 | if (cfg.outfile != NULL) { |
| 1200 | output_der = 1; | 1200 | output_der = 1; |
| 1201 | ca_config.batch = 1; | 1201 | cfg.batch = 1; |
| 1202 | } | 1202 | } |
| 1203 | } | 1203 | } |
| 1204 | } | 1204 | } |
| 1205 | if (ca_config.ss_cert_file != NULL) { | 1205 | if (cfg.ss_cert_file != NULL) { |
| 1206 | total++; | 1206 | total++; |
| 1207 | j = certify_cert(&x, ca_config.ss_cert_file, pkey, x509, | 1207 | j = certify_cert(&x, cfg.ss_cert_file, pkey, x509, |
| 1208 | dgst, ca_config.sigopts, attribs, db, serial, | 1208 | dgst, cfg.sigopts, attribs, db, serial, |
| 1209 | ca_config.subj, ca_config.chtype, | 1209 | cfg.subj, cfg.chtype, |
| 1210 | ca_config.multirdn, ca_config.email_dn, | 1210 | cfg.multirdn, cfg.email_dn, |
| 1211 | ca_config.startdate, ca_config.enddate, | 1211 | cfg.startdate, cfg.enddate, |
| 1212 | ca_config.days, ca_config.batch, | 1212 | cfg.days, cfg.batch, |
| 1213 | ca_config.extensions, conf, ca_config.verbose, | 1213 | cfg.extensions, conf, cfg.verbose, |
| 1214 | certopt, nameopt, default_op, ext_copy); | 1214 | certopt, nameopt, default_op, ext_copy); |
| 1215 | if (j < 0) | 1215 | if (j < 0) |
| 1216 | goto err; | 1216 | goto err; |
| @@ -1226,17 +1226,17 @@ ca_main(int argc, char **argv) | |||
| 1226 | } | 1226 | } |
| 1227 | } | 1227 | } |
| 1228 | } | 1228 | } |
| 1229 | if (ca_config.infile != NULL) { | 1229 | if (cfg.infile != NULL) { |
| 1230 | total++; | 1230 | total++; |
| 1231 | j = certify(&x, ca_config.infile, pkey, x509p, dgst, | 1231 | j = certify(&x, cfg.infile, pkey, x509p, dgst, |
| 1232 | ca_config.sigopts, attribs, db, serial, | 1232 | cfg.sigopts, attribs, db, serial, |
| 1233 | ca_config.subj, ca_config.chtype, | 1233 | cfg.subj, cfg.chtype, |
| 1234 | ca_config.multirdn, ca_config.email_dn, | 1234 | cfg.multirdn, cfg.email_dn, |
| 1235 | ca_config.startdate, ca_config.enddate, | 1235 | cfg.startdate, cfg.enddate, |
| 1236 | ca_config.days, ca_config.batch, | 1236 | cfg.days, cfg.batch, |
| 1237 | ca_config.extensions, conf, ca_config.verbose, | 1237 | cfg.extensions, conf, cfg.verbose, |
| 1238 | certopt, nameopt, default_op, ext_copy, | 1238 | certopt, nameopt, default_op, ext_copy, |
| 1239 | ca_config.selfsign); | 1239 | cfg.selfsign); |
| 1240 | if (j < 0) | 1240 | if (j < 0) |
| 1241 | goto err; | 1241 | goto err; |
| 1242 | if (j > 0) { | 1242 | if (j > 0) { |
| @@ -1251,17 +1251,17 @@ ca_main(int argc, char **argv) | |||
| 1251 | } | 1251 | } |
| 1252 | } | 1252 | } |
| 1253 | } | 1253 | } |
| 1254 | for (i = 0; i < ca_config.infiles_num; i++) { | 1254 | for (i = 0; i < cfg.infiles_num; i++) { |
| 1255 | total++; | 1255 | total++; |
| 1256 | j = certify(&x, ca_config.infiles[i], pkey, x509p, dgst, | 1256 | j = certify(&x, cfg.infiles[i], pkey, x509p, dgst, |
| 1257 | ca_config.sigopts, attribs, db, serial, | 1257 | cfg.sigopts, attribs, db, serial, |
| 1258 | ca_config.subj, ca_config.chtype, | 1258 | cfg.subj, cfg.chtype, |
| 1259 | ca_config.multirdn, ca_config.email_dn, | 1259 | cfg.multirdn, cfg.email_dn, |
| 1260 | ca_config.startdate, ca_config.enddate, | 1260 | cfg.startdate, cfg.enddate, |
| 1261 | ca_config.days, ca_config.batch, | 1261 | cfg.days, cfg.batch, |
| 1262 | ca_config.extensions, conf, ca_config.verbose, | 1262 | cfg.extensions, conf, cfg.verbose, |
| 1263 | certopt, nameopt, default_op, ext_copy, | 1263 | certopt, nameopt, default_op, ext_copy, |
| 1264 | ca_config.selfsign); | 1264 | cfg.selfsign); |
| 1265 | if (j < 0) | 1265 | if (j < 0) |
| 1266 | goto err; | 1266 | goto err; |
| 1267 | if (j > 0) { | 1267 | if (j > 0) { |
| @@ -1282,7 +1282,7 @@ ca_main(int argc, char **argv) | |||
| 1282 | */ | 1282 | */ |
| 1283 | 1283 | ||
| 1284 | if (sk_X509_num(cert_sk) > 0) { | 1284 | if (sk_X509_num(cert_sk) > 0) { |
| 1285 | if (!ca_config.batch) { | 1285 | if (!cfg.batch) { |
| 1286 | char answer[10]; | 1286 | char answer[10]; |
| 1287 | 1287 | ||
| 1288 | BIO_printf(bio_err, | 1288 | BIO_printf(bio_err, |
| @@ -1313,7 +1313,7 @@ ca_main(int argc, char **argv) | |||
| 1313 | if (!save_index(dbfile, "new", db)) | 1313 | if (!save_index(dbfile, "new", db)) |
| 1314 | goto err; | 1314 | goto err; |
| 1315 | } | 1315 | } |
| 1316 | if (ca_config.verbose) | 1316 | if (cfg.verbose) |
| 1317 | BIO_printf(bio_err, "writing new certificates\n"); | 1317 | BIO_printf(bio_err, "writing new certificates\n"); |
| 1318 | for (i = 0; i < sk_X509_num(cert_sk); i++) { | 1318 | for (i = 0; i < sk_X509_num(cert_sk); i++) { |
| 1319 | ASN1_INTEGER *serialNumber; | 1319 | ASN1_INTEGER *serialNumber; |
| @@ -1334,7 +1334,7 @@ ca_main(int argc, char **argv) | |||
| 1334 | serialstr = strdup("00"); | 1334 | serialstr = strdup("00"); |
| 1335 | if (serialstr != NULL) { | 1335 | if (serialstr != NULL) { |
| 1336 | k = snprintf(pempath, sizeof(pempath), | 1336 | k = snprintf(pempath, sizeof(pempath), |
| 1337 | "%s/%s.pem", ca_config.outdir, serialstr); | 1337 | "%s/%s.pem", cfg.outdir, serialstr); |
| 1338 | free(serialstr); | 1338 | free(serialstr); |
| 1339 | if (k < 0 || k >= sizeof(pempath)) { | 1339 | if (k < 0 || k >= sizeof(pempath)) { |
| 1340 | BIO_printf(bio_err, | 1340 | BIO_printf(bio_err, |
| @@ -1346,7 +1346,7 @@ ca_main(int argc, char **argv) | |||
| 1346 | "memory allocation failed\n"); | 1346 | "memory allocation failed\n"); |
| 1347 | goto err; | 1347 | goto err; |
| 1348 | } | 1348 | } |
| 1349 | if (ca_config.verbose) | 1349 | if (cfg.verbose) |
| 1350 | BIO_printf(bio_err, "writing %s\n", pempath); | 1350 | BIO_printf(bio_err, "writing %s\n", pempath); |
| 1351 | 1351 | ||
| 1352 | if (BIO_write_filename(Cout, pempath) <= 0) { | 1352 | if (BIO_write_filename(Cout, pempath) <= 0) { |
| @@ -1354,10 +1354,10 @@ ca_main(int argc, char **argv) | |||
| 1354 | goto err; | 1354 | goto err; |
| 1355 | } | 1355 | } |
| 1356 | if (!write_new_certificate(Cout, x, 0, | 1356 | if (!write_new_certificate(Cout, x, 0, |
| 1357 | ca_config.notext)) | 1357 | cfg.notext)) |
| 1358 | goto err; | 1358 | goto err; |
| 1359 | if (!write_new_certificate(Sout, x, output_der, | 1359 | if (!write_new_certificate(Sout, x, output_der, |
| 1360 | ca_config.notext)) | 1360 | cfg.notext)) |
| 1361 | goto err; | 1361 | goto err; |
| 1362 | } | 1362 | } |
| 1363 | 1363 | ||
| @@ -1373,29 +1373,29 @@ ca_main(int argc, char **argv) | |||
| 1373 | } | 1373 | } |
| 1374 | } | 1374 | } |
| 1375 | /*****************************************************************/ | 1375 | /*****************************************************************/ |
| 1376 | if (ca_config.gencrl) { | 1376 | if (cfg.gencrl) { |
| 1377 | int crl_v2 = 0; | 1377 | int crl_v2 = 0; |
| 1378 | if (ca_config.crl_ext == NULL) { | 1378 | if (cfg.crl_ext == NULL) { |
| 1379 | ca_config.crl_ext = NCONF_get_string(conf, | 1379 | cfg.crl_ext = NCONF_get_string(conf, |
| 1380 | ca_config.section, ENV_CRLEXT); | 1380 | cfg.section, ENV_CRLEXT); |
| 1381 | if (ca_config.crl_ext == NULL) | 1381 | if (cfg.crl_ext == NULL) |
| 1382 | ERR_clear_error(); | 1382 | ERR_clear_error(); |
| 1383 | } | 1383 | } |
| 1384 | if (ca_config.crl_ext != NULL) { | 1384 | if (cfg.crl_ext != NULL) { |
| 1385 | /* Check syntax of file */ | 1385 | /* Check syntax of file */ |
| 1386 | X509V3_CTX ctx; | 1386 | X509V3_CTX ctx; |
| 1387 | X509V3_set_ctx_test(&ctx); | 1387 | X509V3_set_ctx_test(&ctx); |
| 1388 | X509V3_set_nconf(&ctx, conf); | 1388 | X509V3_set_nconf(&ctx, conf); |
| 1389 | if (!X509V3_EXT_add_nconf(conf, &ctx, ca_config.crl_ext, | 1389 | if (!X509V3_EXT_add_nconf(conf, &ctx, cfg.crl_ext, |
| 1390 | NULL)) { | 1390 | NULL)) { |
| 1391 | BIO_printf(bio_err, | 1391 | BIO_printf(bio_err, |
| 1392 | "Error Loading CRL extension section %s\n", | 1392 | "Error Loading CRL extension section %s\n", |
| 1393 | ca_config.crl_ext); | 1393 | cfg.crl_ext); |
| 1394 | ret = 1; | 1394 | ret = 1; |
| 1395 | goto err; | 1395 | goto err; |
| 1396 | } | 1396 | } |
| 1397 | } | 1397 | } |
| 1398 | if ((crlnumberfile = NCONF_get_string(conf, ca_config.section, | 1398 | if ((crlnumberfile = NCONF_get_string(conf, cfg.section, |
| 1399 | ENV_CRLNUMBER)) != NULL) | 1399 | ENV_CRLNUMBER)) != NULL) |
| 1400 | if ((crlnumber = load_serial(crlnumberfile, 0, | 1400 | if ((crlnumber = load_serial(crlnumberfile, 0, |
| 1401 | NULL)) == NULL) { | 1401 | NULL)) == NULL) { |
| @@ -1403,23 +1403,23 @@ ca_main(int argc, char **argv) | |||
| 1403 | "error while loading CRL number\n"); | 1403 | "error while loading CRL number\n"); |
| 1404 | goto err; | 1404 | goto err; |
| 1405 | } | 1405 | } |
| 1406 | if (!ca_config.crldays && !ca_config.crlhours && | 1406 | if (!cfg.crldays && !cfg.crlhours && |
| 1407 | !ca_config.crlsec) { | 1407 | !cfg.crlsec) { |
| 1408 | if (!NCONF_get_number(conf, ca_config.section, | 1408 | if (!NCONF_get_number(conf, cfg.section, |
| 1409 | ENV_DEFAULT_CRL_DAYS, &ca_config.crldays)) | 1409 | ENV_DEFAULT_CRL_DAYS, &cfg.crldays)) |
| 1410 | ca_config.crldays = 0; | 1410 | cfg.crldays = 0; |
| 1411 | if (!NCONF_get_number(conf, ca_config.section, | 1411 | if (!NCONF_get_number(conf, cfg.section, |
| 1412 | ENV_DEFAULT_CRL_HOURS, &ca_config.crlhours)) | 1412 | ENV_DEFAULT_CRL_HOURS, &cfg.crlhours)) |
| 1413 | ca_config.crlhours = 0; | 1413 | cfg.crlhours = 0; |
| 1414 | ERR_clear_error(); | 1414 | ERR_clear_error(); |
| 1415 | } | 1415 | } |
| 1416 | if ((ca_config.crldays == 0) && (ca_config.crlhours == 0) && | 1416 | if ((cfg.crldays == 0) && (cfg.crlhours == 0) && |
| 1417 | (ca_config.crlsec == 0)) { | 1417 | (cfg.crlsec == 0)) { |
| 1418 | BIO_printf(bio_err, | 1418 | BIO_printf(bio_err, |
| 1419 | "cannot lookup how long until the next CRL is issued\n"); | 1419 | "cannot lookup how long until the next CRL is issued\n"); |
| 1420 | goto err; | 1420 | goto err; |
| 1421 | } | 1421 | } |
| 1422 | if (ca_config.verbose) | 1422 | if (cfg.verbose) |
| 1423 | BIO_printf(bio_err, "making CRL\n"); | 1423 | BIO_printf(bio_err, "making CRL\n"); |
| 1424 | if ((crl = X509_CRL_new()) == NULL) | 1424 | if ((crl = X509_CRL_new()) == NULL) |
| 1425 | goto err; | 1425 | goto err; |
| @@ -1430,8 +1430,8 @@ ca_main(int argc, char **argv) | |||
| 1430 | goto err; | 1430 | goto err; |
| 1431 | if (!X509_CRL_set_lastUpdate(crl, tmptm)) | 1431 | if (!X509_CRL_set_lastUpdate(crl, tmptm)) |
| 1432 | goto err; | 1432 | goto err; |
| 1433 | if (X509_time_adj_ex(tmptm, ca_config.crldays, | 1433 | if (X509_time_adj_ex(tmptm, cfg.crldays, |
| 1434 | ca_config.crlhours * 60 * 60 + ca_config.crlsec, NULL) == | 1434 | cfg.crlhours * 60 * 60 + cfg.crlsec, NULL) == |
| 1435 | NULL) { | 1435 | NULL) { |
| 1436 | BIO_puts(bio_err, "error setting CRL nextUpdate\n"); | 1436 | BIO_puts(bio_err, "error setting CRL nextUpdate\n"); |
| 1437 | goto err; | 1437 | goto err; |
| @@ -1475,19 +1475,19 @@ ca_main(int argc, char **argv) | |||
| 1475 | X509_CRL_sort(crl); | 1475 | X509_CRL_sort(crl); |
| 1476 | 1476 | ||
| 1477 | /* we now have a CRL */ | 1477 | /* we now have a CRL */ |
| 1478 | if (ca_config.verbose) | 1478 | if (cfg.verbose) |
| 1479 | BIO_printf(bio_err, "signing CRL\n"); | 1479 | BIO_printf(bio_err, "signing CRL\n"); |
| 1480 | 1480 | ||
| 1481 | /* Add any extensions asked for */ | 1481 | /* Add any extensions asked for */ |
| 1482 | 1482 | ||
| 1483 | if (ca_config.crl_ext != NULL || crlnumberfile != NULL) { | 1483 | if (cfg.crl_ext != NULL || crlnumberfile != NULL) { |
| 1484 | X509V3_CTX crlctx; | 1484 | X509V3_CTX crlctx; |
| 1485 | X509V3_set_ctx(&crlctx, x509, NULL, NULL, crl, 0); | 1485 | X509V3_set_ctx(&crlctx, x509, NULL, NULL, crl, 0); |
| 1486 | X509V3_set_nconf(&crlctx, conf); | 1486 | X509V3_set_nconf(&crlctx, conf); |
| 1487 | 1487 | ||
| 1488 | if (ca_config.crl_ext != NULL) | 1488 | if (cfg.crl_ext != NULL) |
| 1489 | if (!X509V3_EXT_CRL_add_nconf(conf, &crlctx, | 1489 | if (!X509V3_EXT_CRL_add_nconf(conf, &crlctx, |
| 1490 | ca_config.crl_ext, crl)) | 1490 | cfg.crl_ext, crl)) |
| 1491 | goto err; | 1491 | goto err; |
| 1492 | if (crlnumberfile != NULL) { | 1492 | if (crlnumberfile != NULL) { |
| 1493 | tmpserial = BN_to_ASN1_INTEGER(crlnumber, NULL); | 1493 | tmpserial = BN_to_ASN1_INTEGER(crlnumber, NULL); |
| @@ -1504,7 +1504,7 @@ ca_main(int argc, char **argv) | |||
| 1504 | goto err; | 1504 | goto err; |
| 1505 | } | 1505 | } |
| 1506 | } | 1506 | } |
| 1507 | if (ca_config.crl_ext != NULL || crl_v2) { | 1507 | if (cfg.crl_ext != NULL || crl_v2) { |
| 1508 | if (!X509_CRL_set_version(crl, 1)) | 1508 | if (!X509_CRL_set_version(crl, 1)) |
| 1509 | goto err; /* version 2 CRL */ | 1509 | goto err; /* version 2 CRL */ |
| 1510 | } | 1510 | } |
| @@ -1517,7 +1517,7 @@ ca_main(int argc, char **argv) | |||
| 1517 | crlnumber = NULL; | 1517 | crlnumber = NULL; |
| 1518 | 1518 | ||
| 1519 | if (!do_X509_CRL_sign(bio_err, crl, pkey, dgst, | 1519 | if (!do_X509_CRL_sign(bio_err, crl, pkey, dgst, |
| 1520 | ca_config.sigopts)) | 1520 | cfg.sigopts)) |
| 1521 | goto err; | 1521 | goto err; |
| 1522 | 1522 | ||
| 1523 | if (!PEM_write_bio_X509_CRL(Sout, crl)) | 1523 | if (!PEM_write_bio_X509_CRL(Sout, crl)) |
| @@ -1529,18 +1529,18 @@ ca_main(int argc, char **argv) | |||
| 1529 | 1529 | ||
| 1530 | } | 1530 | } |
| 1531 | /*****************************************************************/ | 1531 | /*****************************************************************/ |
| 1532 | if (ca_config.dorevoke) { | 1532 | if (cfg.dorevoke) { |
| 1533 | if (ca_config.infile == NULL) { | 1533 | if (cfg.infile == NULL) { |
| 1534 | BIO_printf(bio_err, "no input files\n"); | 1534 | BIO_printf(bio_err, "no input files\n"); |
| 1535 | goto err; | 1535 | goto err; |
| 1536 | } else { | 1536 | } else { |
| 1537 | X509 *revcert; | 1537 | X509 *revcert; |
| 1538 | revcert = load_cert(bio_err, ca_config.infile, | 1538 | revcert = load_cert(bio_err, cfg.infile, |
| 1539 | FORMAT_PEM, NULL, ca_config.infile); | 1539 | FORMAT_PEM, NULL, cfg.infile); |
| 1540 | if (revcert == NULL) | 1540 | if (revcert == NULL) |
| 1541 | goto err; | 1541 | goto err; |
| 1542 | j = do_revoke(revcert, db, ca_config.rev_type, | 1542 | j = do_revoke(revcert, db, cfg.rev_type, |
| 1543 | ca_config.rev_arg); | 1543 | cfg.rev_arg); |
| 1544 | if (j <= 0) | 1544 | if (j <= 0) |
| 1545 | goto err; | 1545 | goto err; |
| 1546 | X509_free(revcert); | 1546 | X509_free(revcert); |
| @@ -1570,11 +1570,11 @@ ca_main(int argc, char **argv) | |||
| 1570 | if (ret) | 1570 | if (ret) |
| 1571 | ERR_print_errors(bio_err); | 1571 | ERR_print_errors(bio_err); |
| 1572 | if (free_key) | 1572 | if (free_key) |
| 1573 | free(ca_config.key); | 1573 | free(cfg.key); |
| 1574 | BN_free(serial); | 1574 | BN_free(serial); |
| 1575 | BN_free(crlnumber); | 1575 | BN_free(crlnumber); |
| 1576 | free_index(db); | 1576 | free_index(db); |
| 1577 | sk_OPENSSL_STRING_free(ca_config.sigopts); | 1577 | sk_OPENSSL_STRING_free(cfg.sigopts); |
| 1578 | EVP_PKEY_free(pkey); | 1578 | EVP_PKEY_free(pkey); |
| 1579 | X509_free(x509); | 1579 | X509_free(x509); |
| 1580 | X509_CRL_free(crl); | 1580 | X509_CRL_free(crl); |
| @@ -1778,7 +1778,7 @@ do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | |||
| 1778 | if (obj == NULL) | 1778 | if (obj == NULL) |
| 1779 | goto err; | 1779 | goto err; |
| 1780 | 1780 | ||
| 1781 | if (ca_config.msie_hack) { | 1781 | if (cfg.msie_hack) { |
| 1782 | /* assume all type should be strings */ | 1782 | /* assume all type should be strings */ |
| 1783 | nid = OBJ_obj2nid(X509_NAME_ENTRY_get_object(ne)); | 1783 | nid = OBJ_obj2nid(X509_NAME_ENTRY_get_object(ne)); |
| 1784 | if (nid == NID_undef) | 1784 | if (nid == NID_undef) |
| @@ -1940,7 +1940,7 @@ do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | |||
| 1940 | } | 1940 | } |
| 1941 | } | 1941 | } |
| 1942 | 1942 | ||
| 1943 | if (ca_config.preserve) { | 1943 | if (cfg.preserve) { |
| 1944 | X509_NAME_free(subject); | 1944 | X509_NAME_free(subject); |
| 1945 | /* subject=X509_NAME_dup(X509_REQ_get_subject_name(req)); */ | 1945 | /* subject=X509_NAME_dup(X509_REQ_get_subject_name(req)); */ |
| 1946 | subject = X509_NAME_dup(name); | 1946 | subject = X509_NAME_dup(name); |
diff --git a/src/usr.bin/openssl/certhash.c b/src/usr.bin/openssl/certhash.c index 785f1216ad..5ee29b8d01 100644 --- a/src/usr.bin/openssl/certhash.c +++ b/src/usr.bin/openssl/certhash.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: certhash.c,v 1.20 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: certhash.c,v 1.21 2023/03/06 14:32:05 tb Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014, 2015 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014, 2015 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -36,20 +36,20 @@ | |||
| 36 | static struct { | 36 | static struct { |
| 37 | int dryrun; | 37 | int dryrun; |
| 38 | int verbose; | 38 | int verbose; |
| 39 | } certhash_config; | 39 | } cfg; |
| 40 | 40 | ||
| 41 | static const struct option certhash_options[] = { | 41 | static const struct option certhash_options[] = { |
| 42 | { | 42 | { |
| 43 | .name = "n", | 43 | .name = "n", |
| 44 | .desc = "Perform a dry-run - do not make any changes", | 44 | .desc = "Perform a dry-run - do not make any changes", |
| 45 | .type = OPTION_FLAG, | 45 | .type = OPTION_FLAG, |
| 46 | .opt.flag = &certhash_config.dryrun, | 46 | .opt.flag = &cfg.dryrun, |
| 47 | }, | 47 | }, |
| 48 | { | 48 | { |
| 49 | .name = "v", | 49 | .name = "v", |
| 50 | .desc = "Verbose", | 50 | .desc = "Verbose", |
| 51 | .type = OPTION_FLAG, | 51 | .type = OPTION_FLAG, |
| 52 | .opt.flag = &certhash_config.verbose, | 52 | .opt.flag = &cfg.verbose, |
| 53 | }, | 53 | }, |
| 54 | { NULL }, | 54 | { NULL }, |
| 55 | }; | 55 | }; |
| @@ -569,7 +569,7 @@ certhash_directory(const char *path) | |||
| 569 | goto err; | 569 | goto err; |
| 570 | } | 570 | } |
| 571 | 571 | ||
| 572 | if (certhash_config.verbose) | 572 | if (cfg.verbose) |
| 573 | fprintf(stdout, "scanning directory %s\n", path); | 573 | fprintf(stdout, "scanning directory %s\n", path); |
| 574 | 574 | ||
| 575 | /* Create lists of existing hash links, certs and CRLs. */ | 575 | /* Create lists of existing hash links, certs and CRLs. */ |
| @@ -594,11 +594,11 @@ certhash_directory(const char *path) | |||
| 594 | if (link->exists == 0 || | 594 | if (link->exists == 0 || |
| 595 | (link->reference != NULL && link->changed == 0)) | 595 | (link->reference != NULL && link->changed == 0)) |
| 596 | continue; | 596 | continue; |
| 597 | if (certhash_config.verbose) | 597 | if (cfg.verbose) |
| 598 | fprintf(stdout, "%s link %s -> %s\n", | 598 | fprintf(stdout, "%s link %s -> %s\n", |
| 599 | (certhash_config.dryrun ? "would remove" : | 599 | (cfg.dryrun ? "would remove" : |
| 600 | "removing"), link->filename, link->target); | 600 | "removing"), link->filename, link->target); |
| 601 | if (certhash_config.dryrun) | 601 | if (cfg.dryrun) |
| 602 | continue; | 602 | continue; |
| 603 | if (unlink(link->filename) == -1) { | 603 | if (unlink(link->filename) == -1) { |
| 604 | fprintf(stderr, "failed to remove link %s\n", | 604 | fprintf(stderr, "failed to remove link %s\n", |
| @@ -611,12 +611,12 @@ certhash_directory(const char *path) | |||
| 611 | for (link = links; link != NULL; link = link->next) { | 611 | for (link = links; link != NULL; link = link->next) { |
| 612 | if (link->exists == 1 && link->changed == 0) | 612 | if (link->exists == 1 && link->changed == 0) |
| 613 | continue; | 613 | continue; |
| 614 | if (certhash_config.verbose) | 614 | if (cfg.verbose) |
| 615 | fprintf(stdout, "%s link %s -> %s\n", | 615 | fprintf(stdout, "%s link %s -> %s\n", |
| 616 | (certhash_config.dryrun ? "would create" : | 616 | (cfg.dryrun ? "would create" : |
| 617 | "creating"), link->filename, | 617 | "creating"), link->filename, |
| 618 | link->reference->filename); | 618 | link->reference->filename); |
| 619 | if (certhash_config.dryrun) | 619 | if (cfg.dryrun) |
| 620 | continue; | 620 | continue; |
| 621 | if (symlink(link->reference->filename, link->filename) == -1) { | 621 | if (symlink(link->reference->filename, link->filename) == -1) { |
| 622 | fprintf(stderr, "failed to create link %s -> %s\n", | 622 | fprintf(stderr, "failed to create link %s -> %s\n", |
| @@ -658,7 +658,7 @@ certhash_main(int argc, char **argv) | |||
| 658 | exit(1); | 658 | exit(1); |
| 659 | } | 659 | } |
| 660 | 660 | ||
| 661 | memset(&certhash_config, 0, sizeof(certhash_config)); | 661 | memset(&cfg, 0, sizeof(cfg)); |
| 662 | 662 | ||
| 663 | if (options_parse(argc, argv, certhash_options, NULL, &argsused) != 0) { | 663 | if (options_parse(argc, argv, certhash_options, NULL, &argsused) != 0) { |
| 664 | certhash_usage(); | 664 | certhash_usage(); |
diff --git a/src/usr.bin/openssl/ciphers.c b/src/usr.bin/openssl/ciphers.c index 73d9e63b6f..247929bb9e 100644 --- a/src/usr.bin/openssl/ciphers.c +++ b/src/usr.bin/openssl/ciphers.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ciphers.c,v 1.17 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: ciphers.c,v 1.18 2023/03/06 14:32:05 tb Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -29,65 +29,65 @@ static struct { | |||
| 29 | int use_supported; | 29 | int use_supported; |
| 30 | int verbose; | 30 | int verbose; |
| 31 | int version; | 31 | int version; |
| 32 | } ciphers_config; | 32 | } cfg; |
| 33 | 33 | ||
| 34 | static const struct option ciphers_options[] = { | 34 | static const struct option ciphers_options[] = { |
| 35 | { | 35 | { |
| 36 | .name = "h", | 36 | .name = "h", |
| 37 | .type = OPTION_FLAG, | 37 | .type = OPTION_FLAG, |
| 38 | .opt.flag = &ciphers_config.usage, | 38 | .opt.flag = &cfg.usage, |
| 39 | }, | 39 | }, |
| 40 | { | 40 | { |
| 41 | .name = "?", | 41 | .name = "?", |
| 42 | .type = OPTION_FLAG, | 42 | .type = OPTION_FLAG, |
| 43 | .opt.flag = &ciphers_config.usage, | 43 | .opt.flag = &cfg.usage, |
| 44 | }, | 44 | }, |
| 45 | { | 45 | { |
| 46 | .name = "s", | 46 | .name = "s", |
| 47 | .desc = "Only list ciphers that are supported by the TLS method", | 47 | .desc = "Only list ciphers that are supported by the TLS method", |
| 48 | .type = OPTION_FLAG, | 48 | .type = OPTION_FLAG, |
| 49 | .opt.flag = &ciphers_config.use_supported, | 49 | .opt.flag = &cfg.use_supported, |
| 50 | }, | 50 | }, |
| 51 | { | 51 | { |
| 52 | .name = "tls1", | 52 | .name = "tls1", |
| 53 | .desc = "Use TLS protocol version 1", | 53 | .desc = "Use TLS protocol version 1", |
| 54 | .type = OPTION_VALUE, | 54 | .type = OPTION_VALUE, |
| 55 | .opt.value = &ciphers_config.version, | 55 | .opt.value = &cfg.version, |
| 56 | .value = TLS1_VERSION, | 56 | .value = TLS1_VERSION, |
| 57 | }, | 57 | }, |
| 58 | { | 58 | { |
| 59 | .name = "tls1_1", | 59 | .name = "tls1_1", |
| 60 | .desc = "Use TLS protocol version 1.1", | 60 | .desc = "Use TLS protocol version 1.1", |
| 61 | .type = OPTION_VALUE, | 61 | .type = OPTION_VALUE, |
| 62 | .opt.value = &ciphers_config.version, | 62 | .opt.value = &cfg.version, |
| 63 | .value = TLS1_1_VERSION, | 63 | .value = TLS1_1_VERSION, |
| 64 | }, | 64 | }, |
| 65 | { | 65 | { |
| 66 | .name = "tls1_2", | 66 | .name = "tls1_2", |
| 67 | .desc = "Use TLS protocol version 1.2", | 67 | .desc = "Use TLS protocol version 1.2", |
| 68 | .type = OPTION_VALUE, | 68 | .type = OPTION_VALUE, |
| 69 | .opt.value = &ciphers_config.version, | 69 | .opt.value = &cfg.version, |
| 70 | .value = TLS1_2_VERSION, | 70 | .value = TLS1_2_VERSION, |
| 71 | }, | 71 | }, |
| 72 | { | 72 | { |
| 73 | .name = "tls1_3", | 73 | .name = "tls1_3", |
| 74 | .desc = "Use TLS protocol version 1.3", | 74 | .desc = "Use TLS protocol version 1.3", |
| 75 | .type = OPTION_VALUE, | 75 | .type = OPTION_VALUE, |
| 76 | .opt.value = &ciphers_config.version, | 76 | .opt.value = &cfg.version, |
| 77 | .value = TLS1_3_VERSION, | 77 | .value = TLS1_3_VERSION, |
| 78 | }, | 78 | }, |
| 79 | { | 79 | { |
| 80 | .name = "v", | 80 | .name = "v", |
| 81 | .desc = "Provide cipher listing", | 81 | .desc = "Provide cipher listing", |
| 82 | .type = OPTION_VALUE, | 82 | .type = OPTION_VALUE, |
| 83 | .opt.value = &ciphers_config.verbose, | 83 | .opt.value = &cfg.verbose, |
| 84 | .value = 1, | 84 | .value = 1, |
| 85 | }, | 85 | }, |
| 86 | { | 86 | { |
| 87 | .name = "V", | 87 | .name = "V", |
| 88 | .desc = "Provide cipher listing with cipher suite values", | 88 | .desc = "Provide cipher listing with cipher suite values", |
| 89 | .type = OPTION_VALUE, | 89 | .type = OPTION_VALUE, |
| 90 | .opt.value = &ciphers_config.verbose, | 90 | .opt.value = &cfg.verbose, |
| 91 | .value = 2, | 91 | .value = 2, |
| 92 | }, | 92 | }, |
| 93 | { NULL }, | 93 | { NULL }, |
| @@ -119,7 +119,7 @@ ciphers_main(int argc, char **argv) | |||
| 119 | exit(1); | 119 | exit(1); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | memset(&ciphers_config, 0, sizeof(ciphers_config)); | 122 | memset(&cfg, 0, sizeof(cfg)); |
| 123 | 123 | ||
| 124 | if (options_parse(argc, argv, ciphers_options, &cipherlist, | 124 | if (options_parse(argc, argv, ciphers_options, &cipherlist, |
| 125 | NULL) != 0) { | 125 | NULL) != 0) { |
| @@ -127,7 +127,7 @@ ciphers_main(int argc, char **argv) | |||
| 127 | return (1); | 127 | return (1); |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | if (ciphers_config.usage) { | 130 | if (cfg.usage) { |
| 131 | ciphers_usage(); | 131 | ciphers_usage(); |
| 132 | return (1); | 132 | return (1); |
| 133 | } | 133 | } |
| @@ -135,12 +135,12 @@ ciphers_main(int argc, char **argv) | |||
| 135 | if ((ssl_ctx = SSL_CTX_new(TLS_method())) == NULL) | 135 | if ((ssl_ctx = SSL_CTX_new(TLS_method())) == NULL) |
| 136 | goto err; | 136 | goto err; |
| 137 | 137 | ||
| 138 | if (ciphers_config.version != 0) { | 138 | if (cfg.version != 0) { |
| 139 | if (!SSL_CTX_set_min_proto_version(ssl_ctx, | 139 | if (!SSL_CTX_set_min_proto_version(ssl_ctx, |
| 140 | ciphers_config.version)) | 140 | cfg.version)) |
| 141 | goto err; | 141 | goto err; |
| 142 | if (!SSL_CTX_set_max_proto_version(ssl_ctx, | 142 | if (!SSL_CTX_set_max_proto_version(ssl_ctx, |
| 143 | ciphers_config.version)) | 143 | cfg.version)) |
| 144 | goto err; | 144 | goto err; |
| 145 | } | 145 | } |
| 146 | 146 | ||
| @@ -152,7 +152,7 @@ ciphers_main(int argc, char **argv) | |||
| 152 | if ((ssl = SSL_new(ssl_ctx)) == NULL) | 152 | if ((ssl = SSL_new(ssl_ctx)) == NULL) |
| 153 | goto err; | 153 | goto err; |
| 154 | 154 | ||
| 155 | if (ciphers_config.use_supported) { | 155 | if (cfg.use_supported) { |
| 156 | if ((supported_ciphers = | 156 | if ((supported_ciphers = |
| 157 | SSL_get1_supported_ciphers(ssl)) == NULL) | 157 | SSL_get1_supported_ciphers(ssl)) == NULL) |
| 158 | goto err; | 158 | goto err; |
| @@ -164,12 +164,12 @@ ciphers_main(int argc, char **argv) | |||
| 164 | 164 | ||
| 165 | for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) { | 165 | for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) { |
| 166 | cipher = sk_SSL_CIPHER_value(ciphers, i); | 166 | cipher = sk_SSL_CIPHER_value(ciphers, i); |
| 167 | if (ciphers_config.verbose == 0) { | 167 | if (cfg.verbose == 0) { |
| 168 | fprintf(stdout, "%s%s", (i ? ":" : ""), | 168 | fprintf(stdout, "%s%s", (i ? ":" : ""), |
| 169 | SSL_CIPHER_get_name(cipher)); | 169 | SSL_CIPHER_get_name(cipher)); |
| 170 | continue; | 170 | continue; |
| 171 | } | 171 | } |
| 172 | if (ciphers_config.verbose > 1) { | 172 | if (cfg.verbose > 1) { |
| 173 | value = SSL_CIPHER_get_value(cipher); | 173 | value = SSL_CIPHER_get_value(cipher); |
| 174 | fprintf(stdout, "%-*s0x%02X,0x%02X - ", 10, "", | 174 | fprintf(stdout, "%-*s0x%02X,0x%02X - ", 10, "", |
| 175 | ((value >> 8) & 0xff), (value & 0xff)); | 175 | ((value >> 8) & 0xff), (value & 0xff)); |
| @@ -182,7 +182,7 @@ ciphers_main(int argc, char **argv) | |||
| 182 | fprintf(stdout, "%s", desc); | 182 | fprintf(stdout, "%s", desc); |
| 183 | free(desc); | 183 | free(desc); |
| 184 | } | 184 | } |
| 185 | if (ciphers_config.verbose == 0) | 185 | if (cfg.verbose == 0) |
| 186 | fprintf(stdout, "\n"); | 186 | fprintf(stdout, "\n"); |
| 187 | 187 | ||
| 188 | goto done; | 188 | goto done; |
diff --git a/src/usr.bin/openssl/cms.c b/src/usr.bin/openssl/cms.c index b88fd55b3c..0ddf26e5a7 100644 --- a/src/usr.bin/openssl/cms.c +++ b/src/usr.bin/openssl/cms.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: cms.c,v 1.32 2023/03/05 13:08:22 tb Exp $ */ | 1 | /* $OpenBSD: cms.c,v 1.33 2023/03/06 14:32:05 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project. | 3 | * project. |
| 4 | */ | 4 | */ |
| @@ -149,7 +149,7 @@ static struct { | |||
| 149 | char *to; | 149 | char *to; |
| 150 | int verify_retcode; | 150 | int verify_retcode; |
| 151 | X509_VERIFY_PARAM *vpm; | 151 | X509_VERIFY_PARAM *vpm; |
| 152 | } cms_config; | 152 | } cfg; |
| 153 | 153 | ||
| 154 | static const EVP_CIPHER * | 154 | static const EVP_CIPHER * |
| 155 | get_cipher_by_name(char *name) | 155 | get_cipher_by_name(char *name) |
| @@ -198,8 +198,8 @@ cms_opt_cipher(int argc, char **argv, int *argsused) | |||
| 198 | if (*name++ != '-') | 198 | if (*name++ != '-') |
| 199 | return (1); | 199 | return (1); |
| 200 | 200 | ||
| 201 | if ((cms_config.cipher = get_cipher_by_name(name)) == NULL) | 201 | if ((cfg.cipher = get_cipher_by_name(name)) == NULL) |
| 202 | if ((cms_config.cipher = EVP_get_cipherbyname(name)) == NULL) | 202 | if ((cfg.cipher = EVP_get_cipherbyname(name)) == NULL) |
| 203 | return (1); | 203 | return (1); |
| 204 | 204 | ||
| 205 | *argsused = 1; | 205 | *argsused = 1; |
| @@ -209,9 +209,9 @@ cms_opt_cipher(int argc, char **argv, int *argsused) | |||
| 209 | static int | 209 | static int |
| 210 | cms_opt_econtent_type(char *arg) | 210 | cms_opt_econtent_type(char *arg) |
| 211 | { | 211 | { |
| 212 | ASN1_OBJECT_free(cms_config.econtent_type); | 212 | ASN1_OBJECT_free(cfg.econtent_type); |
| 213 | 213 | ||
| 214 | if ((cms_config.econtent_type = OBJ_txt2obj(arg, 0)) == NULL) { | 214 | if ((cfg.econtent_type = OBJ_txt2obj(arg, 0)) == NULL) { |
| 215 | BIO_printf(bio_err, "Invalid OID %s\n", arg); | 215 | BIO_printf(bio_err, "Invalid OID %s\n", arg); |
| 216 | return (1); | 216 | return (1); |
| 217 | } | 217 | } |
| @@ -221,33 +221,33 @@ cms_opt_econtent_type(char *arg) | |||
| 221 | static int | 221 | static int |
| 222 | cms_opt_inkey(char *arg) | 222 | cms_opt_inkey(char *arg) |
| 223 | { | 223 | { |
| 224 | if (cms_config.keyfile == NULL) { | 224 | if (cfg.keyfile == NULL) { |
| 225 | cms_config.keyfile = arg; | 225 | cfg.keyfile = arg; |
| 226 | return (0); | 226 | return (0); |
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | if (cms_config.signerfile == NULL) { | 229 | if (cfg.signerfile == NULL) { |
| 230 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); | 230 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); |
| 231 | return (1); | 231 | return (1); |
| 232 | } | 232 | } |
| 233 | 233 | ||
| 234 | if (cms_config.sksigners == NULL) | 234 | if (cfg.sksigners == NULL) |
| 235 | cms_config.sksigners = sk_OPENSSL_STRING_new_null(); | 235 | cfg.sksigners = sk_OPENSSL_STRING_new_null(); |
| 236 | if (cms_config.sksigners == NULL) | 236 | if (cfg.sksigners == NULL) |
| 237 | return (1); | 237 | return (1); |
| 238 | if (!sk_OPENSSL_STRING_push(cms_config.sksigners, cms_config.signerfile)) | 238 | if (!sk_OPENSSL_STRING_push(cfg.sksigners, cfg.signerfile)) |
| 239 | return (1); | 239 | return (1); |
| 240 | 240 | ||
| 241 | cms_config.signerfile = NULL; | 241 | cfg.signerfile = NULL; |
| 242 | 242 | ||
| 243 | if (cms_config.skkeys == NULL) | 243 | if (cfg.skkeys == NULL) |
| 244 | cms_config.skkeys = sk_OPENSSL_STRING_new_null(); | 244 | cfg.skkeys = sk_OPENSSL_STRING_new_null(); |
| 245 | if (cms_config.skkeys == NULL) | 245 | if (cfg.skkeys == NULL) |
| 246 | return (1); | 246 | return (1); |
| 247 | if (!sk_OPENSSL_STRING_push(cms_config.skkeys, cms_config.keyfile)) | 247 | if (!sk_OPENSSL_STRING_push(cfg.skkeys, cfg.keyfile)) |
| 248 | return (1); | 248 | return (1); |
| 249 | 249 | ||
| 250 | cms_config.keyfile = arg; | 250 | cfg.keyfile = arg; |
| 251 | return (0); | 251 | return (0); |
| 252 | } | 252 | } |
| 253 | 253 | ||
| @@ -256,14 +256,14 @@ cms_opt_keyopt(char *arg) | |||
| 256 | { | 256 | { |
| 257 | int keyidx = -1; | 257 | int keyidx = -1; |
| 258 | 258 | ||
| 259 | if (cms_config.operation == SMIME_ENCRYPT) { | 259 | if (cfg.operation == SMIME_ENCRYPT) { |
| 260 | if (cms_config.encerts != NULL) | 260 | if (cfg.encerts != NULL) |
| 261 | keyidx += sk_X509_num(cms_config.encerts); | 261 | keyidx += sk_X509_num(cfg.encerts); |
| 262 | } else { | 262 | } else { |
| 263 | if (cms_config.keyfile != NULL || cms_config.signerfile != NULL) | 263 | if (cfg.keyfile != NULL || cfg.signerfile != NULL) |
| 264 | keyidx++; | 264 | keyidx++; |
| 265 | if (cms_config.skkeys != NULL) | 265 | if (cfg.skkeys != NULL) |
| 266 | keyidx += sk_OPENSSL_STRING_num(cms_config.skkeys); | 266 | keyidx += sk_OPENSSL_STRING_num(cfg.skkeys); |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | if (keyidx < 0) { | 269 | if (keyidx < 0) { |
| @@ -271,8 +271,8 @@ cms_opt_keyopt(char *arg) | |||
| 271 | return (1); | 271 | return (1); |
| 272 | } | 272 | } |
| 273 | 273 | ||
| 274 | if (cms_config.key_param == NULL || | 274 | if (cfg.key_param == NULL || |
| 275 | cms_config.key_param->idx != keyidx) { | 275 | cfg.key_param->idx != keyidx) { |
| 276 | struct cms_key_param *nparam; | 276 | struct cms_key_param *nparam; |
| 277 | 277 | ||
| 278 | if ((nparam = calloc(1, sizeof(struct cms_key_param))) == NULL) | 278 | if ((nparam = calloc(1, sizeof(struct cms_key_param))) == NULL) |
| @@ -285,15 +285,15 @@ cms_opt_keyopt(char *arg) | |||
| 285 | } | 285 | } |
| 286 | 286 | ||
| 287 | nparam->next = NULL; | 287 | nparam->next = NULL; |
| 288 | if (cms_config.key_first == NULL) | 288 | if (cfg.key_first == NULL) |
| 289 | cms_config.key_first = nparam; | 289 | cfg.key_first = nparam; |
| 290 | else | 290 | else |
| 291 | cms_config.key_param->next = nparam; | 291 | cfg.key_param->next = nparam; |
| 292 | 292 | ||
| 293 | cms_config.key_param = nparam; | 293 | cfg.key_param = nparam; |
| 294 | } | 294 | } |
| 295 | 295 | ||
| 296 | if (!sk_OPENSSL_STRING_push(cms_config.key_param->param, arg)) | 296 | if (!sk_OPENSSL_STRING_push(cfg.key_param->param, arg)) |
| 297 | return (1); | 297 | return (1); |
| 298 | 298 | ||
| 299 | return (0); | 299 | return (0); |
| @@ -302,7 +302,7 @@ cms_opt_keyopt(char *arg) | |||
| 302 | static int | 302 | static int |
| 303 | cms_opt_md(char *arg) | 303 | cms_opt_md(char *arg) |
| 304 | { | 304 | { |
| 305 | if ((cms_config.sign_md = EVP_get_digestbyname(arg)) == NULL) { | 305 | if ((cfg.sign_md = EVP_get_digestbyname(arg)) == NULL) { |
| 306 | BIO_printf(bio_err, "Unknown digest %s\n", arg); | 306 | BIO_printf(bio_err, "Unknown digest %s\n", arg); |
| 307 | return (1); | 307 | return (1); |
| 308 | } | 308 | } |
| @@ -312,38 +312,38 @@ cms_opt_md(char *arg) | |||
| 312 | static int | 312 | static int |
| 313 | cms_opt_print(void) | 313 | cms_opt_print(void) |
| 314 | { | 314 | { |
| 315 | cms_config.noout = 1; | 315 | cfg.noout = 1; |
| 316 | cms_config.print = 1; | 316 | cfg.print = 1; |
| 317 | return (0); | 317 | return (0); |
| 318 | } | 318 | } |
| 319 | 319 | ||
| 320 | static int | 320 | static int |
| 321 | cms_opt_pwri_pass(char *arg) | 321 | cms_opt_pwri_pass(char *arg) |
| 322 | { | 322 | { |
| 323 | cms_config.pwri_pass = (unsigned char *)arg; | 323 | cfg.pwri_pass = (unsigned char *)arg; |
| 324 | return (0); | 324 | return (0); |
| 325 | } | 325 | } |
| 326 | 326 | ||
| 327 | static int | 327 | static int |
| 328 | cms_opt_recip(char *arg) | 328 | cms_opt_recip(char *arg) |
| 329 | { | 329 | { |
| 330 | if (cms_config.operation == SMIME_ENCRYPT) { | 330 | if (cfg.operation == SMIME_ENCRYPT) { |
| 331 | if (cms_config.encerts == NULL) { | 331 | if (cfg.encerts == NULL) { |
| 332 | if ((cms_config.encerts = sk_X509_new_null()) == NULL) | 332 | if ((cfg.encerts = sk_X509_new_null()) == NULL) |
| 333 | return (1); | 333 | return (1); |
| 334 | } | 334 | } |
| 335 | 335 | ||
| 336 | cms_config.cert = load_cert(bio_err, arg, FORMAT_PEM, | 336 | cfg.cert = load_cert(bio_err, arg, FORMAT_PEM, |
| 337 | NULL, "recipient certificate file"); | 337 | NULL, "recipient certificate file"); |
| 338 | if (cms_config.cert == NULL) | 338 | if (cfg.cert == NULL) |
| 339 | return (1); | 339 | return (1); |
| 340 | 340 | ||
| 341 | if (!sk_X509_push(cms_config.encerts, cms_config.cert)) | 341 | if (!sk_X509_push(cfg.encerts, cfg.cert)) |
| 342 | return (1); | 342 | return (1); |
| 343 | 343 | ||
| 344 | cms_config.cert = NULL; | 344 | cfg.cert = NULL; |
| 345 | } else { | 345 | } else { |
| 346 | cms_config.recipfile = arg; | 346 | cfg.recipfile = arg; |
| 347 | } | 347 | } |
| 348 | return (0); | 348 | return (0); |
| 349 | } | 349 | } |
| @@ -351,11 +351,11 @@ cms_opt_recip(char *arg) | |||
| 351 | static int | 351 | static int |
| 352 | cms_opt_receipt_request_from(char *arg) | 352 | cms_opt_receipt_request_from(char *arg) |
| 353 | { | 353 | { |
| 354 | if (cms_config.rr_from == NULL) | 354 | if (cfg.rr_from == NULL) |
| 355 | cms_config.rr_from = sk_OPENSSL_STRING_new_null(); | 355 | cfg.rr_from = sk_OPENSSL_STRING_new_null(); |
| 356 | if (cms_config.rr_from == NULL) | 356 | if (cfg.rr_from == NULL) |
| 357 | return (1); | 357 | return (1); |
| 358 | if (!sk_OPENSSL_STRING_push(cms_config.rr_from, arg)) | 358 | if (!sk_OPENSSL_STRING_push(cfg.rr_from, arg)) |
| 359 | return (1); | 359 | return (1); |
| 360 | 360 | ||
| 361 | return (0); | 361 | return (0); |
| @@ -364,11 +364,11 @@ cms_opt_receipt_request_from(char *arg) | |||
| 364 | static int | 364 | static int |
| 365 | cms_opt_receipt_request_to(char *arg) | 365 | cms_opt_receipt_request_to(char *arg) |
| 366 | { | 366 | { |
| 367 | if (cms_config.rr_to == NULL) | 367 | if (cfg.rr_to == NULL) |
| 368 | cms_config.rr_to = sk_OPENSSL_STRING_new_null(); | 368 | cfg.rr_to = sk_OPENSSL_STRING_new_null(); |
| 369 | if (cms_config.rr_to == NULL) | 369 | if (cfg.rr_to == NULL) |
| 370 | return (1); | 370 | return (1); |
| 371 | if (!sk_OPENSSL_STRING_push(cms_config.rr_to, arg)) | 371 | if (!sk_OPENSSL_STRING_push(cfg.rr_to, arg)) |
| 372 | return (1); | 372 | return (1); |
| 373 | 373 | ||
| 374 | return (0); | 374 | return (0); |
| @@ -379,13 +379,13 @@ cms_opt_secretkey(char *arg) | |||
| 379 | { | 379 | { |
| 380 | long ltmp; | 380 | long ltmp; |
| 381 | 381 | ||
| 382 | free(cms_config.secret_key); | 382 | free(cfg.secret_key); |
| 383 | 383 | ||
| 384 | if ((cms_config.secret_key = string_to_hex(arg, <mp)) == NULL) { | 384 | if ((cfg.secret_key = string_to_hex(arg, <mp)) == NULL) { |
| 385 | BIO_printf(bio_err, "Invalid key %s\n", arg); | 385 | BIO_printf(bio_err, "Invalid key %s\n", arg); |
| 386 | return (1); | 386 | return (1); |
| 387 | } | 387 | } |
| 388 | cms_config.secret_keylen = (size_t)ltmp; | 388 | cfg.secret_keylen = (size_t)ltmp; |
| 389 | return (0); | 389 | return (0); |
| 390 | } | 390 | } |
| 391 | 391 | ||
| @@ -394,44 +394,44 @@ cms_opt_secretkeyid(char *arg) | |||
| 394 | { | 394 | { |
| 395 | long ltmp; | 395 | long ltmp; |
| 396 | 396 | ||
| 397 | free(cms_config.secret_keyid); | 397 | free(cfg.secret_keyid); |
| 398 | 398 | ||
| 399 | if ((cms_config.secret_keyid = string_to_hex(arg, <mp)) == NULL) { | 399 | if ((cfg.secret_keyid = string_to_hex(arg, <mp)) == NULL) { |
| 400 | BIO_printf(bio_err, "Invalid id %s\n", arg); | 400 | BIO_printf(bio_err, "Invalid id %s\n", arg); |
| 401 | return (1); | 401 | return (1); |
| 402 | } | 402 | } |
| 403 | cms_config.secret_keyidlen = (size_t)ltmp; | 403 | cfg.secret_keyidlen = (size_t)ltmp; |
| 404 | return (0); | 404 | return (0); |
| 405 | } | 405 | } |
| 406 | 406 | ||
| 407 | static int | 407 | static int |
| 408 | cms_opt_signer(char *arg) | 408 | cms_opt_signer(char *arg) |
| 409 | { | 409 | { |
| 410 | if (cms_config.signerfile == NULL) { | 410 | if (cfg.signerfile == NULL) { |
| 411 | cms_config.signerfile = arg; | 411 | cfg.signerfile = arg; |
| 412 | return (0); | 412 | return (0); |
| 413 | } | 413 | } |
| 414 | 414 | ||
| 415 | if (cms_config.sksigners == NULL) | 415 | if (cfg.sksigners == NULL) |
| 416 | cms_config.sksigners = sk_OPENSSL_STRING_new_null(); | 416 | cfg.sksigners = sk_OPENSSL_STRING_new_null(); |
| 417 | if (cms_config.sksigners == NULL) | 417 | if (cfg.sksigners == NULL) |
| 418 | return (1); | 418 | return (1); |
| 419 | if (!sk_OPENSSL_STRING_push(cms_config.sksigners, cms_config.signerfile)) | 419 | if (!sk_OPENSSL_STRING_push(cfg.sksigners, cfg.signerfile)) |
| 420 | return (1); | 420 | return (1); |
| 421 | 421 | ||
| 422 | if (cms_config.keyfile == NULL) | 422 | if (cfg.keyfile == NULL) |
| 423 | cms_config.keyfile = cms_config.signerfile; | 423 | cfg.keyfile = cfg.signerfile; |
| 424 | 424 | ||
| 425 | if (cms_config.skkeys == NULL) | 425 | if (cfg.skkeys == NULL) |
| 426 | cms_config.skkeys = sk_OPENSSL_STRING_new_null(); | 426 | cfg.skkeys = sk_OPENSSL_STRING_new_null(); |
| 427 | if (cms_config.skkeys == NULL) | 427 | if (cfg.skkeys == NULL) |
| 428 | return (1); | 428 | return (1); |
| 429 | if (!sk_OPENSSL_STRING_push(cms_config.skkeys, cms_config.keyfile)) | 429 | if (!sk_OPENSSL_STRING_push(cfg.skkeys, cfg.keyfile)) |
| 430 | return (1); | 430 | return (1); |
| 431 | 431 | ||
| 432 | cms_config.keyfile = NULL; | 432 | cfg.keyfile = NULL; |
| 433 | 433 | ||
| 434 | cms_config.signerfile = arg; | 434 | cfg.signerfile = arg; |
| 435 | return (0); | 435 | return (0); |
| 436 | } | 436 | } |
| 437 | 437 | ||
| @@ -441,7 +441,7 @@ cms_opt_verify_param(int argc, char **argv, int *argsused) | |||
| 441 | int oargc = argc; | 441 | int oargc = argc; |
| 442 | int badarg = 0; | 442 | int badarg = 0; |
| 443 | 443 | ||
| 444 | if (!args_verify(&argv, &argc, &badarg, bio_err, &cms_config.vpm)) | 444 | if (!args_verify(&argv, &argc, &badarg, bio_err, &cfg.vpm)) |
| 445 | return (1); | 445 | return (1); |
| 446 | if (badarg) | 446 | if (badarg) |
| 447 | return (1); | 447 | return (1); |
| @@ -454,8 +454,8 @@ cms_opt_verify_param(int argc, char **argv, int *argsused) | |||
| 454 | static int | 454 | static int |
| 455 | cms_opt_verify_receipt(char *arg) | 455 | cms_opt_verify_receipt(char *arg) |
| 456 | { | 456 | { |
| 457 | cms_config.operation = SMIME_VERIFY_RECEIPT; | 457 | cfg.operation = SMIME_VERIFY_RECEIPT; |
| 458 | cms_config.rctfile = arg; | 458 | cfg.rctfile = arg; |
| 459 | return (0); | 459 | return (0); |
| 460 | } | 460 | } |
| 461 | 461 | ||
| @@ -539,20 +539,20 @@ static const struct option cms_options[] = { | |||
| 539 | .argname = "file", | 539 | .argname = "file", |
| 540 | .desc = "Certificate Authority file", | 540 | .desc = "Certificate Authority file", |
| 541 | .type = OPTION_ARG, | 541 | .type = OPTION_ARG, |
| 542 | .opt.arg = &cms_config.CAfile, | 542 | .opt.arg = &cfg.CAfile, |
| 543 | }, | 543 | }, |
| 544 | { | 544 | { |
| 545 | .name = "CApath", | 545 | .name = "CApath", |
| 546 | .argname = "path", | 546 | .argname = "path", |
| 547 | .desc = "Certificate Authority path", | 547 | .desc = "Certificate Authority path", |
| 548 | .type = OPTION_ARG, | 548 | .type = OPTION_ARG, |
| 549 | .opt.arg = &cms_config.CApath, | 549 | .opt.arg = &cfg.CApath, |
| 550 | }, | 550 | }, |
| 551 | { | 551 | { |
| 552 | .name = "binary", | 552 | .name = "binary", |
| 553 | .desc = "Do not translate message to text", | 553 | .desc = "Do not translate message to text", |
| 554 | .type = OPTION_VALUE_OR, | 554 | .type = OPTION_VALUE_OR, |
| 555 | .opt.value = &cms_config.flags, | 555 | .opt.value = &cfg.flags, |
| 556 | .value = CMS_BINARY, | 556 | .value = CMS_BINARY, |
| 557 | }, | 557 | }, |
| 558 | { | 558 | { |
| @@ -560,27 +560,27 @@ static const struct option cms_options[] = { | |||
| 560 | .argname = "file", | 560 | .argname = "file", |
| 561 | .desc = "Other certificates file", | 561 | .desc = "Other certificates file", |
| 562 | .type = OPTION_ARG, | 562 | .type = OPTION_ARG, |
| 563 | .opt.arg = &cms_config.certfile, | 563 | .opt.arg = &cfg.certfile, |
| 564 | }, | 564 | }, |
| 565 | { | 565 | { |
| 566 | .name = "certsout", | 566 | .name = "certsout", |
| 567 | .argname = "file", | 567 | .argname = "file", |
| 568 | .desc = "Certificate output file", | 568 | .desc = "Certificate output file", |
| 569 | .type = OPTION_ARG, | 569 | .type = OPTION_ARG, |
| 570 | .opt.arg = &cms_config.certsoutfile, | 570 | .opt.arg = &cfg.certsoutfile, |
| 571 | }, | 571 | }, |
| 572 | { | 572 | { |
| 573 | .name = "cmsout", | 573 | .name = "cmsout", |
| 574 | .desc = "Output CMS structure", | 574 | .desc = "Output CMS structure", |
| 575 | .type = OPTION_VALUE, | 575 | .type = OPTION_VALUE, |
| 576 | .opt.value = &cms_config.operation, | 576 | .opt.value = &cfg.operation, |
| 577 | .value = SMIME_CMSOUT, | 577 | .value = SMIME_CMSOUT, |
| 578 | }, | 578 | }, |
| 579 | { | 579 | { |
| 580 | .name = "compress", | 580 | .name = "compress", |
| 581 | .desc = "Create CMS CompressedData type", | 581 | .desc = "Create CMS CompressedData type", |
| 582 | .type = OPTION_VALUE, | 582 | .type = OPTION_VALUE, |
| 583 | .opt.value = &cms_config.operation, | 583 | .opt.value = &cfg.operation, |
| 584 | .value = SMIME_COMPRESS, | 584 | .value = SMIME_COMPRESS, |
| 585 | }, | 585 | }, |
| 586 | { | 586 | { |
| @@ -588,55 +588,55 @@ static const struct option cms_options[] = { | |||
| 588 | .argname = "file", | 588 | .argname = "file", |
| 589 | .desc = "Supply or override content for detached signature", | 589 | .desc = "Supply or override content for detached signature", |
| 590 | .type = OPTION_ARG, | 590 | .type = OPTION_ARG, |
| 591 | .opt.arg = &cms_config.contfile, | 591 | .opt.arg = &cfg.contfile, |
| 592 | }, | 592 | }, |
| 593 | { | 593 | { |
| 594 | .name = "crlfeol", | 594 | .name = "crlfeol", |
| 595 | .desc = "Use CRLF as EOL termination instead of CR only", | 595 | .desc = "Use CRLF as EOL termination instead of CR only", |
| 596 | .type = OPTION_VALUE_OR, | 596 | .type = OPTION_VALUE_OR, |
| 597 | .opt.value = &cms_config.flags, | 597 | .opt.value = &cfg.flags, |
| 598 | .value = CMS_CRLFEOL, | 598 | .value = CMS_CRLFEOL, |
| 599 | }, | 599 | }, |
| 600 | { | 600 | { |
| 601 | .name = "data_create", | 601 | .name = "data_create", |
| 602 | .desc = "Create CMS Data type", | 602 | .desc = "Create CMS Data type", |
| 603 | .type = OPTION_VALUE, | 603 | .type = OPTION_VALUE, |
| 604 | .opt.value = &cms_config.operation, | 604 | .opt.value = &cfg.operation, |
| 605 | .value = SMIME_DATA_CREATE, | 605 | .value = SMIME_DATA_CREATE, |
| 606 | }, | 606 | }, |
| 607 | { | 607 | { |
| 608 | .name = "data_out", | 608 | .name = "data_out", |
| 609 | .desc = "Output content from the input CMS Data type", | 609 | .desc = "Output content from the input CMS Data type", |
| 610 | .type = OPTION_VALUE, | 610 | .type = OPTION_VALUE, |
| 611 | .opt.value = &cms_config.operation, | 611 | .opt.value = &cfg.operation, |
| 612 | .value = SMIME_DATAOUT, | 612 | .value = SMIME_DATAOUT, |
| 613 | }, | 613 | }, |
| 614 | { | 614 | { |
| 615 | .name = "debug_decrypt", | 615 | .name = "debug_decrypt", |
| 616 | .desc = "Set the CMS_DEBUG_DECRYPT flag when decrypting", | 616 | .desc = "Set the CMS_DEBUG_DECRYPT flag when decrypting", |
| 617 | .type = OPTION_VALUE_OR, | 617 | .type = OPTION_VALUE_OR, |
| 618 | .opt.value = &cms_config.flags, | 618 | .opt.value = &cfg.flags, |
| 619 | .value = CMS_DEBUG_DECRYPT, | 619 | .value = CMS_DEBUG_DECRYPT, |
| 620 | }, | 620 | }, |
| 621 | { | 621 | { |
| 622 | .name = "decrypt", | 622 | .name = "decrypt", |
| 623 | .desc = "Decrypt encrypted message", | 623 | .desc = "Decrypt encrypted message", |
| 624 | .type = OPTION_VALUE, | 624 | .type = OPTION_VALUE, |
| 625 | .opt.value = &cms_config.operation, | 625 | .opt.value = &cfg.operation, |
| 626 | .value = SMIME_DECRYPT, | 626 | .value = SMIME_DECRYPT, |
| 627 | }, | 627 | }, |
| 628 | { | 628 | { |
| 629 | .name = "digest_create", | 629 | .name = "digest_create", |
| 630 | .desc = "Create CMS DigestedData type", | 630 | .desc = "Create CMS DigestedData type", |
| 631 | .type = OPTION_VALUE, | 631 | .type = OPTION_VALUE, |
| 632 | .opt.value = &cms_config.operation, | 632 | .opt.value = &cfg.operation, |
| 633 | .value = SMIME_DIGEST_CREATE, | 633 | .value = SMIME_DIGEST_CREATE, |
| 634 | }, | 634 | }, |
| 635 | { | 635 | { |
| 636 | .name = "digest_verify", | 636 | .name = "digest_verify", |
| 637 | .desc = "Verify CMS DigestedData type and output the content", | 637 | .desc = "Verify CMS DigestedData type and output the content", |
| 638 | .type = OPTION_VALUE, | 638 | .type = OPTION_VALUE, |
| 639 | .opt.value = &cms_config.operation, | 639 | .opt.value = &cfg.operation, |
| 640 | .value = SMIME_DIGEST_VERIFY, | 640 | .value = SMIME_DIGEST_VERIFY, |
| 641 | }, | 641 | }, |
| 642 | { | 642 | { |
| @@ -650,21 +650,21 @@ static const struct option cms_options[] = { | |||
| 650 | .name = "encrypt", | 650 | .name = "encrypt", |
| 651 | .desc = "Encrypt message", | 651 | .desc = "Encrypt message", |
| 652 | .type = OPTION_VALUE, | 652 | .type = OPTION_VALUE, |
| 653 | .opt.value = &cms_config.operation, | 653 | .opt.value = &cfg.operation, |
| 654 | .value = SMIME_ENCRYPT, | 654 | .value = SMIME_ENCRYPT, |
| 655 | }, | 655 | }, |
| 656 | { | 656 | { |
| 657 | .name = "EncryptedData_decrypt", | 657 | .name = "EncryptedData_decrypt", |
| 658 | .desc = "Decrypt CMS EncryptedData", | 658 | .desc = "Decrypt CMS EncryptedData", |
| 659 | .type = OPTION_VALUE, | 659 | .type = OPTION_VALUE, |
| 660 | .opt.value = &cms_config.operation, | 660 | .opt.value = &cfg.operation, |
| 661 | .value = SMIME_ENCRYPTED_DECRYPT, | 661 | .value = SMIME_ENCRYPTED_DECRYPT, |
| 662 | }, | 662 | }, |
| 663 | { | 663 | { |
| 664 | .name = "EncryptedData_encrypt", | 664 | .name = "EncryptedData_encrypt", |
| 665 | .desc = "Encrypt content using supplied symmetric key and algorithm", | 665 | .desc = "Encrypt content using supplied symmetric key and algorithm", |
| 666 | .type = OPTION_VALUE, | 666 | .type = OPTION_VALUE, |
| 667 | .opt.value = &cms_config.operation, | 667 | .opt.value = &cfg.operation, |
| 668 | .value = SMIME_ENCRYPTED_ENCRYPT, | 668 | .value = SMIME_ENCRYPTED_ENCRYPT, |
| 669 | }, | 669 | }, |
| 670 | { | 670 | { |
| @@ -672,20 +672,20 @@ static const struct option cms_options[] = { | |||
| 672 | .argname = "addr", | 672 | .argname = "addr", |
| 673 | .desc = "From address", | 673 | .desc = "From address", |
| 674 | .type = OPTION_ARG, | 674 | .type = OPTION_ARG, |
| 675 | .opt.arg = &cms_config.from, | 675 | .opt.arg = &cfg.from, |
| 676 | }, | 676 | }, |
| 677 | { | 677 | { |
| 678 | .name = "in", | 678 | .name = "in", |
| 679 | .argname = "file", | 679 | .argname = "file", |
| 680 | .desc = "Input file", | 680 | .desc = "Input file", |
| 681 | .type = OPTION_ARG, | 681 | .type = OPTION_ARG, |
| 682 | .opt.arg = &cms_config.infile, | 682 | .opt.arg = &cfg.infile, |
| 683 | }, | 683 | }, |
| 684 | { | 684 | { |
| 685 | .name = "indef", | 685 | .name = "indef", |
| 686 | .desc = "Same as -stream", | 686 | .desc = "Same as -stream", |
| 687 | .type = OPTION_VALUE_OR, | 687 | .type = OPTION_VALUE_OR, |
| 688 | .opt.value = &cms_config.flags, | 688 | .opt.value = &cfg.flags, |
| 689 | .value = CMS_STREAM, | 689 | .value = CMS_STREAM, |
| 690 | }, | 690 | }, |
| 691 | { | 691 | { |
| @@ -693,7 +693,7 @@ static const struct option cms_options[] = { | |||
| 693 | .argname = "fmt", | 693 | .argname = "fmt", |
| 694 | .desc = "Input format (DER, PEM or SMIME (default))", | 694 | .desc = "Input format (DER, PEM or SMIME (default))", |
| 695 | .type = OPTION_ARG_FORMAT, | 695 | .type = OPTION_ARG_FORMAT, |
| 696 | .opt.value = &cms_config.informat, | 696 | .opt.value = &cfg.informat, |
| 697 | }, | 697 | }, |
| 698 | { | 698 | { |
| 699 | .name = "inkey", | 699 | .name = "inkey", |
| @@ -707,13 +707,13 @@ static const struct option cms_options[] = { | |||
| 707 | .argname = "fmt", | 707 | .argname = "fmt", |
| 708 | .desc = "Input key format (DER or PEM (default))", | 708 | .desc = "Input key format (DER or PEM (default))", |
| 709 | .type = OPTION_ARG_FORMAT, | 709 | .type = OPTION_ARG_FORMAT, |
| 710 | .opt.value = &cms_config.keyform, | 710 | .opt.value = &cfg.keyform, |
| 711 | }, | 711 | }, |
| 712 | { | 712 | { |
| 713 | .name = "keyid", | 713 | .name = "keyid", |
| 714 | .desc = "Use subject key identifier", | 714 | .desc = "Use subject key identifier", |
| 715 | .type = OPTION_VALUE_OR, | 715 | .type = OPTION_VALUE_OR, |
| 716 | .opt.value = &cms_config.flags, | 716 | .opt.value = &cfg.flags, |
| 717 | .value = CMS_USE_KEYID, | 717 | .value = CMS_USE_KEYID, |
| 718 | }, | 718 | }, |
| 719 | { | 719 | { |
| @@ -734,90 +734,90 @@ static const struct option cms_options[] = { | |||
| 734 | .name = "no_attr_verify", | 734 | .name = "no_attr_verify", |
| 735 | .desc = "Do not verify the signer's attribute of a signature", | 735 | .desc = "Do not verify the signer's attribute of a signature", |
| 736 | .type = OPTION_VALUE_OR, | 736 | .type = OPTION_VALUE_OR, |
| 737 | .opt.value = &cms_config.flags, | 737 | .opt.value = &cfg.flags, |
| 738 | .value = CMS_NO_ATTR_VERIFY, | 738 | .value = CMS_NO_ATTR_VERIFY, |
| 739 | }, | 739 | }, |
| 740 | { | 740 | { |
| 741 | .name = "no_content_verify", | 741 | .name = "no_content_verify", |
| 742 | .desc = "Do not verify the content of a signed message", | 742 | .desc = "Do not verify the content of a signed message", |
| 743 | .type = OPTION_VALUE_OR, | 743 | .type = OPTION_VALUE_OR, |
| 744 | .opt.value = &cms_config.flags, | 744 | .opt.value = &cfg.flags, |
| 745 | .value = CMS_NO_CONTENT_VERIFY, | 745 | .value = CMS_NO_CONTENT_VERIFY, |
| 746 | }, | 746 | }, |
| 747 | { | 747 | { |
| 748 | .name = "no_signer_cert_verify", | 748 | .name = "no_signer_cert_verify", |
| 749 | .desc = "Do not verify the signer's certificate", | 749 | .desc = "Do not verify the signer's certificate", |
| 750 | .type = OPTION_VALUE_OR, | 750 | .type = OPTION_VALUE_OR, |
| 751 | .opt.value = &cms_config.flags, | 751 | .opt.value = &cfg.flags, |
| 752 | .value = CMS_NO_SIGNER_CERT_VERIFY, | 752 | .value = CMS_NO_SIGNER_CERT_VERIFY, |
| 753 | }, | 753 | }, |
| 754 | { | 754 | { |
| 755 | .name = "noattr", | 755 | .name = "noattr", |
| 756 | .desc = "Do not include any signed attributes", | 756 | .desc = "Do not include any signed attributes", |
| 757 | .type = OPTION_VALUE_OR, | 757 | .type = OPTION_VALUE_OR, |
| 758 | .opt.value = &cms_config.flags, | 758 | .opt.value = &cfg.flags, |
| 759 | .value = CMS_NOATTR, | 759 | .value = CMS_NOATTR, |
| 760 | }, | 760 | }, |
| 761 | { | 761 | { |
| 762 | .name = "nocerts", | 762 | .name = "nocerts", |
| 763 | .desc = "Do not include signer's certificate when signing", | 763 | .desc = "Do not include signer's certificate when signing", |
| 764 | .type = OPTION_VALUE_OR, | 764 | .type = OPTION_VALUE_OR, |
| 765 | .opt.value = &cms_config.flags, | 765 | .opt.value = &cfg.flags, |
| 766 | .value = CMS_NOCERTS, | 766 | .value = CMS_NOCERTS, |
| 767 | }, | 767 | }, |
| 768 | { | 768 | { |
| 769 | .name = "nodetach", | 769 | .name = "nodetach", |
| 770 | .desc = "Use opaque signing", | 770 | .desc = "Use opaque signing", |
| 771 | .type = OPTION_VALUE_AND, | 771 | .type = OPTION_VALUE_AND, |
| 772 | .opt.value = &cms_config.flags, | 772 | .opt.value = &cfg.flags, |
| 773 | .value = ~CMS_DETACHED, | 773 | .value = ~CMS_DETACHED, |
| 774 | }, | 774 | }, |
| 775 | { | 775 | { |
| 776 | .name = "noindef", | 776 | .name = "noindef", |
| 777 | .desc = "Disable CMS streaming", | 777 | .desc = "Disable CMS streaming", |
| 778 | .type = OPTION_VALUE_AND, | 778 | .type = OPTION_VALUE_AND, |
| 779 | .opt.value = &cms_config.flags, | 779 | .opt.value = &cfg.flags, |
| 780 | .value = ~CMS_STREAM, | 780 | .value = ~CMS_STREAM, |
| 781 | }, | 781 | }, |
| 782 | { | 782 | { |
| 783 | .name = "nointern", | 783 | .name = "nointern", |
| 784 | .desc = "Do not search certificates in message for signer", | 784 | .desc = "Do not search certificates in message for signer", |
| 785 | .type = OPTION_VALUE_OR, | 785 | .type = OPTION_VALUE_OR, |
| 786 | .opt.value = &cms_config.flags, | 786 | .opt.value = &cfg.flags, |
| 787 | .value = CMS_NOINTERN, | 787 | .value = CMS_NOINTERN, |
| 788 | }, | 788 | }, |
| 789 | { | 789 | { |
| 790 | .name = "nooldmime", | 790 | .name = "nooldmime", |
| 791 | .desc = "Output old S/MIME content type", | 791 | .desc = "Output old S/MIME content type", |
| 792 | .type = OPTION_VALUE_OR, | 792 | .type = OPTION_VALUE_OR, |
| 793 | .opt.value = &cms_config.flags, | 793 | .opt.value = &cfg.flags, |
| 794 | .value = CMS_NOOLDMIMETYPE, | 794 | .value = CMS_NOOLDMIMETYPE, |
| 795 | }, | 795 | }, |
| 796 | { | 796 | { |
| 797 | .name = "noout", | 797 | .name = "noout", |
| 798 | .desc = "Do not output the parsed CMS structure", | 798 | .desc = "Do not output the parsed CMS structure", |
| 799 | .type = OPTION_FLAG, | 799 | .type = OPTION_FLAG, |
| 800 | .opt.flag = &cms_config.noout, | 800 | .opt.flag = &cfg.noout, |
| 801 | }, | 801 | }, |
| 802 | { | 802 | { |
| 803 | .name = "nosigs", | 803 | .name = "nosigs", |
| 804 | .desc = "Do not verify message signature", | 804 | .desc = "Do not verify message signature", |
| 805 | .type = OPTION_VALUE_OR, | 805 | .type = OPTION_VALUE_OR, |
| 806 | .opt.value = &cms_config.flags, | 806 | .opt.value = &cfg.flags, |
| 807 | .value = CMS_NOSIGS, | 807 | .value = CMS_NOSIGS, |
| 808 | }, | 808 | }, |
| 809 | { | 809 | { |
| 810 | .name = "nosmimecap", | 810 | .name = "nosmimecap", |
| 811 | .desc = "Omit the SMIMECapabilities attribute", | 811 | .desc = "Omit the SMIMECapabilities attribute", |
| 812 | .type = OPTION_VALUE_OR, | 812 | .type = OPTION_VALUE_OR, |
| 813 | .opt.value = &cms_config.flags, | 813 | .opt.value = &cfg.flags, |
| 814 | .value = CMS_NOSMIMECAP, | 814 | .value = CMS_NOSMIMECAP, |
| 815 | }, | 815 | }, |
| 816 | { | 816 | { |
| 817 | .name = "noverify", | 817 | .name = "noverify", |
| 818 | .desc = "Do not verify signer's certificate", | 818 | .desc = "Do not verify signer's certificate", |
| 819 | .type = OPTION_VALUE_OR, | 819 | .type = OPTION_VALUE_OR, |
| 820 | .opt.value = &cms_config.flags, | 820 | .opt.value = &cfg.flags, |
| 821 | .value = CMS_NO_SIGNER_CERT_VERIFY, | 821 | .value = CMS_NO_SIGNER_CERT_VERIFY, |
| 822 | }, | 822 | }, |
| 823 | { | 823 | { |
| @@ -825,21 +825,21 @@ static const struct option cms_options[] = { | |||
| 825 | .argname = "file", | 825 | .argname = "file", |
| 826 | .desc = "Output file", | 826 | .desc = "Output file", |
| 827 | .type = OPTION_ARG, | 827 | .type = OPTION_ARG, |
| 828 | .opt.arg = &cms_config.outfile, | 828 | .opt.arg = &cfg.outfile, |
| 829 | }, | 829 | }, |
| 830 | { | 830 | { |
| 831 | .name = "outform", | 831 | .name = "outform", |
| 832 | .argname = "fmt", | 832 | .argname = "fmt", |
| 833 | .desc = "Output format (DER, PEM or SMIME (default))", | 833 | .desc = "Output format (DER, PEM or SMIME (default))", |
| 834 | .type = OPTION_ARG_FORMAT, | 834 | .type = OPTION_ARG_FORMAT, |
| 835 | .opt.value = &cms_config.outformat, | 835 | .opt.value = &cfg.outformat, |
| 836 | }, | 836 | }, |
| 837 | { | 837 | { |
| 838 | .name = "passin", | 838 | .name = "passin", |
| 839 | .argname = "src", | 839 | .argname = "src", |
| 840 | .desc = "Private key password source", | 840 | .desc = "Private key password source", |
| 841 | .type = OPTION_ARG, | 841 | .type = OPTION_ARG, |
| 842 | .opt.arg = &cms_config.passargin, | 842 | .opt.arg = &cfg.passargin, |
| 843 | }, | 843 | }, |
| 844 | { | 844 | { |
| 845 | .name = "print", | 845 | .name = "print", |
| @@ -859,20 +859,20 @@ static const struct option cms_options[] = { | |||
| 859 | .argname = "fmt", | 859 | .argname = "fmt", |
| 860 | .desc = "Receipt file format (DER, PEM or SMIME (default))", | 860 | .desc = "Receipt file format (DER, PEM or SMIME (default))", |
| 861 | .type = OPTION_ARG_FORMAT, | 861 | .type = OPTION_ARG_FORMAT, |
| 862 | .opt.value = &cms_config.rctformat, | 862 | .opt.value = &cfg.rctformat, |
| 863 | }, | 863 | }, |
| 864 | { | 864 | { |
| 865 | .name = "receipt_request_all", | 865 | .name = "receipt_request_all", |
| 866 | .desc = "Indicate requests should be provided by all recipients", | 866 | .desc = "Indicate requests should be provided by all recipients", |
| 867 | .type = OPTION_VALUE, | 867 | .type = OPTION_VALUE, |
| 868 | .opt.value = &cms_config.rr_allorfirst, | 868 | .opt.value = &cfg.rr_allorfirst, |
| 869 | .value = 0, | 869 | .value = 0, |
| 870 | }, | 870 | }, |
| 871 | { | 871 | { |
| 872 | .name = "receipt_request_first", | 872 | .name = "receipt_request_first", |
| 873 | .desc = "Indicate requests should be provided by first tier recipient", | 873 | .desc = "Indicate requests should be provided by first tier recipient", |
| 874 | .type = OPTION_VALUE, | 874 | .type = OPTION_VALUE, |
| 875 | .opt.value = &cms_config.rr_allorfirst, | 875 | .opt.value = &cfg.rr_allorfirst, |
| 876 | .value = 1, | 876 | .value = 1, |
| 877 | }, | 877 | }, |
| 878 | { | 878 | { |
| @@ -886,7 +886,7 @@ static const struct option cms_options[] = { | |||
| 886 | .name = "receipt_request_print", | 886 | .name = "receipt_request_print", |
| 887 | .desc = "Print out the contents of any signed receipt requests", | 887 | .desc = "Print out the contents of any signed receipt requests", |
| 888 | .type = OPTION_FLAG, | 888 | .type = OPTION_FLAG, |
| 889 | .opt.flag = &cms_config.rr_print, | 889 | .opt.flag = &cfg.rr_print, |
| 890 | }, | 890 | }, |
| 891 | { | 891 | { |
| 892 | .name = "receipt_request_to", | 892 | .name = "receipt_request_to", |
| @@ -906,7 +906,7 @@ static const struct option cms_options[] = { | |||
| 906 | .name = "resign", | 906 | .name = "resign", |
| 907 | .desc = "Resign a signed message", | 907 | .desc = "Resign a signed message", |
| 908 | .type = OPTION_VALUE, | 908 | .type = OPTION_VALUE, |
| 909 | .opt.value = &cms_config.operation, | 909 | .opt.value = &cfg.operation, |
| 910 | .value = SMIME_RESIGN, | 910 | .value = SMIME_RESIGN, |
| 911 | }, | 911 | }, |
| 912 | { | 912 | { |
| @@ -927,14 +927,14 @@ static const struct option cms_options[] = { | |||
| 927 | .name = "sign", | 927 | .name = "sign", |
| 928 | .desc = "Sign message", | 928 | .desc = "Sign message", |
| 929 | .type = OPTION_VALUE, | 929 | .type = OPTION_VALUE, |
| 930 | .opt.value = &cms_config.operation, | 930 | .opt.value = &cfg.operation, |
| 931 | .value = SMIME_SIGN, | 931 | .value = SMIME_SIGN, |
| 932 | }, | 932 | }, |
| 933 | { | 933 | { |
| 934 | .name = "sign_receipt", | 934 | .name = "sign_receipt", |
| 935 | .desc = "Generate a signed receipt for the message", | 935 | .desc = "Generate a signed receipt for the message", |
| 936 | .type = OPTION_VALUE, | 936 | .type = OPTION_VALUE, |
| 937 | .opt.value = &cms_config.operation, | 937 | .opt.value = &cfg.operation, |
| 938 | .value = SMIME_SIGN_RECEIPT, | 938 | .value = SMIME_SIGN_RECEIPT, |
| 939 | }, | 939 | }, |
| 940 | { | 940 | { |
| @@ -948,7 +948,7 @@ static const struct option cms_options[] = { | |||
| 948 | .name = "stream", | 948 | .name = "stream", |
| 949 | .desc = "Enable CMS streaming", | 949 | .desc = "Enable CMS streaming", |
| 950 | .type = OPTION_VALUE_OR, | 950 | .type = OPTION_VALUE_OR, |
| 951 | .opt.value = &cms_config.flags, | 951 | .opt.value = &cfg.flags, |
| 952 | .value = CMS_STREAM, | 952 | .value = CMS_STREAM, |
| 953 | }, | 953 | }, |
| 954 | { | 954 | { |
| @@ -956,13 +956,13 @@ static const struct option cms_options[] = { | |||
| 956 | .argname = "s", | 956 | .argname = "s", |
| 957 | .desc = "Subject", | 957 | .desc = "Subject", |
| 958 | .type = OPTION_ARG, | 958 | .type = OPTION_ARG, |
| 959 | .opt.arg = &cms_config.subject, | 959 | .opt.arg = &cfg.subject, |
| 960 | }, | 960 | }, |
| 961 | { | 961 | { |
| 962 | .name = "text", | 962 | .name = "text", |
| 963 | .desc = "Include or delete text MIME headers", | 963 | .desc = "Include or delete text MIME headers", |
| 964 | .type = OPTION_VALUE_OR, | 964 | .type = OPTION_VALUE_OR, |
| 965 | .opt.value = &cms_config.flags, | 965 | .opt.value = &cfg.flags, |
| 966 | .value = CMS_TEXT, | 966 | .value = CMS_TEXT, |
| 967 | }, | 967 | }, |
| 968 | { | 968 | { |
| @@ -970,20 +970,20 @@ static const struct option cms_options[] = { | |||
| 970 | .argname = "addr", | 970 | .argname = "addr", |
| 971 | .desc = "To address", | 971 | .desc = "To address", |
| 972 | .type = OPTION_ARG, | 972 | .type = OPTION_ARG, |
| 973 | .opt.arg = &cms_config.to, | 973 | .opt.arg = &cfg.to, |
| 974 | }, | 974 | }, |
| 975 | { | 975 | { |
| 976 | .name = "uncompress", | 976 | .name = "uncompress", |
| 977 | .desc = "Uncompress CMS CompressedData type", | 977 | .desc = "Uncompress CMS CompressedData type", |
| 978 | .type = OPTION_VALUE, | 978 | .type = OPTION_VALUE, |
| 979 | .opt.value = &cms_config.operation, | 979 | .opt.value = &cfg.operation, |
| 980 | .value = SMIME_UNCOMPRESS, | 980 | .value = SMIME_UNCOMPRESS, |
| 981 | }, | 981 | }, |
| 982 | { | 982 | { |
| 983 | .name = "verify", | 983 | .name = "verify", |
| 984 | .desc = "Verify signed message", | 984 | .desc = "Verify signed message", |
| 985 | .type = OPTION_VALUE, | 985 | .type = OPTION_VALUE, |
| 986 | .opt.value = &cms_config.operation, | 986 | .opt.value = &cfg.operation, |
| 987 | .value = SMIME_VERIFY, | 987 | .value = SMIME_VERIFY, |
| 988 | }, | 988 | }, |
| 989 | { | 989 | { |
| @@ -997,7 +997,7 @@ static const struct option cms_options[] = { | |||
| 997 | .name = "verify_retcode", | 997 | .name = "verify_retcode", |
| 998 | .desc = "Set verification error code to exit code", | 998 | .desc = "Set verification error code to exit code", |
| 999 | .type = OPTION_FLAG, | 999 | .type = OPTION_FLAG, |
| 1000 | .opt.flag = &cms_config.verify_retcode, | 1000 | .opt.flag = &cfg.verify_retcode, |
| 1001 | }, | 1001 | }, |
| 1002 | { | 1002 | { |
| 1003 | .name = "check_ss_sig", | 1003 | .name = "check_ss_sig", |
| @@ -1170,84 +1170,84 @@ cms_main(int argc, char **argv) | |||
| 1170 | exit(1); | 1170 | exit(1); |
| 1171 | } | 1171 | } |
| 1172 | 1172 | ||
| 1173 | memset(&cms_config, 0, sizeof(cms_config)); | 1173 | memset(&cfg, 0, sizeof(cfg)); |
| 1174 | cms_config.flags = CMS_DETACHED; | 1174 | cfg.flags = CMS_DETACHED; |
| 1175 | cms_config.rr_allorfirst = -1; | 1175 | cfg.rr_allorfirst = -1; |
| 1176 | cms_config.informat = FORMAT_SMIME; | 1176 | cfg.informat = FORMAT_SMIME; |
| 1177 | cms_config.outformat = FORMAT_SMIME; | 1177 | cfg.outformat = FORMAT_SMIME; |
| 1178 | cms_config.rctformat = FORMAT_SMIME; | 1178 | cfg.rctformat = FORMAT_SMIME; |
| 1179 | cms_config.keyform = FORMAT_PEM; | 1179 | cfg.keyform = FORMAT_PEM; |
| 1180 | if (options_parse(argc, argv, cms_options, NULL, &argsused) != 0) { | 1180 | if (options_parse(argc, argv, cms_options, NULL, &argsused) != 0) { |
| 1181 | goto argerr; | 1181 | goto argerr; |
| 1182 | } | 1182 | } |
| 1183 | args = argv + argsused; | 1183 | args = argv + argsused; |
| 1184 | ret = 1; | 1184 | ret = 1; |
| 1185 | 1185 | ||
| 1186 | if (((cms_config.rr_allorfirst != -1) || cms_config.rr_from != NULL) && | 1186 | if (((cfg.rr_allorfirst != -1) || cfg.rr_from != NULL) && |
| 1187 | cms_config.rr_to == NULL) { | 1187 | cfg.rr_to == NULL) { |
| 1188 | BIO_puts(bio_err, "No Signed Receipts Recipients\n"); | 1188 | BIO_puts(bio_err, "No Signed Receipts Recipients\n"); |
| 1189 | goto argerr; | 1189 | goto argerr; |
| 1190 | } | 1190 | } |
| 1191 | if (!(cms_config.operation & SMIME_SIGNERS) && | 1191 | if (!(cfg.operation & SMIME_SIGNERS) && |
| 1192 | (cms_config.rr_to != NULL || cms_config.rr_from != NULL)) { | 1192 | (cfg.rr_to != NULL || cfg.rr_from != NULL)) { |
| 1193 | BIO_puts(bio_err, "Signed receipts only allowed with -sign\n"); | 1193 | BIO_puts(bio_err, "Signed receipts only allowed with -sign\n"); |
| 1194 | goto argerr; | 1194 | goto argerr; |
| 1195 | } | 1195 | } |
| 1196 | if (!(cms_config.operation & SMIME_SIGNERS) && | 1196 | if (!(cfg.operation & SMIME_SIGNERS) && |
| 1197 | (cms_config.skkeys != NULL || cms_config.sksigners != NULL)) { | 1197 | (cfg.skkeys != NULL || cfg.sksigners != NULL)) { |
| 1198 | BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); | 1198 | BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); |
| 1199 | goto argerr; | 1199 | goto argerr; |
| 1200 | } | 1200 | } |
| 1201 | if (cms_config.operation & SMIME_SIGNERS) { | 1201 | if (cfg.operation & SMIME_SIGNERS) { |
| 1202 | if (cms_config.keyfile != NULL && | 1202 | if (cfg.keyfile != NULL && |
| 1203 | cms_config.signerfile == NULL) { | 1203 | cfg.signerfile == NULL) { |
| 1204 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); | 1204 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); |
| 1205 | goto argerr; | 1205 | goto argerr; |
| 1206 | } | 1206 | } |
| 1207 | /* Check to see if any final signer needs to be appended */ | 1207 | /* Check to see if any final signer needs to be appended */ |
| 1208 | if (cms_config.signerfile != NULL) { | 1208 | if (cfg.signerfile != NULL) { |
| 1209 | if (cms_config.sksigners == NULL && | 1209 | if (cfg.sksigners == NULL && |
| 1210 | (cms_config.sksigners = | 1210 | (cfg.sksigners = |
| 1211 | sk_OPENSSL_STRING_new_null()) == NULL) | 1211 | sk_OPENSSL_STRING_new_null()) == NULL) |
| 1212 | goto end; | 1212 | goto end; |
| 1213 | if (!sk_OPENSSL_STRING_push(cms_config.sksigners, | 1213 | if (!sk_OPENSSL_STRING_push(cfg.sksigners, |
| 1214 | cms_config.signerfile)) | 1214 | cfg.signerfile)) |
| 1215 | goto end; | 1215 | goto end; |
| 1216 | if (cms_config.skkeys == NULL && | 1216 | if (cfg.skkeys == NULL && |
| 1217 | (cms_config.skkeys = | 1217 | (cfg.skkeys = |
| 1218 | sk_OPENSSL_STRING_new_null()) == NULL) | 1218 | sk_OPENSSL_STRING_new_null()) == NULL) |
| 1219 | goto end; | 1219 | goto end; |
| 1220 | if (cms_config.keyfile == NULL) | 1220 | if (cfg.keyfile == NULL) |
| 1221 | cms_config.keyfile = cms_config.signerfile; | 1221 | cfg.keyfile = cfg.signerfile; |
| 1222 | if (!sk_OPENSSL_STRING_push(cms_config.skkeys, | 1222 | if (!sk_OPENSSL_STRING_push(cfg.skkeys, |
| 1223 | cms_config.keyfile)) | 1223 | cfg.keyfile)) |
| 1224 | goto end; | 1224 | goto end; |
| 1225 | } | 1225 | } |
| 1226 | if (cms_config.sksigners == NULL) { | 1226 | if (cfg.sksigners == NULL) { |
| 1227 | BIO_printf(bio_err, | 1227 | BIO_printf(bio_err, |
| 1228 | "No signer certificate specified\n"); | 1228 | "No signer certificate specified\n"); |
| 1229 | badarg = 1; | 1229 | badarg = 1; |
| 1230 | } | 1230 | } |
| 1231 | cms_config.signerfile = NULL; | 1231 | cfg.signerfile = NULL; |
| 1232 | cms_config.keyfile = NULL; | 1232 | cfg.keyfile = NULL; |
| 1233 | } else if (cms_config.operation == SMIME_DECRYPT) { | 1233 | } else if (cfg.operation == SMIME_DECRYPT) { |
| 1234 | if (cms_config.recipfile == NULL && | 1234 | if (cfg.recipfile == NULL && |
| 1235 | cms_config.keyfile == NULL && | 1235 | cfg.keyfile == NULL && |
| 1236 | cms_config.secret_key == NULL && | 1236 | cfg.secret_key == NULL && |
| 1237 | cms_config.pwri_pass == NULL) { | 1237 | cfg.pwri_pass == NULL) { |
| 1238 | BIO_printf(bio_err, | 1238 | BIO_printf(bio_err, |
| 1239 | "No recipient certificate or key specified\n"); | 1239 | "No recipient certificate or key specified\n"); |
| 1240 | badarg = 1; | 1240 | badarg = 1; |
| 1241 | } | 1241 | } |
| 1242 | } else if (cms_config.operation == SMIME_ENCRYPT) { | 1242 | } else if (cfg.operation == SMIME_ENCRYPT) { |
| 1243 | if (*args == NULL && cms_config.secret_key == NULL && | 1243 | if (*args == NULL && cfg.secret_key == NULL && |
| 1244 | cms_config.pwri_pass == NULL && | 1244 | cfg.pwri_pass == NULL && |
| 1245 | cms_config.encerts == NULL) { | 1245 | cfg.encerts == NULL) { |
| 1246 | BIO_printf(bio_err, | 1246 | BIO_printf(bio_err, |
| 1247 | "No recipient(s) certificate(s) specified\n"); | 1247 | "No recipient(s) certificate(s) specified\n"); |
| 1248 | badarg = 1; | 1248 | badarg = 1; |
| 1249 | } | 1249 | } |
| 1250 | } else if (!cms_config.operation) { | 1250 | } else if (!cfg.operation) { |
| 1251 | badarg = 1; | 1251 | badarg = 1; |
| 1252 | } | 1252 | } |
| 1253 | 1253 | ||
| @@ -1257,103 +1257,103 @@ cms_main(int argc, char **argv) | |||
| 1257 | goto end; | 1257 | goto end; |
| 1258 | } | 1258 | } |
| 1259 | 1259 | ||
| 1260 | if (!app_passwd(bio_err, cms_config.passargin, NULL, &passin, NULL)) { | 1260 | if (!app_passwd(bio_err, cfg.passargin, NULL, &passin, NULL)) { |
| 1261 | BIO_printf(bio_err, "Error getting password\n"); | 1261 | BIO_printf(bio_err, "Error getting password\n"); |
| 1262 | goto end; | 1262 | goto end; |
| 1263 | } | 1263 | } |
| 1264 | ret = 2; | 1264 | ret = 2; |
| 1265 | 1265 | ||
| 1266 | if (!(cms_config.operation & SMIME_SIGNERS)) | 1266 | if (!(cfg.operation & SMIME_SIGNERS)) |
| 1267 | cms_config.flags &= ~CMS_DETACHED; | 1267 | cfg.flags &= ~CMS_DETACHED; |
| 1268 | 1268 | ||
| 1269 | if (cms_config.operation & SMIME_OP) { | 1269 | if (cfg.operation & SMIME_OP) { |
| 1270 | if (cms_config.outformat == FORMAT_ASN1) | 1270 | if (cfg.outformat == FORMAT_ASN1) |
| 1271 | outmode = "wb"; | 1271 | outmode = "wb"; |
| 1272 | } else { | 1272 | } else { |
| 1273 | if (cms_config.flags & CMS_BINARY) | 1273 | if (cfg.flags & CMS_BINARY) |
| 1274 | outmode = "wb"; | 1274 | outmode = "wb"; |
| 1275 | } | 1275 | } |
| 1276 | 1276 | ||
| 1277 | if (cms_config.operation & SMIME_IP) { | 1277 | if (cfg.operation & SMIME_IP) { |
| 1278 | if (cms_config.informat == FORMAT_ASN1) | 1278 | if (cfg.informat == FORMAT_ASN1) |
| 1279 | inmode = "rb"; | 1279 | inmode = "rb"; |
| 1280 | } else { | 1280 | } else { |
| 1281 | if (cms_config.flags & CMS_BINARY) | 1281 | if (cfg.flags & CMS_BINARY) |
| 1282 | inmode = "rb"; | 1282 | inmode = "rb"; |
| 1283 | } | 1283 | } |
| 1284 | 1284 | ||
| 1285 | if (cms_config.operation == SMIME_ENCRYPT) { | 1285 | if (cfg.operation == SMIME_ENCRYPT) { |
| 1286 | if (cms_config.cipher == NULL) { | 1286 | if (cfg.cipher == NULL) { |
| 1287 | #ifndef OPENSSL_NO_DES | 1287 | #ifndef OPENSSL_NO_DES |
| 1288 | cms_config.cipher = EVP_des_ede3_cbc(); | 1288 | cfg.cipher = EVP_des_ede3_cbc(); |
| 1289 | #else | 1289 | #else |
| 1290 | BIO_printf(bio_err, "No cipher selected\n"); | 1290 | BIO_printf(bio_err, "No cipher selected\n"); |
| 1291 | goto end; | 1291 | goto end; |
| 1292 | #endif | 1292 | #endif |
| 1293 | } | 1293 | } |
| 1294 | if (cms_config.secret_key != NULL && | 1294 | if (cfg.secret_key != NULL && |
| 1295 | cms_config.secret_keyid == NULL) { | 1295 | cfg.secret_keyid == NULL) { |
| 1296 | BIO_printf(bio_err, "No secret key id\n"); | 1296 | BIO_printf(bio_err, "No secret key id\n"); |
| 1297 | goto end; | 1297 | goto end; |
| 1298 | } | 1298 | } |
| 1299 | if (*args != NULL && cms_config.encerts == NULL) | 1299 | if (*args != NULL && cfg.encerts == NULL) |
| 1300 | if ((cms_config.encerts = sk_X509_new_null()) == NULL) | 1300 | if ((cfg.encerts = sk_X509_new_null()) == NULL) |
| 1301 | goto end; | 1301 | goto end; |
| 1302 | while (*args) { | 1302 | while (*args) { |
| 1303 | if ((cms_config.cert = load_cert(bio_err, *args, | 1303 | if ((cfg.cert = load_cert(bio_err, *args, |
| 1304 | FORMAT_PEM, NULL, | 1304 | FORMAT_PEM, NULL, |
| 1305 | "recipient certificate file")) == NULL) | 1305 | "recipient certificate file")) == NULL) |
| 1306 | goto end; | 1306 | goto end; |
| 1307 | if (!sk_X509_push(cms_config.encerts, cms_config.cert)) | 1307 | if (!sk_X509_push(cfg.encerts, cfg.cert)) |
| 1308 | goto end; | 1308 | goto end; |
| 1309 | cms_config.cert = NULL; | 1309 | cfg.cert = NULL; |
| 1310 | args++; | 1310 | args++; |
| 1311 | } | 1311 | } |
| 1312 | } | 1312 | } |
| 1313 | if (cms_config.certfile != NULL) { | 1313 | if (cfg.certfile != NULL) { |
| 1314 | if ((other = load_certs(bio_err, cms_config.certfile, | 1314 | if ((other = load_certs(bio_err, cfg.certfile, |
| 1315 | FORMAT_PEM, NULL, "certificate file")) == NULL) { | 1315 | FORMAT_PEM, NULL, "certificate file")) == NULL) { |
| 1316 | ERR_print_errors(bio_err); | 1316 | ERR_print_errors(bio_err); |
| 1317 | goto end; | 1317 | goto end; |
| 1318 | } | 1318 | } |
| 1319 | } | 1319 | } |
| 1320 | if (cms_config.recipfile != NULL && | 1320 | if (cfg.recipfile != NULL && |
| 1321 | (cms_config.operation == SMIME_DECRYPT)) { | 1321 | (cfg.operation == SMIME_DECRYPT)) { |
| 1322 | if ((recip = load_cert(bio_err, cms_config.recipfile, | 1322 | if ((recip = load_cert(bio_err, cfg.recipfile, |
| 1323 | FORMAT_PEM, NULL, "recipient certificate file")) == NULL) { | 1323 | FORMAT_PEM, NULL, "recipient certificate file")) == NULL) { |
| 1324 | ERR_print_errors(bio_err); | 1324 | ERR_print_errors(bio_err); |
| 1325 | goto end; | 1325 | goto end; |
| 1326 | } | 1326 | } |
| 1327 | } | 1327 | } |
| 1328 | if (cms_config.operation == SMIME_SIGN_RECEIPT) { | 1328 | if (cfg.operation == SMIME_SIGN_RECEIPT) { |
| 1329 | if ((signer = load_cert(bio_err, cms_config.signerfile, | 1329 | if ((signer = load_cert(bio_err, cfg.signerfile, |
| 1330 | FORMAT_PEM, NULL, | 1330 | FORMAT_PEM, NULL, |
| 1331 | "receipt signer certificate file")) == NULL) { | 1331 | "receipt signer certificate file")) == NULL) { |
| 1332 | ERR_print_errors(bio_err); | 1332 | ERR_print_errors(bio_err); |
| 1333 | goto end; | 1333 | goto end; |
| 1334 | } | 1334 | } |
| 1335 | } | 1335 | } |
| 1336 | if (cms_config.operation == SMIME_DECRYPT) { | 1336 | if (cfg.operation == SMIME_DECRYPT) { |
| 1337 | if (cms_config.keyfile == NULL) | 1337 | if (cfg.keyfile == NULL) |
| 1338 | cms_config.keyfile = cms_config.recipfile; | 1338 | cfg.keyfile = cfg.recipfile; |
| 1339 | } else if ((cms_config.operation == SMIME_SIGN) || | 1339 | } else if ((cfg.operation == SMIME_SIGN) || |
| 1340 | (cms_config.operation == SMIME_SIGN_RECEIPT)) { | 1340 | (cfg.operation == SMIME_SIGN_RECEIPT)) { |
| 1341 | if (cms_config.keyfile == NULL) | 1341 | if (cfg.keyfile == NULL) |
| 1342 | cms_config.keyfile = cms_config.signerfile; | 1342 | cfg.keyfile = cfg.signerfile; |
| 1343 | } else { | 1343 | } else { |
| 1344 | cms_config.keyfile = NULL; | 1344 | cfg.keyfile = NULL; |
| 1345 | } | 1345 | } |
| 1346 | 1346 | ||
| 1347 | if (cms_config.keyfile != NULL) { | 1347 | if (cfg.keyfile != NULL) { |
| 1348 | key = load_key(bio_err, cms_config.keyfile, cms_config.keyform, | 1348 | key = load_key(bio_err, cfg.keyfile, cfg.keyform, |
| 1349 | 0, passin, "signing key file"); | 1349 | 0, passin, "signing key file"); |
| 1350 | if (key == NULL) | 1350 | if (key == NULL) |
| 1351 | goto end; | 1351 | goto end; |
| 1352 | } | 1352 | } |
| 1353 | if (cms_config.infile != NULL) { | 1353 | if (cfg.infile != NULL) { |
| 1354 | if ((in = BIO_new_file(cms_config.infile, inmode)) == NULL) { | 1354 | if ((in = BIO_new_file(cfg.infile, inmode)) == NULL) { |
| 1355 | BIO_printf(bio_err, | 1355 | BIO_printf(bio_err, |
| 1356 | "Can't open input file %s\n", cms_config.infile); | 1356 | "Can't open input file %s\n", cfg.infile); |
| 1357 | goto end; | 1357 | goto end; |
| 1358 | } | 1358 | } |
| 1359 | } else { | 1359 | } else { |
| @@ -1361,12 +1361,12 @@ cms_main(int argc, char **argv) | |||
| 1361 | goto end; | 1361 | goto end; |
| 1362 | } | 1362 | } |
| 1363 | 1363 | ||
| 1364 | if (cms_config.operation & SMIME_IP) { | 1364 | if (cfg.operation & SMIME_IP) { |
| 1365 | if (cms_config.informat == FORMAT_SMIME) | 1365 | if (cfg.informat == FORMAT_SMIME) |
| 1366 | cms = SMIME_read_CMS(in, &indata); | 1366 | cms = SMIME_read_CMS(in, &indata); |
| 1367 | else if (cms_config.informat == FORMAT_PEM) | 1367 | else if (cfg.informat == FORMAT_PEM) |
| 1368 | cms = PEM_read_bio_CMS(in, NULL, NULL, NULL); | 1368 | cms = PEM_read_bio_CMS(in, NULL, NULL, NULL); |
| 1369 | else if (cms_config.informat == FORMAT_ASN1) | 1369 | else if (cfg.informat == FORMAT_ASN1) |
| 1370 | cms = d2i_CMS_bio(in, NULL); | 1370 | cms = d2i_CMS_bio(in, NULL); |
| 1371 | else { | 1371 | else { |
| 1372 | BIO_printf(bio_err, "Bad input format for CMS file\n"); | 1372 | BIO_printf(bio_err, "Bad input format for CMS file\n"); |
| @@ -1377,24 +1377,24 @@ cms_main(int argc, char **argv) | |||
| 1377 | BIO_printf(bio_err, "Error reading S/MIME message\n"); | 1377 | BIO_printf(bio_err, "Error reading S/MIME message\n"); |
| 1378 | goto end; | 1378 | goto end; |
| 1379 | } | 1379 | } |
| 1380 | if (cms_config.contfile != NULL) { | 1380 | if (cfg.contfile != NULL) { |
| 1381 | BIO_free(indata); | 1381 | BIO_free(indata); |
| 1382 | if ((indata = BIO_new_file(cms_config.contfile, | 1382 | if ((indata = BIO_new_file(cfg.contfile, |
| 1383 | "rb")) == NULL) { | 1383 | "rb")) == NULL) { |
| 1384 | BIO_printf(bio_err, | 1384 | BIO_printf(bio_err, |
| 1385 | "Can't read content file %s\n", | 1385 | "Can't read content file %s\n", |
| 1386 | cms_config.contfile); | 1386 | cfg.contfile); |
| 1387 | goto end; | 1387 | goto end; |
| 1388 | } | 1388 | } |
| 1389 | } | 1389 | } |
| 1390 | if (cms_config.certsoutfile != NULL) { | 1390 | if (cfg.certsoutfile != NULL) { |
| 1391 | STACK_OF(X509) *allcerts; | 1391 | STACK_OF(X509) *allcerts; |
| 1392 | if ((allcerts = CMS_get1_certs(cms)) == NULL) | 1392 | if ((allcerts = CMS_get1_certs(cms)) == NULL) |
| 1393 | goto end; | 1393 | goto end; |
| 1394 | if (!save_certs(cms_config.certsoutfile, allcerts)) { | 1394 | if (!save_certs(cfg.certsoutfile, allcerts)) { |
| 1395 | BIO_printf(bio_err, | 1395 | BIO_printf(bio_err, |
| 1396 | "Error writing certs to %s\n", | 1396 | "Error writing certs to %s\n", |
| 1397 | cms_config.certsoutfile); | 1397 | cfg.certsoutfile); |
| 1398 | sk_X509_pop_free(allcerts, X509_free); | 1398 | sk_X509_pop_free(allcerts, X509_free); |
| 1399 | ret = 5; | 1399 | ret = 5; |
| 1400 | goto end; | 1400 | goto end; |
| @@ -1402,19 +1402,19 @@ cms_main(int argc, char **argv) | |||
| 1402 | sk_X509_pop_free(allcerts, X509_free); | 1402 | sk_X509_pop_free(allcerts, X509_free); |
| 1403 | } | 1403 | } |
| 1404 | } | 1404 | } |
| 1405 | if (cms_config.rctfile != NULL) { | 1405 | if (cfg.rctfile != NULL) { |
| 1406 | char *rctmode = (cms_config.rctformat == FORMAT_ASN1) ? | 1406 | char *rctmode = (cfg.rctformat == FORMAT_ASN1) ? |
| 1407 | "rb" : "r"; | 1407 | "rb" : "r"; |
| 1408 | if ((rctin = BIO_new_file(cms_config.rctfile, rctmode)) == NULL) { | 1408 | if ((rctin = BIO_new_file(cfg.rctfile, rctmode)) == NULL) { |
| 1409 | BIO_printf(bio_err, | 1409 | BIO_printf(bio_err, |
| 1410 | "Can't open receipt file %s\n", cms_config.rctfile); | 1410 | "Can't open receipt file %s\n", cfg.rctfile); |
| 1411 | goto end; | 1411 | goto end; |
| 1412 | } | 1412 | } |
| 1413 | if (cms_config.rctformat == FORMAT_SMIME) | 1413 | if (cfg.rctformat == FORMAT_SMIME) |
| 1414 | rcms = SMIME_read_CMS(rctin, NULL); | 1414 | rcms = SMIME_read_CMS(rctin, NULL); |
| 1415 | else if (cms_config.rctformat == FORMAT_PEM) | 1415 | else if (cfg.rctformat == FORMAT_PEM) |
| 1416 | rcms = PEM_read_bio_CMS(rctin, NULL, NULL, NULL); | 1416 | rcms = PEM_read_bio_CMS(rctin, NULL, NULL, NULL); |
| 1417 | else if (cms_config.rctformat == FORMAT_ASN1) | 1417 | else if (cfg.rctformat == FORMAT_ASN1) |
| 1418 | rcms = d2i_CMS_bio(rctin, NULL); | 1418 | rcms = d2i_CMS_bio(rctin, NULL); |
| 1419 | else { | 1419 | else { |
| 1420 | BIO_printf(bio_err, "Bad input format for receipt\n"); | 1420 | BIO_printf(bio_err, "Bad input format for receipt\n"); |
| @@ -1426,10 +1426,10 @@ cms_main(int argc, char **argv) | |||
| 1426 | goto end; | 1426 | goto end; |
| 1427 | } | 1427 | } |
| 1428 | } | 1428 | } |
| 1429 | if (cms_config.outfile != NULL) { | 1429 | if (cfg.outfile != NULL) { |
| 1430 | if ((out = BIO_new_file(cms_config.outfile, outmode)) == NULL) { | 1430 | if ((out = BIO_new_file(cfg.outfile, outmode)) == NULL) { |
| 1431 | BIO_printf(bio_err, | 1431 | BIO_printf(bio_err, |
| 1432 | "Can't open output file %s\n", cms_config.outfile); | 1432 | "Can't open output file %s\n", cfg.outfile); |
| 1433 | goto end; | 1433 | goto end; |
| 1434 | } | 1434 | } |
| 1435 | } else { | 1435 | } else { |
| @@ -1437,42 +1437,42 @@ cms_main(int argc, char **argv) | |||
| 1437 | goto end; | 1437 | goto end; |
| 1438 | } | 1438 | } |
| 1439 | 1439 | ||
| 1440 | if ((cms_config.operation == SMIME_VERIFY) || | 1440 | if ((cfg.operation == SMIME_VERIFY) || |
| 1441 | (cms_config.operation == SMIME_VERIFY_RECEIPT)) { | 1441 | (cfg.operation == SMIME_VERIFY_RECEIPT)) { |
| 1442 | if ((store = setup_verify(bio_err, cms_config.CAfile, | 1442 | if ((store = setup_verify(bio_err, cfg.CAfile, |
| 1443 | cms_config.CApath)) == NULL) | 1443 | cfg.CApath)) == NULL) |
| 1444 | goto end; | 1444 | goto end; |
| 1445 | X509_STORE_set_verify_cb(store, cms_cb); | 1445 | X509_STORE_set_verify_cb(store, cms_cb); |
| 1446 | if (cms_config.vpm != NULL) { | 1446 | if (cfg.vpm != NULL) { |
| 1447 | if (!X509_STORE_set1_param(store, cms_config.vpm)) | 1447 | if (!X509_STORE_set1_param(store, cfg.vpm)) |
| 1448 | goto end; | 1448 | goto end; |
| 1449 | } | 1449 | } |
| 1450 | } | 1450 | } |
| 1451 | ret = 3; | 1451 | ret = 3; |
| 1452 | 1452 | ||
| 1453 | if (cms_config.operation == SMIME_DATA_CREATE) { | 1453 | if (cfg.operation == SMIME_DATA_CREATE) { |
| 1454 | cms = CMS_data_create(in, cms_config.flags); | 1454 | cms = CMS_data_create(in, cfg.flags); |
| 1455 | } else if (cms_config.operation == SMIME_DIGEST_CREATE) { | 1455 | } else if (cfg.operation == SMIME_DIGEST_CREATE) { |
| 1456 | cms = CMS_digest_create(in, cms_config.sign_md, | 1456 | cms = CMS_digest_create(in, cfg.sign_md, |
| 1457 | cms_config.flags); | 1457 | cfg.flags); |
| 1458 | } else if (cms_config.operation == SMIME_COMPRESS) { | 1458 | } else if (cfg.operation == SMIME_COMPRESS) { |
| 1459 | cms = CMS_compress(in, -1, cms_config.flags); | 1459 | cms = CMS_compress(in, -1, cfg.flags); |
| 1460 | } else if (cms_config.operation == SMIME_ENCRYPT) { | 1460 | } else if (cfg.operation == SMIME_ENCRYPT) { |
| 1461 | int i; | 1461 | int i; |
| 1462 | cms_config.flags |= CMS_PARTIAL; | 1462 | cfg.flags |= CMS_PARTIAL; |
| 1463 | cms = CMS_encrypt(NULL, in, cms_config.cipher, | 1463 | cms = CMS_encrypt(NULL, in, cfg.cipher, |
| 1464 | cms_config.flags); | 1464 | cfg.flags); |
| 1465 | if (cms == NULL) | 1465 | if (cms == NULL) |
| 1466 | goto end; | 1466 | goto end; |
| 1467 | for (i = 0; i < sk_X509_num(cms_config.encerts); i++) { | 1467 | for (i = 0; i < sk_X509_num(cfg.encerts); i++) { |
| 1468 | CMS_RecipientInfo *ri; | 1468 | CMS_RecipientInfo *ri; |
| 1469 | struct cms_key_param *kparam; | 1469 | struct cms_key_param *kparam; |
| 1470 | int tflags = cms_config.flags; | 1470 | int tflags = cfg.flags; |
| 1471 | X509 *x; | 1471 | X509 *x; |
| 1472 | 1472 | ||
| 1473 | if ((x = sk_X509_value(cms_config.encerts, i)) == NULL) | 1473 | if ((x = sk_X509_value(cfg.encerts, i)) == NULL) |
| 1474 | goto end; | 1474 | goto end; |
| 1475 | for (kparam = cms_config.key_first; kparam != NULL; | 1475 | for (kparam = cfg.key_first; kparam != NULL; |
| 1476 | kparam = kparam->next) { | 1476 | kparam = kparam->next) { |
| 1477 | if (kparam->idx == i) { | 1477 | if (kparam->idx == i) { |
| 1478 | tflags |= CMS_KEY_PARAM; | 1478 | tflags |= CMS_KEY_PARAM; |
| @@ -1492,18 +1492,18 @@ cms_main(int argc, char **argv) | |||
| 1492 | } | 1492 | } |
| 1493 | } | 1493 | } |
| 1494 | 1494 | ||
| 1495 | if (cms_config.secret_key != NULL) { | 1495 | if (cfg.secret_key != NULL) { |
| 1496 | if (CMS_add0_recipient_key(cms, NID_undef, | 1496 | if (CMS_add0_recipient_key(cms, NID_undef, |
| 1497 | cms_config.secret_key, cms_config.secret_keylen, | 1497 | cfg.secret_key, cfg.secret_keylen, |
| 1498 | cms_config.secret_keyid, cms_config.secret_keyidlen, | 1498 | cfg.secret_keyid, cfg.secret_keyidlen, |
| 1499 | NULL, NULL, NULL) == NULL) | 1499 | NULL, NULL, NULL) == NULL) |
| 1500 | goto end; | 1500 | goto end; |
| 1501 | /* NULL these because call absorbs them */ | 1501 | /* NULL these because call absorbs them */ |
| 1502 | cms_config.secret_key = NULL; | 1502 | cfg.secret_key = NULL; |
| 1503 | cms_config.secret_keyid = NULL; | 1503 | cfg.secret_keyid = NULL; |
| 1504 | } | 1504 | } |
| 1505 | if (cms_config.pwri_pass != NULL) { | 1505 | if (cfg.pwri_pass != NULL) { |
| 1506 | pwri_tmp = strdup(cms_config.pwri_pass); | 1506 | pwri_tmp = strdup(cfg.pwri_pass); |
| 1507 | if (pwri_tmp == NULL) | 1507 | if (pwri_tmp == NULL) |
| 1508 | goto end; | 1508 | goto end; |
| 1509 | if (CMS_add0_recipient_password(cms, -1, NID_undef, | 1509 | if (CMS_add0_recipient_password(cms, -1, NID_undef, |
| @@ -1511,16 +1511,16 @@ cms_main(int argc, char **argv) | |||
| 1511 | goto end; | 1511 | goto end; |
| 1512 | pwri_tmp = NULL; | 1512 | pwri_tmp = NULL; |
| 1513 | } | 1513 | } |
| 1514 | if (!(cms_config.flags & CMS_STREAM)) { | 1514 | if (!(cfg.flags & CMS_STREAM)) { |
| 1515 | if (!CMS_final(cms, in, NULL, cms_config.flags)) | 1515 | if (!CMS_final(cms, in, NULL, cfg.flags)) |
| 1516 | goto end; | 1516 | goto end; |
| 1517 | } | 1517 | } |
| 1518 | } else if (cms_config.operation == SMIME_ENCRYPTED_ENCRYPT) { | 1518 | } else if (cfg.operation == SMIME_ENCRYPTED_ENCRYPT) { |
| 1519 | cms = CMS_EncryptedData_encrypt(in, cms_config.cipher, | 1519 | cms = CMS_EncryptedData_encrypt(in, cfg.cipher, |
| 1520 | cms_config.secret_key, cms_config.secret_keylen, | 1520 | cfg.secret_key, cfg.secret_keylen, |
| 1521 | cms_config.flags); | 1521 | cfg.flags); |
| 1522 | 1522 | ||
| 1523 | } else if (cms_config.operation == SMIME_SIGN_RECEIPT) { | 1523 | } else if (cfg.operation == SMIME_SIGN_RECEIPT) { |
| 1524 | CMS_ContentInfo *srcms = NULL; | 1524 | CMS_ContentInfo *srcms = NULL; |
| 1525 | STACK_OF(CMS_SignerInfo) *sis; | 1525 | STACK_OF(CMS_SignerInfo) *sis; |
| 1526 | CMS_SignerInfo *si; | 1526 | CMS_SignerInfo *si; |
| @@ -1531,36 +1531,36 @@ cms_main(int argc, char **argv) | |||
| 1531 | if (si == NULL) | 1531 | if (si == NULL) |
| 1532 | goto end; | 1532 | goto end; |
| 1533 | srcms = CMS_sign_receipt(si, signer, key, other, | 1533 | srcms = CMS_sign_receipt(si, signer, key, other, |
| 1534 | cms_config.flags); | 1534 | cfg.flags); |
| 1535 | if (srcms == NULL) | 1535 | if (srcms == NULL) |
| 1536 | goto end; | 1536 | goto end; |
| 1537 | CMS_ContentInfo_free(cms); | 1537 | CMS_ContentInfo_free(cms); |
| 1538 | cms = srcms; | 1538 | cms = srcms; |
| 1539 | } else if (cms_config.operation & SMIME_SIGNERS) { | 1539 | } else if (cfg.operation & SMIME_SIGNERS) { |
| 1540 | int i; | 1540 | int i; |
| 1541 | /* | 1541 | /* |
| 1542 | * If detached data content we enable streaming if S/MIME | 1542 | * If detached data content we enable streaming if S/MIME |
| 1543 | * output format. | 1543 | * output format. |
| 1544 | */ | 1544 | */ |
| 1545 | if (cms_config.operation == SMIME_SIGN) { | 1545 | if (cfg.operation == SMIME_SIGN) { |
| 1546 | 1546 | ||
| 1547 | if (cms_config.flags & CMS_DETACHED) { | 1547 | if (cfg.flags & CMS_DETACHED) { |
| 1548 | if (cms_config.outformat == FORMAT_SMIME) | 1548 | if (cfg.outformat == FORMAT_SMIME) |
| 1549 | cms_config.flags |= CMS_STREAM; | 1549 | cfg.flags |= CMS_STREAM; |
| 1550 | } | 1550 | } |
| 1551 | cms_config.flags |= CMS_PARTIAL; | 1551 | cfg.flags |= CMS_PARTIAL; |
| 1552 | cms = CMS_sign(NULL, NULL, other, in, cms_config.flags); | 1552 | cms = CMS_sign(NULL, NULL, other, in, cfg.flags); |
| 1553 | if (cms == NULL) | 1553 | if (cms == NULL) |
| 1554 | goto end; | 1554 | goto end; |
| 1555 | if (cms_config.econtent_type != NULL) | 1555 | if (cfg.econtent_type != NULL) |
| 1556 | if (!CMS_set1_eContentType(cms, | 1556 | if (!CMS_set1_eContentType(cms, |
| 1557 | cms_config.econtent_type)) | 1557 | cfg.econtent_type)) |
| 1558 | goto end; | 1558 | goto end; |
| 1559 | 1559 | ||
| 1560 | if (cms_config.rr_to != NULL) { | 1560 | if (cfg.rr_to != NULL) { |
| 1561 | rr = make_receipt_request(cms_config.rr_to, | 1561 | rr = make_receipt_request(cfg.rr_to, |
| 1562 | cms_config.rr_allorfirst, | 1562 | cfg.rr_allorfirst, |
| 1563 | cms_config.rr_from); | 1563 | cfg.rr_from); |
| 1564 | if (rr == NULL) { | 1564 | if (rr == NULL) { |
| 1565 | BIO_puts(bio_err, | 1565 | BIO_puts(bio_err, |
| 1566 | "Signed Receipt Request Creation Error\n"); | 1566 | "Signed Receipt Request Creation Error\n"); |
| @@ -1568,28 +1568,28 @@ cms_main(int argc, char **argv) | |||
| 1568 | } | 1568 | } |
| 1569 | } | 1569 | } |
| 1570 | } else { | 1570 | } else { |
| 1571 | cms_config.flags |= CMS_REUSE_DIGEST; | 1571 | cfg.flags |= CMS_REUSE_DIGEST; |
| 1572 | } | 1572 | } |
| 1573 | 1573 | ||
| 1574 | for (i = 0; i < sk_OPENSSL_STRING_num(cms_config.sksigners); i++) { | 1574 | for (i = 0; i < sk_OPENSSL_STRING_num(cfg.sksigners); i++) { |
| 1575 | CMS_SignerInfo *si; | 1575 | CMS_SignerInfo *si; |
| 1576 | struct cms_key_param *kparam; | 1576 | struct cms_key_param *kparam; |
| 1577 | int tflags = cms_config.flags; | 1577 | int tflags = cfg.flags; |
| 1578 | 1578 | ||
| 1579 | cms_config.signerfile = sk_OPENSSL_STRING_value( | 1579 | cfg.signerfile = sk_OPENSSL_STRING_value( |
| 1580 | cms_config.sksigners, i); | 1580 | cfg.sksigners, i); |
| 1581 | cms_config.keyfile = sk_OPENSSL_STRING_value( | 1581 | cfg.keyfile = sk_OPENSSL_STRING_value( |
| 1582 | cms_config.skkeys, i); | 1582 | cfg.skkeys, i); |
| 1583 | 1583 | ||
| 1584 | signer = load_cert(bio_err, cms_config.signerfile, | 1584 | signer = load_cert(bio_err, cfg.signerfile, |
| 1585 | FORMAT_PEM, NULL, "signer certificate"); | 1585 | FORMAT_PEM, NULL, "signer certificate"); |
| 1586 | if (signer == NULL) | 1586 | if (signer == NULL) |
| 1587 | goto end; | 1587 | goto end; |
| 1588 | key = load_key(bio_err, cms_config.keyfile, | 1588 | key = load_key(bio_err, cfg.keyfile, |
| 1589 | cms_config.keyform, 0, passin, "signing key file"); | 1589 | cfg.keyform, 0, passin, "signing key file"); |
| 1590 | if (key == NULL) | 1590 | if (key == NULL) |
| 1591 | goto end; | 1591 | goto end; |
| 1592 | for (kparam = cms_config.key_first; kparam != NULL; | 1592 | for (kparam = cfg.key_first; kparam != NULL; |
| 1593 | kparam = kparam->next) { | 1593 | kparam = kparam->next) { |
| 1594 | if (kparam->idx == i) { | 1594 | if (kparam->idx == i) { |
| 1595 | tflags |= CMS_KEY_PARAM; | 1595 | tflags |= CMS_KEY_PARAM; |
| @@ -1597,7 +1597,7 @@ cms_main(int argc, char **argv) | |||
| 1597 | } | 1597 | } |
| 1598 | } | 1598 | } |
| 1599 | si = CMS_add1_signer(cms, signer, key, | 1599 | si = CMS_add1_signer(cms, signer, key, |
| 1600 | cms_config.sign_md, tflags); | 1600 | cfg.sign_md, tflags); |
| 1601 | if (si == NULL) | 1601 | if (si == NULL) |
| 1602 | goto end; | 1602 | goto end; |
| 1603 | if (kparam != NULL) { | 1603 | if (kparam != NULL) { |
| @@ -1616,9 +1616,9 @@ cms_main(int argc, char **argv) | |||
| 1616 | key = NULL; | 1616 | key = NULL; |
| 1617 | } | 1617 | } |
| 1618 | /* If not streaming or resigning finalize structure */ | 1618 | /* If not streaming or resigning finalize structure */ |
| 1619 | if ((cms_config.operation == SMIME_SIGN) && | 1619 | if ((cfg.operation == SMIME_SIGN) && |
| 1620 | !(cms_config.flags & CMS_STREAM)) { | 1620 | !(cfg.flags & CMS_STREAM)) { |
| 1621 | if (!CMS_final(cms, in, NULL, cms_config.flags)) | 1621 | if (!CMS_final(cms, in, NULL, cfg.flags)) |
| 1622 | goto end; | 1622 | goto end; |
| 1623 | } | 1623 | } |
| 1624 | } | 1624 | } |
| @@ -1627,15 +1627,15 @@ cms_main(int argc, char **argv) | |||
| 1627 | goto end; | 1627 | goto end; |
| 1628 | } | 1628 | } |
| 1629 | ret = 4; | 1629 | ret = 4; |
| 1630 | if (cms_config.operation == SMIME_DECRYPT) { | 1630 | if (cfg.operation == SMIME_DECRYPT) { |
| 1631 | if (cms_config.flags & CMS_DEBUG_DECRYPT) | 1631 | if (cfg.flags & CMS_DEBUG_DECRYPT) |
| 1632 | CMS_decrypt(cms, NULL, NULL, NULL, NULL, | 1632 | CMS_decrypt(cms, NULL, NULL, NULL, NULL, |
| 1633 | cms_config.flags); | 1633 | cfg.flags); |
| 1634 | 1634 | ||
| 1635 | if (cms_config.secret_key != NULL) { | 1635 | if (cfg.secret_key != NULL) { |
| 1636 | if (!CMS_decrypt_set1_key(cms, cms_config.secret_key, | 1636 | if (!CMS_decrypt_set1_key(cms, cfg.secret_key, |
| 1637 | cms_config.secret_keylen, cms_config.secret_keyid, | 1637 | cfg.secret_keylen, cfg.secret_keyid, |
| 1638 | cms_config.secret_keyidlen)) { | 1638 | cfg.secret_keyidlen)) { |
| 1639 | BIO_puts(bio_err, | 1639 | BIO_puts(bio_err, |
| 1640 | "Error decrypting CMS using secret key\n"); | 1640 | "Error decrypting CMS using secret key\n"); |
| 1641 | goto end; | 1641 | goto end; |
| @@ -1648,95 +1648,95 @@ cms_main(int argc, char **argv) | |||
| 1648 | goto end; | 1648 | goto end; |
| 1649 | } | 1649 | } |
| 1650 | } | 1650 | } |
| 1651 | if (cms_config.pwri_pass != NULL) { | 1651 | if (cfg.pwri_pass != NULL) { |
| 1652 | if (!CMS_decrypt_set1_password(cms, | 1652 | if (!CMS_decrypt_set1_password(cms, |
| 1653 | cms_config.pwri_pass, -1)) { | 1653 | cfg.pwri_pass, -1)) { |
| 1654 | BIO_puts(bio_err, | 1654 | BIO_puts(bio_err, |
| 1655 | "Error decrypting CMS using password\n"); | 1655 | "Error decrypting CMS using password\n"); |
| 1656 | goto end; | 1656 | goto end; |
| 1657 | } | 1657 | } |
| 1658 | } | 1658 | } |
| 1659 | if (!CMS_decrypt(cms, NULL, NULL, indata, out, | 1659 | if (!CMS_decrypt(cms, NULL, NULL, indata, out, |
| 1660 | cms_config.flags)) { | 1660 | cfg.flags)) { |
| 1661 | BIO_printf(bio_err, "Error decrypting CMS structure\n"); | 1661 | BIO_printf(bio_err, "Error decrypting CMS structure\n"); |
| 1662 | goto end; | 1662 | goto end; |
| 1663 | } | 1663 | } |
| 1664 | } else if (cms_config.operation == SMIME_DATAOUT) { | 1664 | } else if (cfg.operation == SMIME_DATAOUT) { |
| 1665 | if (!CMS_data(cms, out, cms_config.flags)) | 1665 | if (!CMS_data(cms, out, cfg.flags)) |
| 1666 | goto end; | 1666 | goto end; |
| 1667 | } else if (cms_config.operation == SMIME_UNCOMPRESS) { | 1667 | } else if (cfg.operation == SMIME_UNCOMPRESS) { |
| 1668 | if (!CMS_uncompress(cms, indata, out, cms_config.flags)) | 1668 | if (!CMS_uncompress(cms, indata, out, cfg.flags)) |
| 1669 | goto end; | 1669 | goto end; |
| 1670 | } else if (cms_config.operation == SMIME_DIGEST_VERIFY) { | 1670 | } else if (cfg.operation == SMIME_DIGEST_VERIFY) { |
| 1671 | if (CMS_digest_verify(cms, indata, out, cms_config.flags) > 0) | 1671 | if (CMS_digest_verify(cms, indata, out, cfg.flags) > 0) |
| 1672 | BIO_printf(bio_err, "Verification successful\n"); | 1672 | BIO_printf(bio_err, "Verification successful\n"); |
| 1673 | else { | 1673 | else { |
| 1674 | BIO_printf(bio_err, "Verification failure\n"); | 1674 | BIO_printf(bio_err, "Verification failure\n"); |
| 1675 | goto end; | 1675 | goto end; |
| 1676 | } | 1676 | } |
| 1677 | } else if (cms_config.operation == SMIME_ENCRYPTED_DECRYPT) { | 1677 | } else if (cfg.operation == SMIME_ENCRYPTED_DECRYPT) { |
| 1678 | if (!CMS_EncryptedData_decrypt(cms, cms_config.secret_key, | 1678 | if (!CMS_EncryptedData_decrypt(cms, cfg.secret_key, |
| 1679 | cms_config.secret_keylen, indata, out, cms_config.flags)) | 1679 | cfg.secret_keylen, indata, out, cfg.flags)) |
| 1680 | goto end; | 1680 | goto end; |
| 1681 | } else if (cms_config.operation == SMIME_VERIFY) { | 1681 | } else if (cfg.operation == SMIME_VERIFY) { |
| 1682 | if (CMS_verify(cms, other, store, indata, out, | 1682 | if (CMS_verify(cms, other, store, indata, out, |
| 1683 | cms_config.flags) > 0) { | 1683 | cfg.flags) > 0) { |
| 1684 | BIO_printf(bio_err, "Verification successful\n"); | 1684 | BIO_printf(bio_err, "Verification successful\n"); |
| 1685 | } else { | 1685 | } else { |
| 1686 | BIO_printf(bio_err, "Verification failure\n"); | 1686 | BIO_printf(bio_err, "Verification failure\n"); |
| 1687 | if (cms_config.verify_retcode) | 1687 | if (cfg.verify_retcode) |
| 1688 | ret = verify_err + 32; | 1688 | ret = verify_err + 32; |
| 1689 | goto end; | 1689 | goto end; |
| 1690 | } | 1690 | } |
| 1691 | if (cms_config.signerfile != NULL) { | 1691 | if (cfg.signerfile != NULL) { |
| 1692 | STACK_OF(X509) *signers; | 1692 | STACK_OF(X509) *signers; |
| 1693 | if ((signers = CMS_get0_signers(cms)) == NULL) | 1693 | if ((signers = CMS_get0_signers(cms)) == NULL) |
| 1694 | goto end; | 1694 | goto end; |
| 1695 | if (!save_certs(cms_config.signerfile, signers)) { | 1695 | if (!save_certs(cfg.signerfile, signers)) { |
| 1696 | BIO_printf(bio_err, | 1696 | BIO_printf(bio_err, |
| 1697 | "Error writing signers to %s\n", | 1697 | "Error writing signers to %s\n", |
| 1698 | cms_config.signerfile); | 1698 | cfg.signerfile); |
| 1699 | sk_X509_free(signers); | 1699 | sk_X509_free(signers); |
| 1700 | ret = 5; | 1700 | ret = 5; |
| 1701 | goto end; | 1701 | goto end; |
| 1702 | } | 1702 | } |
| 1703 | sk_X509_free(signers); | 1703 | sk_X509_free(signers); |
| 1704 | } | 1704 | } |
| 1705 | if (cms_config.rr_print) | 1705 | if (cfg.rr_print) |
| 1706 | receipt_request_print(bio_err, cms); | 1706 | receipt_request_print(bio_err, cms); |
| 1707 | 1707 | ||
| 1708 | } else if (cms_config.operation == SMIME_VERIFY_RECEIPT) { | 1708 | } else if (cfg.operation == SMIME_VERIFY_RECEIPT) { |
| 1709 | if (CMS_verify_receipt(rcms, cms, other, store, | 1709 | if (CMS_verify_receipt(rcms, cms, other, store, |
| 1710 | cms_config.flags) > 0) { | 1710 | cfg.flags) > 0) { |
| 1711 | BIO_printf(bio_err, "Verification successful\n"); | 1711 | BIO_printf(bio_err, "Verification successful\n"); |
| 1712 | } else { | 1712 | } else { |
| 1713 | BIO_printf(bio_err, "Verification failure\n"); | 1713 | BIO_printf(bio_err, "Verification failure\n"); |
| 1714 | goto end; | 1714 | goto end; |
| 1715 | } | 1715 | } |
| 1716 | } else { | 1716 | } else { |
| 1717 | if (cms_config.noout) { | 1717 | if (cfg.noout) { |
| 1718 | if (cms_config.print && | 1718 | if (cfg.print && |
| 1719 | !CMS_ContentInfo_print_ctx(out, cms, 0, NULL)) | 1719 | !CMS_ContentInfo_print_ctx(out, cms, 0, NULL)) |
| 1720 | goto end; | 1720 | goto end; |
| 1721 | } else if (cms_config.outformat == FORMAT_SMIME) { | 1721 | } else if (cfg.outformat == FORMAT_SMIME) { |
| 1722 | if (cms_config.to != NULL) | 1722 | if (cfg.to != NULL) |
| 1723 | BIO_printf(out, "To: %s\n", cms_config.to); | 1723 | BIO_printf(out, "To: %s\n", cfg.to); |
| 1724 | if (cms_config.from != NULL) | 1724 | if (cfg.from != NULL) |
| 1725 | BIO_printf(out, "From: %s\n", cms_config.from); | 1725 | BIO_printf(out, "From: %s\n", cfg.from); |
| 1726 | if (cms_config.subject != NULL) | 1726 | if (cfg.subject != NULL) |
| 1727 | BIO_printf(out, "Subject: %s\n", | 1727 | BIO_printf(out, "Subject: %s\n", |
| 1728 | cms_config.subject); | 1728 | cfg.subject); |
| 1729 | if (cms_config.operation == SMIME_RESIGN) | 1729 | if (cfg.operation == SMIME_RESIGN) |
| 1730 | ret = SMIME_write_CMS(out, cms, indata, | 1730 | ret = SMIME_write_CMS(out, cms, indata, |
| 1731 | cms_config.flags); | 1731 | cfg.flags); |
| 1732 | else | 1732 | else |
| 1733 | ret = SMIME_write_CMS(out, cms, in, | 1733 | ret = SMIME_write_CMS(out, cms, in, |
| 1734 | cms_config.flags); | 1734 | cfg.flags); |
| 1735 | } else if (cms_config.outformat == FORMAT_PEM) { | 1735 | } else if (cfg.outformat == FORMAT_PEM) { |
| 1736 | ret = PEM_write_bio_CMS_stream(out, cms, in, | 1736 | ret = PEM_write_bio_CMS_stream(out, cms, in, |
| 1737 | cms_config.flags); | 1737 | cfg.flags); |
| 1738 | } else if (cms_config.outformat == FORMAT_ASN1) { | 1738 | } else if (cfg.outformat == FORMAT_ASN1) { |
| 1739 | ret = i2d_CMS_bio_stream(out, cms, in, cms_config.flags); | 1739 | ret = i2d_CMS_bio_stream(out, cms, in, cfg.flags); |
| 1740 | } else { | 1740 | } else { |
| 1741 | BIO_printf(bio_err, "Bad output format for CMS file\n"); | 1741 | BIO_printf(bio_err, "Bad output format for CMS file\n"); |
| 1742 | goto end; | 1742 | goto end; |
| @@ -1752,27 +1752,27 @@ cms_main(int argc, char **argv) | |||
| 1752 | if (ret) | 1752 | if (ret) |
| 1753 | ERR_print_errors(bio_err); | 1753 | ERR_print_errors(bio_err); |
| 1754 | 1754 | ||
| 1755 | sk_X509_pop_free(cms_config.encerts, X509_free); | 1755 | sk_X509_pop_free(cfg.encerts, X509_free); |
| 1756 | sk_X509_pop_free(other, X509_free); | 1756 | sk_X509_pop_free(other, X509_free); |
| 1757 | X509_VERIFY_PARAM_free(cms_config.vpm); | 1757 | X509_VERIFY_PARAM_free(cfg.vpm); |
| 1758 | sk_OPENSSL_STRING_free(cms_config.sksigners); | 1758 | sk_OPENSSL_STRING_free(cfg.sksigners); |
| 1759 | sk_OPENSSL_STRING_free(cms_config.skkeys); | 1759 | sk_OPENSSL_STRING_free(cfg.skkeys); |
| 1760 | free(cms_config.secret_key); | 1760 | free(cfg.secret_key); |
| 1761 | free(cms_config.secret_keyid); | 1761 | free(cfg.secret_keyid); |
| 1762 | free(pwri_tmp); | 1762 | free(pwri_tmp); |
| 1763 | ASN1_OBJECT_free(cms_config.econtent_type); | 1763 | ASN1_OBJECT_free(cfg.econtent_type); |
| 1764 | CMS_ReceiptRequest_free(rr); | 1764 | CMS_ReceiptRequest_free(rr); |
| 1765 | sk_OPENSSL_STRING_free(cms_config.rr_to); | 1765 | sk_OPENSSL_STRING_free(cfg.rr_to); |
| 1766 | sk_OPENSSL_STRING_free(cms_config.rr_from); | 1766 | sk_OPENSSL_STRING_free(cfg.rr_from); |
| 1767 | for (cms_config.key_param = cms_config.key_first; cms_config.key_param;) { | 1767 | for (cfg.key_param = cfg.key_first; cfg.key_param;) { |
| 1768 | struct cms_key_param *tparam; | 1768 | struct cms_key_param *tparam; |
| 1769 | sk_OPENSSL_STRING_free(cms_config.key_param->param); | 1769 | sk_OPENSSL_STRING_free(cfg.key_param->param); |
| 1770 | tparam = cms_config.key_param->next; | 1770 | tparam = cfg.key_param->next; |
| 1771 | free(cms_config.key_param); | 1771 | free(cfg.key_param); |
| 1772 | cms_config.key_param = tparam; | 1772 | cfg.key_param = tparam; |
| 1773 | } | 1773 | } |
| 1774 | X509_STORE_free(store); | 1774 | X509_STORE_free(store); |
| 1775 | X509_free(cms_config.cert); | 1775 | X509_free(cfg.cert); |
| 1776 | X509_free(recip); | 1776 | X509_free(recip); |
| 1777 | X509_free(signer); | 1777 | X509_free(signer); |
| 1778 | EVP_PKEY_free(key); | 1778 | EVP_PKEY_free(key); |
diff --git a/src/usr.bin/openssl/crl.c b/src/usr.bin/openssl/crl.c index 6b7bc5b72e..e64038dfda 100644 --- a/src/usr.bin/openssl/crl.c +++ b/src/usr.bin/openssl/crl.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: crl.c,v 1.16 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: crl.c,v 1.17 2023/03/06 14:32:05 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -86,7 +86,7 @@ static struct { | |||
| 86 | int outformat; | 86 | int outformat; |
| 87 | int text; | 87 | int text; |
| 88 | int verify; | 88 | int verify; |
| 89 | } crl_config; | 89 | } cfg; |
| 90 | 90 | ||
| 91 | static const struct option crl_options[] = { | 91 | static const struct option crl_options[] = { |
| 92 | { | 92 | { |
| @@ -94,109 +94,109 @@ static const struct option crl_options[] = { | |||
| 94 | .argname = "file", | 94 | .argname = "file", |
| 95 | .desc = "Verify the CRL using certificates in the given file", | 95 | .desc = "Verify the CRL using certificates in the given file", |
| 96 | .type = OPTION_ARG, | 96 | .type = OPTION_ARG, |
| 97 | .opt.arg = &crl_config.cafile, | 97 | .opt.arg = &cfg.cafile, |
| 98 | }, | 98 | }, |
| 99 | { | 99 | { |
| 100 | .name = "CApath", | 100 | .name = "CApath", |
| 101 | .argname = "path", | 101 | .argname = "path", |
| 102 | .desc = "Verify the CRL using certificates in the given path", | 102 | .desc = "Verify the CRL using certificates in the given path", |
| 103 | .type = OPTION_ARG, | 103 | .type = OPTION_ARG, |
| 104 | .opt.arg = &crl_config.capath, | 104 | .opt.arg = &cfg.capath, |
| 105 | }, | 105 | }, |
| 106 | { | 106 | { |
| 107 | .name = "crlnumber", | 107 | .name = "crlnumber", |
| 108 | .desc = "Print the CRL number", | 108 | .desc = "Print the CRL number", |
| 109 | .type = OPTION_FLAG_ORD, | 109 | .type = OPTION_FLAG_ORD, |
| 110 | .opt.flag = &crl_config.crlnumber, | 110 | .opt.flag = &cfg.crlnumber, |
| 111 | }, | 111 | }, |
| 112 | { | 112 | { |
| 113 | .name = "fingerprint", | 113 | .name = "fingerprint", |
| 114 | .desc = "Print the CRL fingerprint", | 114 | .desc = "Print the CRL fingerprint", |
| 115 | .type = OPTION_FLAG_ORD, | 115 | .type = OPTION_FLAG_ORD, |
| 116 | .opt.flag = &crl_config.fingerprint, | 116 | .opt.flag = &cfg.fingerprint, |
| 117 | }, | 117 | }, |
| 118 | { | 118 | { |
| 119 | .name = "hash", | 119 | .name = "hash", |
| 120 | .desc = "Print the hash of the issuer name", | 120 | .desc = "Print the hash of the issuer name", |
| 121 | .type = OPTION_FLAG_ORD, | 121 | .type = OPTION_FLAG_ORD, |
| 122 | .opt.flag = &crl_config.hash, | 122 | .opt.flag = &cfg.hash, |
| 123 | }, | 123 | }, |
| 124 | { | 124 | { |
| 125 | .name = "hash_old", | 125 | .name = "hash_old", |
| 126 | .desc = "Print an old-style (MD5) hash of the issuer name", | 126 | .desc = "Print an old-style (MD5) hash of the issuer name", |
| 127 | .type = OPTION_FLAG_ORD, | 127 | .type = OPTION_FLAG_ORD, |
| 128 | .opt.flag = &crl_config.hash_old, | 128 | .opt.flag = &cfg.hash_old, |
| 129 | }, | 129 | }, |
| 130 | { | 130 | { |
| 131 | .name = "in", | 131 | .name = "in", |
| 132 | .argname = "file", | 132 | .argname = "file", |
| 133 | .desc = "Input file to read from (stdin if unspecified)", | 133 | .desc = "Input file to read from (stdin if unspecified)", |
| 134 | .type = OPTION_ARG, | 134 | .type = OPTION_ARG, |
| 135 | .opt.arg = &crl_config.infile, | 135 | .opt.arg = &cfg.infile, |
| 136 | }, | 136 | }, |
| 137 | { | 137 | { |
| 138 | .name = "inform", | 138 | .name = "inform", |
| 139 | .argname = "format", | 139 | .argname = "format", |
| 140 | .desc = "Input format (DER or PEM)", | 140 | .desc = "Input format (DER or PEM)", |
| 141 | .type = OPTION_ARG_FORMAT, | 141 | .type = OPTION_ARG_FORMAT, |
| 142 | .opt.value = &crl_config.informat, | 142 | .opt.value = &cfg.informat, |
| 143 | }, | 143 | }, |
| 144 | { | 144 | { |
| 145 | .name = "issuer", | 145 | .name = "issuer", |
| 146 | .desc = "Print the issuer name", | 146 | .desc = "Print the issuer name", |
| 147 | .type = OPTION_FLAG_ORD, | 147 | .type = OPTION_FLAG_ORD, |
| 148 | .opt.flag = &crl_config.issuer, | 148 | .opt.flag = &cfg.issuer, |
| 149 | }, | 149 | }, |
| 150 | { | 150 | { |
| 151 | .name = "lastupdate", | 151 | .name = "lastupdate", |
| 152 | .desc = "Print the lastUpdate field", | 152 | .desc = "Print the lastUpdate field", |
| 153 | .type = OPTION_FLAG_ORD, | 153 | .type = OPTION_FLAG_ORD, |
| 154 | .opt.flag = &crl_config.lastupdate, | 154 | .opt.flag = &cfg.lastupdate, |
| 155 | }, | 155 | }, |
| 156 | { | 156 | { |
| 157 | .name = "nameopt", | 157 | .name = "nameopt", |
| 158 | .argname = "options", | 158 | .argname = "options", |
| 159 | .desc = "Specify certificate name options", | 159 | .desc = "Specify certificate name options", |
| 160 | .type = OPTION_ARG, | 160 | .type = OPTION_ARG, |
| 161 | .opt.arg = &crl_config.nameopt, | 161 | .opt.arg = &cfg.nameopt, |
| 162 | }, | 162 | }, |
| 163 | { | 163 | { |
| 164 | .name = "nextupdate", | 164 | .name = "nextupdate", |
| 165 | .desc = "Print the nextUpdate field", | 165 | .desc = "Print the nextUpdate field", |
| 166 | .type = OPTION_FLAG_ORD, | 166 | .type = OPTION_FLAG_ORD, |
| 167 | .opt.flag = &crl_config.nextupdate, | 167 | .opt.flag = &cfg.nextupdate, |
| 168 | }, | 168 | }, |
| 169 | { | 169 | { |
| 170 | .name = "noout", | 170 | .name = "noout", |
| 171 | .desc = "Do not output the encoded version of the CRL", | 171 | .desc = "Do not output the encoded version of the CRL", |
| 172 | .type = OPTION_FLAG, | 172 | .type = OPTION_FLAG, |
| 173 | .opt.flag = &crl_config.noout, | 173 | .opt.flag = &cfg.noout, |
| 174 | }, | 174 | }, |
| 175 | { | 175 | { |
| 176 | .name = "out", | 176 | .name = "out", |
| 177 | .argname = "file", | 177 | .argname = "file", |
| 178 | .desc = "Output file to write to (stdout if unspecified)", | 178 | .desc = "Output file to write to (stdout if unspecified)", |
| 179 | .type = OPTION_ARG, | 179 | .type = OPTION_ARG, |
| 180 | .opt.arg = &crl_config.outfile, | 180 | .opt.arg = &cfg.outfile, |
| 181 | }, | 181 | }, |
| 182 | { | 182 | { |
| 183 | .name = "outform", | 183 | .name = "outform", |
| 184 | .argname = "format", | 184 | .argname = "format", |
| 185 | .desc = "Output format (DER or PEM)", | 185 | .desc = "Output format (DER or PEM)", |
| 186 | .type = OPTION_ARG_FORMAT, | 186 | .type = OPTION_ARG_FORMAT, |
| 187 | .opt.value = &crl_config.outformat, | 187 | .opt.value = &cfg.outformat, |
| 188 | }, | 188 | }, |
| 189 | { | 189 | { |
| 190 | .name = "text", | 190 | .name = "text", |
| 191 | .desc = "Print out the CRL in text form", | 191 | .desc = "Print out the CRL in text form", |
| 192 | .type = OPTION_FLAG, | 192 | .type = OPTION_FLAG, |
| 193 | .opt.flag = &crl_config.text, | 193 | .opt.flag = &cfg.text, |
| 194 | }, | 194 | }, |
| 195 | { | 195 | { |
| 196 | .name = "verify", | 196 | .name = "verify", |
| 197 | .desc = "Verify the signature on the CRL", | 197 | .desc = "Verify the signature on the CRL", |
| 198 | .type = OPTION_FLAG, | 198 | .type = OPTION_FLAG, |
| 199 | .opt.flag = &crl_config.verify, | 199 | .opt.flag = &cfg.verify, |
| 200 | }, | 200 | }, |
| 201 | {NULL}, | 201 | {NULL}, |
| 202 | }; | 202 | }; |
| @@ -243,23 +243,23 @@ crl_main(int argc, char **argv) | |||
| 243 | 243 | ||
| 244 | digest = EVP_sha256(); | 244 | digest = EVP_sha256(); |
| 245 | 245 | ||
| 246 | memset(&crl_config, 0, sizeof(crl_config)); | 246 | memset(&cfg, 0, sizeof(cfg)); |
| 247 | crl_config.informat = FORMAT_PEM; | 247 | cfg.informat = FORMAT_PEM; |
| 248 | crl_config.outformat = FORMAT_PEM; | 248 | cfg.outformat = FORMAT_PEM; |
| 249 | 249 | ||
| 250 | if (options_parse(argc, argv, crl_options, &digest_name, NULL) != 0) { | 250 | if (options_parse(argc, argv, crl_options, &digest_name, NULL) != 0) { |
| 251 | crl_usage(); | 251 | crl_usage(); |
| 252 | goto end; | 252 | goto end; |
| 253 | } | 253 | } |
| 254 | 254 | ||
| 255 | if (crl_config.cafile != NULL || crl_config.capath != NULL) | 255 | if (cfg.cafile != NULL || cfg.capath != NULL) |
| 256 | crl_config.verify = 1; | 256 | cfg.verify = 1; |
| 257 | 257 | ||
| 258 | if (crl_config.nameopt != NULL) { | 258 | if (cfg.nameopt != NULL) { |
| 259 | if (set_name_ex(&nmflag, crl_config.nameopt) != 1) { | 259 | if (set_name_ex(&nmflag, cfg.nameopt) != 1) { |
| 260 | fprintf(stderr, | 260 | fprintf(stderr, |
| 261 | "Invalid -nameopt argument '%s'\n", | 261 | "Invalid -nameopt argument '%s'\n", |
| 262 | crl_config.nameopt); | 262 | cfg.nameopt); |
| 263 | goto end; | 263 | goto end; |
| 264 | } | 264 | } |
| 265 | } | 265 | } |
| @@ -273,18 +273,18 @@ crl_main(int argc, char **argv) | |||
| 273 | } | 273 | } |
| 274 | } | 274 | } |
| 275 | 275 | ||
| 276 | x = load_crl(crl_config.infile, crl_config.informat); | 276 | x = load_crl(cfg.infile, cfg.informat); |
| 277 | if (x == NULL) | 277 | if (x == NULL) |
| 278 | goto end; | 278 | goto end; |
| 279 | 279 | ||
| 280 | if (crl_config.verify) { | 280 | if (cfg.verify) { |
| 281 | store = X509_STORE_new(); | 281 | store = X509_STORE_new(); |
| 282 | if (store == NULL) | 282 | if (store == NULL) |
| 283 | goto end; | 283 | goto end; |
| 284 | lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); | 284 | lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); |
| 285 | if (lookup == NULL) | 285 | if (lookup == NULL) |
| 286 | goto end; | 286 | goto end; |
| 287 | if (!X509_LOOKUP_load_file(lookup, crl_config.cafile, | 287 | if (!X509_LOOKUP_load_file(lookup, cfg.cafile, |
| 288 | X509_FILETYPE_PEM)) | 288 | X509_FILETYPE_PEM)) |
| 289 | X509_LOOKUP_load_file(lookup, NULL, | 289 | X509_LOOKUP_load_file(lookup, NULL, |
| 290 | X509_FILETYPE_DEFAULT); | 290 | X509_FILETYPE_DEFAULT); |
| @@ -292,7 +292,7 @@ crl_main(int argc, char **argv) | |||
| 292 | lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir()); | 292 | lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir()); |
| 293 | if (lookup == NULL) | 293 | if (lookup == NULL) |
| 294 | goto end; | 294 | goto end; |
| 295 | if (!X509_LOOKUP_add_dir(lookup, crl_config.capath, | 295 | if (!X509_LOOKUP_add_dir(lookup, cfg.capath, |
| 296 | X509_FILETYPE_PEM)) | 296 | X509_FILETYPE_PEM)) |
| 297 | X509_LOOKUP_add_dir(lookup, NULL, | 297 | X509_LOOKUP_add_dir(lookup, NULL, |
| 298 | X509_FILETYPE_DEFAULT); | 298 | X509_FILETYPE_DEFAULT); |
| @@ -335,11 +335,11 @@ crl_main(int argc, char **argv) | |||
| 335 | 335 | ||
| 336 | /* Print requested information the order that the flags were given. */ | 336 | /* Print requested information the order that the flags were given. */ |
| 337 | for (i = 1; i <= argc; i++) { | 337 | for (i = 1; i <= argc; i++) { |
| 338 | if (crl_config.issuer == i) { | 338 | if (cfg.issuer == i) { |
| 339 | print_name(bio_out, "issuer=", | 339 | print_name(bio_out, "issuer=", |
| 340 | X509_CRL_get_issuer(x), nmflag); | 340 | X509_CRL_get_issuer(x), nmflag); |
| 341 | } | 341 | } |
| 342 | if (crl_config.crlnumber == i) { | 342 | if (cfg.crlnumber == i) { |
| 343 | ASN1_INTEGER *crlnum; | 343 | ASN1_INTEGER *crlnum; |
| 344 | crlnum = X509_CRL_get_ext_d2i(x, | 344 | crlnum = X509_CRL_get_ext_d2i(x, |
| 345 | NID_crl_number, NULL, NULL); | 345 | NID_crl_number, NULL, NULL); |
| @@ -351,23 +351,23 @@ crl_main(int argc, char **argv) | |||
| 351 | BIO_puts(bio_out, "<NONE>"); | 351 | BIO_puts(bio_out, "<NONE>"); |
| 352 | BIO_printf(bio_out, "\n"); | 352 | BIO_printf(bio_out, "\n"); |
| 353 | } | 353 | } |
| 354 | if (crl_config.hash == i) { | 354 | if (cfg.hash == i) { |
| 355 | BIO_printf(bio_out, "%08lx\n", | 355 | BIO_printf(bio_out, "%08lx\n", |
| 356 | X509_NAME_hash(X509_CRL_get_issuer(x))); | 356 | X509_NAME_hash(X509_CRL_get_issuer(x))); |
| 357 | } | 357 | } |
| 358 | #ifndef OPENSSL_NO_MD5 | 358 | #ifndef OPENSSL_NO_MD5 |
| 359 | if (crl_config.hash_old == i) { | 359 | if (cfg.hash_old == i) { |
| 360 | BIO_printf(bio_out, "%08lx\n", | 360 | BIO_printf(bio_out, "%08lx\n", |
| 361 | X509_NAME_hash_old(X509_CRL_get_issuer(x))); | 361 | X509_NAME_hash_old(X509_CRL_get_issuer(x))); |
| 362 | } | 362 | } |
| 363 | #endif | 363 | #endif |
| 364 | if (crl_config.lastupdate == i) { | 364 | if (cfg.lastupdate == i) { |
| 365 | BIO_printf(bio_out, "lastUpdate="); | 365 | BIO_printf(bio_out, "lastUpdate="); |
| 366 | ASN1_TIME_print(bio_out, | 366 | ASN1_TIME_print(bio_out, |
| 367 | X509_CRL_get_lastUpdate(x)); | 367 | X509_CRL_get_lastUpdate(x)); |
| 368 | BIO_printf(bio_out, "\n"); | 368 | BIO_printf(bio_out, "\n"); |
| 369 | } | 369 | } |
| 370 | if (crl_config.nextupdate == i) { | 370 | if (cfg.nextupdate == i) { |
| 371 | BIO_printf(bio_out, "nextUpdate="); | 371 | BIO_printf(bio_out, "nextUpdate="); |
| 372 | if (X509_CRL_get_nextUpdate(x)) | 372 | if (X509_CRL_get_nextUpdate(x)) |
| 373 | ASN1_TIME_print(bio_out, | 373 | ASN1_TIME_print(bio_out, |
| @@ -376,7 +376,7 @@ crl_main(int argc, char **argv) | |||
| 376 | BIO_printf(bio_out, "NONE"); | 376 | BIO_printf(bio_out, "NONE"); |
| 377 | BIO_printf(bio_out, "\n"); | 377 | BIO_printf(bio_out, "\n"); |
| 378 | } | 378 | } |
| 379 | if (crl_config.fingerprint == i) { | 379 | if (cfg.fingerprint == i) { |
| 380 | int j; | 380 | int j; |
| 381 | unsigned int n; | 381 | unsigned int n; |
| 382 | unsigned char md[EVP_MAX_MD_SIZE]; | 382 | unsigned char md[EVP_MAX_MD_SIZE]; |
| @@ -399,25 +399,25 @@ crl_main(int argc, char **argv) | |||
| 399 | ERR_print_errors(bio_err); | 399 | ERR_print_errors(bio_err); |
| 400 | goto end; | 400 | goto end; |
| 401 | } | 401 | } |
| 402 | if (crl_config.outfile == NULL) { | 402 | if (cfg.outfile == NULL) { |
| 403 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 403 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 404 | } else { | 404 | } else { |
| 405 | if (BIO_write_filename(out, crl_config.outfile) <= 0) { | 405 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 406 | perror(crl_config.outfile); | 406 | perror(cfg.outfile); |
| 407 | goto end; | 407 | goto end; |
| 408 | } | 408 | } |
| 409 | } | 409 | } |
| 410 | 410 | ||
| 411 | if (crl_config.text) | 411 | if (cfg.text) |
| 412 | X509_CRL_print(out, x); | 412 | X509_CRL_print(out, x); |
| 413 | 413 | ||
| 414 | if (crl_config.noout) { | 414 | if (cfg.noout) { |
| 415 | ret = 0; | 415 | ret = 0; |
| 416 | goto end; | 416 | goto end; |
| 417 | } | 417 | } |
| 418 | if (crl_config.outformat == FORMAT_ASN1) | 418 | if (cfg.outformat == FORMAT_ASN1) |
| 419 | i = (int) i2d_X509_CRL_bio(out, x); | 419 | i = (int) i2d_X509_CRL_bio(out, x); |
| 420 | else if (crl_config.outformat == FORMAT_PEM) | 420 | else if (cfg.outformat == FORMAT_PEM) |
| 421 | i = PEM_write_bio_X509_CRL(out, x); | 421 | i = PEM_write_bio_X509_CRL(out, x); |
| 422 | else { | 422 | else { |
| 423 | BIO_printf(bio_err, | 423 | BIO_printf(bio_err, |
diff --git a/src/usr.bin/openssl/crl2p7.c b/src/usr.bin/openssl/crl2p7.c index 0b0eae2a99..dfbc896a21 100644 --- a/src/usr.bin/openssl/crl2p7.c +++ b/src/usr.bin/openssl/crl2p7.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: crl2p7.c,v 1.10 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: crl2p7.c,v 1.11 2023/03/06 14:32:05 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -83,18 +83,18 @@ static struct { | |||
| 83 | int nocrl; | 83 | int nocrl; |
| 84 | char *outfile; | 84 | char *outfile; |
| 85 | int outformat; | 85 | int outformat; |
| 86 | } crl2p7_config; | 86 | } cfg; |
| 87 | 87 | ||
| 88 | static int | 88 | static int |
| 89 | crl2p7_opt_certfile(char *arg) | 89 | crl2p7_opt_certfile(char *arg) |
| 90 | { | 90 | { |
| 91 | if (crl2p7_config.certflst == NULL) | 91 | if (cfg.certflst == NULL) |
| 92 | crl2p7_config.certflst = sk_OPENSSL_STRING_new_null(); | 92 | cfg.certflst = sk_OPENSSL_STRING_new_null(); |
| 93 | if (crl2p7_config.certflst == NULL) { | 93 | if (cfg.certflst == NULL) { |
| 94 | fprintf(stderr, "out of memory\n"); | 94 | fprintf(stderr, "out of memory\n"); |
| 95 | return (1); | 95 | return (1); |
| 96 | } | 96 | } |
| 97 | if (!sk_OPENSSL_STRING_push(crl2p7_config.certflst, arg)) { | 97 | if (!sk_OPENSSL_STRING_push(cfg.certflst, arg)) { |
| 98 | fprintf(stderr, "out of memory\n"); | 98 | fprintf(stderr, "out of memory\n"); |
| 99 | return (1); | 99 | return (1); |
| 100 | } | 100 | } |
| @@ -115,34 +115,34 @@ static const struct option crl2p7_options[] = { | |||
| 115 | .argname = "file", | 115 | .argname = "file", |
| 116 | .desc = "Input file (default stdin)", | 116 | .desc = "Input file (default stdin)", |
| 117 | .type = OPTION_ARG, | 117 | .type = OPTION_ARG, |
| 118 | .opt.arg = &crl2p7_config.infile, | 118 | .opt.arg = &cfg.infile, |
| 119 | }, | 119 | }, |
| 120 | { | 120 | { |
| 121 | .name = "inform", | 121 | .name = "inform", |
| 122 | .argname = "format", | 122 | .argname = "format", |
| 123 | .desc = "Input format (DER or PEM (default))", | 123 | .desc = "Input format (DER or PEM (default))", |
| 124 | .type = OPTION_ARG_FORMAT, | 124 | .type = OPTION_ARG_FORMAT, |
| 125 | .opt.value = &crl2p7_config.informat, | 125 | .opt.value = &cfg.informat, |
| 126 | }, | 126 | }, |
| 127 | { | 127 | { |
| 128 | .name = "nocrl", | 128 | .name = "nocrl", |
| 129 | .desc = "Do not read CRL from input or include CRL in output", | 129 | .desc = "Do not read CRL from input or include CRL in output", |
| 130 | .type = OPTION_FLAG, | 130 | .type = OPTION_FLAG, |
| 131 | .opt.flag = &crl2p7_config.nocrl, | 131 | .opt.flag = &cfg.nocrl, |
| 132 | }, | 132 | }, |
| 133 | { | 133 | { |
| 134 | .name = "out", | 134 | .name = "out", |
| 135 | .argname = "file", | 135 | .argname = "file", |
| 136 | .desc = "Output file (default stdout)", | 136 | .desc = "Output file (default stdout)", |
| 137 | .type = OPTION_ARG, | 137 | .type = OPTION_ARG, |
| 138 | .opt.arg = &crl2p7_config.outfile, | 138 | .opt.arg = &cfg.outfile, |
| 139 | }, | 139 | }, |
| 140 | { | 140 | { |
| 141 | .name = "outform", | 141 | .name = "outform", |
| 142 | .argname = "format", | 142 | .argname = "format", |
| 143 | .desc = "Output format (DER or PEM (default))", | 143 | .desc = "Output format (DER or PEM (default))", |
| 144 | .type = OPTION_ARG_FORMAT, | 144 | .type = OPTION_ARG_FORMAT, |
| 145 | .opt.value = &crl2p7_config.outformat, | 145 | .opt.value = &cfg.outformat, |
| 146 | }, | 146 | }, |
| 147 | { NULL }, | 147 | { NULL }, |
| 148 | }; | 148 | }; |
| @@ -174,10 +174,10 @@ crl2pkcs7_main(int argc, char **argv) | |||
| 174 | exit(1); | 174 | exit(1); |
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | memset(&crl2p7_config, 0, sizeof(crl2p7_config)); | 177 | memset(&cfg, 0, sizeof(cfg)); |
| 178 | 178 | ||
| 179 | crl2p7_config.informat = FORMAT_PEM; | 179 | cfg.informat = FORMAT_PEM; |
| 180 | crl2p7_config.outformat = FORMAT_PEM; | 180 | cfg.outformat = FORMAT_PEM; |
| 181 | 181 | ||
| 182 | if (options_parse(argc, argv, crl2p7_options, NULL, NULL) != 0) { | 182 | if (options_parse(argc, argv, crl2p7_options, NULL, NULL) != 0) { |
| 183 | crl2p7_usage(); | 183 | crl2p7_usage(); |
| @@ -190,19 +190,19 @@ crl2pkcs7_main(int argc, char **argv) | |||
| 190 | ERR_print_errors(bio_err); | 190 | ERR_print_errors(bio_err); |
| 191 | goto end; | 191 | goto end; |
| 192 | } | 192 | } |
| 193 | if (!crl2p7_config.nocrl) { | 193 | if (!cfg.nocrl) { |
| 194 | if (crl2p7_config.infile == NULL) | 194 | if (cfg.infile == NULL) |
| 195 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 195 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 196 | else { | 196 | else { |
| 197 | if (BIO_read_filename(in, crl2p7_config.infile) <= 0) { | 197 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 198 | perror(crl2p7_config.infile); | 198 | perror(cfg.infile); |
| 199 | goto end; | 199 | goto end; |
| 200 | } | 200 | } |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | if (crl2p7_config.informat == FORMAT_ASN1) | 203 | if (cfg.informat == FORMAT_ASN1) |
| 204 | crl = d2i_X509_CRL_bio(in, NULL); | 204 | crl = d2i_X509_CRL_bio(in, NULL); |
| 205 | else if (crl2p7_config.informat == FORMAT_PEM) | 205 | else if (cfg.informat == FORMAT_PEM) |
| 206 | crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); | 206 | crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); |
| 207 | else { | 207 | else { |
| 208 | BIO_printf(bio_err, | 208 | BIO_printf(bio_err, |
| @@ -236,9 +236,9 @@ crl2pkcs7_main(int argc, char **argv) | |||
| 236 | goto end; | 236 | goto end; |
| 237 | p7s->cert = cert_stack; | 237 | p7s->cert = cert_stack; |
| 238 | 238 | ||
| 239 | if (crl2p7_config.certflst) { | 239 | if (cfg.certflst) { |
| 240 | for (i = 0; i < sk_OPENSSL_STRING_num(crl2p7_config.certflst); i++) { | 240 | for (i = 0; i < sk_OPENSSL_STRING_num(cfg.certflst); i++) { |
| 241 | certfile = sk_OPENSSL_STRING_value(crl2p7_config.certflst, i); | 241 | certfile = sk_OPENSSL_STRING_value(cfg.certflst, i); |
| 242 | if (add_certs_from_file(cert_stack, certfile) < 0) { | 242 | if (add_certs_from_file(cert_stack, certfile) < 0) { |
| 243 | BIO_printf(bio_err, | 243 | BIO_printf(bio_err, |
| 244 | "error loading certificates\n"); | 244 | "error loading certificates\n"); |
| @@ -248,20 +248,20 @@ crl2pkcs7_main(int argc, char **argv) | |||
| 248 | } | 248 | } |
| 249 | } | 249 | } |
| 250 | 250 | ||
| 251 | sk_OPENSSL_STRING_free(crl2p7_config.certflst); | 251 | sk_OPENSSL_STRING_free(cfg.certflst); |
| 252 | 252 | ||
| 253 | if (crl2p7_config.outfile == NULL) { | 253 | if (cfg.outfile == NULL) { |
| 254 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 254 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 255 | } else { | 255 | } else { |
| 256 | if (BIO_write_filename(out, crl2p7_config.outfile) <= 0) { | 256 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 257 | perror(crl2p7_config.outfile); | 257 | perror(cfg.outfile); |
| 258 | goto end; | 258 | goto end; |
| 259 | } | 259 | } |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | if (crl2p7_config.outformat == FORMAT_ASN1) | 262 | if (cfg.outformat == FORMAT_ASN1) |
| 263 | i = i2d_PKCS7_bio(out, p7); | 263 | i = i2d_PKCS7_bio(out, p7); |
| 264 | else if (crl2p7_config.outformat == FORMAT_PEM) | 264 | else if (cfg.outformat == FORMAT_PEM) |
| 265 | i = PEM_write_bio_PKCS7(out, p7); | 265 | i = PEM_write_bio_PKCS7(out, p7); |
| 266 | else { | 266 | else { |
| 267 | BIO_printf(bio_err, | 267 | BIO_printf(bio_err, |
diff --git a/src/usr.bin/openssl/dgst.c b/src/usr.bin/openssl/dgst.c index d29bc6f98c..3979966481 100644 --- a/src/usr.bin/openssl/dgst.c +++ b/src/usr.bin/openssl/dgst.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: dgst.c,v 1.20 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: dgst.c,v 1.21 2023/03/06 14:32:05 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -96,7 +96,7 @@ static struct { | |||
| 96 | char *sigfile; | 96 | char *sigfile; |
| 97 | STACK_OF(OPENSSL_STRING) *sigopts; | 97 | STACK_OF(OPENSSL_STRING) *sigopts; |
| 98 | int want_pub; | 98 | int want_pub; |
| 99 | } dgst_config; | 99 | } cfg; |
| 100 | 100 | ||
| 101 | static int | 101 | static int |
| 102 | dgst_opt_macopt(char *arg) | 102 | dgst_opt_macopt(char *arg) |
| @@ -104,11 +104,11 @@ dgst_opt_macopt(char *arg) | |||
| 104 | if (arg == NULL) | 104 | if (arg == NULL) |
| 105 | return (1); | 105 | return (1); |
| 106 | 106 | ||
| 107 | if (dgst_config.macopts == NULL && | 107 | if (cfg.macopts == NULL && |
| 108 | (dgst_config.macopts = sk_OPENSSL_STRING_new_null()) == NULL) | 108 | (cfg.macopts = sk_OPENSSL_STRING_new_null()) == NULL) |
| 109 | return (1); | 109 | return (1); |
| 110 | 110 | ||
| 111 | if (!sk_OPENSSL_STRING_push(dgst_config.macopts, arg)) | 111 | if (!sk_OPENSSL_STRING_push(cfg.macopts, arg)) |
| 112 | return (1); | 112 | return (1); |
| 113 | 113 | ||
| 114 | return (0); | 114 | return (0); |
| @@ -122,10 +122,10 @@ dgst_opt_md(int argc, char **argv, int *argsused) | |||
| 122 | if (*name++ != '-') | 122 | if (*name++ != '-') |
| 123 | return (1); | 123 | return (1); |
| 124 | 124 | ||
| 125 | if ((dgst_config.m = EVP_get_digestbyname(name)) == NULL) | 125 | if ((cfg.m = EVP_get_digestbyname(name)) == NULL) |
| 126 | return (1); | 126 | return (1); |
| 127 | 127 | ||
| 128 | dgst_config.md = dgst_config.m; | 128 | cfg.md = cfg.m; |
| 129 | 129 | ||
| 130 | *argsused = 1; | 130 | *argsused = 1; |
| 131 | return (0); | 131 | return (0); |
| @@ -137,8 +137,8 @@ dgst_opt_prverify(char *arg) | |||
| 137 | if (arg == NULL) | 137 | if (arg == NULL) |
| 138 | return (1); | 138 | return (1); |
| 139 | 139 | ||
| 140 | dgst_config.keyfile = arg; | 140 | cfg.keyfile = arg; |
| 141 | dgst_config.do_verify = 1; | 141 | cfg.do_verify = 1; |
| 142 | return (0); | 142 | return (0); |
| 143 | } | 143 | } |
| 144 | 144 | ||
| @@ -148,11 +148,11 @@ dgst_opt_sigopt(char *arg) | |||
| 148 | if (arg == NULL) | 148 | if (arg == NULL) |
| 149 | return (1); | 149 | return (1); |
| 150 | 150 | ||
| 151 | if (dgst_config.sigopts == NULL && | 151 | if (cfg.sigopts == NULL && |
| 152 | (dgst_config.sigopts = sk_OPENSSL_STRING_new_null()) == NULL) | 152 | (cfg.sigopts = sk_OPENSSL_STRING_new_null()) == NULL) |
| 153 | return (1); | 153 | return (1); |
| 154 | 154 | ||
| 155 | if (!sk_OPENSSL_STRING_push(dgst_config.sigopts, arg)) | 155 | if (!sk_OPENSSL_STRING_push(cfg.sigopts, arg)) |
| 156 | return (1); | 156 | return (1); |
| 157 | 157 | ||
| 158 | return (0); | 158 | return (0); |
| @@ -164,9 +164,9 @@ dgst_opt_verify(char *arg) | |||
| 164 | if (arg == NULL) | 164 | if (arg == NULL) |
| 165 | return (1); | 165 | return (1); |
| 166 | 166 | ||
| 167 | dgst_config.keyfile = arg; | 167 | cfg.keyfile = arg; |
| 168 | dgst_config.want_pub = 1; | 168 | cfg.want_pub = 1; |
| 169 | dgst_config.do_verify = 1; | 169 | cfg.do_verify = 1; |
| 170 | return (0); | 170 | return (0); |
| 171 | } | 171 | } |
| 172 | 172 | ||
| @@ -175,27 +175,27 @@ static const struct option dgst_options[] = { | |||
| 175 | .name = "binary", | 175 | .name = "binary", |
| 176 | .desc = "Output the digest or signature in binary form", | 176 | .desc = "Output the digest or signature in binary form", |
| 177 | .type = OPTION_VALUE, | 177 | .type = OPTION_VALUE, |
| 178 | .opt.value = &dgst_config.out_bin, | 178 | .opt.value = &cfg.out_bin, |
| 179 | .value = 1, | 179 | .value = 1, |
| 180 | }, | 180 | }, |
| 181 | { | 181 | { |
| 182 | .name = "c", | 182 | .name = "c", |
| 183 | .desc = "Print the digest in two-digit groups separated by colons", | 183 | .desc = "Print the digest in two-digit groups separated by colons", |
| 184 | .type = OPTION_VALUE, | 184 | .type = OPTION_VALUE, |
| 185 | .opt.value = &dgst_config.separator, | 185 | .opt.value = &cfg.separator, |
| 186 | .value = 1, | 186 | .value = 1, |
| 187 | }, | 187 | }, |
| 188 | { | 188 | { |
| 189 | .name = "d", | 189 | .name = "d", |
| 190 | .desc = "Print BIO debugging information", | 190 | .desc = "Print BIO debugging information", |
| 191 | .type = OPTION_FLAG, | 191 | .type = OPTION_FLAG, |
| 192 | .opt.flag = &dgst_config.debug, | 192 | .opt.flag = &cfg.debug, |
| 193 | }, | 193 | }, |
| 194 | { | 194 | { |
| 195 | .name = "hex", | 195 | .name = "hex", |
| 196 | .desc = "Output as hex dump", | 196 | .desc = "Output as hex dump", |
| 197 | .type = OPTION_VALUE, | 197 | .type = OPTION_VALUE, |
| 198 | .opt.value = &dgst_config.out_bin, | 198 | .opt.value = &cfg.out_bin, |
| 199 | .value = 0, | 199 | .value = 0, |
| 200 | }, | 200 | }, |
| 201 | { | 201 | { |
| @@ -203,21 +203,21 @@ static const struct option dgst_options[] = { | |||
| 203 | .argname = "key", | 203 | .argname = "key", |
| 204 | .desc = "Create hashed MAC with key", | 204 | .desc = "Create hashed MAC with key", |
| 205 | .type = OPTION_ARG, | 205 | .type = OPTION_ARG, |
| 206 | .opt.arg = &dgst_config.hmac_key, | 206 | .opt.arg = &cfg.hmac_key, |
| 207 | }, | 207 | }, |
| 208 | { | 208 | { |
| 209 | .name = "keyform", | 209 | .name = "keyform", |
| 210 | .argname = "format", | 210 | .argname = "format", |
| 211 | .desc = "Key file format (PEM)", | 211 | .desc = "Key file format (PEM)", |
| 212 | .type = OPTION_ARG_FORMAT, | 212 | .type = OPTION_ARG_FORMAT, |
| 213 | .opt.value = &dgst_config.keyform, | 213 | .opt.value = &cfg.keyform, |
| 214 | }, | 214 | }, |
| 215 | { | 215 | { |
| 216 | .name = "mac", | 216 | .name = "mac", |
| 217 | .argname = "algorithm", | 217 | .argname = "algorithm", |
| 218 | .desc = "Create MAC (not necessarily HMAC)", | 218 | .desc = "Create MAC (not necessarily HMAC)", |
| 219 | .type = OPTION_ARG, | 219 | .type = OPTION_ARG, |
| 220 | .opt.arg = &dgst_config.mac_name, | 220 | .opt.arg = &cfg.mac_name, |
| 221 | }, | 221 | }, |
| 222 | { | 222 | { |
| 223 | .name = "macopt", | 223 | .name = "macopt", |
| @@ -231,14 +231,14 @@ static const struct option dgst_options[] = { | |||
| 231 | .argname = "file", | 231 | .argname = "file", |
| 232 | .desc = "Output to file rather than stdout", | 232 | .desc = "Output to file rather than stdout", |
| 233 | .type = OPTION_ARG, | 233 | .type = OPTION_ARG, |
| 234 | .opt.arg = &dgst_config.outfile, | 234 | .opt.arg = &cfg.outfile, |
| 235 | }, | 235 | }, |
| 236 | { | 236 | { |
| 237 | .name = "passin", | 237 | .name = "passin", |
| 238 | .argname = "arg", | 238 | .argname = "arg", |
| 239 | .desc = "Input file passphrase source", | 239 | .desc = "Input file passphrase source", |
| 240 | .type = OPTION_ARG, | 240 | .type = OPTION_ARG, |
| 241 | .opt.arg = &dgst_config.passargin, | 241 | .opt.arg = &cfg.passargin, |
| 242 | }, | 242 | }, |
| 243 | { | 243 | { |
| 244 | .name = "prverify", | 244 | .name = "prverify", |
| @@ -251,7 +251,7 @@ static const struct option dgst_options[] = { | |||
| 251 | .name = "r", | 251 | .name = "r", |
| 252 | .desc = "Output the digest in coreutils format", | 252 | .desc = "Output the digest in coreutils format", |
| 253 | .type = OPTION_VALUE, | 253 | .type = OPTION_VALUE, |
| 254 | .opt.value = &dgst_config.separator, | 254 | .opt.value = &cfg.separator, |
| 255 | .value = 2, | 255 | .value = 2, |
| 256 | }, | 256 | }, |
| 257 | { | 257 | { |
| @@ -259,14 +259,14 @@ static const struct option dgst_options[] = { | |||
| 259 | .argname = "file", | 259 | .argname = "file", |
| 260 | .desc = "Sign digest using private key in file", | 260 | .desc = "Sign digest using private key in file", |
| 261 | .type = OPTION_ARG, | 261 | .type = OPTION_ARG, |
| 262 | .opt.arg = &dgst_config.keyfile, | 262 | .opt.arg = &cfg.keyfile, |
| 263 | }, | 263 | }, |
| 264 | { | 264 | { |
| 265 | .name = "signature", | 265 | .name = "signature", |
| 266 | .argname = "file", | 266 | .argname = "file", |
| 267 | .desc = "Signature to verify", | 267 | .desc = "Signature to verify", |
| 268 | .type = OPTION_ARG, | 268 | .type = OPTION_ARG, |
| 269 | .opt.arg = &dgst_config.sigfile, | 269 | .opt.arg = &cfg.sigfile, |
| 270 | }, | 270 | }, |
| 271 | { | 271 | { |
| 272 | .name = "sigopt", | 272 | .name = "sigopt", |
| @@ -348,24 +348,24 @@ dgst_main(int argc, char **argv) | |||
| 348 | goto end; | 348 | goto end; |
| 349 | } | 349 | } |
| 350 | 350 | ||
| 351 | memset(&dgst_config, 0, sizeof(dgst_config)); | 351 | memset(&cfg, 0, sizeof(cfg)); |
| 352 | dgst_config.keyform = FORMAT_PEM; | 352 | cfg.keyform = FORMAT_PEM; |
| 353 | dgst_config.out_bin = -1; | 353 | cfg.out_bin = -1; |
| 354 | 354 | ||
| 355 | /* first check the program name */ | 355 | /* first check the program name */ |
| 356 | program_name(argv[0], pname, sizeof pname); | 356 | program_name(argv[0], pname, sizeof pname); |
| 357 | 357 | ||
| 358 | dgst_config.md = EVP_get_digestbyname(pname); | 358 | cfg.md = EVP_get_digestbyname(pname); |
| 359 | 359 | ||
| 360 | if (options_parse(argc, argv, dgst_options, NULL, | 360 | if (options_parse(argc, argv, dgst_options, NULL, |
| 361 | &dgst_config.argsused) != 0) { | 361 | &cfg.argsused) != 0) { |
| 362 | dgst_usage(); | 362 | dgst_usage(); |
| 363 | goto end; | 363 | goto end; |
| 364 | } | 364 | } |
| 365 | argc -= dgst_config.argsused; | 365 | argc -= cfg.argsused; |
| 366 | argv += dgst_config.argsused; | 366 | argv += cfg.argsused; |
| 367 | 367 | ||
| 368 | if (dgst_config.do_verify && !dgst_config.sigfile) { | 368 | if (cfg.do_verify && !cfg.sigfile) { |
| 369 | BIO_printf(bio_err, | 369 | BIO_printf(bio_err, |
| 370 | "No signature to verify: use the -signature option\n"); | 370 | "No signature to verify: use the -signature option\n"); |
| 371 | goto end; | 371 | goto end; |
| @@ -378,50 +378,50 @@ dgst_main(int argc, char **argv) | |||
| 378 | goto end; | 378 | goto end; |
| 379 | } | 379 | } |
| 380 | 380 | ||
| 381 | if (dgst_config.debug) { | 381 | if (cfg.debug) { |
| 382 | BIO_set_callback(in, BIO_debug_callback); | 382 | BIO_set_callback(in, BIO_debug_callback); |
| 383 | /* needed for windows 3.1 */ | 383 | /* needed for windows 3.1 */ |
| 384 | BIO_set_callback_arg(in, (char *) bio_err); | 384 | BIO_set_callback_arg(in, (char *) bio_err); |
| 385 | } | 385 | } |
| 386 | if (!app_passwd(bio_err, dgst_config.passargin, NULL, &passin, NULL)) { | 386 | if (!app_passwd(bio_err, cfg.passargin, NULL, &passin, NULL)) { |
| 387 | BIO_printf(bio_err, "Error getting password\n"); | 387 | BIO_printf(bio_err, "Error getting password\n"); |
| 388 | goto end; | 388 | goto end; |
| 389 | } | 389 | } |
| 390 | if (dgst_config.out_bin == -1) { | 390 | if (cfg.out_bin == -1) { |
| 391 | if (dgst_config.keyfile) | 391 | if (cfg.keyfile) |
| 392 | dgst_config.out_bin = 1; | 392 | cfg.out_bin = 1; |
| 393 | else | 393 | else |
| 394 | dgst_config.out_bin = 0; | 394 | cfg.out_bin = 0; |
| 395 | } | 395 | } |
| 396 | 396 | ||
| 397 | if (dgst_config.outfile) { | 397 | if (cfg.outfile) { |
| 398 | if (dgst_config.out_bin) | 398 | if (cfg.out_bin) |
| 399 | out = BIO_new_file(dgst_config.outfile, "wb"); | 399 | out = BIO_new_file(cfg.outfile, "wb"); |
| 400 | else | 400 | else |
| 401 | out = BIO_new_file(dgst_config.outfile, "w"); | 401 | out = BIO_new_file(cfg.outfile, "w"); |
| 402 | } else { | 402 | } else { |
| 403 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 403 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 404 | } | 404 | } |
| 405 | 405 | ||
| 406 | if (!out) { | 406 | if (!out) { |
| 407 | BIO_printf(bio_err, "Error opening output file %s\n", | 407 | BIO_printf(bio_err, "Error opening output file %s\n", |
| 408 | dgst_config.outfile ? dgst_config.outfile : "(stdout)"); | 408 | cfg.outfile ? cfg.outfile : "(stdout)"); |
| 409 | ERR_print_errors(bio_err); | 409 | ERR_print_errors(bio_err); |
| 410 | goto end; | 410 | goto end; |
| 411 | } | 411 | } |
| 412 | if ((!!dgst_config.mac_name + !!dgst_config.keyfile + | 412 | if ((!!cfg.mac_name + !!cfg.keyfile + |
| 413 | !!dgst_config.hmac_key) > 1) { | 413 | !!cfg.hmac_key) > 1) { |
| 414 | BIO_printf(bio_err, | 414 | BIO_printf(bio_err, |
| 415 | "MAC and Signing key cannot both be specified\n"); | 415 | "MAC and Signing key cannot both be specified\n"); |
| 416 | goto end; | 416 | goto end; |
| 417 | } | 417 | } |
| 418 | if (dgst_config.keyfile) { | 418 | if (cfg.keyfile) { |
| 419 | if (dgst_config.want_pub) | 419 | if (cfg.want_pub) |
| 420 | sigkey = load_pubkey(bio_err, dgst_config.keyfile, | 420 | sigkey = load_pubkey(bio_err, cfg.keyfile, |
| 421 | dgst_config.keyform, 0, NULL, "key file"); | 421 | cfg.keyform, 0, NULL, "key file"); |
| 422 | else | 422 | else |
| 423 | sigkey = load_key(bio_err, dgst_config.keyfile, | 423 | sigkey = load_key(bio_err, cfg.keyfile, |
| 424 | dgst_config.keyform, 0, passin, "key file"); | 424 | cfg.keyform, 0, passin, "key file"); |
| 425 | if (!sigkey) { | 425 | if (!sigkey) { |
| 426 | /* | 426 | /* |
| 427 | * load_[pub]key() has already printed an appropriate | 427 | * load_[pub]key() has already printed an appropriate |
| @@ -430,17 +430,17 @@ dgst_main(int argc, char **argv) | |||
| 430 | goto end; | 430 | goto end; |
| 431 | } | 431 | } |
| 432 | } | 432 | } |
| 433 | if (dgst_config.mac_name) { | 433 | if (cfg.mac_name) { |
| 434 | EVP_PKEY_CTX *mac_ctx = NULL; | 434 | EVP_PKEY_CTX *mac_ctx = NULL; |
| 435 | int r = 0; | 435 | int r = 0; |
| 436 | if (!init_gen_str(bio_err, &mac_ctx, dgst_config.mac_name, 0)) | 436 | if (!init_gen_str(bio_err, &mac_ctx, cfg.mac_name, 0)) |
| 437 | goto mac_end; | 437 | goto mac_end; |
| 438 | if (dgst_config.macopts) { | 438 | if (cfg.macopts) { |
| 439 | char *macopt; | 439 | char *macopt; |
| 440 | for (i = 0; i < sk_OPENSSL_STRING_num( | 440 | for (i = 0; i < sk_OPENSSL_STRING_num( |
| 441 | dgst_config.macopts); i++) { | 441 | cfg.macopts); i++) { |
| 442 | macopt = sk_OPENSSL_STRING_value( | 442 | macopt = sk_OPENSSL_STRING_value( |
| 443 | dgst_config.macopts, i); | 443 | cfg.macopts, i); |
| 444 | if (pkey_ctrl_string(mac_ctx, macopt) <= 0) { | 444 | if (pkey_ctrl_string(mac_ctx, macopt) <= 0) { |
| 445 | BIO_printf(bio_err, | 445 | BIO_printf(bio_err, |
| 446 | "MAC parameter error \"%s\"\n", | 446 | "MAC parameter error \"%s\"\n", |
| @@ -461,9 +461,9 @@ dgst_main(int argc, char **argv) | |||
| 461 | if (r == 0) | 461 | if (r == 0) |
| 462 | goto end; | 462 | goto end; |
| 463 | } | 463 | } |
| 464 | if (dgst_config.hmac_key) { | 464 | if (cfg.hmac_key) { |
| 465 | sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, | 465 | sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, |
| 466 | (unsigned char *) dgst_config.hmac_key, -1); | 466 | (unsigned char *) cfg.hmac_key, -1); |
| 467 | if (!sigkey) | 467 | if (!sigkey) |
| 468 | goto end; | 468 | goto end; |
| 469 | } | 469 | } |
| @@ -476,23 +476,23 @@ dgst_main(int argc, char **argv) | |||
| 476 | ERR_print_errors(bio_err); | 476 | ERR_print_errors(bio_err); |
| 477 | goto end; | 477 | goto end; |
| 478 | } | 478 | } |
| 479 | if (dgst_config.do_verify) | 479 | if (cfg.do_verify) |
| 480 | r = EVP_DigestVerifyInit(mctx, &pctx, dgst_config.md, | 480 | r = EVP_DigestVerifyInit(mctx, &pctx, cfg.md, |
| 481 | NULL, sigkey); | 481 | NULL, sigkey); |
| 482 | else | 482 | else |
| 483 | r = EVP_DigestSignInit(mctx, &pctx, dgst_config.md, | 483 | r = EVP_DigestSignInit(mctx, &pctx, cfg.md, |
| 484 | NULL, sigkey); | 484 | NULL, sigkey); |
| 485 | if (!r) { | 485 | if (!r) { |
| 486 | BIO_printf(bio_err, "Error setting context\n"); | 486 | BIO_printf(bio_err, "Error setting context\n"); |
| 487 | ERR_print_errors(bio_err); | 487 | ERR_print_errors(bio_err); |
| 488 | goto end; | 488 | goto end; |
| 489 | } | 489 | } |
| 490 | if (dgst_config.sigopts) { | 490 | if (cfg.sigopts) { |
| 491 | char *sigopt; | 491 | char *sigopt; |
| 492 | for (i = 0; i < sk_OPENSSL_STRING_num( | 492 | for (i = 0; i < sk_OPENSSL_STRING_num( |
| 493 | dgst_config.sigopts); i++) { | 493 | cfg.sigopts); i++) { |
| 494 | sigopt = sk_OPENSSL_STRING_value( | 494 | sigopt = sk_OPENSSL_STRING_value( |
| 495 | dgst_config.sigopts, i); | 495 | cfg.sigopts, i); |
| 496 | if (pkey_ctrl_string(pctx, sigopt) <= 0) { | 496 | if (pkey_ctrl_string(pctx, sigopt) <= 0) { |
| 497 | BIO_printf(bio_err, | 497 | BIO_printf(bio_err, |
| 498 | "parameter error \"%s\"\n", | 498 | "parameter error \"%s\"\n", |
| @@ -505,16 +505,16 @@ dgst_main(int argc, char **argv) | |||
| 505 | } | 505 | } |
| 506 | /* we use md as a filter, reading from 'in' */ | 506 | /* we use md as a filter, reading from 'in' */ |
| 507 | else { | 507 | else { |
| 508 | if (dgst_config.md == NULL) | 508 | if (cfg.md == NULL) |
| 509 | dgst_config.md = EVP_sha256(); | 509 | cfg.md = EVP_sha256(); |
| 510 | if (!BIO_set_md(bmd, dgst_config.md)) { | 510 | if (!BIO_set_md(bmd, cfg.md)) { |
| 511 | BIO_printf(bio_err, "Error setting digest %s\n", pname); | 511 | BIO_printf(bio_err, "Error setting digest %s\n", pname); |
| 512 | ERR_print_errors(bio_err); | 512 | ERR_print_errors(bio_err); |
| 513 | goto end; | 513 | goto end; |
| 514 | } | 514 | } |
| 515 | } | 515 | } |
| 516 | 516 | ||
| 517 | if (dgst_config.sigfile && sigkey) { | 517 | if (cfg.sigfile && sigkey) { |
| 518 | BIO *sigbio; | 518 | BIO *sigbio; |
| 519 | siglen = EVP_PKEY_size(sigkey); | 519 | siglen = EVP_PKEY_size(sigkey); |
| 520 | sigbuf = malloc(siglen); | 520 | sigbuf = malloc(siglen); |
| @@ -523,10 +523,10 @@ dgst_main(int argc, char **argv) | |||
| 523 | ERR_print_errors(bio_err); | 523 | ERR_print_errors(bio_err); |
| 524 | goto end; | 524 | goto end; |
| 525 | } | 525 | } |
| 526 | sigbio = BIO_new_file(dgst_config.sigfile, "rb"); | 526 | sigbio = BIO_new_file(cfg.sigfile, "rb"); |
| 527 | if (!sigbio) { | 527 | if (!sigbio) { |
| 528 | BIO_printf(bio_err, "Error opening signature file %s\n", | 528 | BIO_printf(bio_err, "Error opening signature file %s\n", |
| 529 | dgst_config.sigfile); | 529 | cfg.sigfile); |
| 530 | ERR_print_errors(bio_err); | 530 | ERR_print_errors(bio_err); |
| 531 | goto end; | 531 | goto end; |
| 532 | } | 532 | } |
| @@ -534,26 +534,26 @@ dgst_main(int argc, char **argv) | |||
| 534 | BIO_free(sigbio); | 534 | BIO_free(sigbio); |
| 535 | if (siglen <= 0) { | 535 | if (siglen <= 0) { |
| 536 | BIO_printf(bio_err, "Error reading signature file %s\n", | 536 | BIO_printf(bio_err, "Error reading signature file %s\n", |
| 537 | dgst_config.sigfile); | 537 | cfg.sigfile); |
| 538 | ERR_print_errors(bio_err); | 538 | ERR_print_errors(bio_err); |
| 539 | goto end; | 539 | goto end; |
| 540 | } | 540 | } |
| 541 | } | 541 | } |
| 542 | inp = BIO_push(bmd, in); | 542 | inp = BIO_push(bmd, in); |
| 543 | 543 | ||
| 544 | if (dgst_config.md == NULL) { | 544 | if (cfg.md == NULL) { |
| 545 | EVP_MD_CTX *tctx; | 545 | EVP_MD_CTX *tctx; |
| 546 | BIO_get_md_ctx(bmd, &tctx); | 546 | BIO_get_md_ctx(bmd, &tctx); |
| 547 | dgst_config.md = EVP_MD_CTX_md(tctx); | 547 | cfg.md = EVP_MD_CTX_md(tctx); |
| 548 | } | 548 | } |
| 549 | if (argc == 0) { | 549 | if (argc == 0) { |
| 550 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 550 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 551 | err = do_fp(out, buf, inp, dgst_config.separator, | 551 | err = do_fp(out, buf, inp, cfg.separator, |
| 552 | dgst_config.out_bin, sigkey, sigbuf, siglen, NULL, NULL, | 552 | cfg.out_bin, sigkey, sigbuf, siglen, NULL, NULL, |
| 553 | "stdin", bmd); | 553 | "stdin", bmd); |
| 554 | } else { | 554 | } else { |
| 555 | const char *md_name = NULL, *sig_name = NULL; | 555 | const char *md_name = NULL, *sig_name = NULL; |
| 556 | if (!dgst_config.out_bin) { | 556 | if (!cfg.out_bin) { |
| 557 | if (sigkey) { | 557 | if (sigkey) { |
| 558 | const EVP_PKEY_ASN1_METHOD *ameth; | 558 | const EVP_PKEY_ASN1_METHOD *ameth; |
| 559 | ameth = EVP_PKEY_get0_asn1(sigkey); | 559 | ameth = EVP_PKEY_get0_asn1(sigkey); |
| @@ -561,7 +561,7 @@ dgst_main(int argc, char **argv) | |||
| 561 | EVP_PKEY_asn1_get0_info(NULL, NULL, | 561 | EVP_PKEY_asn1_get0_info(NULL, NULL, |
| 562 | NULL, NULL, &sig_name, ameth); | 562 | NULL, NULL, &sig_name, ameth); |
| 563 | } | 563 | } |
| 564 | md_name = EVP_MD_name(dgst_config.md); | 564 | md_name = EVP_MD_name(cfg.md); |
| 565 | } | 565 | } |
| 566 | err = 0; | 566 | err = 0; |
| 567 | for (i = 0; i < argc; i++) { | 567 | for (i = 0; i < argc; i++) { |
| @@ -571,8 +571,8 @@ dgst_main(int argc, char **argv) | |||
| 571 | err++; | 571 | err++; |
| 572 | continue; | 572 | continue; |
| 573 | } else { | 573 | } else { |
| 574 | r = do_fp(out, buf, inp, dgst_config.separator, | 574 | r = do_fp(out, buf, inp, cfg.separator, |
| 575 | dgst_config.out_bin, sigkey, sigbuf, siglen, | 575 | cfg.out_bin, sigkey, sigbuf, siglen, |
| 576 | sig_name, md_name, argv[i], bmd); | 576 | sig_name, md_name, argv[i], bmd); |
| 577 | } | 577 | } |
| 578 | if (r) | 578 | if (r) |
| @@ -587,8 +587,8 @@ dgst_main(int argc, char **argv) | |||
| 587 | free(passin); | 587 | free(passin); |
| 588 | BIO_free_all(out); | 588 | BIO_free_all(out); |
| 589 | EVP_PKEY_free(sigkey); | 589 | EVP_PKEY_free(sigkey); |
| 590 | sk_OPENSSL_STRING_free(dgst_config.sigopts); | 590 | sk_OPENSSL_STRING_free(cfg.sigopts); |
| 591 | sk_OPENSSL_STRING_free(dgst_config.macopts); | 591 | sk_OPENSSL_STRING_free(cfg.macopts); |
| 592 | free(sigbuf); | 592 | free(sigbuf); |
| 593 | BIO_free(bmd); | 593 | BIO_free(bmd); |
| 594 | 594 | ||
diff --git a/src/usr.bin/openssl/dh.c b/src/usr.bin/openssl/dh.c index 200233c0f2..a4c02235f2 100644 --- a/src/usr.bin/openssl/dh.c +++ b/src/usr.bin/openssl/dh.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: dh.c,v 1.14 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: dh.c,v 1.15 2023/03/06 14:32:05 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -83,60 +83,60 @@ static struct { | |||
| 83 | char *outfile; | 83 | char *outfile; |
| 84 | int outformat; | 84 | int outformat; |
| 85 | int text; | 85 | int text; |
| 86 | } dh_config; | 86 | } cfg; |
| 87 | 87 | ||
| 88 | static const struct option dh_options[] = { | 88 | static const struct option dh_options[] = { |
| 89 | { | 89 | { |
| 90 | .name = "C", | 90 | .name = "C", |
| 91 | .desc = "Convert DH parameters into C code", | 91 | .desc = "Convert DH parameters into C code", |
| 92 | .type = OPTION_FLAG, | 92 | .type = OPTION_FLAG, |
| 93 | .opt.flag = &dh_config.C, | 93 | .opt.flag = &cfg.C, |
| 94 | }, | 94 | }, |
| 95 | { | 95 | { |
| 96 | .name = "check", | 96 | .name = "check", |
| 97 | .desc = "Check the DH parameters", | 97 | .desc = "Check the DH parameters", |
| 98 | .type = OPTION_FLAG, | 98 | .type = OPTION_FLAG, |
| 99 | .opt.flag = &dh_config.check, | 99 | .opt.flag = &cfg.check, |
| 100 | }, | 100 | }, |
| 101 | { | 101 | { |
| 102 | .name = "in", | 102 | .name = "in", |
| 103 | .argname = "file", | 103 | .argname = "file", |
| 104 | .desc = "Input file (default stdin)", | 104 | .desc = "Input file (default stdin)", |
| 105 | .type = OPTION_ARG, | 105 | .type = OPTION_ARG, |
| 106 | .opt.arg = &dh_config.infile, | 106 | .opt.arg = &cfg.infile, |
| 107 | }, | 107 | }, |
| 108 | { | 108 | { |
| 109 | .name = "inform", | 109 | .name = "inform", |
| 110 | .argname = "format", | 110 | .argname = "format", |
| 111 | .desc = "Input format (DER or PEM (default))", | 111 | .desc = "Input format (DER or PEM (default))", |
| 112 | .type = OPTION_ARG_FORMAT, | 112 | .type = OPTION_ARG_FORMAT, |
| 113 | .opt.value = &dh_config.informat, | 113 | .opt.value = &cfg.informat, |
| 114 | }, | 114 | }, |
| 115 | { | 115 | { |
| 116 | .name = "noout", | 116 | .name = "noout", |
| 117 | .desc = "No output", | 117 | .desc = "No output", |
| 118 | .type = OPTION_FLAG, | 118 | .type = OPTION_FLAG, |
| 119 | .opt.flag = &dh_config.noout, | 119 | .opt.flag = &cfg.noout, |
| 120 | }, | 120 | }, |
| 121 | { | 121 | { |
| 122 | .name = "out", | 122 | .name = "out", |
| 123 | .argname = "file", | 123 | .argname = "file", |
| 124 | .desc = "Output file (default stdout)", | 124 | .desc = "Output file (default stdout)", |
| 125 | .type = OPTION_ARG, | 125 | .type = OPTION_ARG, |
| 126 | .opt.arg = &dh_config.outfile, | 126 | .opt.arg = &cfg.outfile, |
| 127 | }, | 127 | }, |
| 128 | { | 128 | { |
| 129 | .name = "outform", | 129 | .name = "outform", |
| 130 | .argname = "format", | 130 | .argname = "format", |
| 131 | .desc = "Output format (DER or PEM (default))", | 131 | .desc = "Output format (DER or PEM (default))", |
| 132 | .type = OPTION_ARG_FORMAT, | 132 | .type = OPTION_ARG_FORMAT, |
| 133 | .opt.value = &dh_config.outformat, | 133 | .opt.value = &cfg.outformat, |
| 134 | }, | 134 | }, |
| 135 | { | 135 | { |
| 136 | .name = "text", | 136 | .name = "text", |
| 137 | .desc = "Print a text form of the DH parameters", | 137 | .desc = "Print a text form of the DH parameters", |
| 138 | .type = OPTION_FLAG, | 138 | .type = OPTION_FLAG, |
| 139 | .opt.flag = &dh_config.text, | 139 | .opt.flag = &cfg.text, |
| 140 | }, | 140 | }, |
| 141 | { NULL }, | 141 | { NULL }, |
| 142 | }; | 142 | }; |
| @@ -163,10 +163,10 @@ dh_main(int argc, char **argv) | |||
| 163 | exit(1); | 163 | exit(1); |
| 164 | } | 164 | } |
| 165 | 165 | ||
| 166 | memset(&dh_config, 0, sizeof(dh_config)); | 166 | memset(&cfg, 0, sizeof(cfg)); |
| 167 | 167 | ||
| 168 | dh_config.informat = FORMAT_PEM; | 168 | cfg.informat = FORMAT_PEM; |
| 169 | dh_config.outformat = FORMAT_PEM; | 169 | cfg.outformat = FORMAT_PEM; |
| 170 | 170 | ||
| 171 | if (options_parse(argc, argv, dh_options, NULL, NULL) != 0) { | 171 | if (options_parse(argc, argv, dh_options, NULL, NULL) != 0) { |
| 172 | dh_usage(); | 172 | dh_usage(); |
| @@ -179,26 +179,26 @@ dh_main(int argc, char **argv) | |||
| 179 | ERR_print_errors(bio_err); | 179 | ERR_print_errors(bio_err); |
| 180 | goto end; | 180 | goto end; |
| 181 | } | 181 | } |
| 182 | if (dh_config.infile == NULL) | 182 | if (cfg.infile == NULL) |
| 183 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 183 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 184 | else { | 184 | else { |
| 185 | if (BIO_read_filename(in, dh_config.infile) <= 0) { | 185 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 186 | perror(dh_config.infile); | 186 | perror(cfg.infile); |
| 187 | goto end; | 187 | goto end; |
| 188 | } | 188 | } |
| 189 | } | 189 | } |
| 190 | if (dh_config.outfile == NULL) { | 190 | if (cfg.outfile == NULL) { |
| 191 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 191 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 192 | } else { | 192 | } else { |
| 193 | if (BIO_write_filename(out, dh_config.outfile) <= 0) { | 193 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 194 | perror(dh_config.outfile); | 194 | perror(cfg.outfile); |
| 195 | goto end; | 195 | goto end; |
| 196 | } | 196 | } |
| 197 | } | 197 | } |
| 198 | 198 | ||
| 199 | if (dh_config.informat == FORMAT_ASN1) | 199 | if (cfg.informat == FORMAT_ASN1) |
| 200 | dh = d2i_DHparams_bio(in, NULL); | 200 | dh = d2i_DHparams_bio(in, NULL); |
| 201 | else if (dh_config.informat == FORMAT_PEM) | 201 | else if (cfg.informat == FORMAT_PEM) |
| 202 | dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); | 202 | dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); |
| 203 | else { | 203 | else { |
| 204 | BIO_printf(bio_err, "bad input format specified\n"); | 204 | BIO_printf(bio_err, "bad input format specified\n"); |
| @@ -209,10 +209,10 @@ dh_main(int argc, char **argv) | |||
| 209 | ERR_print_errors(bio_err); | 209 | ERR_print_errors(bio_err); |
| 210 | goto end; | 210 | goto end; |
| 211 | } | 211 | } |
| 212 | if (dh_config.text) { | 212 | if (cfg.text) { |
| 213 | DHparams_print(out, dh); | 213 | DHparams_print(out, dh); |
| 214 | } | 214 | } |
| 215 | if (dh_config.check) { | 215 | if (cfg.check) { |
| 216 | if (!DH_check(dh, &i)) { | 216 | if (!DH_check(dh, &i)) { |
| 217 | ERR_print_errors(bio_err); | 217 | ERR_print_errors(bio_err); |
| 218 | goto end; | 218 | goto end; |
| @@ -228,7 +228,7 @@ dh_main(int argc, char **argv) | |||
| 228 | if (i == 0) | 228 | if (i == 0) |
| 229 | printf("DH parameters appear to be ok.\n"); | 229 | printf("DH parameters appear to be ok.\n"); |
| 230 | } | 230 | } |
| 231 | if (dh_config.C) { | 231 | if (cfg.C) { |
| 232 | unsigned char *data; | 232 | unsigned char *data; |
| 233 | int len, l, bits; | 233 | int len, l, bits; |
| 234 | 234 | ||
| @@ -271,10 +271,10 @@ dh_main(int argc, char **argv) | |||
| 271 | printf("\treturn(dh);\n\t}\n"); | 271 | printf("\treturn(dh);\n\t}\n"); |
| 272 | free(data); | 272 | free(data); |
| 273 | } | 273 | } |
| 274 | if (!dh_config.noout) { | 274 | if (!cfg.noout) { |
| 275 | if (dh_config.outformat == FORMAT_ASN1) | 275 | if (cfg.outformat == FORMAT_ASN1) |
| 276 | i = i2d_DHparams_bio(out, dh); | 276 | i = i2d_DHparams_bio(out, dh); |
| 277 | else if (dh_config.outformat == FORMAT_PEM) | 277 | else if (cfg.outformat == FORMAT_PEM) |
| 278 | i = PEM_write_bio_DHparams(out, dh); | 278 | i = PEM_write_bio_DHparams(out, dh); |
| 279 | else { | 279 | else { |
| 280 | BIO_printf(bio_err, "bad output format specified for outfile\n"); | 280 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
diff --git a/src/usr.bin/openssl/dhparam.c b/src/usr.bin/openssl/dhparam.c index 8a487cb918..0542464d7b 100644 --- a/src/usr.bin/openssl/dhparam.c +++ b/src/usr.bin/openssl/dhparam.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: dhparam.c,v 1.16 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: dhparam.c,v 1.17 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -142,7 +142,7 @@ static struct { | |||
| 142 | char *outfile; | 142 | char *outfile; |
| 143 | int outformat; | 143 | int outformat; |
| 144 | int text; | 144 | int text; |
| 145 | } dhparam_config; | 145 | } cfg; |
| 146 | 146 | ||
| 147 | static const struct option dhparam_options[] = { | 147 | static const struct option dhparam_options[] = { |
| 148 | { | 148 | { |
| @@ -150,73 +150,73 @@ static const struct option dhparam_options[] = { | |||
| 150 | .desc = "Generate DH parameters with a generator value of 2 " | 150 | .desc = "Generate DH parameters with a generator value of 2 " |
| 151 | "(default)", | 151 | "(default)", |
| 152 | .type = OPTION_VALUE, | 152 | .type = OPTION_VALUE, |
| 153 | .opt.value = &dhparam_config.g, | 153 | .opt.value = &cfg.g, |
| 154 | .value = 2, | 154 | .value = 2, |
| 155 | }, | 155 | }, |
| 156 | { | 156 | { |
| 157 | .name = "5", | 157 | .name = "5", |
| 158 | .desc = "Generate DH parameters with a generator value of 5", | 158 | .desc = "Generate DH parameters with a generator value of 5", |
| 159 | .type = OPTION_VALUE, | 159 | .type = OPTION_VALUE, |
| 160 | .opt.value = &dhparam_config.g, | 160 | .opt.value = &cfg.g, |
| 161 | .value = 5, | 161 | .value = 5, |
| 162 | }, | 162 | }, |
| 163 | { | 163 | { |
| 164 | .name = "C", | 164 | .name = "C", |
| 165 | .desc = "Convert DH parameters into C code", | 165 | .desc = "Convert DH parameters into C code", |
| 166 | .type = OPTION_FLAG, | 166 | .type = OPTION_FLAG, |
| 167 | .opt.flag = &dhparam_config.C, | 167 | .opt.flag = &cfg.C, |
| 168 | }, | 168 | }, |
| 169 | { | 169 | { |
| 170 | .name = "check", | 170 | .name = "check", |
| 171 | .desc = "Check the DH parameters", | 171 | .desc = "Check the DH parameters", |
| 172 | .type = OPTION_FLAG, | 172 | .type = OPTION_FLAG, |
| 173 | .opt.flag = &dhparam_config.check, | 173 | .opt.flag = &cfg.check, |
| 174 | }, | 174 | }, |
| 175 | { | 175 | { |
| 176 | .name = "dsaparam", | 176 | .name = "dsaparam", |
| 177 | .desc = "Read or generate DSA parameters and convert to DH", | 177 | .desc = "Read or generate DSA parameters and convert to DH", |
| 178 | .type = OPTION_FLAG, | 178 | .type = OPTION_FLAG, |
| 179 | .opt.flag = &dhparam_config.dsaparam, | 179 | .opt.flag = &cfg.dsaparam, |
| 180 | }, | 180 | }, |
| 181 | { | 181 | { |
| 182 | .name = "in", | 182 | .name = "in", |
| 183 | .argname = "file", | 183 | .argname = "file", |
| 184 | .desc = "Input file (default stdin)", | 184 | .desc = "Input file (default stdin)", |
| 185 | .type = OPTION_ARG, | 185 | .type = OPTION_ARG, |
| 186 | .opt.arg = &dhparam_config.infile, | 186 | .opt.arg = &cfg.infile, |
| 187 | }, | 187 | }, |
| 188 | { | 188 | { |
| 189 | .name = "inform", | 189 | .name = "inform", |
| 190 | .argname = "format", | 190 | .argname = "format", |
| 191 | .desc = "Input format (DER or PEM (default))", | 191 | .desc = "Input format (DER or PEM (default))", |
| 192 | .type = OPTION_ARG_FORMAT, | 192 | .type = OPTION_ARG_FORMAT, |
| 193 | .opt.value = &dhparam_config.informat, | 193 | .opt.value = &cfg.informat, |
| 194 | }, | 194 | }, |
| 195 | { | 195 | { |
| 196 | .name = "noout", | 196 | .name = "noout", |
| 197 | .desc = "Do not output encoded version of DH parameters", | 197 | .desc = "Do not output encoded version of DH parameters", |
| 198 | .type = OPTION_FLAG, | 198 | .type = OPTION_FLAG, |
| 199 | .opt.flag = &dhparam_config.noout, | 199 | .opt.flag = &cfg.noout, |
| 200 | }, | 200 | }, |
| 201 | { | 201 | { |
| 202 | .name = "out", | 202 | .name = "out", |
| 203 | .argname = "file", | 203 | .argname = "file", |
| 204 | .desc = "Output file (default stdout)", | 204 | .desc = "Output file (default stdout)", |
| 205 | .type = OPTION_ARG, | 205 | .type = OPTION_ARG, |
| 206 | .opt.arg = &dhparam_config.outfile, | 206 | .opt.arg = &cfg.outfile, |
| 207 | }, | 207 | }, |
| 208 | { | 208 | { |
| 209 | .name = "outform", | 209 | .name = "outform", |
| 210 | .argname = "format", | 210 | .argname = "format", |
| 211 | .desc = "Output format (DER or PEM (default))", | 211 | .desc = "Output format (DER or PEM (default))", |
| 212 | .type = OPTION_ARG_FORMAT, | 212 | .type = OPTION_ARG_FORMAT, |
| 213 | .opt.value = &dhparam_config.outformat, | 213 | .opt.value = &cfg.outformat, |
| 214 | }, | 214 | }, |
| 215 | { | 215 | { |
| 216 | .name = "text", | 216 | .name = "text", |
| 217 | .desc = "Print DH parameters in plain text", | 217 | .desc = "Print DH parameters in plain text", |
| 218 | .type = OPTION_FLAG, | 218 | .type = OPTION_FLAG, |
| 219 | .opt.flag = &dhparam_config.text, | 219 | .opt.flag = &cfg.text, |
| 220 | }, | 220 | }, |
| 221 | { NULL }, | 221 | { NULL }, |
| 222 | }; | 222 | }; |
| @@ -249,10 +249,10 @@ dhparam_main(int argc, char **argv) | |||
| 249 | exit(1); | 249 | exit(1); |
| 250 | } | 250 | } |
| 251 | 251 | ||
| 252 | memset(&dhparam_config, 0, sizeof(dhparam_config)); | 252 | memset(&cfg, 0, sizeof(cfg)); |
| 253 | 253 | ||
| 254 | dhparam_config.informat = FORMAT_PEM; | 254 | cfg.informat = FORMAT_PEM; |
| 255 | dhparam_config.outformat = FORMAT_PEM; | 255 | cfg.outformat = FORMAT_PEM; |
| 256 | 256 | ||
| 257 | if (options_parse(argc, argv, dhparam_options, &num_bits, NULL) != 0) { | 257 | if (options_parse(argc, argv, dhparam_options, &num_bits, NULL) != 0) { |
| 258 | dhparam_usage(); | 258 | dhparam_usage(); |
| @@ -267,18 +267,18 @@ dhparam_main(int argc, char **argv) | |||
| 267 | } | 267 | } |
| 268 | } | 268 | } |
| 269 | 269 | ||
| 270 | if (dhparam_config.g && !num) | 270 | if (cfg.g && !num) |
| 271 | num = DEFBITS; | 271 | num = DEFBITS; |
| 272 | 272 | ||
| 273 | if (dhparam_config.dsaparam) { | 273 | if (cfg.dsaparam) { |
| 274 | if (dhparam_config.g) { | 274 | if (cfg.g) { |
| 275 | BIO_printf(bio_err, "generator may not be chosen for DSA parameters\n"); | 275 | BIO_printf(bio_err, "generator may not be chosen for DSA parameters\n"); |
| 276 | goto end; | 276 | goto end; |
| 277 | } | 277 | } |
| 278 | } else { | 278 | } else { |
| 279 | /* DH parameters */ | 279 | /* DH parameters */ |
| 280 | if (num && !dhparam_config.g) | 280 | if (num && !cfg.g) |
| 281 | dhparam_config.g = 2; | 281 | cfg.g = 2; |
| 282 | } | 282 | } |
| 283 | 283 | ||
| 284 | if (num) { | 284 | if (num) { |
| @@ -289,7 +289,7 @@ dhparam_main(int argc, char **argv) | |||
| 289 | } | 289 | } |
| 290 | 290 | ||
| 291 | BN_GENCB_set(cb, dh_cb, bio_err); | 291 | BN_GENCB_set(cb, dh_cb, bio_err); |
| 292 | if (dhparam_config.dsaparam) { | 292 | if (cfg.dsaparam) { |
| 293 | DSA *dsa = DSA_new(); | 293 | DSA *dsa = DSA_new(); |
| 294 | 294 | ||
| 295 | BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", num); | 295 | BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", num); |
| @@ -307,9 +307,9 @@ dhparam_main(int argc, char **argv) | |||
| 307 | } | 307 | } |
| 308 | } else { | 308 | } else { |
| 309 | dh = DH_new(); | 309 | dh = DH_new(); |
| 310 | BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime, generator %d\n", num, dhparam_config.g); | 310 | BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime, generator %d\n", num, cfg.g); |
| 311 | BIO_printf(bio_err, "This is going to take a long time\n"); | 311 | BIO_printf(bio_err, "This is going to take a long time\n"); |
| 312 | if (!dh || !DH_generate_parameters_ex(dh, num, dhparam_config.g, cb)) { | 312 | if (!dh || !DH_generate_parameters_ex(dh, num, cfg.g, cb)) { |
| 313 | ERR_print_errors(bio_err); | 313 | ERR_print_errors(bio_err); |
| 314 | goto end; | 314 | goto end; |
| 315 | } | 315 | } |
| @@ -321,24 +321,24 @@ dhparam_main(int argc, char **argv) | |||
| 321 | ERR_print_errors(bio_err); | 321 | ERR_print_errors(bio_err); |
| 322 | goto end; | 322 | goto end; |
| 323 | } | 323 | } |
| 324 | if (dhparam_config.infile == NULL) | 324 | if (cfg.infile == NULL) |
| 325 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 325 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 326 | else { | 326 | else { |
| 327 | if (BIO_read_filename(in, dhparam_config.infile) <= 0) { | 327 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 328 | perror(dhparam_config.infile); | 328 | perror(cfg.infile); |
| 329 | goto end; | 329 | goto end; |
| 330 | } | 330 | } |
| 331 | } | 331 | } |
| 332 | 332 | ||
| 333 | if (dhparam_config.informat != FORMAT_ASN1 && | 333 | if (cfg.informat != FORMAT_ASN1 && |
| 334 | dhparam_config.informat != FORMAT_PEM) { | 334 | cfg.informat != FORMAT_PEM) { |
| 335 | BIO_printf(bio_err, "bad input format specified\n"); | 335 | BIO_printf(bio_err, "bad input format specified\n"); |
| 336 | goto end; | 336 | goto end; |
| 337 | } | 337 | } |
| 338 | if (dhparam_config.dsaparam) { | 338 | if (cfg.dsaparam) { |
| 339 | DSA *dsa; | 339 | DSA *dsa; |
| 340 | 340 | ||
| 341 | if (dhparam_config.informat == FORMAT_ASN1) | 341 | if (cfg.informat == FORMAT_ASN1) |
| 342 | dsa = d2i_DSAparams_bio(in, NULL); | 342 | dsa = d2i_DSAparams_bio(in, NULL); |
| 343 | else /* informat == FORMAT_PEM */ | 343 | else /* informat == FORMAT_PEM */ |
| 344 | dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); | 344 | dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); |
| @@ -356,7 +356,7 @@ dhparam_main(int argc, char **argv) | |||
| 356 | } | 356 | } |
| 357 | } else | 357 | } else |
| 358 | { | 358 | { |
| 359 | if (dhparam_config.informat == FORMAT_ASN1) | 359 | if (cfg.informat == FORMAT_ASN1) |
| 360 | dh = d2i_DHparams_bio(in, NULL); | 360 | dh = d2i_DHparams_bio(in, NULL); |
| 361 | else /* informat == FORMAT_PEM */ | 361 | else /* informat == FORMAT_PEM */ |
| 362 | dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); | 362 | dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); |
| @@ -376,20 +376,20 @@ dhparam_main(int argc, char **argv) | |||
| 376 | ERR_print_errors(bio_err); | 376 | ERR_print_errors(bio_err); |
| 377 | goto end; | 377 | goto end; |
| 378 | } | 378 | } |
| 379 | if (dhparam_config.outfile == NULL) { | 379 | if (cfg.outfile == NULL) { |
| 380 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 380 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 381 | } else { | 381 | } else { |
| 382 | if (BIO_write_filename(out, dhparam_config.outfile) <= 0) { | 382 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 383 | perror(dhparam_config.outfile); | 383 | perror(cfg.outfile); |
| 384 | goto end; | 384 | goto end; |
| 385 | } | 385 | } |
| 386 | } | 386 | } |
| 387 | 387 | ||
| 388 | 388 | ||
| 389 | if (dhparam_config.text) { | 389 | if (cfg.text) { |
| 390 | DHparams_print(out, dh); | 390 | DHparams_print(out, dh); |
| 391 | } | 391 | } |
| 392 | if (dhparam_config.check) { | 392 | if (cfg.check) { |
| 393 | if (!DH_check(dh, &i)) { | 393 | if (!DH_check(dh, &i)) { |
| 394 | ERR_print_errors(bio_err); | 394 | ERR_print_errors(bio_err); |
| 395 | goto end; | 395 | goto end; |
| @@ -405,7 +405,7 @@ dhparam_main(int argc, char **argv) | |||
| 405 | if (i == 0) | 405 | if (i == 0) |
| 406 | printf("DH parameters appear to be ok.\n"); | 406 | printf("DH parameters appear to be ok.\n"); |
| 407 | } | 407 | } |
| 408 | if (dhparam_config.C) { | 408 | if (cfg.C) { |
| 409 | unsigned char *data; | 409 | unsigned char *data; |
| 410 | int len, l, bits; | 410 | int len, l, bits; |
| 411 | 411 | ||
| @@ -454,10 +454,10 @@ dhparam_main(int argc, char **argv) | |||
| 454 | printf("\treturn(dh);\n\t}\n"); | 454 | printf("\treturn(dh);\n\t}\n"); |
| 455 | free(data); | 455 | free(data); |
| 456 | } | 456 | } |
| 457 | if (!dhparam_config.noout) { | 457 | if (!cfg.noout) { |
| 458 | if (dhparam_config.outformat == FORMAT_ASN1) | 458 | if (cfg.outformat == FORMAT_ASN1) |
| 459 | i = i2d_DHparams_bio(out, dh); | 459 | i = i2d_DHparams_bio(out, dh); |
| 460 | else if (dhparam_config.outformat == FORMAT_PEM) | 460 | else if (cfg.outformat == FORMAT_PEM) |
| 461 | i = PEM_write_bio_DHparams(out, dh); | 461 | i = PEM_write_bio_DHparams(out, dh); |
| 462 | else { | 462 | else { |
| 463 | BIO_printf(bio_err, "bad output format specified for outfile\n"); | 463 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
diff --git a/src/usr.bin/openssl/dsa.c b/src/usr.bin/openssl/dsa.c index 0a3772dff7..f1de78cf4d 100644 --- a/src/usr.bin/openssl/dsa.c +++ b/src/usr.bin/openssl/dsa.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: dsa.c,v 1.17 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: dsa.c,v 1.18 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -87,7 +87,7 @@ static struct { | |||
| 87 | int pubout; | 87 | int pubout; |
| 88 | int pvk_encr; | 88 | int pvk_encr; |
| 89 | int text; | 89 | int text; |
| 90 | } dsa_config; | 90 | } cfg; |
| 91 | 91 | ||
| 92 | static int | 92 | static int |
| 93 | dsa_opt_enc(int argc, char **argv, int *argsused) | 93 | dsa_opt_enc(int argc, char **argv, int *argsused) |
| @@ -97,7 +97,7 @@ dsa_opt_enc(int argc, char **argv, int *argsused) | |||
| 97 | if (*name++ != '-') | 97 | if (*name++ != '-') |
| 98 | return (1); | 98 | return (1); |
| 99 | 99 | ||
| 100 | if ((dsa_config.enc = EVP_get_cipherbyname(name)) != NULL) { | 100 | if ((cfg.enc = EVP_get_cipherbyname(name)) != NULL) { |
| 101 | *argsused = 1; | 101 | *argsused = 1; |
| 102 | return (0); | 102 | return (0); |
| 103 | } | 103 | } |
| @@ -111,7 +111,7 @@ static const struct option dsa_options[] = { | |||
| 111 | .argname = "file", | 111 | .argname = "file", |
| 112 | .desc = "Input file (default stdin)", | 112 | .desc = "Input file (default stdin)", |
| 113 | .type = OPTION_ARG, | 113 | .type = OPTION_ARG, |
| 114 | .opt.arg = &dsa_config.infile, | 114 | .opt.arg = &cfg.infile, |
| 115 | }, | 115 | }, |
| 116 | { | 116 | { |
| 117 | .name = "inform", | 117 | .name = "inform", |
| @@ -119,87 +119,87 @@ static const struct option dsa_options[] = { | |||
| 119 | .desc = "Input format (PEM (default) or any other supported" | 119 | .desc = "Input format (PEM (default) or any other supported" |
| 120 | " format)", | 120 | " format)", |
| 121 | .type = OPTION_ARG_FORMAT, | 121 | .type = OPTION_ARG_FORMAT, |
| 122 | .opt.value = &dsa_config.informat, | 122 | .opt.value = &cfg.informat, |
| 123 | }, | 123 | }, |
| 124 | { | 124 | { |
| 125 | .name = "modulus", | 125 | .name = "modulus", |
| 126 | .desc = "Print the DSA public value", | 126 | .desc = "Print the DSA public value", |
| 127 | .type = OPTION_FLAG, | 127 | .type = OPTION_FLAG, |
| 128 | .opt.flag = &dsa_config.modulus, | 128 | .opt.flag = &cfg.modulus, |
| 129 | }, | 129 | }, |
| 130 | { | 130 | { |
| 131 | .name = "noout", | 131 | .name = "noout", |
| 132 | .desc = "No output", | 132 | .desc = "No output", |
| 133 | .type = OPTION_FLAG, | 133 | .type = OPTION_FLAG, |
| 134 | .opt.flag = &dsa_config.noout, | 134 | .opt.flag = &cfg.noout, |
| 135 | }, | 135 | }, |
| 136 | { | 136 | { |
| 137 | .name = "out", | 137 | .name = "out", |
| 138 | .argname = "file", | 138 | .argname = "file", |
| 139 | .desc = "Output file (default stdout)", | 139 | .desc = "Output file (default stdout)", |
| 140 | .type = OPTION_ARG, | 140 | .type = OPTION_ARG, |
| 141 | .opt.arg = &dsa_config.outfile, | 141 | .opt.arg = &cfg.outfile, |
| 142 | }, | 142 | }, |
| 143 | { | 143 | { |
| 144 | .name = "outform", | 144 | .name = "outform", |
| 145 | .argname = "format", | 145 | .argname = "format", |
| 146 | .desc = "Output format (DER, MSBLOB, PEM (default) or PVK)", | 146 | .desc = "Output format (DER, MSBLOB, PEM (default) or PVK)", |
| 147 | .type = OPTION_ARG_FORMAT, | 147 | .type = OPTION_ARG_FORMAT, |
| 148 | .opt.value = &dsa_config.outformat, | 148 | .opt.value = &cfg.outformat, |
| 149 | }, | 149 | }, |
| 150 | { | 150 | { |
| 151 | .name = "passin", | 151 | .name = "passin", |
| 152 | .argname = "source", | 152 | .argname = "source", |
| 153 | .desc = "Input file passphrase source", | 153 | .desc = "Input file passphrase source", |
| 154 | .type = OPTION_ARG, | 154 | .type = OPTION_ARG, |
| 155 | .opt.arg = &dsa_config.passargin, | 155 | .opt.arg = &cfg.passargin, |
| 156 | }, | 156 | }, |
| 157 | { | 157 | { |
| 158 | .name = "passout", | 158 | .name = "passout", |
| 159 | .argname = "source", | 159 | .argname = "source", |
| 160 | .desc = "Output file passphrase source", | 160 | .desc = "Output file passphrase source", |
| 161 | .type = OPTION_ARG, | 161 | .type = OPTION_ARG, |
| 162 | .opt.arg = &dsa_config.passargout, | 162 | .opt.arg = &cfg.passargout, |
| 163 | }, | 163 | }, |
| 164 | { | 164 | { |
| 165 | .name = "pubin", | 165 | .name = "pubin", |
| 166 | .desc = "Read a public key from the input file instead of" | 166 | .desc = "Read a public key from the input file instead of" |
| 167 | " private key", | 167 | " private key", |
| 168 | .type = OPTION_FLAG, | 168 | .type = OPTION_FLAG, |
| 169 | .opt.flag = &dsa_config.pubin, | 169 | .opt.flag = &cfg.pubin, |
| 170 | }, | 170 | }, |
| 171 | { | 171 | { |
| 172 | .name = "pubout", | 172 | .name = "pubout", |
| 173 | .desc = "Output a public key instead of private key", | 173 | .desc = "Output a public key instead of private key", |
| 174 | .type = OPTION_FLAG, | 174 | .type = OPTION_FLAG, |
| 175 | .opt.flag = &dsa_config.pubout, | 175 | .opt.flag = &cfg.pubout, |
| 176 | }, | 176 | }, |
| 177 | { | 177 | { |
| 178 | .name = "pvk-none", | 178 | .name = "pvk-none", |
| 179 | .desc = "PVK encryption level", | 179 | .desc = "PVK encryption level", |
| 180 | .type = OPTION_VALUE, | 180 | .type = OPTION_VALUE, |
| 181 | .value = 0, | 181 | .value = 0, |
| 182 | .opt.value = &dsa_config.pvk_encr, | 182 | .opt.value = &cfg.pvk_encr, |
| 183 | }, | 183 | }, |
| 184 | { | 184 | { |
| 185 | .name = "pvk-strong", | 185 | .name = "pvk-strong", |
| 186 | .desc = "PVK encryption level (default)", | 186 | .desc = "PVK encryption level (default)", |
| 187 | .type = OPTION_VALUE, | 187 | .type = OPTION_VALUE, |
| 188 | .value = 2, | 188 | .value = 2, |
| 189 | .opt.value = &dsa_config.pvk_encr, | 189 | .opt.value = &cfg.pvk_encr, |
| 190 | }, | 190 | }, |
| 191 | { | 191 | { |
| 192 | .name = "pvk-weak", | 192 | .name = "pvk-weak", |
| 193 | .desc = "PVK encryption level", | 193 | .desc = "PVK encryption level", |
| 194 | .type = OPTION_VALUE, | 194 | .type = OPTION_VALUE, |
| 195 | .value = 1, | 195 | .value = 1, |
| 196 | .opt.value = &dsa_config.pvk_encr, | 196 | .opt.value = &cfg.pvk_encr, |
| 197 | }, | 197 | }, |
| 198 | { | 198 | { |
| 199 | .name = "text", | 199 | .name = "text", |
| 200 | .desc = "Print the key in text form", | 200 | .desc = "Print the key in text form", |
| 201 | .type = OPTION_FLAG, | 201 | .type = OPTION_FLAG, |
| 202 | .opt.flag = &dsa_config.text, | 202 | .opt.flag = &cfg.text, |
| 203 | }, | 203 | }, |
| 204 | { | 204 | { |
| 205 | .name = NULL, | 205 | .name = NULL, |
| @@ -241,18 +241,18 @@ dsa_main(int argc, char **argv) | |||
| 241 | exit(1); | 241 | exit(1); |
| 242 | } | 242 | } |
| 243 | 243 | ||
| 244 | memset(&dsa_config, 0, sizeof(dsa_config)); | 244 | memset(&cfg, 0, sizeof(cfg)); |
| 245 | 245 | ||
| 246 | dsa_config.pvk_encr = 2; | 246 | cfg.pvk_encr = 2; |
| 247 | dsa_config.informat = FORMAT_PEM; | 247 | cfg.informat = FORMAT_PEM; |
| 248 | dsa_config.outformat = FORMAT_PEM; | 248 | cfg.outformat = FORMAT_PEM; |
| 249 | 249 | ||
| 250 | if (options_parse(argc, argv, dsa_options, NULL, NULL) != 0) { | 250 | if (options_parse(argc, argv, dsa_options, NULL, NULL) != 0) { |
| 251 | dsa_usage(); | 251 | dsa_usage(); |
| 252 | goto end; | 252 | goto end; |
| 253 | } | 253 | } |
| 254 | 254 | ||
| 255 | if (!app_passwd(bio_err, dsa_config.passargin, dsa_config.passargout, | 255 | if (!app_passwd(bio_err, cfg.passargin, cfg.passargout, |
| 256 | &passin, &passout)) { | 256 | &passin, &passout)) { |
| 257 | BIO_printf(bio_err, "Error getting passwords\n"); | 257 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 258 | goto end; | 258 | goto end; |
| @@ -264,11 +264,11 @@ dsa_main(int argc, char **argv) | |||
| 264 | ERR_print_errors(bio_err); | 264 | ERR_print_errors(bio_err); |
| 265 | goto end; | 265 | goto end; |
| 266 | } | 266 | } |
| 267 | if (dsa_config.infile == NULL) | 267 | if (cfg.infile == NULL) |
| 268 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 268 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 269 | else { | 269 | else { |
| 270 | if (BIO_read_filename(in, dsa_config.infile) <= 0) { | 270 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 271 | perror(dsa_config.infile); | 271 | perror(cfg.infile); |
| 272 | goto end; | 272 | goto end; |
| 273 | } | 273 | } |
| 274 | } | 274 | } |
| @@ -278,12 +278,12 @@ dsa_main(int argc, char **argv) | |||
| 278 | { | 278 | { |
| 279 | EVP_PKEY *pkey; | 279 | EVP_PKEY *pkey; |
| 280 | 280 | ||
| 281 | if (dsa_config.pubin) | 281 | if (cfg.pubin) |
| 282 | pkey = load_pubkey(bio_err, dsa_config.infile, | 282 | pkey = load_pubkey(bio_err, cfg.infile, |
| 283 | dsa_config.informat, 1, passin, "Public Key"); | 283 | cfg.informat, 1, passin, "Public Key"); |
| 284 | else | 284 | else |
| 285 | pkey = load_key(bio_err, dsa_config.infile, | 285 | pkey = load_key(bio_err, cfg.infile, |
| 286 | dsa_config.informat, 1, passin, "Private Key"); | 286 | cfg.informat, 1, passin, "Private Key"); |
| 287 | 287 | ||
| 288 | if (pkey) { | 288 | if (pkey) { |
| 289 | dsa = EVP_PKEY_get1_DSA(pkey); | 289 | dsa = EVP_PKEY_get1_DSA(pkey); |
| @@ -295,51 +295,51 @@ dsa_main(int argc, char **argv) | |||
| 295 | ERR_print_errors(bio_err); | 295 | ERR_print_errors(bio_err); |
| 296 | goto end; | 296 | goto end; |
| 297 | } | 297 | } |
| 298 | if (dsa_config.outfile == NULL) { | 298 | if (cfg.outfile == NULL) { |
| 299 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 299 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 300 | } else { | 300 | } else { |
| 301 | if (BIO_write_filename(out, dsa_config.outfile) <= 0) { | 301 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 302 | perror(dsa_config.outfile); | 302 | perror(cfg.outfile); |
| 303 | goto end; | 303 | goto end; |
| 304 | } | 304 | } |
| 305 | } | 305 | } |
| 306 | 306 | ||
| 307 | if (dsa_config.text) { | 307 | if (cfg.text) { |
| 308 | if (!DSA_print(out, dsa, 0)) { | 308 | if (!DSA_print(out, dsa, 0)) { |
| 309 | perror(dsa_config.outfile); | 309 | perror(cfg.outfile); |
| 310 | ERR_print_errors(bio_err); | 310 | ERR_print_errors(bio_err); |
| 311 | goto end; | 311 | goto end; |
| 312 | } | 312 | } |
| 313 | } | 313 | } |
| 314 | if (dsa_config.modulus) { | 314 | if (cfg.modulus) { |
| 315 | fprintf(stdout, "Public Key="); | 315 | fprintf(stdout, "Public Key="); |
| 316 | BN_print(out, DSA_get0_pub_key(dsa)); | 316 | BN_print(out, DSA_get0_pub_key(dsa)); |
| 317 | fprintf(stdout, "\n"); | 317 | fprintf(stdout, "\n"); |
| 318 | } | 318 | } |
| 319 | if (dsa_config.noout) | 319 | if (cfg.noout) |
| 320 | goto end; | 320 | goto end; |
| 321 | BIO_printf(bio_err, "writing DSA key\n"); | 321 | BIO_printf(bio_err, "writing DSA key\n"); |
| 322 | if (dsa_config.outformat == FORMAT_ASN1) { | 322 | if (cfg.outformat == FORMAT_ASN1) { |
| 323 | if (dsa_config.pubin || dsa_config.pubout) | 323 | if (cfg.pubin || cfg.pubout) |
| 324 | i = i2d_DSA_PUBKEY_bio(out, dsa); | 324 | i = i2d_DSA_PUBKEY_bio(out, dsa); |
| 325 | else | 325 | else |
| 326 | i = i2d_DSAPrivateKey_bio(out, dsa); | 326 | i = i2d_DSAPrivateKey_bio(out, dsa); |
| 327 | } else if (dsa_config.outformat == FORMAT_PEM) { | 327 | } else if (cfg.outformat == FORMAT_PEM) { |
| 328 | if (dsa_config.pubin || dsa_config.pubout) | 328 | if (cfg.pubin || cfg.pubout) |
| 329 | i = PEM_write_bio_DSA_PUBKEY(out, dsa); | 329 | i = PEM_write_bio_DSA_PUBKEY(out, dsa); |
| 330 | else | 330 | else |
| 331 | i = PEM_write_bio_DSAPrivateKey(out, dsa, dsa_config.enc, | 331 | i = PEM_write_bio_DSAPrivateKey(out, dsa, cfg.enc, |
| 332 | NULL, 0, NULL, passout); | 332 | NULL, 0, NULL, passout); |
| 333 | #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4) | 333 | #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4) |
| 334 | } else if (dsa_config.outformat == FORMAT_MSBLOB || | 334 | } else if (cfg.outformat == FORMAT_MSBLOB || |
| 335 | dsa_config.outformat == FORMAT_PVK) { | 335 | cfg.outformat == FORMAT_PVK) { |
| 336 | EVP_PKEY *pk; | 336 | EVP_PKEY *pk; |
| 337 | pk = EVP_PKEY_new(); | 337 | pk = EVP_PKEY_new(); |
| 338 | EVP_PKEY_set1_DSA(pk, dsa); | 338 | EVP_PKEY_set1_DSA(pk, dsa); |
| 339 | if (dsa_config.outformat == FORMAT_PVK) | 339 | if (cfg.outformat == FORMAT_PVK) |
| 340 | i = i2b_PVK_bio(out, pk, dsa_config.pvk_encr, 0, | 340 | i = i2b_PVK_bio(out, pk, cfg.pvk_encr, 0, |
| 341 | passout); | 341 | passout); |
| 342 | else if (dsa_config.pubin || dsa_config.pubout) | 342 | else if (cfg.pubin || cfg.pubout) |
| 343 | i = i2b_PublicKey_bio(out, pk); | 343 | i = i2b_PublicKey_bio(out, pk); |
| 344 | else | 344 | else |
| 345 | i = i2b_PrivateKey_bio(out, pk); | 345 | i = i2b_PrivateKey_bio(out, pk); |
diff --git a/src/usr.bin/openssl/dsaparam.c b/src/usr.bin/openssl/dsaparam.c index 892ae72ba1..bc9ccd14d8 100644 --- a/src/usr.bin/openssl/dsaparam.c +++ b/src/usr.bin/openssl/dsaparam.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: dsaparam.c,v 1.14 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: dsaparam.c,v 1.15 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -88,60 +88,60 @@ static struct { | |||
| 88 | char *outfile; | 88 | char *outfile; |
| 89 | int outformat; | 89 | int outformat; |
| 90 | int text; | 90 | int text; |
| 91 | } dsaparam_config; | 91 | } cfg; |
| 92 | 92 | ||
| 93 | static const struct option dsaparam_options[] = { | 93 | static const struct option dsaparam_options[] = { |
| 94 | { | 94 | { |
| 95 | .name = "C", | 95 | .name = "C", |
| 96 | .desc = "Convert DSA parameters into C code", | 96 | .desc = "Convert DSA parameters into C code", |
| 97 | .type = OPTION_FLAG, | 97 | .type = OPTION_FLAG, |
| 98 | .opt.flag = &dsaparam_config.C, | 98 | .opt.flag = &cfg.C, |
| 99 | }, | 99 | }, |
| 100 | { | 100 | { |
| 101 | .name = "genkey", | 101 | .name = "genkey", |
| 102 | .desc = "Generate a DSA key", | 102 | .desc = "Generate a DSA key", |
| 103 | .type = OPTION_FLAG, | 103 | .type = OPTION_FLAG, |
| 104 | .opt.flag = &dsaparam_config.genkey, | 104 | .opt.flag = &cfg.genkey, |
| 105 | }, | 105 | }, |
| 106 | { | 106 | { |
| 107 | .name = "in", | 107 | .name = "in", |
| 108 | .argname = "file", | 108 | .argname = "file", |
| 109 | .desc = "Input file (default stdin)", | 109 | .desc = "Input file (default stdin)", |
| 110 | .type = OPTION_ARG, | 110 | .type = OPTION_ARG, |
| 111 | .opt.arg = &dsaparam_config.infile, | 111 | .opt.arg = &cfg.infile, |
| 112 | }, | 112 | }, |
| 113 | { | 113 | { |
| 114 | .name = "inform", | 114 | .name = "inform", |
| 115 | .argname = "format", | 115 | .argname = "format", |
| 116 | .desc = "Input format (DER or PEM (default))", | 116 | .desc = "Input format (DER or PEM (default))", |
| 117 | .type = OPTION_ARG_FORMAT, | 117 | .type = OPTION_ARG_FORMAT, |
| 118 | .opt.value = &dsaparam_config.informat, | 118 | .opt.value = &cfg.informat, |
| 119 | }, | 119 | }, |
| 120 | { | 120 | { |
| 121 | .name = "noout", | 121 | .name = "noout", |
| 122 | .desc = "No output", | 122 | .desc = "No output", |
| 123 | .type = OPTION_FLAG, | 123 | .type = OPTION_FLAG, |
| 124 | .opt.flag = &dsaparam_config.noout, | 124 | .opt.flag = &cfg.noout, |
| 125 | }, | 125 | }, |
| 126 | { | 126 | { |
| 127 | .name = "out", | 127 | .name = "out", |
| 128 | .argname = "file", | 128 | .argname = "file", |
| 129 | .desc = "Output file (default stdout)", | 129 | .desc = "Output file (default stdout)", |
| 130 | .type = OPTION_ARG, | 130 | .type = OPTION_ARG, |
| 131 | .opt.arg = &dsaparam_config.outfile, | 131 | .opt.arg = &cfg.outfile, |
| 132 | }, | 132 | }, |
| 133 | { | 133 | { |
| 134 | .name = "outform", | 134 | .name = "outform", |
| 135 | .argname = "format", | 135 | .argname = "format", |
| 136 | .desc = "Output format (DER or PEM (default))", | 136 | .desc = "Output format (DER or PEM (default))", |
| 137 | .type = OPTION_ARG_FORMAT, | 137 | .type = OPTION_ARG_FORMAT, |
| 138 | .opt.value = &dsaparam_config.outformat, | 138 | .opt.value = &cfg.outformat, |
| 139 | }, | 139 | }, |
| 140 | { | 140 | { |
| 141 | .name = "text", | 141 | .name = "text", |
| 142 | .desc = "Print as text", | 142 | .desc = "Print as text", |
| 143 | .type = OPTION_FLAG, | 143 | .type = OPTION_FLAG, |
| 144 | .opt.flag = &dsaparam_config.text, | 144 | .opt.flag = &cfg.text, |
| 145 | }, | 145 | }, |
| 146 | { NULL }, | 146 | { NULL }, |
| 147 | }; | 147 | }; |
| @@ -174,10 +174,10 @@ dsaparam_main(int argc, char **argv) | |||
| 174 | exit(1); | 174 | exit(1); |
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | memset(&dsaparam_config, 0, sizeof(dsaparam_config)); | 177 | memset(&cfg, 0, sizeof(cfg)); |
| 178 | 178 | ||
| 179 | dsaparam_config.informat = FORMAT_PEM; | 179 | cfg.informat = FORMAT_PEM; |
| 180 | dsaparam_config.outformat = FORMAT_PEM; | 180 | cfg.outformat = FORMAT_PEM; |
| 181 | 181 | ||
| 182 | if (options_parse(argc, argv, dsaparam_options, &strbits, NULL) != 0) { | 182 | if (options_parse(argc, argv, dsaparam_options, &strbits, NULL) != 0) { |
| 183 | dsaparam_usage(); | 183 | dsaparam_usage(); |
| @@ -199,19 +199,19 @@ dsaparam_main(int argc, char **argv) | |||
| 199 | ERR_print_errors(bio_err); | 199 | ERR_print_errors(bio_err); |
| 200 | goto end; | 200 | goto end; |
| 201 | } | 201 | } |
| 202 | if (dsaparam_config.infile == NULL) | 202 | if (cfg.infile == NULL) |
| 203 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 203 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 204 | else { | 204 | else { |
| 205 | if (BIO_read_filename(in, dsaparam_config.infile) <= 0) { | 205 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 206 | perror(dsaparam_config.infile); | 206 | perror(cfg.infile); |
| 207 | goto end; | 207 | goto end; |
| 208 | } | 208 | } |
| 209 | } | 209 | } |
| 210 | if (dsaparam_config.outfile == NULL) { | 210 | if (cfg.outfile == NULL) { |
| 211 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 211 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 212 | } else { | 212 | } else { |
| 213 | if (BIO_write_filename(out, dsaparam_config.outfile) <= 0) { | 213 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 214 | perror(dsaparam_config.outfile); | 214 | perror(cfg.outfile); |
| 215 | goto end; | 215 | goto end; |
| 216 | } | 216 | } |
| 217 | } | 217 | } |
| @@ -237,9 +237,9 @@ dsaparam_main(int argc, char **argv) | |||
| 237 | BIO_printf(bio_err, "Error, DSA key generation failed\n"); | 237 | BIO_printf(bio_err, "Error, DSA key generation failed\n"); |
| 238 | goto end; | 238 | goto end; |
| 239 | } | 239 | } |
| 240 | } else if (dsaparam_config.informat == FORMAT_ASN1) | 240 | } else if (cfg.informat == FORMAT_ASN1) |
| 241 | dsa = d2i_DSAparams_bio(in, NULL); | 241 | dsa = d2i_DSAparams_bio(in, NULL); |
| 242 | else if (dsaparam_config.informat == FORMAT_PEM) | 242 | else if (cfg.informat == FORMAT_PEM) |
| 243 | dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); | 243 | dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); |
| 244 | else { | 244 | else { |
| 245 | BIO_printf(bio_err, "bad input format specified\n"); | 245 | BIO_printf(bio_err, "bad input format specified\n"); |
| @@ -250,10 +250,10 @@ dsaparam_main(int argc, char **argv) | |||
| 250 | ERR_print_errors(bio_err); | 250 | ERR_print_errors(bio_err); |
| 251 | goto end; | 251 | goto end; |
| 252 | } | 252 | } |
| 253 | if (dsaparam_config.text) { | 253 | if (cfg.text) { |
| 254 | DSAparams_print(out, dsa); | 254 | DSAparams_print(out, dsa); |
| 255 | } | 255 | } |
| 256 | if (dsaparam_config.C) { | 256 | if (cfg.C) { |
| 257 | unsigned char *data; | 257 | unsigned char *data; |
| 258 | int l, len, bits_p; | 258 | int l, len, bits_p; |
| 259 | 259 | ||
| @@ -307,10 +307,10 @@ dsaparam_main(int argc, char **argv) | |||
| 307 | printf("\tDSA_set0_pqg(dsa, p, q, g);\n"); | 307 | printf("\tDSA_set0_pqg(dsa, p, q, g);\n"); |
| 308 | printf("\treturn(dsa);\n\t}\n"); | 308 | printf("\treturn(dsa);\n\t}\n"); |
| 309 | } | 309 | } |
| 310 | if (!dsaparam_config.noout) { | 310 | if (!cfg.noout) { |
| 311 | if (dsaparam_config.outformat == FORMAT_ASN1) | 311 | if (cfg.outformat == FORMAT_ASN1) |
| 312 | i = i2d_DSAparams_bio(out, dsa); | 312 | i = i2d_DSAparams_bio(out, dsa); |
| 313 | else if (dsaparam_config.outformat == FORMAT_PEM) | 313 | else if (cfg.outformat == FORMAT_PEM) |
| 314 | i = PEM_write_bio_DSAparams(out, dsa); | 314 | i = PEM_write_bio_DSAparams(out, dsa); |
| 315 | else { | 315 | else { |
| 316 | BIO_printf(bio_err, "bad output format specified for outfile\n"); | 316 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| @@ -322,7 +322,7 @@ dsaparam_main(int argc, char **argv) | |||
| 322 | goto end; | 322 | goto end; |
| 323 | } | 323 | } |
| 324 | } | 324 | } |
| 325 | if (dsaparam_config.genkey) { | 325 | if (cfg.genkey) { |
| 326 | DSA *dsakey; | 326 | DSA *dsakey; |
| 327 | 327 | ||
| 328 | if ((dsakey = DSAparams_dup(dsa)) == NULL) | 328 | if ((dsakey = DSAparams_dup(dsa)) == NULL) |
| @@ -332,9 +332,9 @@ dsaparam_main(int argc, char **argv) | |||
| 332 | DSA_free(dsakey); | 332 | DSA_free(dsakey); |
| 333 | goto end; | 333 | goto end; |
| 334 | } | 334 | } |
| 335 | if (dsaparam_config.outformat == FORMAT_ASN1) | 335 | if (cfg.outformat == FORMAT_ASN1) |
| 336 | i = i2d_DSAPrivateKey_bio(out, dsakey); | 336 | i = i2d_DSAPrivateKey_bio(out, dsakey); |
| 337 | else if (dsaparam_config.outformat == FORMAT_PEM) | 337 | else if (cfg.outformat == FORMAT_PEM) |
| 338 | i = PEM_write_bio_DSAPrivateKey(out, dsakey, NULL, NULL, 0, NULL, NULL); | 338 | i = PEM_write_bio_DSAPrivateKey(out, dsakey, NULL, NULL, 0, NULL, NULL); |
| 339 | else { | 339 | else { |
| 340 | BIO_printf(bio_err, "bad output format specified for outfile\n"); | 340 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
diff --git a/src/usr.bin/openssl/ec.c b/src/usr.bin/openssl/ec.c index 3dace88d6f..c6af1263d4 100644 --- a/src/usr.bin/openssl/ec.c +++ b/src/usr.bin/openssl/ec.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ec.c,v 1.15 2022/11/11 17:07:38 joshua Exp $ */ | 1 | /* $OpenBSD: ec.c,v 1.16 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 | */ |
| @@ -88,7 +88,7 @@ static struct { | |||
| 88 | int pubin; | 88 | int pubin; |
| 89 | int pubout; | 89 | int pubout; |
| 90 | int text; | 90 | int text; |
| 91 | } ec_config; | 91 | } cfg; |
| 92 | 92 | ||
| 93 | static int | 93 | static int |
| 94 | ec_opt_enc(int argc, char **argv, int *argsused) | 94 | ec_opt_enc(int argc, char **argv, int *argsused) |
| @@ -98,7 +98,7 @@ ec_opt_enc(int argc, char **argv, int *argsused) | |||
| 98 | if (*name++ != '-') | 98 | if (*name++ != '-') |
| 99 | return (1); | 99 | return (1); |
| 100 | 100 | ||
| 101 | if ((ec_config.enc = EVP_get_cipherbyname(name)) != NULL) { | 101 | if ((cfg.enc = EVP_get_cipherbyname(name)) != NULL) { |
| 102 | *argsused = 1; | 102 | *argsused = 1; |
| 103 | return (0); | 103 | return (0); |
| 104 | } | 104 | } |
| @@ -110,17 +110,17 @@ static int | |||
| 110 | ec_opt_form(char *arg) | 110 | ec_opt_form(char *arg) |
| 111 | { | 111 | { |
| 112 | if (strcmp(arg, "compressed") == 0) | 112 | if (strcmp(arg, "compressed") == 0) |
| 113 | ec_config.form = POINT_CONVERSION_COMPRESSED; | 113 | cfg.form = POINT_CONVERSION_COMPRESSED; |
| 114 | else if (strcmp(arg, "uncompressed") == 0) | 114 | else if (strcmp(arg, "uncompressed") == 0) |
| 115 | ec_config.form = POINT_CONVERSION_UNCOMPRESSED; | 115 | cfg.form = POINT_CONVERSION_UNCOMPRESSED; |
| 116 | else if (strcmp(arg, "hybrid") == 0) | 116 | else if (strcmp(arg, "hybrid") == 0) |
| 117 | ec_config.form = POINT_CONVERSION_HYBRID; | 117 | cfg.form = POINT_CONVERSION_HYBRID; |
| 118 | else { | 118 | else { |
| 119 | fprintf(stderr, "Invalid point conversion: %s\n", arg); | 119 | fprintf(stderr, "Invalid point conversion: %s\n", arg); |
| 120 | return (1); | 120 | return (1); |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | ec_config.new_form = 1; | 123 | cfg.new_form = 1; |
| 124 | return (0); | 124 | return (0); |
| 125 | } | 125 | } |
| 126 | 126 | ||
| @@ -128,15 +128,15 @@ static int | |||
| 128 | ec_opt_named(char *arg) | 128 | ec_opt_named(char *arg) |
| 129 | { | 129 | { |
| 130 | if (strcmp(arg, "named_curve") == 0) | 130 | if (strcmp(arg, "named_curve") == 0) |
| 131 | ec_config.asn1_flag = OPENSSL_EC_NAMED_CURVE; | 131 | cfg.asn1_flag = OPENSSL_EC_NAMED_CURVE; |
| 132 | else if (strcmp(arg, "explicit") == 0) | 132 | else if (strcmp(arg, "explicit") == 0) |
| 133 | ec_config.asn1_flag = 0; | 133 | cfg.asn1_flag = 0; |
| 134 | else { | 134 | else { |
| 135 | fprintf(stderr, "Invalid curve type: %s\n", arg); | 135 | fprintf(stderr, "Invalid curve type: %s\n", arg); |
| 136 | return (1); | 136 | return (1); |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | ec_config.new_asn1_flag = 1; | 139 | cfg.new_asn1_flag = 1; |
| 140 | return (0); | 140 | return (0); |
| 141 | } | 141 | } |
| 142 | 142 | ||
| @@ -154,34 +154,34 @@ static const struct option ec_options[] = { | |||
| 154 | .argname = "file", | 154 | .argname = "file", |
| 155 | .desc = "Input file (default stdin)", | 155 | .desc = "Input file (default stdin)", |
| 156 | .type = OPTION_ARG, | 156 | .type = OPTION_ARG, |
| 157 | .opt.arg = &ec_config.infile, | 157 | .opt.arg = &cfg.infile, |
| 158 | }, | 158 | }, |
| 159 | { | 159 | { |
| 160 | .name = "inform", | 160 | .name = "inform", |
| 161 | .argname = "format", | 161 | .argname = "format", |
| 162 | .desc = "Input format (DER or PEM (default))", | 162 | .desc = "Input format (DER or PEM (default))", |
| 163 | .type = OPTION_ARG_FORMAT, | 163 | .type = OPTION_ARG_FORMAT, |
| 164 | .opt.value = &ec_config.informat, | 164 | .opt.value = &cfg.informat, |
| 165 | }, | 165 | }, |
| 166 | { | 166 | { |
| 167 | .name = "noout", | 167 | .name = "noout", |
| 168 | .desc = "No output", | 168 | .desc = "No output", |
| 169 | .type = OPTION_FLAG, | 169 | .type = OPTION_FLAG, |
| 170 | .opt.flag = &ec_config.noout, | 170 | .opt.flag = &cfg.noout, |
| 171 | }, | 171 | }, |
| 172 | { | 172 | { |
| 173 | .name = "out", | 173 | .name = "out", |
| 174 | .argname = "file", | 174 | .argname = "file", |
| 175 | .desc = "Output file (default stdout)", | 175 | .desc = "Output file (default stdout)", |
| 176 | .type = OPTION_ARG, | 176 | .type = OPTION_ARG, |
| 177 | .opt.arg = &ec_config.outfile, | 177 | .opt.arg = &cfg.outfile, |
| 178 | }, | 178 | }, |
| 179 | { | 179 | { |
| 180 | .name = "outform", | 180 | .name = "outform", |
| 181 | .argname = "format", | 181 | .argname = "format", |
| 182 | .desc = "Output format (DER or PEM (default))", | 182 | .desc = "Output format (DER or PEM (default))", |
| 183 | .type = OPTION_ARG_FORMAT, | 183 | .type = OPTION_ARG_FORMAT, |
| 184 | .opt.value = &ec_config.outformat, | 184 | .opt.value = &cfg.outformat, |
| 185 | }, | 185 | }, |
| 186 | { | 186 | { |
| 187 | .name = "param_enc", | 187 | .name = "param_enc", |
| @@ -195,39 +195,39 @@ static const struct option ec_options[] = { | |||
| 195 | .name = "param_out", | 195 | .name = "param_out", |
| 196 | .desc = "Print the elliptic curve parameters", | 196 | .desc = "Print the elliptic curve parameters", |
| 197 | .type = OPTION_FLAG, | 197 | .type = OPTION_FLAG, |
| 198 | .opt.flag = &ec_config.param_out, | 198 | .opt.flag = &cfg.param_out, |
| 199 | }, | 199 | }, |
| 200 | { | 200 | { |
| 201 | .name = "passin", | 201 | .name = "passin", |
| 202 | .argname = "source", | 202 | .argname = "source", |
| 203 | .desc = "Input file passphrase source", | 203 | .desc = "Input file passphrase source", |
| 204 | .type = OPTION_ARG, | 204 | .type = OPTION_ARG, |
| 205 | .opt.arg = &ec_config.passargin, | 205 | .opt.arg = &cfg.passargin, |
| 206 | }, | 206 | }, |
| 207 | { | 207 | { |
| 208 | .name = "passout", | 208 | .name = "passout", |
| 209 | .argname = "source", | 209 | .argname = "source", |
| 210 | .desc = "Output file passphrase source", | 210 | .desc = "Output file passphrase source", |
| 211 | .type = OPTION_ARG, | 211 | .type = OPTION_ARG, |
| 212 | .opt.arg = &ec_config.passargout, | 212 | .opt.arg = &cfg.passargout, |
| 213 | }, | 213 | }, |
| 214 | { | 214 | { |
| 215 | .name = "pubin", | 215 | .name = "pubin", |
| 216 | .desc = "Read public key instead of private key from input", | 216 | .desc = "Read public key instead of private key from input", |
| 217 | .type = OPTION_FLAG, | 217 | .type = OPTION_FLAG, |
| 218 | .opt.flag = &ec_config.pubin, | 218 | .opt.flag = &cfg.pubin, |
| 219 | }, | 219 | }, |
| 220 | { | 220 | { |
| 221 | .name = "pubout", | 221 | .name = "pubout", |
| 222 | .desc = "Output public key instead of private key in output", | 222 | .desc = "Output public key instead of private key in output", |
| 223 | .type = OPTION_FLAG, | 223 | .type = OPTION_FLAG, |
| 224 | .opt.flag = &ec_config.pubout, | 224 | .opt.flag = &cfg.pubout, |
| 225 | }, | 225 | }, |
| 226 | { | 226 | { |
| 227 | .name = "text", | 227 | .name = "text", |
| 228 | .desc = "Print the public/private key components and parameters", | 228 | .desc = "Print the public/private key components and parameters", |
| 229 | .type = OPTION_FLAG, | 229 | .type = OPTION_FLAG, |
| 230 | .opt.flag = &ec_config.text, | 230 | .opt.flag = &cfg.text, |
| 231 | }, | 231 | }, |
| 232 | { | 232 | { |
| 233 | .name = NULL, | 233 | .name = NULL, |
| @@ -272,19 +272,19 @@ ec_main(int argc, char **argv) | |||
| 272 | exit(1); | 272 | exit(1); |
| 273 | } | 273 | } |
| 274 | 274 | ||
| 275 | memset(&ec_config, 0, sizeof(ec_config)); | 275 | memset(&cfg, 0, sizeof(cfg)); |
| 276 | 276 | ||
| 277 | ec_config.asn1_flag = OPENSSL_EC_NAMED_CURVE; | 277 | cfg.asn1_flag = OPENSSL_EC_NAMED_CURVE; |
| 278 | ec_config.form = POINT_CONVERSION_UNCOMPRESSED; | 278 | cfg.form = POINT_CONVERSION_UNCOMPRESSED; |
| 279 | ec_config.informat = FORMAT_PEM; | 279 | cfg.informat = FORMAT_PEM; |
| 280 | ec_config.outformat = FORMAT_PEM; | 280 | cfg.outformat = FORMAT_PEM; |
| 281 | 281 | ||
| 282 | if (options_parse(argc, argv, ec_options, NULL, NULL) != 0) { | 282 | if (options_parse(argc, argv, ec_options, NULL, NULL) != 0) { |
| 283 | ec_usage(); | 283 | ec_usage(); |
| 284 | goto end; | 284 | goto end; |
| 285 | } | 285 | } |
| 286 | 286 | ||
| 287 | if (!app_passwd(bio_err, ec_config.passargin, ec_config.passargout, | 287 | if (!app_passwd(bio_err, cfg.passargin, cfg.passargout, |
| 288 | &passin, &passout)) { | 288 | &passin, &passout)) { |
| 289 | BIO_printf(bio_err, "Error getting passwords\n"); | 289 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 290 | goto end; | 290 | goto end; |
| @@ -295,23 +295,23 @@ ec_main(int argc, char **argv) | |||
| 295 | ERR_print_errors(bio_err); | 295 | ERR_print_errors(bio_err); |
| 296 | goto end; | 296 | goto end; |
| 297 | } | 297 | } |
| 298 | if (ec_config.infile == NULL) | 298 | if (cfg.infile == NULL) |
| 299 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 299 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 300 | else { | 300 | else { |
| 301 | if (BIO_read_filename(in, ec_config.infile) <= 0) { | 301 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 302 | perror(ec_config.infile); | 302 | perror(cfg.infile); |
| 303 | goto end; | 303 | goto end; |
| 304 | } | 304 | } |
| 305 | } | 305 | } |
| 306 | 306 | ||
| 307 | BIO_printf(bio_err, "read EC key\n"); | 307 | BIO_printf(bio_err, "read EC key\n"); |
| 308 | if (ec_config.informat == FORMAT_ASN1) { | 308 | if (cfg.informat == FORMAT_ASN1) { |
| 309 | if (ec_config.pubin) | 309 | if (cfg.pubin) |
| 310 | eckey = d2i_EC_PUBKEY_bio(in, NULL); | 310 | eckey = d2i_EC_PUBKEY_bio(in, NULL); |
| 311 | else | 311 | else |
| 312 | eckey = d2i_ECPrivateKey_bio(in, NULL); | 312 | eckey = d2i_ECPrivateKey_bio(in, NULL); |
| 313 | } else if (ec_config.informat == FORMAT_PEM) { | 313 | } else if (cfg.informat == FORMAT_PEM) { |
| 314 | if (ec_config.pubin) | 314 | if (cfg.pubin) |
| 315 | eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, | 315 | eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, |
| 316 | NULL); | 316 | NULL); |
| 317 | else | 317 | else |
| @@ -326,49 +326,49 @@ ec_main(int argc, char **argv) | |||
| 326 | ERR_print_errors(bio_err); | 326 | ERR_print_errors(bio_err); |
| 327 | goto end; | 327 | goto end; |
| 328 | } | 328 | } |
| 329 | if (ec_config.outfile == NULL) { | 329 | if (cfg.outfile == NULL) { |
| 330 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 330 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 331 | } else { | 331 | } else { |
| 332 | if (BIO_write_filename(out, ec_config.outfile) <= 0) { | 332 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 333 | perror(ec_config.outfile); | 333 | perror(cfg.outfile); |
| 334 | goto end; | 334 | goto end; |
| 335 | } | 335 | } |
| 336 | } | 336 | } |
| 337 | 337 | ||
| 338 | group = EC_KEY_get0_group(eckey); | 338 | group = EC_KEY_get0_group(eckey); |
| 339 | 339 | ||
| 340 | if (ec_config.new_form) | 340 | if (cfg.new_form) |
| 341 | EC_KEY_set_conv_form(eckey, ec_config.form); | 341 | EC_KEY_set_conv_form(eckey, cfg.form); |
| 342 | 342 | ||
| 343 | if (ec_config.new_asn1_flag) | 343 | if (cfg.new_asn1_flag) |
| 344 | EC_KEY_set_asn1_flag(eckey, ec_config.asn1_flag); | 344 | EC_KEY_set_asn1_flag(eckey, cfg.asn1_flag); |
| 345 | 345 | ||
| 346 | if (ec_config.text) | 346 | if (cfg.text) |
| 347 | if (!EC_KEY_print(out, eckey, 0)) { | 347 | if (!EC_KEY_print(out, eckey, 0)) { |
| 348 | perror(ec_config.outfile); | 348 | perror(cfg.outfile); |
| 349 | ERR_print_errors(bio_err); | 349 | ERR_print_errors(bio_err); |
| 350 | goto end; | 350 | goto end; |
| 351 | } | 351 | } |
| 352 | if (ec_config.noout) { | 352 | if (cfg.noout) { |
| 353 | ret = 0; | 353 | ret = 0; |
| 354 | goto end; | 354 | goto end; |
| 355 | } | 355 | } |
| 356 | BIO_printf(bio_err, "writing EC key\n"); | 356 | BIO_printf(bio_err, "writing EC key\n"); |
| 357 | if (ec_config.outformat == FORMAT_ASN1) { | 357 | if (cfg.outformat == FORMAT_ASN1) { |
| 358 | if (ec_config.param_out) | 358 | if (cfg.param_out) |
| 359 | i = i2d_ECPKParameters_bio(out, group); | 359 | i = i2d_ECPKParameters_bio(out, group); |
| 360 | else if (ec_config.pubin || ec_config.pubout) | 360 | else if (cfg.pubin || cfg.pubout) |
| 361 | i = i2d_EC_PUBKEY_bio(out, eckey); | 361 | i = i2d_EC_PUBKEY_bio(out, eckey); |
| 362 | else | 362 | else |
| 363 | i = i2d_ECPrivateKey_bio(out, eckey); | 363 | i = i2d_ECPrivateKey_bio(out, eckey); |
| 364 | } else if (ec_config.outformat == FORMAT_PEM) { | 364 | } else if (cfg.outformat == FORMAT_PEM) { |
| 365 | if (ec_config.param_out) | 365 | if (cfg.param_out) |
| 366 | i = PEM_write_bio_ECPKParameters(out, group); | 366 | i = PEM_write_bio_ECPKParameters(out, group); |
| 367 | else if (ec_config.pubin || ec_config.pubout) | 367 | else if (cfg.pubin || cfg.pubout) |
| 368 | i = PEM_write_bio_EC_PUBKEY(out, eckey); | 368 | i = PEM_write_bio_EC_PUBKEY(out, eckey); |
| 369 | else | 369 | else |
| 370 | i = PEM_write_bio_ECPrivateKey(out, eckey, | 370 | i = PEM_write_bio_ECPrivateKey(out, eckey, |
| 371 | ec_config.enc, NULL, 0, NULL, passout); | 371 | cfg.enc, NULL, 0, NULL, passout); |
| 372 | } else { | 372 | } else { |
| 373 | BIO_printf(bio_err, "bad output format specified for " | 373 | BIO_printf(bio_err, "bad output format specified for " |
| 374 | "outfile\n"); | 374 | "outfile\n"); |
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 | ||
| 112 | static int | 112 | static int |
| 113 | ecparam_opt_form(char *arg) | 113 | ecparam_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 | |||
| 129 | ecparam_opt_enctype(char *arg) | 129 | ecparam_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 { |
diff --git a/src/usr.bin/openssl/enc.c b/src/usr.bin/openssl/enc.c index 6be0a30dec..b80a177cd8 100644 --- a/src/usr.bin/openssl/enc.c +++ b/src/usr.bin/openssl/enc.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: enc.c,v 1.26 2023/03/04 21:58:54 tb Exp $ */ | 1 | /* $OpenBSD: enc.c,v 1.27 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -100,7 +100,7 @@ static struct { | |||
| 100 | int pbkdf2; | 100 | int pbkdf2; |
| 101 | int printkey; | 101 | int printkey; |
| 102 | int verbose; | 102 | int verbose; |
| 103 | } enc_config; | 103 | } cfg; |
| 104 | 104 | ||
| 105 | static int | 105 | static int |
| 106 | enc_opt_cipher(int argc, char **argv, int *argsused) | 106 | enc_opt_cipher(int argc, char **argv, int *argsused) |
| @@ -111,12 +111,12 @@ enc_opt_cipher(int argc, char **argv, int *argsused) | |||
| 111 | return (1); | 111 | return (1); |
| 112 | 112 | ||
| 113 | if (strcmp(name, "none") == 0) { | 113 | if (strcmp(name, "none") == 0) { |
| 114 | enc_config.cipher = NULL; | 114 | cfg.cipher = NULL; |
| 115 | *argsused = 1; | 115 | *argsused = 1; |
| 116 | return (0); | 116 | return (0); |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | if ((enc_config.cipher = EVP_get_cipherbyname(name)) != NULL) { | 119 | if ((cfg.cipher = EVP_get_cipherbyname(name)) != NULL) { |
| 120 | *argsused = 1; | 120 | *argsused = 1; |
| 121 | return (0); | 121 | return (0); |
| 122 | } | 122 | } |
| @@ -129,44 +129,44 @@ static const struct option enc_options[] = { | |||
| 129 | .name = "A", | 129 | .name = "A", |
| 130 | .desc = "Process base64 data on one line (requires -a)", | 130 | .desc = "Process base64 data on one line (requires -a)", |
| 131 | .type = OPTION_FLAG, | 131 | .type = OPTION_FLAG, |
| 132 | .opt.flag = &enc_config.olb64, | 132 | .opt.flag = &cfg.olb64, |
| 133 | }, | 133 | }, |
| 134 | { | 134 | { |
| 135 | .name = "a", | 135 | .name = "a", |
| 136 | .desc = "Perform base64 encoding/decoding (alias -base64)", | 136 | .desc = "Perform base64 encoding/decoding (alias -base64)", |
| 137 | .type = OPTION_FLAG, | 137 | .type = OPTION_FLAG, |
| 138 | .opt.flag = &enc_config.base64, | 138 | .opt.flag = &cfg.base64, |
| 139 | }, | 139 | }, |
| 140 | { | 140 | { |
| 141 | .name = "base64", | 141 | .name = "base64", |
| 142 | .type = OPTION_FLAG, | 142 | .type = OPTION_FLAG, |
| 143 | .opt.flag = &enc_config.base64, | 143 | .opt.flag = &cfg.base64, |
| 144 | }, | 144 | }, |
| 145 | { | 145 | { |
| 146 | .name = "bufsize", | 146 | .name = "bufsize", |
| 147 | .argname = "size", | 147 | .argname = "size", |
| 148 | .desc = "Specify the buffer size to use for I/O", | 148 | .desc = "Specify the buffer size to use for I/O", |
| 149 | .type = OPTION_ARG, | 149 | .type = OPTION_ARG, |
| 150 | .opt.arg = &enc_config.bufsize, | 150 | .opt.arg = &cfg.bufsize, |
| 151 | }, | 151 | }, |
| 152 | { | 152 | { |
| 153 | .name = "d", | 153 | .name = "d", |
| 154 | .desc = "Decrypt the input data", | 154 | .desc = "Decrypt the input data", |
| 155 | .type = OPTION_VALUE, | 155 | .type = OPTION_VALUE, |
| 156 | .opt.value = &enc_config.enc, | 156 | .opt.value = &cfg.enc, |
| 157 | .value = 0, | 157 | .value = 0, |
| 158 | }, | 158 | }, |
| 159 | { | 159 | { |
| 160 | .name = "debug", | 160 | .name = "debug", |
| 161 | .desc = "Print debugging information", | 161 | .desc = "Print debugging information", |
| 162 | .type = OPTION_FLAG, | 162 | .type = OPTION_FLAG, |
| 163 | .opt.flag = &enc_config.debug, | 163 | .opt.flag = &cfg.debug, |
| 164 | }, | 164 | }, |
| 165 | { | 165 | { |
| 166 | .name = "e", | 166 | .name = "e", |
| 167 | .desc = "Encrypt the input data (default)", | 167 | .desc = "Encrypt the input data (default)", |
| 168 | .type = OPTION_VALUE, | 168 | .type = OPTION_VALUE, |
| 169 | .opt.value = &enc_config.enc, | 169 | .opt.value = &cfg.enc, |
| 170 | .value = 1, | 170 | .value = 1, |
| 171 | }, | 171 | }, |
| 172 | { | 172 | { |
| @@ -174,45 +174,45 @@ static const struct option enc_options[] = { | |||
| 174 | .argname = "file", | 174 | .argname = "file", |
| 175 | .desc = "Input file to read from (default stdin)", | 175 | .desc = "Input file to read from (default stdin)", |
| 176 | .type = OPTION_ARG, | 176 | .type = OPTION_ARG, |
| 177 | .opt.arg = &enc_config.inf, | 177 | .opt.arg = &cfg.inf, |
| 178 | }, | 178 | }, |
| 179 | { | 179 | { |
| 180 | .name = "iter", | 180 | .name = "iter", |
| 181 | .argname = "iterations", | 181 | .argname = "iterations", |
| 182 | .desc = "Specify iteration count and force use of PBKDF2", | 182 | .desc = "Specify iteration count and force use of PBKDF2", |
| 183 | .type = OPTION_ARG_INT, | 183 | .type = OPTION_ARG_INT, |
| 184 | .opt.value = &enc_config.iter, | 184 | .opt.value = &cfg.iter, |
| 185 | }, | 185 | }, |
| 186 | { | 186 | { |
| 187 | .name = "iv", | 187 | .name = "iv", |
| 188 | .argname = "IV", | 188 | .argname = "IV", |
| 189 | .desc = "IV to use, specified as a hexadecimal string", | 189 | .desc = "IV to use, specified as a hexadecimal string", |
| 190 | .type = OPTION_ARG, | 190 | .type = OPTION_ARG, |
| 191 | .opt.arg = &enc_config.hiv, | 191 | .opt.arg = &cfg.hiv, |
| 192 | }, | 192 | }, |
| 193 | { | 193 | { |
| 194 | .name = "K", | 194 | .name = "K", |
| 195 | .argname = "key", | 195 | .argname = "key", |
| 196 | .desc = "Key to use, specified as a hexadecimal string", | 196 | .desc = "Key to use, specified as a hexadecimal string", |
| 197 | .type = OPTION_ARG, | 197 | .type = OPTION_ARG, |
| 198 | .opt.arg = &enc_config.hkey, | 198 | .opt.arg = &cfg.hkey, |
| 199 | }, | 199 | }, |
| 200 | { | 200 | { |
| 201 | .name = "k", /* Superseded by -pass. */ | 201 | .name = "k", /* Superseded by -pass. */ |
| 202 | .type = OPTION_ARG, | 202 | .type = OPTION_ARG, |
| 203 | .opt.arg = &enc_config.keystr, | 203 | .opt.arg = &cfg.keystr, |
| 204 | }, | 204 | }, |
| 205 | { | 205 | { |
| 206 | .name = "kfile", /* Superseded by -pass. */ | 206 | .name = "kfile", /* Superseded by -pass. */ |
| 207 | .type = OPTION_ARG, | 207 | .type = OPTION_ARG, |
| 208 | .opt.arg = &enc_config.keyfile, | 208 | .opt.arg = &cfg.keyfile, |
| 209 | }, | 209 | }, |
| 210 | { | 210 | { |
| 211 | .name = "md", | 211 | .name = "md", |
| 212 | .argname = "digest", | 212 | .argname = "digest", |
| 213 | .desc = "Digest to use to create a key from the passphrase", | 213 | .desc = "Digest to use to create a key from the passphrase", |
| 214 | .type = OPTION_ARG, | 214 | .type = OPTION_ARG, |
| 215 | .opt.arg = &enc_config.md, | 215 | .opt.arg = &cfg.md, |
| 216 | }, | 216 | }, |
| 217 | { | 217 | { |
| 218 | .name = "none", | 218 | .name = "none", |
| @@ -224,12 +224,12 @@ static const struct option enc_options[] = { | |||
| 224 | .name = "nopad", | 224 | .name = "nopad", |
| 225 | .desc = "Disable standard block padding", | 225 | .desc = "Disable standard block padding", |
| 226 | .type = OPTION_FLAG, | 226 | .type = OPTION_FLAG, |
| 227 | .opt.flag = &enc_config.nopad, | 227 | .opt.flag = &cfg.nopad, |
| 228 | }, | 228 | }, |
| 229 | { | 229 | { |
| 230 | .name = "nosalt", | 230 | .name = "nosalt", |
| 231 | .type = OPTION_VALUE, | 231 | .type = OPTION_VALUE, |
| 232 | .opt.value = &enc_config.nosalt, | 232 | .opt.value = &cfg.nosalt, |
| 233 | .value = 1, | 233 | .value = 1, |
| 234 | }, | 234 | }, |
| 235 | { | 235 | { |
| @@ -237,21 +237,21 @@ static const struct option enc_options[] = { | |||
| 237 | .argname = "file", | 237 | .argname = "file", |
| 238 | .desc = "Output file to write to (default stdout)", | 238 | .desc = "Output file to write to (default stdout)", |
| 239 | .type = OPTION_ARG, | 239 | .type = OPTION_ARG, |
| 240 | .opt.arg = &enc_config.outf, | 240 | .opt.arg = &cfg.outf, |
| 241 | }, | 241 | }, |
| 242 | { | 242 | { |
| 243 | .name = "P", | 243 | .name = "P", |
| 244 | .desc = "Print out the salt, key and IV used, then exit\n" | 244 | .desc = "Print out the salt, key and IV used, then exit\n" |
| 245 | " (no encryption or decryption is performed)", | 245 | " (no encryption or decryption is performed)", |
| 246 | .type = OPTION_VALUE, | 246 | .type = OPTION_VALUE, |
| 247 | .opt.value = &enc_config.printkey, | 247 | .opt.value = &cfg.printkey, |
| 248 | .value = 2, | 248 | .value = 2, |
| 249 | }, | 249 | }, |
| 250 | { | 250 | { |
| 251 | .name = "p", | 251 | .name = "p", |
| 252 | .desc = "Print out the salt, key and IV used", | 252 | .desc = "Print out the salt, key and IV used", |
| 253 | .type = OPTION_VALUE, | 253 | .type = OPTION_VALUE, |
| 254 | .opt.value = &enc_config.printkey, | 254 | .opt.value = &cfg.printkey, |
| 255 | .value = 1, | 255 | .value = 1, |
| 256 | }, | 256 | }, |
| 257 | { | 257 | { |
| @@ -259,40 +259,40 @@ static const struct option enc_options[] = { | |||
| 259 | .argname = "source", | 259 | .argname = "source", |
| 260 | .desc = "Password source", | 260 | .desc = "Password source", |
| 261 | .type = OPTION_ARG, | 261 | .type = OPTION_ARG, |
| 262 | .opt.arg = &enc_config.passarg, | 262 | .opt.arg = &cfg.passarg, |
| 263 | }, | 263 | }, |
| 264 | { | 264 | { |
| 265 | .name = "pbkdf2", | 265 | .name = "pbkdf2", |
| 266 | .desc = "Use the pbkdf2 key derivation function", | 266 | .desc = "Use the pbkdf2 key derivation function", |
| 267 | .type = OPTION_FLAG, | 267 | .type = OPTION_FLAG, |
| 268 | .opt.flag = &enc_config.pbkdf2, | 268 | .opt.flag = &cfg.pbkdf2, |
| 269 | }, | 269 | }, |
| 270 | { | 270 | { |
| 271 | .name = "S", | 271 | .name = "S", |
| 272 | .argname = "salt", | 272 | .argname = "salt", |
| 273 | .desc = "Salt to use, specified as a hexadecimal string", | 273 | .desc = "Salt to use, specified as a hexadecimal string", |
| 274 | .type = OPTION_ARG, | 274 | .type = OPTION_ARG, |
| 275 | .opt.arg = &enc_config.hsalt, | 275 | .opt.arg = &cfg.hsalt, |
| 276 | }, | 276 | }, |
| 277 | { | 277 | { |
| 278 | .name = "salt", | 278 | .name = "salt", |
| 279 | .desc = "Use a salt in the key derivation routines (default)", | 279 | .desc = "Use a salt in the key derivation routines (default)", |
| 280 | .type = OPTION_VALUE, | 280 | .type = OPTION_VALUE, |
| 281 | .opt.value = &enc_config.nosalt, | 281 | .opt.value = &cfg.nosalt, |
| 282 | .value = 0, | 282 | .value = 0, |
| 283 | }, | 283 | }, |
| 284 | { | 284 | { |
| 285 | .name = "v", | 285 | .name = "v", |
| 286 | .desc = "Verbose", | 286 | .desc = "Verbose", |
| 287 | .type = OPTION_FLAG, | 287 | .type = OPTION_FLAG, |
| 288 | .opt.flag = &enc_config.verbose, | 288 | .opt.flag = &cfg.verbose, |
| 289 | }, | 289 | }, |
| 290 | #ifdef ZLIB | 290 | #ifdef ZLIB |
| 291 | { | 291 | { |
| 292 | .name = "z", | 292 | .name = "z", |
| 293 | .desc = "Perform zlib compression/decompression", | 293 | .desc = "Perform zlib compression/decompression", |
| 294 | .type = OPTION_FLAG, | 294 | .type = OPTION_FLAG, |
| 295 | .opt.flag = &enc_config.do_zlib, | 295 | .opt.flag = &cfg.do_zlib, |
| 296 | }, | 296 | }, |
| 297 | #endif | 297 | #endif |
| 298 | { | 298 | { |
| @@ -365,27 +365,27 @@ enc_main(int argc, char **argv) | |||
| 365 | exit(1); | 365 | exit(1); |
| 366 | } | 366 | } |
| 367 | 367 | ||
| 368 | memset(&enc_config, 0, sizeof(enc_config)); | 368 | memset(&cfg, 0, sizeof(cfg)); |
| 369 | enc_config.enc = 1; | 369 | cfg.enc = 1; |
| 370 | 370 | ||
| 371 | /* first check the program name */ | 371 | /* first check the program name */ |
| 372 | program_name(argv[0], pname, sizeof(pname)); | 372 | program_name(argv[0], pname, sizeof(pname)); |
| 373 | 373 | ||
| 374 | if (strcmp(pname, "base64") == 0) | 374 | if (strcmp(pname, "base64") == 0) |
| 375 | enc_config.base64 = 1; | 375 | cfg.base64 = 1; |
| 376 | 376 | ||
| 377 | #ifdef ZLIB | 377 | #ifdef ZLIB |
| 378 | if (strcmp(pname, "zlib") == 0) | 378 | if (strcmp(pname, "zlib") == 0) |
| 379 | enc_config.do_zlib = 1; | 379 | cfg.do_zlib = 1; |
| 380 | #endif | 380 | #endif |
| 381 | 381 | ||
| 382 | enc_config.cipher = EVP_get_cipherbyname(pname); | 382 | cfg.cipher = EVP_get_cipherbyname(pname); |
| 383 | 383 | ||
| 384 | #ifdef ZLIB | 384 | #ifdef ZLIB |
| 385 | if (!enc_config.do_zlib && !enc_config.base64 && | 385 | if (!cfg.do_zlib && !cfg.base64 && |
| 386 | enc_config.cipher == NULL && strcmp(pname, "enc") != 0) | 386 | cfg.cipher == NULL && strcmp(pname, "enc") != 0) |
| 387 | #else | 387 | #else |
| 388 | if (!enc_config.base64 && enc_config.cipher == NULL && | 388 | if (!cfg.base64 && cfg.cipher == NULL && |
| 389 | strcmp(pname, "enc") != 0) | 389 | strcmp(pname, "enc") != 0) |
| 390 | #endif | 390 | #endif |
| 391 | { | 391 | { |
| @@ -398,20 +398,20 @@ enc_main(int argc, char **argv) | |||
| 398 | goto end; | 398 | goto end; |
| 399 | } | 399 | } |
| 400 | 400 | ||
| 401 | if (enc_config.keyfile != NULL) { | 401 | if (cfg.keyfile != NULL) { |
| 402 | static char buf[128]; | 402 | static char buf[128]; |
| 403 | FILE *infile; | 403 | FILE *infile; |
| 404 | 404 | ||
| 405 | infile = fopen(enc_config.keyfile, "r"); | 405 | infile = fopen(cfg.keyfile, "r"); |
| 406 | if (infile == NULL) { | 406 | if (infile == NULL) { |
| 407 | BIO_printf(bio_err, "unable to read key from '%s'\n", | 407 | BIO_printf(bio_err, "unable to read key from '%s'\n", |
| 408 | enc_config.keyfile); | 408 | cfg.keyfile); |
| 409 | goto end; | 409 | goto end; |
| 410 | } | 410 | } |
| 411 | buf[0] = '\0'; | 411 | buf[0] = '\0'; |
| 412 | if (!fgets(buf, sizeof buf, infile)) { | 412 | if (!fgets(buf, sizeof buf, infile)) { |
| 413 | BIO_printf(bio_err, "unable to read key from '%s'\n", | 413 | BIO_printf(bio_err, "unable to read key from '%s'\n", |
| 414 | enc_config.keyfile); | 414 | cfg.keyfile); |
| 415 | fclose(infile); | 415 | fclose(infile); |
| 416 | goto end; | 416 | goto end; |
| 417 | } | 417 | } |
| @@ -425,34 +425,34 @@ enc_main(int argc, char **argv) | |||
| 425 | BIO_printf(bio_err, "zero length password\n"); | 425 | BIO_printf(bio_err, "zero length password\n"); |
| 426 | goto end; | 426 | goto end; |
| 427 | } | 427 | } |
| 428 | enc_config.keystr = buf; | 428 | cfg.keystr = buf; |
| 429 | } | 429 | } |
| 430 | 430 | ||
| 431 | if (enc_config.cipher != NULL && | 431 | if (cfg.cipher != NULL && |
| 432 | (EVP_CIPHER_flags(enc_config.cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) != 0) { | 432 | (EVP_CIPHER_flags(cfg.cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) != 0) { |
| 433 | BIO_printf(bio_err, "enc does not support AEAD ciphers\n"); | 433 | BIO_printf(bio_err, "enc does not support AEAD ciphers\n"); |
| 434 | goto end; | 434 | goto end; |
| 435 | } | 435 | } |
| 436 | 436 | ||
| 437 | if (enc_config.cipher != NULL && | 437 | if (cfg.cipher != NULL && |
| 438 | EVP_CIPHER_mode(enc_config.cipher) == EVP_CIPH_XTS_MODE) { | 438 | EVP_CIPHER_mode(cfg.cipher) == EVP_CIPH_XTS_MODE) { |
| 439 | BIO_printf(bio_err, "enc does not support XTS mode\n"); | 439 | BIO_printf(bio_err, "enc does not support XTS mode\n"); |
| 440 | goto end; | 440 | goto end; |
| 441 | } | 441 | } |
| 442 | 442 | ||
| 443 | if (enc_config.md != NULL && | 443 | if (cfg.md != NULL && |
| 444 | (dgst = EVP_get_digestbyname(enc_config.md)) == NULL) { | 444 | (dgst = EVP_get_digestbyname(cfg.md)) == NULL) { |
| 445 | BIO_printf(bio_err, | 445 | BIO_printf(bio_err, |
| 446 | "%s is an unsupported message digest type\n", | 446 | "%s is an unsupported message digest type\n", |
| 447 | enc_config.md); | 447 | cfg.md); |
| 448 | goto end; | 448 | goto end; |
| 449 | } | 449 | } |
| 450 | if (dgst == NULL) { | 450 | if (dgst == NULL) { |
| 451 | dgst = EVP_sha256(); | 451 | dgst = EVP_sha256(); |
| 452 | } | 452 | } |
| 453 | 453 | ||
| 454 | if (enc_config.bufsize != NULL) { | 454 | if (cfg.bufsize != NULL) { |
| 455 | char *p = enc_config.bufsize; | 455 | char *p = cfg.bufsize; |
| 456 | unsigned long n; | 456 | unsigned long n; |
| 457 | 457 | ||
| 458 | /* XXX - provide an OPTION_ARG_DISKUNIT. */ | 458 | /* XXX - provide an OPTION_ARG_DISKUNIT. */ |
| @@ -471,11 +471,11 @@ enc_main(int argc, char **argv) | |||
| 471 | goto end; | 471 | goto end; |
| 472 | } | 472 | } |
| 473 | /* It must be large enough for a base64 encoded line. */ | 473 | /* It must be large enough for a base64 encoded line. */ |
| 474 | if (enc_config.base64 && n < 80) | 474 | if (cfg.base64 && n < 80) |
| 475 | n = 80; | 475 | n = 80; |
| 476 | 476 | ||
| 477 | bsize = (int)n; | 477 | bsize = (int)n; |
| 478 | if (enc_config.verbose) | 478 | if (cfg.verbose) |
| 479 | BIO_printf(bio_err, "bufsize=%d\n", bsize); | 479 | BIO_printf(bio_err, "bufsize=%d\n", bsize); |
| 480 | } | 480 | } |
| 481 | strbuf = malloc(SIZE); | 481 | strbuf = malloc(SIZE); |
| @@ -490,41 +490,41 @@ enc_main(int argc, char **argv) | |||
| 490 | ERR_print_errors(bio_err); | 490 | ERR_print_errors(bio_err); |
| 491 | goto end; | 491 | goto end; |
| 492 | } | 492 | } |
| 493 | if (enc_config.debug) { | 493 | if (cfg.debug) { |
| 494 | BIO_set_callback(in, BIO_debug_callback); | 494 | BIO_set_callback(in, BIO_debug_callback); |
| 495 | BIO_set_callback(out, BIO_debug_callback); | 495 | BIO_set_callback(out, BIO_debug_callback); |
| 496 | BIO_set_callback_arg(in, (char *) bio_err); | 496 | BIO_set_callback_arg(in, (char *) bio_err); |
| 497 | BIO_set_callback_arg(out, (char *) bio_err); | 497 | BIO_set_callback_arg(out, (char *) bio_err); |
| 498 | } | 498 | } |
| 499 | if (enc_config.inf == NULL) { | 499 | if (cfg.inf == NULL) { |
| 500 | if (enc_config.bufsize != NULL) | 500 | if (cfg.bufsize != NULL) |
| 501 | setvbuf(stdin, (char *) NULL, _IONBF, 0); | 501 | setvbuf(stdin, (char *) NULL, _IONBF, 0); |
| 502 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 502 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 503 | } else { | 503 | } else { |
| 504 | if (BIO_read_filename(in, enc_config.inf) <= 0) { | 504 | if (BIO_read_filename(in, cfg.inf) <= 0) { |
| 505 | perror(enc_config.inf); | 505 | perror(cfg.inf); |
| 506 | goto end; | 506 | goto end; |
| 507 | } | 507 | } |
| 508 | } | 508 | } |
| 509 | 509 | ||
| 510 | if (!enc_config.keystr && enc_config.passarg) { | 510 | if (!cfg.keystr && cfg.passarg) { |
| 511 | if (!app_passwd(bio_err, enc_config.passarg, NULL, | 511 | if (!app_passwd(bio_err, cfg.passarg, NULL, |
| 512 | &pass, NULL)) { | 512 | &pass, NULL)) { |
| 513 | BIO_printf(bio_err, "Error getting password\n"); | 513 | BIO_printf(bio_err, "Error getting password\n"); |
| 514 | goto end; | 514 | goto end; |
| 515 | } | 515 | } |
| 516 | enc_config.keystr = pass; | 516 | cfg.keystr = pass; |
| 517 | } | 517 | } |
| 518 | if (enc_config.keystr == NULL && enc_config.cipher != NULL && | 518 | if (cfg.keystr == NULL && cfg.cipher != NULL && |
| 519 | enc_config.hkey == NULL) { | 519 | cfg.hkey == NULL) { |
| 520 | for (;;) { | 520 | for (;;) { |
| 521 | char buf[200]; | 521 | char buf[200]; |
| 522 | int retval; | 522 | int retval; |
| 523 | 523 | ||
| 524 | retval = snprintf(buf, sizeof buf, | 524 | retval = snprintf(buf, sizeof buf, |
| 525 | "enter %s %s password:", | 525 | "enter %s %s password:", |
| 526 | OBJ_nid2ln(EVP_CIPHER_nid(enc_config.cipher)), | 526 | OBJ_nid2ln(EVP_CIPHER_nid(cfg.cipher)), |
| 527 | enc_config.enc ? "encryption" : "decryption"); | 527 | cfg.enc ? "encryption" : "decryption"); |
| 528 | if ((size_t)retval >= sizeof buf) { | 528 | if ((size_t)retval >= sizeof buf) { |
| 529 | BIO_printf(bio_err, | 529 | BIO_printf(bio_err, |
| 530 | "Password prompt too long\n"); | 530 | "Password prompt too long\n"); |
| @@ -532,13 +532,13 @@ enc_main(int argc, char **argv) | |||
| 532 | } | 532 | } |
| 533 | strbuf[0] = '\0'; | 533 | strbuf[0] = '\0'; |
| 534 | i = EVP_read_pw_string((char *)strbuf, SIZE, buf, | 534 | i = EVP_read_pw_string((char *)strbuf, SIZE, buf, |
| 535 | enc_config.enc); | 535 | cfg.enc); |
| 536 | if (i == 0) { | 536 | if (i == 0) { |
| 537 | if (strbuf[0] == '\0') { | 537 | if (strbuf[0] == '\0') { |
| 538 | ret = 1; | 538 | ret = 1; |
| 539 | goto end; | 539 | goto end; |
| 540 | } | 540 | } |
| 541 | enc_config.keystr = strbuf; | 541 | cfg.keystr = strbuf; |
| 542 | break; | 542 | break; |
| 543 | } | 543 | } |
| 544 | if (i < 0) { | 544 | if (i < 0) { |
| @@ -547,13 +547,13 @@ enc_main(int argc, char **argv) | |||
| 547 | } | 547 | } |
| 548 | } | 548 | } |
| 549 | } | 549 | } |
| 550 | if (enc_config.outf == NULL) { | 550 | if (cfg.outf == NULL) { |
| 551 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 551 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 552 | if (enc_config.bufsize != NULL) | 552 | if (cfg.bufsize != NULL) |
| 553 | setvbuf(stdout, (char *)NULL, _IONBF, 0); | 553 | setvbuf(stdout, (char *)NULL, _IONBF, 0); |
| 554 | } else { | 554 | } else { |
| 555 | if (BIO_write_filename(out, enc_config.outf) <= 0) { | 555 | if (BIO_write_filename(out, cfg.outf) <= 0) { |
| 556 | perror(enc_config.outf); | 556 | perror(cfg.outf); |
| 557 | goto end; | 557 | goto end; |
| 558 | } | 558 | } |
| 559 | } | 559 | } |
| @@ -572,38 +572,38 @@ enc_main(int argc, char **argv) | |||
| 572 | } | 572 | } |
| 573 | #endif | 573 | #endif |
| 574 | 574 | ||
| 575 | if (enc_config.base64) { | 575 | if (cfg.base64) { |
| 576 | if ((b64 = BIO_new(BIO_f_base64())) == NULL) | 576 | if ((b64 = BIO_new(BIO_f_base64())) == NULL) |
| 577 | goto end; | 577 | goto end; |
| 578 | if (enc_config.debug) { | 578 | if (cfg.debug) { |
| 579 | BIO_set_callback(b64, BIO_debug_callback); | 579 | BIO_set_callback(b64, BIO_debug_callback); |
| 580 | BIO_set_callback_arg(b64, (char *) bio_err); | 580 | BIO_set_callback_arg(b64, (char *) bio_err); |
| 581 | } | 581 | } |
| 582 | if (enc_config.olb64) | 582 | if (cfg.olb64) |
| 583 | BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); | 583 | BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); |
| 584 | if (enc_config.enc) | 584 | if (cfg.enc) |
| 585 | wbio = BIO_push(b64, wbio); | 585 | wbio = BIO_push(b64, wbio); |
| 586 | else | 586 | else |
| 587 | rbio = BIO_push(b64, rbio); | 587 | rbio = BIO_push(b64, rbio); |
| 588 | } | 588 | } |
| 589 | if (enc_config.cipher != NULL) { | 589 | if (cfg.cipher != NULL) { |
| 590 | /* | 590 | /* |
| 591 | * Note that keystr is NULL if a key was passed on the command | 591 | * Note that keystr is NULL if a key was passed on the command |
| 592 | * line, so we get no salt in that case. Is this a bug? | 592 | * line, so we get no salt in that case. Is this a bug? |
| 593 | */ | 593 | */ |
| 594 | if (enc_config.keystr != NULL) { | 594 | if (cfg.keystr != NULL) { |
| 595 | /* | 595 | /* |
| 596 | * Salt handling: if encrypting generate a salt and | 596 | * Salt handling: if encrypting generate a salt and |
| 597 | * write to output BIO. If decrypting read salt from | 597 | * write to output BIO. If decrypting read salt from |
| 598 | * input BIO. | 598 | * input BIO. |
| 599 | */ | 599 | */ |
| 600 | unsigned char *sptr; | 600 | unsigned char *sptr; |
| 601 | if (enc_config.nosalt) | 601 | if (cfg.nosalt) |
| 602 | sptr = NULL; | 602 | sptr = NULL; |
| 603 | else { | 603 | else { |
| 604 | if (enc_config.enc) { | 604 | if (cfg.enc) { |
| 605 | if (enc_config.hsalt) { | 605 | if (cfg.hsalt) { |
| 606 | if (!set_hex(enc_config.hsalt, salt, sizeof salt)) { | 606 | if (!set_hex(cfg.hsalt, salt, sizeof salt)) { |
| 607 | BIO_printf(bio_err, | 607 | BIO_printf(bio_err, |
| 608 | "invalid hex salt value\n"); | 608 | "invalid hex salt value\n"); |
| 609 | goto end; | 609 | goto end; |
| @@ -615,7 +615,7 @@ enc_main(int argc, char **argv) | |||
| 615 | * If -P option then don't bother | 615 | * If -P option then don't bother |
| 616 | * writing | 616 | * writing |
| 617 | */ | 617 | */ |
| 618 | if ((enc_config.printkey != 2) | 618 | if ((cfg.printkey != 2) |
| 619 | && (BIO_write(wbio, magic, | 619 | && (BIO_write(wbio, magic, |
| 620 | sizeof magic - 1) != sizeof magic - 1 | 620 | sizeof magic - 1) != sizeof magic - 1 |
| 621 | || BIO_write(wbio, | 621 | || BIO_write(wbio, |
| @@ -636,23 +636,23 @@ enc_main(int argc, char **argv) | |||
| 636 | } | 636 | } |
| 637 | sptr = salt; | 637 | sptr = salt; |
| 638 | } | 638 | } |
| 639 | if (enc_config.pbkdf2 == 1 || enc_config.iter > 0) { | 639 | if (cfg.pbkdf2 == 1 || cfg.iter > 0) { |
| 640 | /* | 640 | /* |
| 641 | * derive key and default iv | 641 | * derive key and default iv |
| 642 | * concatenated into a temporary buffer | 642 | * concatenated into a temporary buffer |
| 643 | */ | 643 | */ |
| 644 | unsigned char tmpkeyiv[EVP_MAX_KEY_LENGTH + EVP_MAX_IV_LENGTH]; | 644 | unsigned char tmpkeyiv[EVP_MAX_KEY_LENGTH + EVP_MAX_IV_LENGTH]; |
| 645 | int iklen = EVP_CIPHER_key_length(enc_config.cipher); | 645 | int iklen = EVP_CIPHER_key_length(cfg.cipher); |
| 646 | int ivlen = EVP_CIPHER_iv_length(enc_config.cipher); | 646 | int ivlen = EVP_CIPHER_iv_length(cfg.cipher); |
| 647 | /* not needed if HASH_UPDATE() is fixed : */ | 647 | /* not needed if HASH_UPDATE() is fixed : */ |
| 648 | int islen = (sptr != NULL ? sizeof(salt) : 0); | 648 | int islen = (sptr != NULL ? sizeof(salt) : 0); |
| 649 | 649 | ||
| 650 | if (enc_config.iter == 0) | 650 | if (cfg.iter == 0) |
| 651 | enc_config.iter = 10000; | 651 | cfg.iter = 10000; |
| 652 | 652 | ||
| 653 | if (!PKCS5_PBKDF2_HMAC(enc_config.keystr, | 653 | if (!PKCS5_PBKDF2_HMAC(cfg.keystr, |
| 654 | strlen(enc_config.keystr), sptr, islen, | 654 | strlen(cfg.keystr), sptr, islen, |
| 655 | enc_config.iter, dgst, iklen+ivlen, tmpkeyiv)) { | 655 | cfg.iter, dgst, iklen+ivlen, tmpkeyiv)) { |
| 656 | BIO_printf(bio_err, "PKCS5_PBKDF2_HMAC failed\n"); | 656 | BIO_printf(bio_err, "PKCS5_PBKDF2_HMAC failed\n"); |
| 657 | goto end; | 657 | goto end; |
| 658 | } | 658 | } |
| @@ -661,9 +661,9 @@ enc_main(int argc, char **argv) | |||
| 661 | memcpy(iv, tmpkeyiv + iklen, ivlen); | 661 | memcpy(iv, tmpkeyiv + iklen, ivlen); |
| 662 | explicit_bzero(tmpkeyiv, sizeof tmpkeyiv); | 662 | explicit_bzero(tmpkeyiv, sizeof tmpkeyiv); |
| 663 | } else { | 663 | } else { |
| 664 | EVP_BytesToKey(enc_config.cipher, dgst, sptr, | 664 | EVP_BytesToKey(cfg.cipher, dgst, sptr, |
| 665 | (unsigned char *)enc_config.keystr, | 665 | (unsigned char *)cfg.keystr, |
| 666 | strlen(enc_config.keystr), 1, key, iv); | 666 | strlen(cfg.keystr), 1, key, iv); |
| 667 | } | 667 | } |
| 668 | 668 | ||
| 669 | /* | 669 | /* |
| @@ -671,19 +671,19 @@ enc_main(int argc, char **argv) | |||
| 671 | * the command line bug picked up by Larry J. Hughes | 671 | * the command line bug picked up by Larry J. Hughes |
| 672 | * Jr. <hughes@indiana.edu> | 672 | * Jr. <hughes@indiana.edu> |
| 673 | */ | 673 | */ |
| 674 | if (enc_config.keystr == strbuf) | 674 | if (cfg.keystr == strbuf) |
| 675 | explicit_bzero(enc_config.keystr, SIZE); | 675 | explicit_bzero(cfg.keystr, SIZE); |
| 676 | else | 676 | else |
| 677 | explicit_bzero(enc_config.keystr, | 677 | explicit_bzero(cfg.keystr, |
| 678 | strlen(enc_config.keystr)); | 678 | strlen(cfg.keystr)); |
| 679 | } | 679 | } |
| 680 | if (enc_config.hiv != NULL && | 680 | if (cfg.hiv != NULL && |
| 681 | !set_hex(enc_config.hiv, iv, sizeof iv)) { | 681 | !set_hex(cfg.hiv, iv, sizeof iv)) { |
| 682 | BIO_printf(bio_err, "invalid hex iv value\n"); | 682 | BIO_printf(bio_err, "invalid hex iv value\n"); |
| 683 | goto end; | 683 | goto end; |
| 684 | } | 684 | } |
| 685 | if (enc_config.hiv == NULL && enc_config.keystr == NULL && | 685 | if (cfg.hiv == NULL && cfg.keystr == NULL && |
| 686 | EVP_CIPHER_iv_length(enc_config.cipher) != 0) { | 686 | EVP_CIPHER_iv_length(cfg.cipher) != 0) { |
| 687 | /* | 687 | /* |
| 688 | * No IV was explicitly set and no IV was generated | 688 | * No IV was explicitly set and no IV was generated |
| 689 | * during EVP_BytesToKey. Hence the IV is undefined, | 689 | * during EVP_BytesToKey. Hence the IV is undefined, |
| @@ -692,8 +692,8 @@ enc_main(int argc, char **argv) | |||
| 692 | BIO_printf(bio_err, "iv undefined\n"); | 692 | BIO_printf(bio_err, "iv undefined\n"); |
| 693 | goto end; | 693 | goto end; |
| 694 | } | 694 | } |
| 695 | if (enc_config.hkey != NULL && | 695 | if (cfg.hkey != NULL && |
| 696 | !set_hex(enc_config.hkey, key, sizeof key)) { | 696 | !set_hex(cfg.hkey, key, sizeof key)) { |
| 697 | BIO_printf(bio_err, "invalid hex key value\n"); | 697 | BIO_printf(bio_err, "invalid hex key value\n"); |
| 698 | goto end; | 698 | goto end; |
| 699 | } | 699 | } |
| @@ -707,51 +707,51 @@ enc_main(int argc, char **argv) | |||
| 707 | 707 | ||
| 708 | BIO_get_cipher_ctx(benc, &ctx); | 708 | BIO_get_cipher_ctx(benc, &ctx); |
| 709 | 709 | ||
| 710 | if (!EVP_CipherInit_ex(ctx, enc_config.cipher, NULL, NULL, | 710 | if (!EVP_CipherInit_ex(ctx, cfg.cipher, NULL, NULL, |
| 711 | NULL, enc_config.enc)) { | 711 | NULL, cfg.enc)) { |
| 712 | BIO_printf(bio_err, "Error setting cipher %s\n", | 712 | BIO_printf(bio_err, "Error setting cipher %s\n", |
| 713 | EVP_CIPHER_name(enc_config.cipher)); | 713 | EVP_CIPHER_name(cfg.cipher)); |
| 714 | ERR_print_errors(bio_err); | 714 | ERR_print_errors(bio_err); |
| 715 | goto end; | 715 | goto end; |
| 716 | } | 716 | } |
| 717 | if (enc_config.nopad) | 717 | if (cfg.nopad) |
| 718 | EVP_CIPHER_CTX_set_padding(ctx, 0); | 718 | EVP_CIPHER_CTX_set_padding(ctx, 0); |
| 719 | 719 | ||
| 720 | if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, | 720 | if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, |
| 721 | enc_config.enc)) { | 721 | cfg.enc)) { |
| 722 | BIO_printf(bio_err, "Error setting cipher %s\n", | 722 | BIO_printf(bio_err, "Error setting cipher %s\n", |
| 723 | EVP_CIPHER_name(enc_config.cipher)); | 723 | EVP_CIPHER_name(cfg.cipher)); |
| 724 | ERR_print_errors(bio_err); | 724 | ERR_print_errors(bio_err); |
| 725 | goto end; | 725 | goto end; |
| 726 | } | 726 | } |
| 727 | if (enc_config.debug) { | 727 | if (cfg.debug) { |
| 728 | BIO_set_callback(benc, BIO_debug_callback); | 728 | BIO_set_callback(benc, BIO_debug_callback); |
| 729 | BIO_set_callback_arg(benc, (char *) bio_err); | 729 | BIO_set_callback_arg(benc, (char *) bio_err); |
| 730 | } | 730 | } |
| 731 | if (enc_config.printkey) { | 731 | if (cfg.printkey) { |
| 732 | int key_len, iv_len; | 732 | int key_len, iv_len; |
| 733 | 733 | ||
| 734 | if (!enc_config.nosalt) { | 734 | if (!cfg.nosalt) { |
| 735 | printf("salt="); | 735 | printf("salt="); |
| 736 | for (i = 0; i < (int) sizeof(salt); i++) | 736 | for (i = 0; i < (int) sizeof(salt); i++) |
| 737 | printf("%02X", salt[i]); | 737 | printf("%02X", salt[i]); |
| 738 | printf("\n"); | 738 | printf("\n"); |
| 739 | } | 739 | } |
| 740 | key_len = EVP_CIPHER_key_length(enc_config.cipher); | 740 | key_len = EVP_CIPHER_key_length(cfg.cipher); |
| 741 | if (key_len > 0) { | 741 | if (key_len > 0) { |
| 742 | printf("key="); | 742 | printf("key="); |
| 743 | for (i = 0; i < key_len; i++) | 743 | for (i = 0; i < key_len; i++) |
| 744 | printf("%02X", key[i]); | 744 | printf("%02X", key[i]); |
| 745 | printf("\n"); | 745 | printf("\n"); |
| 746 | } | 746 | } |
| 747 | iv_len = EVP_CIPHER_iv_length(enc_config.cipher); | 747 | iv_len = EVP_CIPHER_iv_length(cfg.cipher); |
| 748 | if (iv_len > 0) { | 748 | if (iv_len > 0) { |
| 749 | printf("iv ="); | 749 | printf("iv ="); |
| 750 | for (i = 0; i < iv_len; i++) | 750 | for (i = 0; i < iv_len; i++) |
| 751 | printf("%02X", iv[i]); | 751 | printf("%02X", iv[i]); |
| 752 | printf("\n"); | 752 | printf("\n"); |
| 753 | } | 753 | } |
| 754 | if (enc_config.printkey == 2) { | 754 | if (cfg.printkey == 2) { |
| 755 | ret = 0; | 755 | ret = 0; |
| 756 | goto end; | 756 | goto end; |
| 757 | } | 757 | } |
| @@ -775,7 +775,7 @@ enc_main(int argc, char **argv) | |||
| 775 | goto end; | 775 | goto end; |
| 776 | } | 776 | } |
| 777 | ret = 0; | 777 | ret = 0; |
| 778 | if (enc_config.verbose) { | 778 | if (cfg.verbose) { |
| 779 | BIO_printf(bio_err, "bytes read :%8ld\n", BIO_number_read(in)); | 779 | BIO_printf(bio_err, "bytes read :%8ld\n", BIO_number_read(in)); |
| 780 | BIO_printf(bio_err, "bytes written:%8ld\n", BIO_number_written(out)); | 780 | BIO_printf(bio_err, "bytes written:%8ld\n", BIO_number_written(out)); |
| 781 | } | 781 | } |
diff --git a/src/usr.bin/openssl/errstr.c b/src/usr.bin/openssl/errstr.c index 64f0141ba0..cb7cf1d5a3 100644 --- a/src/usr.bin/openssl/errstr.c +++ b/src/usr.bin/openssl/errstr.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: errstr.c,v 1.9 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: errstr.c,v 1.10 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -70,14 +70,14 @@ | |||
| 70 | 70 | ||
| 71 | static struct { | 71 | static struct { |
| 72 | int stats; | 72 | int stats; |
| 73 | } errstr_config; | 73 | } cfg; |
| 74 | 74 | ||
| 75 | static const struct option errstr_options[] = { | 75 | static const struct option errstr_options[] = { |
| 76 | { | 76 | { |
| 77 | .name = "stats", | 77 | .name = "stats", |
| 78 | .desc = "Print debugging statistics for the hash table", | 78 | .desc = "Print debugging statistics for the hash table", |
| 79 | .type = OPTION_FLAG, | 79 | .type = OPTION_FLAG, |
| 80 | .opt.flag = &errstr_config.stats, | 80 | .opt.flag = &cfg.stats, |
| 81 | }, | 81 | }, |
| 82 | { NULL }, | 82 | { NULL }, |
| 83 | }; | 83 | }; |
| @@ -103,14 +103,14 @@ errstr_main(int argc, char **argv) | |||
| 103 | exit(1); | 103 | exit(1); |
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | memset(&errstr_config, 0, sizeof(errstr_config)); | 106 | memset(&cfg, 0, sizeof(cfg)); |
| 107 | 107 | ||
| 108 | if (options_parse(argc, argv, errstr_options, NULL, &argsused) != 0) { | 108 | if (options_parse(argc, argv, errstr_options, NULL, &argsused) != 0) { |
| 109 | errstr_usage(); | 109 | errstr_usage(); |
| 110 | return (1); | 110 | return (1); |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | if (errstr_config.stats) { | 113 | if (cfg.stats) { |
| 114 | BIO *out; | 114 | BIO *out; |
| 115 | 115 | ||
| 116 | if ((out = BIO_new_fp(stdout, BIO_NOCLOSE)) == NULL) { | 116 | if ((out = BIO_new_fp(stdout, BIO_NOCLOSE)) == NULL) { |
diff --git a/src/usr.bin/openssl/gendh.c b/src/usr.bin/openssl/gendh.c index b4e4f29111..b9dde3c773 100644 --- a/src/usr.bin/openssl/gendh.c +++ b/src/usr.bin/openssl/gendh.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: gendh.c,v 1.13 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: gendh.c,v 1.14 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -89,7 +89,7 @@ static int dh_cb(int p, int n, BN_GENCB *cb); | |||
| 89 | static struct { | 89 | static struct { |
| 90 | int g; | 90 | int g; |
| 91 | char *outfile; | 91 | char *outfile; |
| 92 | } gendh_config; | 92 | } cfg; |
| 93 | 93 | ||
| 94 | static const struct option gendh_options[] = { | 94 | static const struct option gendh_options[] = { |
| 95 | { | 95 | { |
| @@ -98,21 +98,21 @@ static const struct option gendh_options[] = { | |||
| 98 | "(default)", | 98 | "(default)", |
| 99 | .type = OPTION_VALUE, | 99 | .type = OPTION_VALUE, |
| 100 | .value = 2, | 100 | .value = 2, |
| 101 | .opt.value = &gendh_config.g, | 101 | .opt.value = &cfg.g, |
| 102 | }, | 102 | }, |
| 103 | { | 103 | { |
| 104 | .name = "5", | 104 | .name = "5", |
| 105 | .desc = "Generate DH parameters with a generator value of 5", | 105 | .desc = "Generate DH parameters with a generator value of 5", |
| 106 | .type = OPTION_VALUE, | 106 | .type = OPTION_VALUE, |
| 107 | .value = 5, | 107 | .value = 5, |
| 108 | .opt.value = &gendh_config.g, | 108 | .opt.value = &cfg.g, |
| 109 | }, | 109 | }, |
| 110 | { | 110 | { |
| 111 | .name = "out", | 111 | .name = "out", |
| 112 | .argname = "file", | 112 | .argname = "file", |
| 113 | .desc = "Output file (default stdout)", | 113 | .desc = "Output file (default stdout)", |
| 114 | .type = OPTION_ARG, | 114 | .type = OPTION_ARG, |
| 115 | .opt.arg = &gendh_config.outfile, | 115 | .opt.arg = &cfg.outfile, |
| 116 | }, | 116 | }, |
| 117 | { NULL }, | 117 | { NULL }, |
| 118 | }; | 118 | }; |
| @@ -146,9 +146,9 @@ gendh_main(int argc, char **argv) | |||
| 146 | 146 | ||
| 147 | BN_GENCB_set(cb, dh_cb, bio_err); | 147 | BN_GENCB_set(cb, dh_cb, bio_err); |
| 148 | 148 | ||
| 149 | memset(&gendh_config, 0, sizeof(gendh_config)); | 149 | memset(&cfg, 0, sizeof(cfg)); |
| 150 | 150 | ||
| 151 | gendh_config.g = 2; | 151 | cfg.g = 2; |
| 152 | 152 | ||
| 153 | if (options_parse(argc, argv, gendh_options, &strbits, NULL) != 0) { | 153 | if (options_parse(argc, argv, gendh_options, &strbits, NULL) != 0) { |
| 154 | gendh_usage(); | 154 | gendh_usage(); |
| @@ -169,21 +169,21 @@ gendh_main(int argc, char **argv) | |||
| 169 | ERR_print_errors(bio_err); | 169 | ERR_print_errors(bio_err); |
| 170 | goto end; | 170 | goto end; |
| 171 | } | 171 | } |
| 172 | if (gendh_config.outfile == NULL) { | 172 | if (cfg.outfile == NULL) { |
| 173 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 173 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 174 | } else { | 174 | } else { |
| 175 | if (BIO_write_filename(out, gendh_config.outfile) <= 0) { | 175 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 176 | perror(gendh_config.outfile); | 176 | perror(cfg.outfile); |
| 177 | goto end; | 177 | goto end; |
| 178 | } | 178 | } |
| 179 | } | 179 | } |
| 180 | 180 | ||
| 181 | BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime," | 181 | BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime," |
| 182 | " generator %d\n", numbits, gendh_config.g); | 182 | " generator %d\n", numbits, cfg.g); |
| 183 | BIO_printf(bio_err, "This is going to take a long time\n"); | 183 | BIO_printf(bio_err, "This is going to take a long time\n"); |
| 184 | 184 | ||
| 185 | if (((dh = DH_new()) == NULL) || | 185 | if (((dh = DH_new()) == NULL) || |
| 186 | !DH_generate_parameters_ex(dh, numbits, gendh_config.g, cb)) | 186 | !DH_generate_parameters_ex(dh, numbits, cfg.g, cb)) |
| 187 | goto end; | 187 | goto end; |
| 188 | 188 | ||
| 189 | if (!PEM_write_bio_DHparams(out, dh)) | 189 | if (!PEM_write_bio_DHparams(out, dh)) |
diff --git a/src/usr.bin/openssl/gendsa.c b/src/usr.bin/openssl/gendsa.c index fa83ea2c67..00635c4551 100644 --- a/src/usr.bin/openssl/gendsa.c +++ b/src/usr.bin/openssl/gendsa.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: gendsa.c,v 1.16 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: gendsa.c,v 1.17 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -78,7 +78,7 @@ static struct { | |||
| 78 | const EVP_CIPHER *enc; | 78 | const EVP_CIPHER *enc; |
| 79 | char *outfile; | 79 | char *outfile; |
| 80 | char *passargout; | 80 | char *passargout; |
| 81 | } gendsa_config; | 81 | } cfg; |
| 82 | 82 | ||
| 83 | static const EVP_CIPHER *get_cipher_by_name(char *name) | 83 | static const EVP_CIPHER *get_cipher_by_name(char *name) |
| 84 | { | 84 | { |
| @@ -122,7 +122,7 @@ set_enc(int argc, char **argv, int *argsused) | |||
| 122 | if (*name++ != '-') | 122 | if (*name++ != '-') |
| 123 | return (1); | 123 | return (1); |
| 124 | 124 | ||
| 125 | if ((gendsa_config.enc = get_cipher_by_name(name)) == NULL) | 125 | if ((cfg.enc = get_cipher_by_name(name)) == NULL) |
| 126 | return (1); | 126 | return (1); |
| 127 | 127 | ||
| 128 | *argsused = 1; | 128 | *argsused = 1; |
| @@ -197,14 +197,14 @@ static const struct option gendsa_options[] = { | |||
| 197 | .argname = "file", | 197 | .argname = "file", |
| 198 | .desc = "Output the key to 'file'", | 198 | .desc = "Output the key to 'file'", |
| 199 | .type = OPTION_ARG, | 199 | .type = OPTION_ARG, |
| 200 | .opt.arg = &gendsa_config.outfile, | 200 | .opt.arg = &cfg.outfile, |
| 201 | }, | 201 | }, |
| 202 | { | 202 | { |
| 203 | .name = "passout", | 203 | .name = "passout", |
| 204 | .argname = "src", | 204 | .argname = "src", |
| 205 | .desc = "Output file passphrase source", | 205 | .desc = "Output file passphrase source", |
| 206 | .type = OPTION_ARG, | 206 | .type = OPTION_ARG, |
| 207 | .opt.arg = &gendsa_config.passargout, | 207 | .opt.arg = &cfg.passargout, |
| 208 | }, | 208 | }, |
| 209 | { NULL }, | 209 | { NULL }, |
| 210 | }; | 210 | }; |
| @@ -234,7 +234,7 @@ gendsa_main(int argc, char **argv) | |||
| 234 | exit(1); | 234 | exit(1); |
| 235 | } | 235 | } |
| 236 | 236 | ||
| 237 | memset(&gendsa_config, 0, sizeof(gendsa_config)); | 237 | memset(&cfg, 0, sizeof(cfg)); |
| 238 | 238 | ||
| 239 | if (options_parse(argc, argv, gendsa_options, &dsaparams, NULL) != 0) { | 239 | if (options_parse(argc, argv, gendsa_options, &dsaparams, NULL) != 0) { |
| 240 | gendsa_usage(); | 240 | gendsa_usage(); |
| @@ -245,7 +245,7 @@ gendsa_main(int argc, char **argv) | |||
| 245 | gendsa_usage(); | 245 | gendsa_usage(); |
| 246 | goto end; | 246 | goto end; |
| 247 | } | 247 | } |
| 248 | if (!app_passwd(bio_err, NULL, gendsa_config.passargout, NULL, | 248 | if (!app_passwd(bio_err, NULL, cfg.passargout, NULL, |
| 249 | &passout)) { | 249 | &passout)) { |
| 250 | BIO_printf(bio_err, "Error getting password\n"); | 250 | BIO_printf(bio_err, "Error getting password\n"); |
| 251 | goto end; | 251 | goto end; |
| @@ -266,11 +266,11 @@ gendsa_main(int argc, char **argv) | |||
| 266 | if (out == NULL) | 266 | if (out == NULL) |
| 267 | goto end; | 267 | goto end; |
| 268 | 268 | ||
| 269 | if (gendsa_config.outfile == NULL) { | 269 | if (cfg.outfile == NULL) { |
| 270 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 270 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 271 | } else { | 271 | } else { |
| 272 | if (BIO_write_filename(out, gendsa_config.outfile) <= 0) { | 272 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 273 | perror(gendsa_config.outfile); | 273 | perror(cfg.outfile); |
| 274 | goto end; | 274 | goto end; |
| 275 | } | 275 | } |
| 276 | } | 276 | } |
| @@ -280,7 +280,7 @@ gendsa_main(int argc, char **argv) | |||
| 280 | if (!DSA_generate_key(dsa)) | 280 | if (!DSA_generate_key(dsa)) |
| 281 | goto end; | 281 | goto end; |
| 282 | 282 | ||
| 283 | if (!PEM_write_bio_DSAPrivateKey(out, dsa, gendsa_config.enc, NULL, 0, | 283 | if (!PEM_write_bio_DSAPrivateKey(out, dsa, cfg.enc, NULL, 0, |
| 284 | NULL, passout)) | 284 | NULL, passout)) |
| 285 | goto end; | 285 | goto end; |
| 286 | ret = 0; | 286 | ret = 0; |
diff --git a/src/usr.bin/openssl/genpkey.c b/src/usr.bin/openssl/genpkey.c index ce266f404c..e2445c1433 100644 --- a/src/usr.bin/openssl/genpkey.c +++ b/src/usr.bin/openssl/genpkey.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: genpkey.c,v 1.15 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: genpkey.c,v 1.16 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2006 | 3 | * project 2006 |
| 4 | */ | 4 | */ |
| @@ -76,13 +76,13 @@ static struct { | |||
| 76 | int outformat; | 76 | int outformat; |
| 77 | char *passarg; | 77 | char *passarg; |
| 78 | int text; | 78 | int text; |
| 79 | } genpkey_config; | 79 | } cfg; |
| 80 | 80 | ||
| 81 | static int | 81 | static int |
| 82 | genpkey_opt_algorithm(char *arg) | 82 | genpkey_opt_algorithm(char *arg) |
| 83 | { | 83 | { |
| 84 | if (!init_gen_str(bio_err, genpkey_config.ctx, arg, | 84 | if (!init_gen_str(bio_err, cfg.ctx, arg, |
| 85 | genpkey_config.do_param)) | 85 | cfg.do_param)) |
| 86 | return (1); | 86 | return (1); |
| 87 | 87 | ||
| 88 | return (0); | 88 | return (0); |
| @@ -96,16 +96,16 @@ genpkey_opt_cipher(int argc, char **argv, int *argsused) | |||
| 96 | if (*name++ != '-') | 96 | if (*name++ != '-') |
| 97 | return (1); | 97 | return (1); |
| 98 | 98 | ||
| 99 | if (genpkey_config.do_param == 1) | 99 | if (cfg.do_param == 1) |
| 100 | return (1); | 100 | return (1); |
| 101 | 101 | ||
| 102 | if (strcmp(name, "none") == 0) { | 102 | if (strcmp(name, "none") == 0) { |
| 103 | genpkey_config.cipher = NULL; | 103 | cfg.cipher = NULL; |
| 104 | *argsused = 1; | 104 | *argsused = 1; |
| 105 | return (0); | 105 | return (0); |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | if ((genpkey_config.cipher = EVP_get_cipherbyname(name)) != NULL) { | 108 | if ((cfg.cipher = EVP_get_cipherbyname(name)) != NULL) { |
| 109 | *argsused = 1; | 109 | *argsused = 1; |
| 110 | return (0); | 110 | return (0); |
| 111 | } | 111 | } |
| @@ -116,9 +116,9 @@ genpkey_opt_cipher(int argc, char **argv, int *argsused) | |||
| 116 | static int | 116 | static int |
| 117 | genpkey_opt_paramfile(char *arg) | 117 | genpkey_opt_paramfile(char *arg) |
| 118 | { | 118 | { |
| 119 | if (genpkey_config.do_param == 1) | 119 | if (cfg.do_param == 1) |
| 120 | return (1); | 120 | return (1); |
| 121 | if (!init_keygen_file(bio_err, genpkey_config.ctx, arg)) | 121 | if (!init_keygen_file(bio_err, cfg.ctx, arg)) |
| 122 | return (1); | 122 | return (1); |
| 123 | 123 | ||
| 124 | return (0); | 124 | return (0); |
| @@ -127,12 +127,12 @@ genpkey_opt_paramfile(char *arg) | |||
| 127 | static int | 127 | static int |
| 128 | genpkey_opt_pkeyopt(char *arg) | 128 | genpkey_opt_pkeyopt(char *arg) |
| 129 | { | 129 | { |
| 130 | if (*genpkey_config.ctx == NULL) { | 130 | if (*cfg.ctx == NULL) { |
| 131 | BIO_puts(bio_err, "No keytype specified\n"); | 131 | BIO_puts(bio_err, "No keytype specified\n"); |
| 132 | return (1); | 132 | return (1); |
| 133 | } | 133 | } |
| 134 | 134 | ||
| 135 | if (pkey_ctrl_string(*genpkey_config.ctx, arg) <= 0) { | 135 | if (pkey_ctrl_string(*cfg.ctx, arg) <= 0) { |
| 136 | BIO_puts(bio_err, "parameter setting error\n"); | 136 | BIO_puts(bio_err, "parameter setting error\n"); |
| 137 | ERR_print_errors(bio_err); | 137 | ERR_print_errors(bio_err); |
| 138 | return (1); | 138 | return (1); |
| @@ -153,21 +153,21 @@ static const struct option genpkey_options[] = { | |||
| 153 | .name = "genparam", | 153 | .name = "genparam", |
| 154 | .desc = "Generate a set of parameters instead of a private key", | 154 | .desc = "Generate a set of parameters instead of a private key", |
| 155 | .type = OPTION_FLAG, | 155 | .type = OPTION_FLAG, |
| 156 | .opt.flag = &genpkey_config.do_param, | 156 | .opt.flag = &cfg.do_param, |
| 157 | }, | 157 | }, |
| 158 | { | 158 | { |
| 159 | .name = "out", | 159 | .name = "out", |
| 160 | .argname = "file", | 160 | .argname = "file", |
| 161 | .desc = "Output file to write to (default stdout)", | 161 | .desc = "Output file to write to (default stdout)", |
| 162 | .type = OPTION_ARG, | 162 | .type = OPTION_ARG, |
| 163 | .opt.arg = &genpkey_config.outfile, | 163 | .opt.arg = &cfg.outfile, |
| 164 | }, | 164 | }, |
| 165 | { | 165 | { |
| 166 | .name = "outform", | 166 | .name = "outform", |
| 167 | .argname = "format", | 167 | .argname = "format", |
| 168 | .desc = "Output format (DER or PEM)", | 168 | .desc = "Output format (DER or PEM)", |
| 169 | .type = OPTION_ARG_FORMAT, | 169 | .type = OPTION_ARG_FORMAT, |
| 170 | .opt.value = &genpkey_config.outformat, | 170 | .opt.value = &cfg.outformat, |
| 171 | }, | 171 | }, |
| 172 | { | 172 | { |
| 173 | .name = "paramfile", | 173 | .name = "paramfile", |
| @@ -182,7 +182,7 @@ static const struct option genpkey_options[] = { | |||
| 182 | .argname = "arg", | 182 | .argname = "arg", |
| 183 | .desc = "Output file password source", | 183 | .desc = "Output file password source", |
| 184 | .type = OPTION_ARG, | 184 | .type = OPTION_ARG, |
| 185 | .opt.arg = &genpkey_config.passarg, | 185 | .opt.arg = &cfg.passarg, |
| 186 | }, | 186 | }, |
| 187 | { | 187 | { |
| 188 | .name = "pkeyopt", | 188 | .name = "pkeyopt", |
| @@ -195,7 +195,7 @@ static const struct option genpkey_options[] = { | |||
| 195 | .name = "text", | 195 | .name = "text", |
| 196 | .desc = "Print the private/public key in human readable form", | 196 | .desc = "Print the private/public key in human readable form", |
| 197 | .type = OPTION_FLAG, | 197 | .type = OPTION_FLAG, |
| 198 | .opt.flag = &genpkey_config.text, | 198 | .opt.flag = &cfg.text, |
| 199 | }, | 199 | }, |
| 200 | { | 200 | { |
| 201 | .name = NULL, | 201 | .name = NULL, |
| @@ -229,9 +229,9 @@ genpkey_main(int argc, char **argv) | |||
| 229 | exit(1); | 229 | exit(1); |
| 230 | } | 230 | } |
| 231 | 231 | ||
| 232 | memset(&genpkey_config, 0, sizeof(genpkey_config)); | 232 | memset(&cfg, 0, sizeof(cfg)); |
| 233 | genpkey_config.ctx = &ctx; | 233 | cfg.ctx = &ctx; |
| 234 | genpkey_config.outformat = FORMAT_PEM; | 234 | cfg.outformat = FORMAT_PEM; |
| 235 | 235 | ||
| 236 | if (options_parse(argc, argv, genpkey_options, NULL, NULL) != 0) { | 236 | if (options_parse(argc, argv, genpkey_options, NULL, NULL) != 0) { |
| 237 | genpkey_usage(); | 237 | genpkey_usage(); |
| @@ -243,15 +243,15 @@ genpkey_main(int argc, char **argv) | |||
| 243 | goto end; | 243 | goto end; |
| 244 | } | 244 | } |
| 245 | 245 | ||
| 246 | if (!app_passwd(bio_err, genpkey_config.passarg, NULL, &pass, NULL)) { | 246 | if (!app_passwd(bio_err, cfg.passarg, NULL, &pass, NULL)) { |
| 247 | BIO_puts(bio_err, "Error getting password\n"); | 247 | BIO_puts(bio_err, "Error getting password\n"); |
| 248 | goto end; | 248 | goto end; |
| 249 | } | 249 | } |
| 250 | if (genpkey_config.outfile != NULL) { | 250 | if (cfg.outfile != NULL) { |
| 251 | if ((out = BIO_new_file(genpkey_config.outfile, "wb")) == | 251 | if ((out = BIO_new_file(cfg.outfile, "wb")) == |
| 252 | NULL) { | 252 | NULL) { |
| 253 | BIO_printf(bio_err, "Can't open output file %s\n", | 253 | BIO_printf(bio_err, "Can't open output file %s\n", |
| 254 | genpkey_config.outfile); | 254 | cfg.outfile); |
| 255 | goto end; | 255 | goto end; |
| 256 | } | 256 | } |
| 257 | } else { | 257 | } else { |
| @@ -261,7 +261,7 @@ genpkey_main(int argc, char **argv) | |||
| 261 | EVP_PKEY_CTX_set_cb(ctx, genpkey_cb); | 261 | EVP_PKEY_CTX_set_cb(ctx, genpkey_cb); |
| 262 | EVP_PKEY_CTX_set_app_data(ctx, bio_err); | 262 | EVP_PKEY_CTX_set_app_data(ctx, bio_err); |
| 263 | 263 | ||
| 264 | if (genpkey_config.do_param) { | 264 | if (cfg.do_param) { |
| 265 | if (EVP_PKEY_paramgen(ctx, &pkey) <= 0) { | 265 | if (EVP_PKEY_paramgen(ctx, &pkey) <= 0) { |
| 266 | BIO_puts(bio_err, "Error generating parameters\n"); | 266 | BIO_puts(bio_err, "Error generating parameters\n"); |
| 267 | ERR_print_errors(bio_err); | 267 | ERR_print_errors(bio_err); |
| @@ -275,12 +275,12 @@ genpkey_main(int argc, char **argv) | |||
| 275 | } | 275 | } |
| 276 | } | 276 | } |
| 277 | 277 | ||
| 278 | if (genpkey_config.do_param) | 278 | if (cfg.do_param) |
| 279 | rv = PEM_write_bio_Parameters(out, pkey); | 279 | rv = PEM_write_bio_Parameters(out, pkey); |
| 280 | else if (genpkey_config.outformat == FORMAT_PEM) | 280 | else if (cfg.outformat == FORMAT_PEM) |
| 281 | rv = PEM_write_bio_PrivateKey(out, pkey, genpkey_config.cipher, | 281 | rv = PEM_write_bio_PrivateKey(out, pkey, cfg.cipher, |
| 282 | NULL, 0, NULL, pass); | 282 | NULL, 0, NULL, pass); |
| 283 | else if (genpkey_config.outformat == FORMAT_ASN1) | 283 | else if (cfg.outformat == FORMAT_ASN1) |
| 284 | rv = i2d_PrivateKey_bio(out, pkey); | 284 | rv = i2d_PrivateKey_bio(out, pkey); |
| 285 | else { | 285 | else { |
| 286 | BIO_printf(bio_err, "Bad format specified for key\n"); | 286 | BIO_printf(bio_err, "Bad format specified for key\n"); |
| @@ -291,8 +291,8 @@ genpkey_main(int argc, char **argv) | |||
| 291 | BIO_puts(bio_err, "Error writing key\n"); | 291 | BIO_puts(bio_err, "Error writing key\n"); |
| 292 | ERR_print_errors(bio_err); | 292 | ERR_print_errors(bio_err); |
| 293 | } | 293 | } |
| 294 | if (genpkey_config.text) { | 294 | if (cfg.text) { |
| 295 | if (genpkey_config.do_param) | 295 | if (cfg.do_param) |
| 296 | rv = EVP_PKEY_print_params(out, pkey, 0, NULL); | 296 | rv = EVP_PKEY_print_params(out, pkey, 0, NULL); |
| 297 | else | 297 | else |
| 298 | rv = EVP_PKEY_print_private(out, pkey, 0, NULL); | 298 | rv = EVP_PKEY_print_private(out, pkey, 0, NULL); |
diff --git a/src/usr.bin/openssl/genrsa.c b/src/usr.bin/openssl/genrsa.c index e1628a682e..0b5323fa5f 100644 --- a/src/usr.bin/openssl/genrsa.c +++ b/src/usr.bin/openssl/genrsa.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: genrsa.c,v 1.21 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: genrsa.c,v 1.22 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -90,7 +90,7 @@ static struct { | |||
| 90 | unsigned long f4; | 90 | unsigned long f4; |
| 91 | char *outfile; | 91 | char *outfile; |
| 92 | char *passargout; | 92 | char *passargout; |
| 93 | } genrsa_config; | 93 | } cfg; |
| 94 | 94 | ||
| 95 | static int | 95 | static int |
| 96 | set_public_exponent(int argc, char **argv, int *argsused) | 96 | set_public_exponent(int argc, char **argv, int *argsused) |
| @@ -98,9 +98,9 @@ set_public_exponent(int argc, char **argv, int *argsused) | |||
| 98 | char *option = argv[0]; | 98 | char *option = argv[0]; |
| 99 | 99 | ||
| 100 | if (strcmp(option, "-3") == 0) | 100 | if (strcmp(option, "-3") == 0) |
| 101 | genrsa_config.f4 = 3; | 101 | cfg.f4 = 3; |
| 102 | else if (strcmp(option, "-f4") == 0 || strcmp(option, "-F4") == 0) | 102 | else if (strcmp(option, "-f4") == 0 || strcmp(option, "-F4") == 0) |
| 103 | genrsa_config.f4 = RSA_F4; | 103 | cfg.f4 = RSA_F4; |
| 104 | else | 104 | else |
| 105 | return (1); | 105 | return (1); |
| 106 | 106 | ||
| @@ -150,7 +150,7 @@ set_enc(int argc, char **argv, int *argsused) | |||
| 150 | if (*name++ != '-') | 150 | if (*name++ != '-') |
| 151 | return (1); | 151 | return (1); |
| 152 | 152 | ||
| 153 | if ((genrsa_config.enc = get_cipher_by_name(name)) == NULL) | 153 | if ((cfg.enc = get_cipher_by_name(name)) == NULL) |
| 154 | return (1); | 154 | return (1); |
| 155 | 155 | ||
| 156 | *argsused = 1; | 156 | *argsused = 1; |
| @@ -243,14 +243,14 @@ static const struct option genrsa_options[] = { | |||
| 243 | .argname = "file", | 243 | .argname = "file", |
| 244 | .desc = "Output the key to 'file'", | 244 | .desc = "Output the key to 'file'", |
| 245 | .type = OPTION_ARG, | 245 | .type = OPTION_ARG, |
| 246 | .opt.arg = &genrsa_config.outfile, | 246 | .opt.arg = &cfg.outfile, |
| 247 | }, | 247 | }, |
| 248 | { | 248 | { |
| 249 | .name = "passout", | 249 | .name = "passout", |
| 250 | .argname = "arg", | 250 | .argname = "arg", |
| 251 | .desc = "Output file passphrase source", | 251 | .desc = "Output file passphrase source", |
| 252 | .type = OPTION_ARG, | 252 | .type = OPTION_ARG, |
| 253 | .opt.arg = &genrsa_config.passargout, | 253 | .opt.arg = &cfg.passargout, |
| 254 | }, | 254 | }, |
| 255 | { NULL }, | 255 | { NULL }, |
| 256 | }; | 256 | }; |
| @@ -300,8 +300,8 @@ genrsa_main(int argc, char **argv) | |||
| 300 | goto err; | 300 | goto err; |
| 301 | } | 301 | } |
| 302 | 302 | ||
| 303 | memset(&genrsa_config, 0, sizeof(genrsa_config)); | 303 | memset(&cfg, 0, sizeof(cfg)); |
| 304 | genrsa_config.f4 = RSA_F4; | 304 | cfg.f4 = RSA_F4; |
| 305 | 305 | ||
| 306 | if (options_parse(argc, argv, genrsa_options, &numbits, NULL) != 0) { | 306 | if (options_parse(argc, argv, genrsa_options, &numbits, NULL) != 0) { |
| 307 | genrsa_usage(); | 307 | genrsa_usage(); |
| @@ -314,17 +314,17 @@ genrsa_main(int argc, char **argv) | |||
| 314 | goto err; | 314 | goto err; |
| 315 | } | 315 | } |
| 316 | 316 | ||
| 317 | if (!app_passwd(bio_err, NULL, genrsa_config.passargout, NULL, | 317 | if (!app_passwd(bio_err, NULL, cfg.passargout, NULL, |
| 318 | &passout)) { | 318 | &passout)) { |
| 319 | BIO_printf(bio_err, "Error getting password\n"); | 319 | BIO_printf(bio_err, "Error getting password\n"); |
| 320 | goto err; | 320 | goto err; |
| 321 | } | 321 | } |
| 322 | 322 | ||
| 323 | if (genrsa_config.outfile == NULL) { | 323 | if (cfg.outfile == NULL) { |
| 324 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 324 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 325 | } else { | 325 | } else { |
| 326 | if (BIO_write_filename(out, genrsa_config.outfile) <= 0) { | 326 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 327 | perror(genrsa_config.outfile); | 327 | perror(cfg.outfile); |
| 328 | goto err; | 328 | goto err; |
| 329 | } | 329 | } |
| 330 | } | 330 | } |
| @@ -335,7 +335,7 @@ genrsa_main(int argc, char **argv) | |||
| 335 | if (!rsa) | 335 | if (!rsa) |
| 336 | goto err; | 336 | goto err; |
| 337 | 337 | ||
| 338 | if (!BN_set_word(bn, genrsa_config.f4) || | 338 | if (!BN_set_word(bn, cfg.f4) || |
| 339 | !RSA_generate_key_ex(rsa, num, bn, cb)) | 339 | !RSA_generate_key_ex(rsa, num, bn, cb)) |
| 340 | goto err; | 340 | goto err; |
| 341 | 341 | ||
| @@ -348,8 +348,8 @@ genrsa_main(int argc, char **argv) | |||
| 348 | { | 348 | { |
| 349 | PW_CB_DATA cb_data; | 349 | PW_CB_DATA cb_data; |
| 350 | cb_data.password = passout; | 350 | cb_data.password = passout; |
| 351 | cb_data.prompt_info = genrsa_config.outfile; | 351 | cb_data.prompt_info = cfg.outfile; |
| 352 | if (!PEM_write_bio_RSAPrivateKey(out, rsa, genrsa_config.enc, | 352 | if (!PEM_write_bio_RSAPrivateKey(out, rsa, cfg.enc, |
| 353 | NULL, 0, password_callback, &cb_data)) | 353 | NULL, 0, password_callback, &cb_data)) |
| 354 | goto err; | 354 | goto err; |
| 355 | } | 355 | } |
diff --git a/src/usr.bin/openssl/nseq.c b/src/usr.bin/openssl/nseq.c index 7be116e67b..fb0dda5dca 100644 --- a/src/usr.bin/openssl/nseq.c +++ b/src/usr.bin/openssl/nseq.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: nseq.c,v 1.10 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: nseq.c,v 1.11 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 1999. | 3 | * project 1999. |
| 4 | */ | 4 | */ |
| @@ -68,7 +68,7 @@ static struct { | |||
| 68 | char *infile; | 68 | char *infile; |
| 69 | char *outfile; | 69 | char *outfile; |
| 70 | int toseq; | 70 | int toseq; |
| 71 | } nseq_config; | 71 | } cfg; |
| 72 | 72 | ||
| 73 | static const struct option nseq_options[] = { | 73 | static const struct option nseq_options[] = { |
| 74 | { | 74 | { |
| @@ -76,20 +76,20 @@ static const struct option nseq_options[] = { | |||
| 76 | .argname = "file", | 76 | .argname = "file", |
| 77 | .desc = "Input file to read from (default stdin)", | 77 | .desc = "Input file to read from (default stdin)", |
| 78 | .type = OPTION_ARG, | 78 | .type = OPTION_ARG, |
| 79 | .opt.arg = &nseq_config.infile, | 79 | .opt.arg = &cfg.infile, |
| 80 | }, | 80 | }, |
| 81 | { | 81 | { |
| 82 | .name = "out", | 82 | .name = "out", |
| 83 | .argname = "file", | 83 | .argname = "file", |
| 84 | .desc = "Output file to write to (default stdout)", | 84 | .desc = "Output file to write to (default stdout)", |
| 85 | .type = OPTION_ARG, | 85 | .type = OPTION_ARG, |
| 86 | .opt.arg = &nseq_config.outfile, | 86 | .opt.arg = &cfg.outfile, |
| 87 | }, | 87 | }, |
| 88 | { | 88 | { |
| 89 | .name = "toseq", | 89 | .name = "toseq", |
| 90 | .desc = "Convert certificates to Netscape certificate sequence", | 90 | .desc = "Convert certificates to Netscape certificate sequence", |
| 91 | .type = OPTION_FLAG, | 91 | .type = OPTION_FLAG, |
| 92 | .opt.flag = &nseq_config.toseq, | 92 | .opt.flag = &cfg.toseq, |
| 93 | }, | 93 | }, |
| 94 | { NULL }, | 94 | { NULL }, |
| 95 | }; | 95 | }; |
| @@ -114,39 +114,39 @@ nseq_main(int argc, char **argv) | |||
| 114 | exit(1); | 114 | exit(1); |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | memset(&nseq_config, 0, sizeof(nseq_config)); | 117 | memset(&cfg, 0, sizeof(cfg)); |
| 118 | 118 | ||
| 119 | if (options_parse(argc, argv, nseq_options, NULL, NULL) != 0) { | 119 | if (options_parse(argc, argv, nseq_options, NULL, NULL) != 0) { |
| 120 | nseq_usage(); | 120 | nseq_usage(); |
| 121 | return (1); | 121 | return (1); |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | if (nseq_config.infile) { | 124 | if (cfg.infile) { |
| 125 | if (!(in = BIO_new_file(nseq_config.infile, "r"))) { | 125 | if (!(in = BIO_new_file(cfg.infile, "r"))) { |
| 126 | BIO_printf(bio_err, | 126 | BIO_printf(bio_err, |
| 127 | "Can't open input file %s\n", nseq_config.infile); | 127 | "Can't open input file %s\n", cfg.infile); |
| 128 | goto end; | 128 | goto end; |
| 129 | } | 129 | } |
| 130 | } else | 130 | } else |
| 131 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 131 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 132 | 132 | ||
| 133 | if (nseq_config.outfile) { | 133 | if (cfg.outfile) { |
| 134 | if (!(out = BIO_new_file(nseq_config.outfile, "w"))) { | 134 | if (!(out = BIO_new_file(cfg.outfile, "w"))) { |
| 135 | BIO_printf(bio_err, | 135 | BIO_printf(bio_err, |
| 136 | "Can't open output file %s\n", nseq_config.outfile); | 136 | "Can't open output file %s\n", cfg.outfile); |
| 137 | goto end; | 137 | goto end; |
| 138 | } | 138 | } |
| 139 | } else { | 139 | } else { |
| 140 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 140 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 141 | } | 141 | } |
| 142 | if (nseq_config.toseq) { | 142 | if (cfg.toseq) { |
| 143 | seq = NETSCAPE_CERT_SEQUENCE_new(); | 143 | seq = NETSCAPE_CERT_SEQUENCE_new(); |
| 144 | seq->certs = sk_X509_new_null(); | 144 | seq->certs = sk_X509_new_null(); |
| 145 | while ((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) | 145 | while ((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) |
| 146 | sk_X509_push(seq->certs, x509); | 146 | sk_X509_push(seq->certs, x509); |
| 147 | 147 | ||
| 148 | if (!sk_X509_num(seq->certs)) { | 148 | if (!sk_X509_num(seq->certs)) { |
| 149 | BIO_printf(bio_err, "Error reading certs file %s\n", nseq_config.infile); | 149 | BIO_printf(bio_err, "Error reading certs file %s\n", cfg.infile); |
| 150 | ERR_print_errors(bio_err); | 150 | ERR_print_errors(bio_err); |
| 151 | goto end; | 151 | goto end; |
| 152 | } | 152 | } |
| @@ -155,7 +155,7 @@ nseq_main(int argc, char **argv) | |||
| 155 | goto end; | 155 | goto end; |
| 156 | } | 156 | } |
| 157 | if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) { | 157 | if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) { |
| 158 | BIO_printf(bio_err, "Error reading sequence file %s\n", nseq_config.infile); | 158 | BIO_printf(bio_err, "Error reading sequence file %s\n", cfg.infile); |
| 159 | ERR_print_errors(bio_err); | 159 | ERR_print_errors(bio_err); |
| 160 | goto end; | 160 | goto end; |
| 161 | } | 161 | } |
diff --git a/src/usr.bin/openssl/ocsp.c b/src/usr.bin/openssl/ocsp.c index 026bd49b0a..cc942a459c 100644 --- a/src/usr.bin/openssl/ocsp.c +++ b/src/usr.bin/openssl/ocsp.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ocsp.c,v 1.22 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: ocsp.c,v 1.23 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2000. | 3 | * project 2000. |
| 4 | */ | 4 | */ |
| @@ -143,27 +143,27 @@ static struct { | |||
| 143 | int use_ssl; | 143 | int use_ssl; |
| 144 | char *verify_certfile; | 144 | char *verify_certfile; |
| 145 | unsigned long verify_flags; | 145 | unsigned long verify_flags; |
| 146 | } ocsp_config; | 146 | } cfg; |
| 147 | 147 | ||
| 148 | static int | 148 | static int |
| 149 | ocsp_opt_cert(char *arg) | 149 | ocsp_opt_cert(char *arg) |
| 150 | { | 150 | { |
| 151 | X509_free(ocsp_config.cert); | 151 | X509_free(cfg.cert); |
| 152 | ocsp_config.cert = load_cert(bio_err, arg, FORMAT_PEM, NULL, | 152 | cfg.cert = load_cert(bio_err, arg, FORMAT_PEM, NULL, |
| 153 | "certificate"); | 153 | "certificate"); |
| 154 | if (ocsp_config.cert == NULL) { | 154 | if (cfg.cert == NULL) { |
| 155 | ocsp_config.no_usage = 1; | 155 | cfg.no_usage = 1; |
| 156 | return (1); | 156 | return (1); |
| 157 | } | 157 | } |
| 158 | if (ocsp_config.cert_id_md == NULL) | 158 | if (cfg.cert_id_md == NULL) |
| 159 | ocsp_config.cert_id_md = EVP_sha1(); | 159 | cfg.cert_id_md = EVP_sha1(); |
| 160 | if (!add_ocsp_cert(&ocsp_config.req, ocsp_config.cert, | 160 | if (!add_ocsp_cert(&cfg.req, cfg.cert, |
| 161 | ocsp_config.cert_id_md, ocsp_config.issuer, ocsp_config.ids)) { | 161 | cfg.cert_id_md, cfg.issuer, cfg.ids)) { |
| 162 | ocsp_config.no_usage = 1; | 162 | cfg.no_usage = 1; |
| 163 | return (1); | 163 | return (1); |
| 164 | } | 164 | } |
| 165 | if (!sk_OPENSSL_STRING_push(ocsp_config.reqnames, arg)) { | 165 | if (!sk_OPENSSL_STRING_push(cfg.reqnames, arg)) { |
| 166 | ocsp_config.no_usage = 1; | 166 | cfg.no_usage = 1; |
| 167 | return (1); | 167 | return (1); |
| 168 | } | 168 | } |
| 169 | return (0); | 169 | return (0); |
| @@ -177,7 +177,7 @@ ocsp_opt_cert_id_md(int argc, char **argv, int *argsused) | |||
| 177 | if (*name++ != '-') | 177 | if (*name++ != '-') |
| 178 | return (1); | 178 | return (1); |
| 179 | 179 | ||
| 180 | if ((ocsp_config.cert_id_md = EVP_get_digestbyname(name)) == NULL) | 180 | if ((cfg.cert_id_md = EVP_get_digestbyname(name)) == NULL) |
| 181 | return (1); | 181 | return (1); |
| 182 | 182 | ||
| 183 | *argsused = 1; | 183 | *argsused = 1; |
| @@ -190,8 +190,8 @@ ocsp_opt_header(int argc, char **argv, int *argsused) | |||
| 190 | if (argc < 3 || argv[1] == NULL || argv[2] == NULL) | 190 | if (argc < 3 || argv[1] == NULL || argv[2] == NULL) |
| 191 | return (1); | 191 | return (1); |
| 192 | 192 | ||
| 193 | if (!X509V3_add_value(argv[1], argv[2], &ocsp_config.headers)) { | 193 | if (!X509V3_add_value(argv[1], argv[2], &cfg.headers)) { |
| 194 | ocsp_config.no_usage = 1; | 194 | cfg.no_usage = 1; |
| 195 | return (1); | 195 | return (1); |
| 196 | } | 196 | } |
| 197 | 197 | ||
| @@ -202,21 +202,21 @@ ocsp_opt_header(int argc, char **argv, int *argsused) | |||
| 202 | static int | 202 | static int |
| 203 | ocsp_opt_host(char *arg) | 203 | ocsp_opt_host(char *arg) |
| 204 | { | 204 | { |
| 205 | if (ocsp_config.use_ssl != -1) | 205 | if (cfg.use_ssl != -1) |
| 206 | return (1); | 206 | return (1); |
| 207 | 207 | ||
| 208 | ocsp_config.host = arg; | 208 | cfg.host = arg; |
| 209 | return (0); | 209 | return (0); |
| 210 | } | 210 | } |
| 211 | 211 | ||
| 212 | static int | 212 | static int |
| 213 | ocsp_opt_issuer(char *arg) | 213 | ocsp_opt_issuer(char *arg) |
| 214 | { | 214 | { |
| 215 | X509_free(ocsp_config.issuer); | 215 | X509_free(cfg.issuer); |
| 216 | ocsp_config.issuer = load_cert(bio_err, arg, FORMAT_PEM, NULL, | 216 | cfg.issuer = load_cert(bio_err, arg, FORMAT_PEM, NULL, |
| 217 | "issuer certificate"); | 217 | "issuer certificate"); |
| 218 | if (ocsp_config.issuer == NULL) { | 218 | if (cfg.issuer == NULL) { |
| 219 | ocsp_config.no_usage = 1; | 219 | cfg.no_usage = 1; |
| 220 | return (1); | 220 | return (1); |
| 221 | } | 221 | } |
| 222 | return (0); | 222 | return (0); |
| @@ -227,7 +227,7 @@ ocsp_opt_ndays(char *arg) | |||
| 227 | { | 227 | { |
| 228 | const char *errstr = NULL; | 228 | const char *errstr = NULL; |
| 229 | 229 | ||
| 230 | ocsp_config.ndays = strtonum(arg, 0, INT_MAX, &errstr); | 230 | cfg.ndays = strtonum(arg, 0, INT_MAX, &errstr); |
| 231 | if (errstr != NULL) { | 231 | if (errstr != NULL) { |
| 232 | BIO_printf(bio_err, "Illegal update period %s: %s\n", | 232 | BIO_printf(bio_err, "Illegal update period %s: %s\n", |
| 233 | arg, errstr); | 233 | arg, errstr); |
| @@ -241,17 +241,17 @@ ocsp_opt_nmin(char *arg) | |||
| 241 | { | 241 | { |
| 242 | const char *errstr = NULL; | 242 | const char *errstr = NULL; |
| 243 | 243 | ||
| 244 | ocsp_config.nmin = strtonum(arg, 0, INT_MAX, &errstr); | 244 | cfg.nmin = strtonum(arg, 0, INT_MAX, &errstr); |
| 245 | if (errstr != NULL) { | 245 | if (errstr != NULL) { |
| 246 | BIO_printf(bio_err, "Illegal update period %s: %s\n", | 246 | BIO_printf(bio_err, "Illegal update period %s: %s\n", |
| 247 | arg, errstr); | 247 | arg, errstr); |
| 248 | return (1); | 248 | return (1); |
| 249 | } | 249 | } |
| 250 | 250 | ||
| 251 | if (ocsp_config.ndays != -1) | 251 | if (cfg.ndays != -1) |
| 252 | return (1); | 252 | return (1); |
| 253 | 253 | ||
| 254 | ocsp_config.ndays = 0; | 254 | cfg.ndays = 0; |
| 255 | return (0); | 255 | return (0); |
| 256 | } | 256 | } |
| 257 | 257 | ||
| @@ -260,7 +260,7 @@ ocsp_opt_nrequest(char *arg) | |||
| 260 | { | 260 | { |
| 261 | const char *errstr = NULL; | 261 | const char *errstr = NULL; |
| 262 | 262 | ||
| 263 | ocsp_config.accept_count = strtonum(arg, 0, INT_MAX, &errstr); | 263 | cfg.accept_count = strtonum(arg, 0, INT_MAX, &errstr); |
| 264 | if (errstr != NULL) { | 264 | if (errstr != NULL) { |
| 265 | BIO_printf(bio_err, "Illegal accept count %s: %s\n", | 265 | BIO_printf(bio_err, "Illegal accept count %s: %s\n", |
| 266 | arg, errstr); | 266 | arg, errstr); |
| @@ -272,25 +272,25 @@ ocsp_opt_nrequest(char *arg) | |||
| 272 | static int | 272 | static int |
| 273 | ocsp_opt_port(char *arg) | 273 | ocsp_opt_port(char *arg) |
| 274 | { | 274 | { |
| 275 | if (ocsp_config.use_ssl != -1) | 275 | if (cfg.use_ssl != -1) |
| 276 | return (1); | 276 | return (1); |
| 277 | 277 | ||
| 278 | ocsp_config.port = arg; | 278 | cfg.port = arg; |
| 279 | return (0); | 279 | return (0); |
| 280 | } | 280 | } |
| 281 | 281 | ||
| 282 | static int | 282 | static int |
| 283 | ocsp_opt_serial(char *arg) | 283 | ocsp_opt_serial(char *arg) |
| 284 | { | 284 | { |
| 285 | if (ocsp_config.cert_id_md == NULL) | 285 | if (cfg.cert_id_md == NULL) |
| 286 | ocsp_config.cert_id_md = EVP_sha1(); | 286 | cfg.cert_id_md = EVP_sha1(); |
| 287 | if (!add_ocsp_serial(&ocsp_config.req, arg, ocsp_config.cert_id_md, | 287 | if (!add_ocsp_serial(&cfg.req, arg, cfg.cert_id_md, |
| 288 | ocsp_config.issuer, ocsp_config.ids)) { | 288 | cfg.issuer, cfg.ids)) { |
| 289 | ocsp_config.no_usage = 1; | 289 | cfg.no_usage = 1; |
| 290 | return (1); | 290 | return (1); |
| 291 | } | 291 | } |
| 292 | if (!sk_OPENSSL_STRING_push(ocsp_config.reqnames, arg)) { | 292 | if (!sk_OPENSSL_STRING_push(cfg.reqnames, arg)) { |
| 293 | ocsp_config.no_usage = 1; | 293 | cfg.no_usage = 1; |
| 294 | return (1); | 294 | return (1); |
| 295 | } | 295 | } |
| 296 | return (0); | 296 | return (0); |
| @@ -301,7 +301,7 @@ ocsp_opt_status_age(char *arg) | |||
| 301 | { | 301 | { |
| 302 | const char *errstr = NULL; | 302 | const char *errstr = NULL; |
| 303 | 303 | ||
| 304 | ocsp_config.maxage = strtonum(arg, 0, LONG_MAX, &errstr); | 304 | cfg.maxage = strtonum(arg, 0, LONG_MAX, &errstr); |
| 305 | if (errstr != NULL) { | 305 | if (errstr != NULL) { |
| 306 | BIO_printf(bio_err, "Illegal validity age %s: %s\n", | 306 | BIO_printf(bio_err, "Illegal validity age %s: %s\n", |
| 307 | arg, errstr); | 307 | arg, errstr); |
| @@ -313,8 +313,8 @@ ocsp_opt_status_age(char *arg) | |||
| 313 | static int | 313 | static int |
| 314 | ocsp_opt_text(void) | 314 | ocsp_opt_text(void) |
| 315 | { | 315 | { |
| 316 | ocsp_config.req_text = 1; | 316 | cfg.req_text = 1; |
| 317 | ocsp_config.resp_text = 1; | 317 | cfg.resp_text = 1; |
| 318 | return (0); | 318 | return (0); |
| 319 | } | 319 | } |
| 320 | 320 | ||
| @@ -323,7 +323,7 @@ ocsp_opt_timeout(char *arg) | |||
| 323 | { | 323 | { |
| 324 | const char *errstr = NULL; | 324 | const char *errstr = NULL; |
| 325 | 325 | ||
| 326 | ocsp_config.req_timeout = strtonum(arg, 0, INT_MAX, &errstr); | 326 | cfg.req_timeout = strtonum(arg, 0, INT_MAX, &errstr); |
| 327 | if (errstr != NULL) { | 327 | if (errstr != NULL) { |
| 328 | BIO_printf(bio_err, "Illegal timeout value %s: %s\n", | 328 | BIO_printf(bio_err, "Illegal timeout value %s: %s\n", |
| 329 | arg, errstr); | 329 | arg, errstr); |
| @@ -335,10 +335,10 @@ ocsp_opt_timeout(char *arg) | |||
| 335 | static int | 335 | static int |
| 336 | ocsp_opt_url(char *arg) | 336 | ocsp_opt_url(char *arg) |
| 337 | { | 337 | { |
| 338 | if (ocsp_config.host == NULL && ocsp_config.port == NULL && | 338 | if (cfg.host == NULL && cfg.port == NULL && |
| 339 | ocsp_config.path == NULL) { | 339 | cfg.path == NULL) { |
| 340 | if (!OCSP_parse_url(arg, &ocsp_config.host, &ocsp_config.port, | 340 | if (!OCSP_parse_url(arg, &cfg.host, &cfg.port, |
| 341 | &ocsp_config.path, &ocsp_config.use_ssl)) { | 341 | &cfg.path, &cfg.use_ssl)) { |
| 342 | BIO_printf(bio_err, "Error parsing URL\n"); | 342 | BIO_printf(bio_err, "Error parsing URL\n"); |
| 343 | return (1); | 343 | return (1); |
| 344 | } | 344 | } |
| @@ -349,8 +349,8 @@ ocsp_opt_url(char *arg) | |||
| 349 | static int | 349 | static int |
| 350 | ocsp_opt_vafile(char *arg) | 350 | ocsp_opt_vafile(char *arg) |
| 351 | { | 351 | { |
| 352 | ocsp_config.verify_certfile = arg; | 352 | cfg.verify_certfile = arg; |
| 353 | ocsp_config.verify_flags |= OCSP_TRUSTOTHER; | 353 | cfg.verify_flags |= OCSP_TRUSTOTHER; |
| 354 | return (0); | 354 | return (0); |
| 355 | } | 355 | } |
| 356 | 356 | ||
| @@ -359,7 +359,7 @@ ocsp_opt_validity_period(char *arg) | |||
| 359 | { | 359 | { |
| 360 | const char *errstr = NULL; | 360 | const char *errstr = NULL; |
| 361 | 361 | ||
| 362 | ocsp_config.nsec = strtonum(arg, 0, LONG_MAX, &errstr); | 362 | cfg.nsec = strtonum(arg, 0, LONG_MAX, &errstr); |
| 363 | if (errstr != NULL) { | 363 | if (errstr != NULL) { |
| 364 | BIO_printf(bio_err, "Illegal validity period %s: %s\n", | 364 | BIO_printf(bio_err, "Illegal validity period %s: %s\n", |
| 365 | arg, errstr); | 365 | arg, errstr); |
| @@ -374,21 +374,21 @@ static const struct option ocsp_options[] = { | |||
| 374 | .argname = "file", | 374 | .argname = "file", |
| 375 | .desc = "CA certificate corresponding to the revocation information", | 375 | .desc = "CA certificate corresponding to the revocation information", |
| 376 | .type = OPTION_ARG, | 376 | .type = OPTION_ARG, |
| 377 | .opt.arg = &ocsp_config.rca_filename, | 377 | .opt.arg = &cfg.rca_filename, |
| 378 | }, | 378 | }, |
| 379 | { | 379 | { |
| 380 | .name = "CAfile", | 380 | .name = "CAfile", |
| 381 | .argname = "file", | 381 | .argname = "file", |
| 382 | .desc = "Trusted certificates file", | 382 | .desc = "Trusted certificates file", |
| 383 | .type = OPTION_ARG, | 383 | .type = OPTION_ARG, |
| 384 | .opt.arg = &ocsp_config.CAfile, | 384 | .opt.arg = &cfg.CAfile, |
| 385 | }, | 385 | }, |
| 386 | { | 386 | { |
| 387 | .name = "CApath", | 387 | .name = "CApath", |
| 388 | .argname = "directory", | 388 | .argname = "directory", |
| 389 | .desc = "Trusted certificates directory", | 389 | .desc = "Trusted certificates directory", |
| 390 | .type = OPTION_ARG, | 390 | .type = OPTION_ARG, |
| 391 | .opt.arg = &ocsp_config.CApath, | 391 | .opt.arg = &cfg.CApath, |
| 392 | }, | 392 | }, |
| 393 | { | 393 | { |
| 394 | .name = "cert", | 394 | .name = "cert", |
| @@ -415,14 +415,14 @@ static const struct option ocsp_options[] = { | |||
| 415 | .name = "ignore_err", | 415 | .name = "ignore_err", |
| 416 | .desc = "Ignore the invalid response", | 416 | .desc = "Ignore the invalid response", |
| 417 | .type = OPTION_FLAG, | 417 | .type = OPTION_FLAG, |
| 418 | .opt.flag = &ocsp_config.ignore_err, | 418 | .opt.flag = &cfg.ignore_err, |
| 419 | }, | 419 | }, |
| 420 | { | 420 | { |
| 421 | .name = "index", | 421 | .name = "index", |
| 422 | .argname = "indexfile", | 422 | .argname = "indexfile", |
| 423 | .desc = "Certificate status index file", | 423 | .desc = "Certificate status index file", |
| 424 | .type = OPTION_ARG, | 424 | .type = OPTION_ARG, |
| 425 | .opt.arg = &ocsp_config.ridx_filename, | 425 | .opt.arg = &cfg.ridx_filename, |
| 426 | }, | 426 | }, |
| 427 | { | 427 | { |
| 428 | .name = "issuer", | 428 | .name = "issuer", |
| @@ -449,70 +449,70 @@ static const struct option ocsp_options[] = { | |||
| 449 | .name = "no_cert_checks", | 449 | .name = "no_cert_checks", |
| 450 | .desc = "Don't do additional checks on signing certificate", | 450 | .desc = "Don't do additional checks on signing certificate", |
| 451 | .type = OPTION_UL_VALUE_OR, | 451 | .type = OPTION_UL_VALUE_OR, |
| 452 | .opt.ulvalue = &ocsp_config.verify_flags, | 452 | .opt.ulvalue = &cfg.verify_flags, |
| 453 | .ulvalue = OCSP_NOCHECKS, | 453 | .ulvalue = OCSP_NOCHECKS, |
| 454 | }, | 454 | }, |
| 455 | { | 455 | { |
| 456 | .name = "no_cert_verify", | 456 | .name = "no_cert_verify", |
| 457 | .desc = "Don't check signing certificate", | 457 | .desc = "Don't check signing certificate", |
| 458 | .type = OPTION_UL_VALUE_OR, | 458 | .type = OPTION_UL_VALUE_OR, |
| 459 | .opt.ulvalue = &ocsp_config.verify_flags, | 459 | .opt.ulvalue = &cfg.verify_flags, |
| 460 | .ulvalue = OCSP_NOVERIFY, | 460 | .ulvalue = OCSP_NOVERIFY, |
| 461 | }, | 461 | }, |
| 462 | { | 462 | { |
| 463 | .name = "no_certs", | 463 | .name = "no_certs", |
| 464 | .desc = "Don't include any certificates in signed request", | 464 | .desc = "Don't include any certificates in signed request", |
| 465 | .type = OPTION_UL_VALUE_OR, | 465 | .type = OPTION_UL_VALUE_OR, |
| 466 | .opt.ulvalue = &ocsp_config.sign_flags, | 466 | .opt.ulvalue = &cfg.sign_flags, |
| 467 | .ulvalue = OCSP_NOCERTS, | 467 | .ulvalue = OCSP_NOCERTS, |
| 468 | }, | 468 | }, |
| 469 | { | 469 | { |
| 470 | .name = "no_chain", | 470 | .name = "no_chain", |
| 471 | .desc = "Don't use certificates in the response", | 471 | .desc = "Don't use certificates in the response", |
| 472 | .type = OPTION_UL_VALUE_OR, | 472 | .type = OPTION_UL_VALUE_OR, |
| 473 | .opt.ulvalue = &ocsp_config.verify_flags, | 473 | .opt.ulvalue = &cfg.verify_flags, |
| 474 | .ulvalue = OCSP_NOCHAIN, | 474 | .ulvalue = OCSP_NOCHAIN, |
| 475 | }, | 475 | }, |
| 476 | { | 476 | { |
| 477 | .name = "no_explicit", | 477 | .name = "no_explicit", |
| 478 | .desc = "Don't check the explicit trust for OCSP signing", | 478 | .desc = "Don't check the explicit trust for OCSP signing", |
| 479 | .type = OPTION_UL_VALUE_OR, | 479 | .type = OPTION_UL_VALUE_OR, |
| 480 | .opt.ulvalue = &ocsp_config.verify_flags, | 480 | .opt.ulvalue = &cfg.verify_flags, |
| 481 | .ulvalue = OCSP_NOEXPLICIT, | 481 | .ulvalue = OCSP_NOEXPLICIT, |
| 482 | }, | 482 | }, |
| 483 | { | 483 | { |
| 484 | .name = "no_intern", | 484 | .name = "no_intern", |
| 485 | .desc = "Don't search certificates contained in response for signer", | 485 | .desc = "Don't search certificates contained in response for signer", |
| 486 | .type = OPTION_UL_VALUE_OR, | 486 | .type = OPTION_UL_VALUE_OR, |
| 487 | .opt.ulvalue = &ocsp_config.verify_flags, | 487 | .opt.ulvalue = &cfg.verify_flags, |
| 488 | .ulvalue = OCSP_NOINTERN, | 488 | .ulvalue = OCSP_NOINTERN, |
| 489 | }, | 489 | }, |
| 490 | { | 490 | { |
| 491 | .name = "no_nonce", | 491 | .name = "no_nonce", |
| 492 | .desc = "Don't add OCSP nonce to request", | 492 | .desc = "Don't add OCSP nonce to request", |
| 493 | .type = OPTION_VALUE, | 493 | .type = OPTION_VALUE, |
| 494 | .opt.value = &ocsp_config.add_nonce, | 494 | .opt.value = &cfg.add_nonce, |
| 495 | .value = 0, | 495 | .value = 0, |
| 496 | }, | 496 | }, |
| 497 | { | 497 | { |
| 498 | .name = "no_signature_verify", | 498 | .name = "no_signature_verify", |
| 499 | .desc = "Don't check signature on response", | 499 | .desc = "Don't check signature on response", |
| 500 | .type = OPTION_UL_VALUE_OR, | 500 | .type = OPTION_UL_VALUE_OR, |
| 501 | .opt.ulvalue = &ocsp_config.verify_flags, | 501 | .opt.ulvalue = &cfg.verify_flags, |
| 502 | .ulvalue = OCSP_NOSIGS, | 502 | .ulvalue = OCSP_NOSIGS, |
| 503 | }, | 503 | }, |
| 504 | { | 504 | { |
| 505 | .name = "nonce", | 505 | .name = "nonce", |
| 506 | .desc = "Add OCSP nonce to request", | 506 | .desc = "Add OCSP nonce to request", |
| 507 | .type = OPTION_VALUE, | 507 | .type = OPTION_VALUE, |
| 508 | .opt.value = &ocsp_config.add_nonce, | 508 | .opt.value = &cfg.add_nonce, |
| 509 | .value = 2, | 509 | .value = 2, |
| 510 | }, | 510 | }, |
| 511 | { | 511 | { |
| 512 | .name = "noverify", | 512 | .name = "noverify", |
| 513 | .desc = "Don't verify response at all", | 513 | .desc = "Don't verify response at all", |
| 514 | .type = OPTION_FLAG, | 514 | .type = OPTION_FLAG, |
| 515 | .opt.flag = &ocsp_config.noverify, | 515 | .opt.flag = &cfg.noverify, |
| 516 | }, | 516 | }, |
| 517 | { | 517 | { |
| 518 | .name = "nrequest", | 518 | .name = "nrequest", |
| @@ -526,14 +526,14 @@ static const struct option ocsp_options[] = { | |||
| 526 | .argname = "file", | 526 | .argname = "file", |
| 527 | .desc = "Output filename", | 527 | .desc = "Output filename", |
| 528 | .type = OPTION_ARG, | 528 | .type = OPTION_ARG, |
| 529 | .opt.arg = &ocsp_config.outfile, | 529 | .opt.arg = &cfg.outfile, |
| 530 | }, | 530 | }, |
| 531 | { | 531 | { |
| 532 | .name = "path", | 532 | .name = "path", |
| 533 | .argname = "path", | 533 | .argname = "path", |
| 534 | .desc = "Path to use in OCSP request", | 534 | .desc = "Path to use in OCSP request", |
| 535 | .type = OPTION_ARG, | 535 | .type = OPTION_ARG, |
| 536 | .opt.arg = &ocsp_config.path, | 536 | .opt.arg = &cfg.path, |
| 537 | }, | 537 | }, |
| 538 | { | 538 | { |
| 539 | .name = "port", | 539 | .name = "port", |
| @@ -546,76 +546,76 @@ static const struct option ocsp_options[] = { | |||
| 546 | .name = "req_text", | 546 | .name = "req_text", |
| 547 | .desc = "Print text form of request", | 547 | .desc = "Print text form of request", |
| 548 | .type = OPTION_FLAG, | 548 | .type = OPTION_FLAG, |
| 549 | .opt.flag = &ocsp_config.req_text, | 549 | .opt.flag = &cfg.req_text, |
| 550 | }, | 550 | }, |
| 551 | { | 551 | { |
| 552 | .name = "reqin", | 552 | .name = "reqin", |
| 553 | .argname = "file", | 553 | .argname = "file", |
| 554 | .desc = "Read DER encoded OCSP request from \"file\"", | 554 | .desc = "Read DER encoded OCSP request from \"file\"", |
| 555 | .type = OPTION_ARG, | 555 | .type = OPTION_ARG, |
| 556 | .opt.arg = &ocsp_config.reqin, | 556 | .opt.arg = &cfg.reqin, |
| 557 | }, | 557 | }, |
| 558 | { | 558 | { |
| 559 | .name = "reqout", | 559 | .name = "reqout", |
| 560 | .argname = "file", | 560 | .argname = "file", |
| 561 | .desc = "Write DER encoded OCSP request to \"file\"", | 561 | .desc = "Write DER encoded OCSP request to \"file\"", |
| 562 | .type = OPTION_ARG, | 562 | .type = OPTION_ARG, |
| 563 | .opt.arg = &ocsp_config.reqout, | 563 | .opt.arg = &cfg.reqout, |
| 564 | }, | 564 | }, |
| 565 | { | 565 | { |
| 566 | .name = "resp_key_id", | 566 | .name = "resp_key_id", |
| 567 | .desc = "Identify response by signing certificate key ID", | 567 | .desc = "Identify response by signing certificate key ID", |
| 568 | .type = OPTION_UL_VALUE_OR, | 568 | .type = OPTION_UL_VALUE_OR, |
| 569 | .opt.ulvalue = &ocsp_config.rflags, | 569 | .opt.ulvalue = &cfg.rflags, |
| 570 | .ulvalue = OCSP_RESPID_KEY, | 570 | .ulvalue = OCSP_RESPID_KEY, |
| 571 | }, | 571 | }, |
| 572 | { | 572 | { |
| 573 | .name = "resp_no_certs", | 573 | .name = "resp_no_certs", |
| 574 | .desc = "Don't include any certificates in response", | 574 | .desc = "Don't include any certificates in response", |
| 575 | .type = OPTION_UL_VALUE_OR, | 575 | .type = OPTION_UL_VALUE_OR, |
| 576 | .opt.ulvalue = &ocsp_config.rflags, | 576 | .opt.ulvalue = &cfg.rflags, |
| 577 | .ulvalue = OCSP_NOCERTS, | 577 | .ulvalue = OCSP_NOCERTS, |
| 578 | }, | 578 | }, |
| 579 | { | 579 | { |
| 580 | .name = "resp_text", | 580 | .name = "resp_text", |
| 581 | .desc = "Print text form of response", | 581 | .desc = "Print text form of response", |
| 582 | .type = OPTION_FLAG, | 582 | .type = OPTION_FLAG, |
| 583 | .opt.flag = &ocsp_config.resp_text, | 583 | .opt.flag = &cfg.resp_text, |
| 584 | }, | 584 | }, |
| 585 | { | 585 | { |
| 586 | .name = "respin", | 586 | .name = "respin", |
| 587 | .argname = "file", | 587 | .argname = "file", |
| 588 | .desc = "Read DER encoded OCSP response from \"file\"", | 588 | .desc = "Read DER encoded OCSP response from \"file\"", |
| 589 | .type = OPTION_ARG, | 589 | .type = OPTION_ARG, |
| 590 | .opt.arg = &ocsp_config.respin, | 590 | .opt.arg = &cfg.respin, |
| 591 | }, | 591 | }, |
| 592 | { | 592 | { |
| 593 | .name = "respout", | 593 | .name = "respout", |
| 594 | .argname = "file", | 594 | .argname = "file", |
| 595 | .desc = "Write DER encoded OCSP response to \"file\"", | 595 | .desc = "Write DER encoded OCSP response to \"file\"", |
| 596 | .type = OPTION_ARG, | 596 | .type = OPTION_ARG, |
| 597 | .opt.arg = &ocsp_config.respout, | 597 | .opt.arg = &cfg.respout, |
| 598 | }, | 598 | }, |
| 599 | { | 599 | { |
| 600 | .name = "rkey", | 600 | .name = "rkey", |
| 601 | .argname = "file", | 601 | .argname = "file", |
| 602 | .desc = "Responder key to sign responses with", | 602 | .desc = "Responder key to sign responses with", |
| 603 | .type = OPTION_ARG, | 603 | .type = OPTION_ARG, |
| 604 | .opt.arg = &ocsp_config.rkeyfile, | 604 | .opt.arg = &cfg.rkeyfile, |
| 605 | }, | 605 | }, |
| 606 | { | 606 | { |
| 607 | .name = "rother", | 607 | .name = "rother", |
| 608 | .argname = "file", | 608 | .argname = "file", |
| 609 | .desc = "Other certificates to include in response", | 609 | .desc = "Other certificates to include in response", |
| 610 | .type = OPTION_ARG, | 610 | .type = OPTION_ARG, |
| 611 | .opt.arg = &ocsp_config.rcertfile, | 611 | .opt.arg = &cfg.rcertfile, |
| 612 | }, | 612 | }, |
| 613 | { | 613 | { |
| 614 | .name = "rsigner", | 614 | .name = "rsigner", |
| 615 | .argname = "file", | 615 | .argname = "file", |
| 616 | .desc = "Responder certificate to sign responses with", | 616 | .desc = "Responder certificate to sign responses with", |
| 617 | .type = OPTION_ARG, | 617 | .type = OPTION_ARG, |
| 618 | .opt.arg = &ocsp_config.rsignfile, | 618 | .opt.arg = &cfg.rsignfile, |
| 619 | }, | 619 | }, |
| 620 | { | 620 | { |
| 621 | .name = "serial", | 621 | .name = "serial", |
| @@ -629,21 +629,21 @@ static const struct option ocsp_options[] = { | |||
| 629 | .argname = "file", | 629 | .argname = "file", |
| 630 | .desc = "Additional certificates to include in signed request", | 630 | .desc = "Additional certificates to include in signed request", |
| 631 | .type = OPTION_ARG, | 631 | .type = OPTION_ARG, |
| 632 | .opt.arg = &ocsp_config.sign_certfile, | 632 | .opt.arg = &cfg.sign_certfile, |
| 633 | }, | 633 | }, |
| 634 | { | 634 | { |
| 635 | .name = "signer", | 635 | .name = "signer", |
| 636 | .argname = "file", | 636 | .argname = "file", |
| 637 | .desc = "Certificate to sign OCSP request with", | 637 | .desc = "Certificate to sign OCSP request with", |
| 638 | .type = OPTION_ARG, | 638 | .type = OPTION_ARG, |
| 639 | .opt.arg = &ocsp_config.signfile, | 639 | .opt.arg = &cfg.signfile, |
| 640 | }, | 640 | }, |
| 641 | { | 641 | { |
| 642 | .name = "signkey", | 642 | .name = "signkey", |
| 643 | .argname = "file", | 643 | .argname = "file", |
| 644 | .desc = "Private key to sign OCSP request with", | 644 | .desc = "Private key to sign OCSP request with", |
| 645 | .type = OPTION_ARG, | 645 | .type = OPTION_ARG, |
| 646 | .opt.arg = &ocsp_config.keyfile, | 646 | .opt.arg = &cfg.keyfile, |
| 647 | }, | 647 | }, |
| 648 | { | 648 | { |
| 649 | .name = "status_age", | 649 | .name = "status_age", |
| @@ -669,7 +669,7 @@ static const struct option ocsp_options[] = { | |||
| 669 | .name = "trust_other", | 669 | .name = "trust_other", |
| 670 | .desc = "Don't verify additional certificates", | 670 | .desc = "Don't verify additional certificates", |
| 671 | .type = OPTION_UL_VALUE_OR, | 671 | .type = OPTION_UL_VALUE_OR, |
| 672 | .opt.ulvalue = &ocsp_config.verify_flags, | 672 | .opt.ulvalue = &cfg.verify_flags, |
| 673 | .ulvalue = OCSP_TRUSTOTHER, | 673 | .ulvalue = OCSP_TRUSTOTHER, |
| 674 | }, | 674 | }, |
| 675 | { | 675 | { |
| @@ -698,7 +698,7 @@ static const struct option ocsp_options[] = { | |||
| 698 | .argname = "file", | 698 | .argname = "file", |
| 699 | .desc = "Additional certificates to search for signer", | 699 | .desc = "Additional certificates to search for signer", |
| 700 | .type = OPTION_ARG, | 700 | .type = OPTION_ARG, |
| 701 | .opt.arg = &ocsp_config.verify_certfile, | 701 | .opt.arg = &cfg.verify_certfile, |
| 702 | }, | 702 | }, |
| 703 | { | 703 | { |
| 704 | .name = NULL, | 704 | .name = NULL, |
| @@ -755,37 +755,37 @@ ocsp_main(int argc, char **argv) | |||
| 755 | exit(1); | 755 | exit(1); |
| 756 | } | 756 | } |
| 757 | 757 | ||
| 758 | memset(&ocsp_config, 0, sizeof(ocsp_config)); | 758 | memset(&cfg, 0, sizeof(cfg)); |
| 759 | ocsp_config.accept_count = -1; | 759 | cfg.accept_count = -1; |
| 760 | ocsp_config.add_nonce = 1; | 760 | cfg.add_nonce = 1; |
| 761 | if ((ocsp_config.ids = sk_OCSP_CERTID_new_null()) == NULL) | 761 | if ((cfg.ids = sk_OCSP_CERTID_new_null()) == NULL) |
| 762 | goto end; | 762 | goto end; |
| 763 | ocsp_config.maxage = -1; | 763 | cfg.maxage = -1; |
| 764 | ocsp_config.ndays = -1; | 764 | cfg.ndays = -1; |
| 765 | ocsp_config.nsec = MAX_VALIDITY_PERIOD; | 765 | cfg.nsec = MAX_VALIDITY_PERIOD; |
| 766 | ocsp_config.req_timeout = -1; | 766 | cfg.req_timeout = -1; |
| 767 | if ((ocsp_config.reqnames = sk_OPENSSL_STRING_new_null()) == NULL) | 767 | if ((cfg.reqnames = sk_OPENSSL_STRING_new_null()) == NULL) |
| 768 | goto end; | 768 | goto end; |
| 769 | ocsp_config.use_ssl = -1; | 769 | cfg.use_ssl = -1; |
| 770 | 770 | ||
| 771 | if (options_parse(argc, argv, ocsp_options, NULL, NULL) != 0) { | 771 | if (options_parse(argc, argv, ocsp_options, NULL, NULL) != 0) { |
| 772 | if (ocsp_config.no_usage) | 772 | if (cfg.no_usage) |
| 773 | goto end; | 773 | goto end; |
| 774 | else | 774 | else |
| 775 | badarg = 1; | 775 | badarg = 1; |
| 776 | } | 776 | } |
| 777 | 777 | ||
| 778 | /* Have we anything to do? */ | 778 | /* Have we anything to do? */ |
| 779 | if (!ocsp_config.req && !ocsp_config.reqin && !ocsp_config.respin && | 779 | if (!cfg.req && !cfg.reqin && !cfg.respin && |
| 780 | !(ocsp_config.port && ocsp_config.ridx_filename)) | 780 | !(cfg.port && cfg.ridx_filename)) |
| 781 | badarg = 1; | 781 | badarg = 1; |
| 782 | 782 | ||
| 783 | if (badarg) { | 783 | if (badarg) { |
| 784 | ocsp_usage(); | 784 | ocsp_usage(); |
| 785 | goto end; | 785 | goto end; |
| 786 | } | 786 | } |
| 787 | if (ocsp_config.outfile) | 787 | if (cfg.outfile) |
| 788 | out = BIO_new_file(ocsp_config.outfile, "w"); | 788 | out = BIO_new_file(cfg.outfile, "w"); |
| 789 | else | 789 | else |
| 790 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 790 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 791 | 791 | ||
| @@ -793,47 +793,47 @@ ocsp_main(int argc, char **argv) | |||
| 793 | BIO_printf(bio_err, "Error opening output file\n"); | 793 | BIO_printf(bio_err, "Error opening output file\n"); |
| 794 | goto end; | 794 | goto end; |
| 795 | } | 795 | } |
| 796 | if (!ocsp_config.req && (ocsp_config.add_nonce != 2)) | 796 | if (!cfg.req && (cfg.add_nonce != 2)) |
| 797 | ocsp_config.add_nonce = 0; | 797 | cfg.add_nonce = 0; |
| 798 | 798 | ||
| 799 | if (!ocsp_config.req && ocsp_config.reqin) { | 799 | if (!cfg.req && cfg.reqin) { |
| 800 | derbio = BIO_new_file(ocsp_config.reqin, "rb"); | 800 | derbio = BIO_new_file(cfg.reqin, "rb"); |
| 801 | if (!derbio) { | 801 | if (!derbio) { |
| 802 | BIO_printf(bio_err, | 802 | BIO_printf(bio_err, |
| 803 | "Error Opening OCSP request file\n"); | 803 | "Error Opening OCSP request file\n"); |
| 804 | goto end; | 804 | goto end; |
| 805 | } | 805 | } |
| 806 | ocsp_config.req = d2i_OCSP_REQUEST_bio(derbio, NULL); | 806 | cfg.req = d2i_OCSP_REQUEST_bio(derbio, NULL); |
| 807 | BIO_free(derbio); | 807 | BIO_free(derbio); |
| 808 | if (!ocsp_config.req) { | 808 | if (!cfg.req) { |
| 809 | BIO_printf(bio_err, "Error reading OCSP request\n"); | 809 | BIO_printf(bio_err, "Error reading OCSP request\n"); |
| 810 | goto end; | 810 | goto end; |
| 811 | } | 811 | } |
| 812 | } | 812 | } |
| 813 | if (!ocsp_config.req && ocsp_config.port) { | 813 | if (!cfg.req && cfg.port) { |
| 814 | acbio = init_responder(ocsp_config.port); | 814 | acbio = init_responder(cfg.port); |
| 815 | if (!acbio) | 815 | if (!acbio) |
| 816 | goto end; | 816 | goto end; |
| 817 | } | 817 | } |
| 818 | if (ocsp_config.rsignfile && !rdb) { | 818 | if (cfg.rsignfile && !rdb) { |
| 819 | if (!ocsp_config.rkeyfile) | 819 | if (!cfg.rkeyfile) |
| 820 | ocsp_config.rkeyfile = ocsp_config.rsignfile; | 820 | cfg.rkeyfile = cfg.rsignfile; |
| 821 | rsigner = load_cert(bio_err, ocsp_config.rsignfile, FORMAT_PEM, | 821 | rsigner = load_cert(bio_err, cfg.rsignfile, FORMAT_PEM, |
| 822 | NULL, "responder certificate"); | 822 | NULL, "responder certificate"); |
| 823 | if (!rsigner) { | 823 | if (!rsigner) { |
| 824 | BIO_printf(bio_err, | 824 | BIO_printf(bio_err, |
| 825 | "Error loading responder certificate\n"); | 825 | "Error loading responder certificate\n"); |
| 826 | goto end; | 826 | goto end; |
| 827 | } | 827 | } |
| 828 | rca_cert = load_cert(bio_err, ocsp_config.rca_filename, | 828 | rca_cert = load_cert(bio_err, cfg.rca_filename, |
| 829 | FORMAT_PEM, NULL, "CA certificate"); | 829 | FORMAT_PEM, NULL, "CA certificate"); |
| 830 | if (ocsp_config.rcertfile) { | 830 | if (cfg.rcertfile) { |
| 831 | rother = load_certs(bio_err, ocsp_config.rcertfile, | 831 | rother = load_certs(bio_err, cfg.rcertfile, |
| 832 | FORMAT_PEM, NULL, "responder other certificates"); | 832 | FORMAT_PEM, NULL, "responder other certificates"); |
| 833 | if (!rother) | 833 | if (!rother) |
| 834 | goto end; | 834 | goto end; |
| 835 | } | 835 | } |
| 836 | rkey = load_key(bio_err, ocsp_config.rkeyfile, FORMAT_PEM, 0, | 836 | rkey = load_key(bio_err, cfg.rkeyfile, FORMAT_PEM, 0, |
| 837 | NULL, "responder private key"); | 837 | NULL, "responder private key"); |
| 838 | if (!rkey) | 838 | if (!rkey) |
| 839 | goto end; | 839 | goto end; |
| @@ -844,95 +844,95 @@ ocsp_main(int argc, char **argv) | |||
| 844 | redo_accept: | 844 | redo_accept: |
| 845 | 845 | ||
| 846 | if (acbio) { | 846 | if (acbio) { |
| 847 | if (!do_responder(&ocsp_config.req, &cbio, acbio, | 847 | if (!do_responder(&cfg.req, &cbio, acbio, |
| 848 | ocsp_config.port)) | 848 | cfg.port)) |
| 849 | goto end; | 849 | goto end; |
| 850 | if (!ocsp_config.req) { | 850 | if (!cfg.req) { |
| 851 | resp = OCSP_response_create( | 851 | resp = OCSP_response_create( |
| 852 | OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, NULL); | 852 | OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, NULL); |
| 853 | send_ocsp_response(cbio, resp); | 853 | send_ocsp_response(cbio, resp); |
| 854 | goto done_resp; | 854 | goto done_resp; |
| 855 | } | 855 | } |
| 856 | } | 856 | } |
| 857 | if (!ocsp_config.req && | 857 | if (!cfg.req && |
| 858 | (ocsp_config.signfile || ocsp_config.reqout || ocsp_config.host || | 858 | (cfg.signfile || cfg.reqout || cfg.host || |
| 859 | ocsp_config.add_nonce || ocsp_config.ridx_filename)) { | 859 | cfg.add_nonce || cfg.ridx_filename)) { |
| 860 | BIO_printf(bio_err, | 860 | BIO_printf(bio_err, |
| 861 | "Need an OCSP request for this operation!\n"); | 861 | "Need an OCSP request for this operation!\n"); |
| 862 | goto end; | 862 | goto end; |
| 863 | } | 863 | } |
| 864 | if (ocsp_config.req && ocsp_config.add_nonce) | 864 | if (cfg.req && cfg.add_nonce) |
| 865 | OCSP_request_add1_nonce(ocsp_config.req, NULL, -1); | 865 | OCSP_request_add1_nonce(cfg.req, NULL, -1); |
| 866 | 866 | ||
| 867 | if (ocsp_config.signfile) { | 867 | if (cfg.signfile) { |
| 868 | if (!ocsp_config.keyfile) | 868 | if (!cfg.keyfile) |
| 869 | ocsp_config.keyfile = ocsp_config.signfile; | 869 | cfg.keyfile = cfg.signfile; |
| 870 | signer = load_cert(bio_err, ocsp_config.signfile, FORMAT_PEM, | 870 | signer = load_cert(bio_err, cfg.signfile, FORMAT_PEM, |
| 871 | NULL, "signer certificate"); | 871 | NULL, "signer certificate"); |
| 872 | if (!signer) { | 872 | if (!signer) { |
| 873 | BIO_printf(bio_err, | 873 | BIO_printf(bio_err, |
| 874 | "Error loading signer certificate\n"); | 874 | "Error loading signer certificate\n"); |
| 875 | goto end; | 875 | goto end; |
| 876 | } | 876 | } |
| 877 | if (ocsp_config.sign_certfile) { | 877 | if (cfg.sign_certfile) { |
| 878 | sign_other = load_certs(bio_err, | 878 | sign_other = load_certs(bio_err, |
| 879 | ocsp_config.sign_certfile, FORMAT_PEM, NULL, | 879 | cfg.sign_certfile, FORMAT_PEM, NULL, |
| 880 | "signer certificates"); | 880 | "signer certificates"); |
| 881 | if (!sign_other) | 881 | if (!sign_other) |
| 882 | goto end; | 882 | goto end; |
| 883 | } | 883 | } |
| 884 | key = load_key(bio_err, ocsp_config.keyfile, FORMAT_PEM, 0, | 884 | key = load_key(bio_err, cfg.keyfile, FORMAT_PEM, 0, |
| 885 | NULL, "signer private key"); | 885 | NULL, "signer private key"); |
| 886 | if (!key) | 886 | if (!key) |
| 887 | goto end; | 887 | goto end; |
| 888 | 888 | ||
| 889 | if (!OCSP_request_sign(ocsp_config.req, signer, key, NULL, | 889 | if (!OCSP_request_sign(cfg.req, signer, key, NULL, |
| 890 | sign_other, ocsp_config.sign_flags)) { | 890 | sign_other, cfg.sign_flags)) { |
| 891 | BIO_printf(bio_err, "Error signing OCSP request\n"); | 891 | BIO_printf(bio_err, "Error signing OCSP request\n"); |
| 892 | goto end; | 892 | goto end; |
| 893 | } | 893 | } |
| 894 | } | 894 | } |
| 895 | if (ocsp_config.req_text && ocsp_config.req) | 895 | if (cfg.req_text && cfg.req) |
| 896 | OCSP_REQUEST_print(out, ocsp_config.req, 0); | 896 | OCSP_REQUEST_print(out, cfg.req, 0); |
| 897 | 897 | ||
| 898 | if (ocsp_config.reqout) { | 898 | if (cfg.reqout) { |
| 899 | derbio = BIO_new_file(ocsp_config.reqout, "wb"); | 899 | derbio = BIO_new_file(cfg.reqout, "wb"); |
| 900 | if (!derbio) { | 900 | if (!derbio) { |
| 901 | BIO_printf(bio_err, "Error opening file %s\n", | 901 | BIO_printf(bio_err, "Error opening file %s\n", |
| 902 | ocsp_config.reqout); | 902 | cfg.reqout); |
| 903 | goto end; | 903 | goto end; |
| 904 | } | 904 | } |
| 905 | i2d_OCSP_REQUEST_bio(derbio, ocsp_config.req); | 905 | i2d_OCSP_REQUEST_bio(derbio, cfg.req); |
| 906 | BIO_free(derbio); | 906 | BIO_free(derbio); |
| 907 | } | 907 | } |
| 908 | if (ocsp_config.ridx_filename && (!rkey || !rsigner || !rca_cert)) { | 908 | if (cfg.ridx_filename && (!rkey || !rsigner || !rca_cert)) { |
| 909 | BIO_printf(bio_err, | 909 | BIO_printf(bio_err, |
| 910 | "Need a responder certificate, key and CA for this operation!\n"); | 910 | "Need a responder certificate, key and CA for this operation!\n"); |
| 911 | goto end; | 911 | goto end; |
| 912 | } | 912 | } |
| 913 | if (ocsp_config.ridx_filename && !rdb) { | 913 | if (cfg.ridx_filename && !rdb) { |
| 914 | rdb = load_index(ocsp_config.ridx_filename, NULL); | 914 | rdb = load_index(cfg.ridx_filename, NULL); |
| 915 | if (!rdb) | 915 | if (!rdb) |
| 916 | goto end; | 916 | goto end; |
| 917 | if (!index_index(rdb)) | 917 | if (!index_index(rdb)) |
| 918 | goto end; | 918 | goto end; |
| 919 | } | 919 | } |
| 920 | if (rdb) { | 920 | if (rdb) { |
| 921 | i = make_ocsp_response(&resp, ocsp_config.req, rdb, rca_cert, | 921 | i = make_ocsp_response(&resp, cfg.req, rdb, rca_cert, |
| 922 | rsigner, rkey, rother, ocsp_config.rflags, | 922 | rsigner, rkey, rother, cfg.rflags, |
| 923 | ocsp_config.nmin, ocsp_config.ndays); | 923 | cfg.nmin, cfg.ndays); |
| 924 | if (cbio) | 924 | if (cbio) |
| 925 | send_ocsp_response(cbio, resp); | 925 | send_ocsp_response(cbio, resp); |
| 926 | } else if (ocsp_config.host) { | 926 | } else if (cfg.host) { |
| 927 | resp = process_responder(bio_err, ocsp_config.req, | 927 | resp = process_responder(bio_err, cfg.req, |
| 928 | ocsp_config.host, | 928 | cfg.host, |
| 929 | ocsp_config.path ? ocsp_config.path : "/", | 929 | cfg.path ? cfg.path : "/", |
| 930 | ocsp_config.port, ocsp_config.use_ssl, ocsp_config.headers, | 930 | cfg.port, cfg.use_ssl, cfg.headers, |
| 931 | ocsp_config.req_timeout); | 931 | cfg.req_timeout); |
| 932 | if (!resp) | 932 | if (!resp) |
| 933 | goto end; | 933 | goto end; |
| 934 | } else if (ocsp_config.respin) { | 934 | } else if (cfg.respin) { |
| 935 | derbio = BIO_new_file(ocsp_config.respin, "rb"); | 935 | derbio = BIO_new_file(cfg.respin, "rb"); |
| 936 | if (!derbio) { | 936 | if (!derbio) { |
| 937 | BIO_printf(bio_err, | 937 | BIO_printf(bio_err, |
| 938 | "Error Opening OCSP response file\n"); | 938 | "Error Opening OCSP response file\n"); |
| @@ -951,11 +951,11 @@ ocsp_main(int argc, char **argv) | |||
| 951 | 951 | ||
| 952 | done_resp: | 952 | done_resp: |
| 953 | 953 | ||
| 954 | if (ocsp_config.respout) { | 954 | if (cfg.respout) { |
| 955 | derbio = BIO_new_file(ocsp_config.respout, "wb"); | 955 | derbio = BIO_new_file(cfg.respout, "wb"); |
| 956 | if (!derbio) { | 956 | if (!derbio) { |
| 957 | BIO_printf(bio_err, "Error opening file %s\n", | 957 | BIO_printf(bio_err, "Error opening file %s\n", |
| 958 | ocsp_config.respout); | 958 | cfg.respout); |
| 959 | goto end; | 959 | goto end; |
| 960 | } | 960 | } |
| 961 | i2d_OCSP_RESPONSE_bio(derbio, resp); | 961 | i2d_OCSP_RESPONSE_bio(derbio, resp); |
| @@ -966,24 +966,24 @@ ocsp_main(int argc, char **argv) | |||
| 966 | if (i != OCSP_RESPONSE_STATUS_SUCCESSFUL) { | 966 | if (i != OCSP_RESPONSE_STATUS_SUCCESSFUL) { |
| 967 | BIO_printf(bio_err, "Responder Error: %s (%d)\n", | 967 | BIO_printf(bio_err, "Responder Error: %s (%d)\n", |
| 968 | OCSP_response_status_str(i), i); | 968 | OCSP_response_status_str(i), i); |
| 969 | if (ocsp_config.ignore_err) | 969 | if (cfg.ignore_err) |
| 970 | goto redo_accept; | 970 | goto redo_accept; |
| 971 | ret = 1; | 971 | ret = 1; |
| 972 | goto end; | 972 | goto end; |
| 973 | } | 973 | } |
| 974 | if (ocsp_config.resp_text) | 974 | if (cfg.resp_text) |
| 975 | OCSP_RESPONSE_print(out, resp, 0); | 975 | OCSP_RESPONSE_print(out, resp, 0); |
| 976 | 976 | ||
| 977 | /* If running as responder don't verify our own response */ | 977 | /* If running as responder don't verify our own response */ |
| 978 | if (cbio) { | 978 | if (cbio) { |
| 979 | if (ocsp_config.accept_count > 0) | 979 | if (cfg.accept_count > 0) |
| 980 | ocsp_config.accept_count--; | 980 | cfg.accept_count--; |
| 981 | /* Redo if more connections needed */ | 981 | /* Redo if more connections needed */ |
| 982 | if (ocsp_config.accept_count) { | 982 | if (cfg.accept_count) { |
| 983 | BIO_free_all(cbio); | 983 | BIO_free_all(cbio); |
| 984 | cbio = NULL; | 984 | cbio = NULL; |
| 985 | OCSP_REQUEST_free(ocsp_config.req); | 985 | OCSP_REQUEST_free(cfg.req); |
| 986 | ocsp_config.req = NULL; | 986 | cfg.req = NULL; |
| 987 | OCSP_RESPONSE_free(resp); | 987 | OCSP_RESPONSE_free(resp); |
| 988 | resp = NULL; | 988 | resp = NULL; |
| 989 | goto redo_accept; | 989 | goto redo_accept; |
| @@ -991,12 +991,12 @@ ocsp_main(int argc, char **argv) | |||
| 991 | goto end; | 991 | goto end; |
| 992 | } | 992 | } |
| 993 | if (!store) | 993 | if (!store) |
| 994 | store = setup_verify(bio_err, ocsp_config.CAfile, | 994 | store = setup_verify(bio_err, cfg.CAfile, |
| 995 | ocsp_config.CApath); | 995 | cfg.CApath); |
| 996 | if (!store) | 996 | if (!store) |
| 997 | goto end; | 997 | goto end; |
| 998 | if (ocsp_config.verify_certfile) { | 998 | if (cfg.verify_certfile) { |
| 999 | verify_other = load_certs(bio_err, ocsp_config.verify_certfile, | 999 | verify_other = load_certs(bio_err, cfg.verify_certfile, |
| 1000 | FORMAT_PEM, NULL, "validator certificate"); | 1000 | FORMAT_PEM, NULL, "validator certificate"); |
| 1001 | if (!verify_other) | 1001 | if (!verify_other) |
| 1002 | goto end; | 1002 | goto end; |
| @@ -1007,9 +1007,9 @@ ocsp_main(int argc, char **argv) | |||
| 1007 | BIO_printf(bio_err, "Error parsing response\n"); | 1007 | BIO_printf(bio_err, "Error parsing response\n"); |
| 1008 | goto end; | 1008 | goto end; |
| 1009 | } | 1009 | } |
| 1010 | if (!ocsp_config.noverify) { | 1010 | if (!cfg.noverify) { |
| 1011 | if (ocsp_config.req && | 1011 | if (cfg.req && |
| 1012 | ((i = OCSP_check_nonce(ocsp_config.req, bs)) <= 0)) { | 1012 | ((i = OCSP_check_nonce(cfg.req, bs)) <= 0)) { |
| 1013 | if (i == -1) { | 1013 | if (i == -1) { |
| 1014 | BIO_printf(bio_err, | 1014 | BIO_printf(bio_err, |
| 1015 | "WARNING: no nonce in response\n"); | 1015 | "WARNING: no nonce in response\n"); |
| @@ -1019,7 +1019,7 @@ ocsp_main(int argc, char **argv) | |||
| 1019 | } | 1019 | } |
| 1020 | } | 1020 | } |
| 1021 | i = OCSP_basic_verify(bs, verify_other, store, | 1021 | i = OCSP_basic_verify(bs, verify_other, store, |
| 1022 | ocsp_config.verify_flags); | 1022 | cfg.verify_flags); |
| 1023 | if (i < 0) | 1023 | if (i < 0) |
| 1024 | i = OCSP_basic_verify(bs, NULL, store, 0); | 1024 | i = OCSP_basic_verify(bs, NULL, store, 0); |
| 1025 | 1025 | ||
| @@ -1030,8 +1030,8 @@ ocsp_main(int argc, char **argv) | |||
| 1030 | BIO_printf(bio_err, "Response verify OK\n"); | 1030 | BIO_printf(bio_err, "Response verify OK\n"); |
| 1031 | } | 1031 | } |
| 1032 | } | 1032 | } |
| 1033 | if (!print_ocsp_summary(out, bs, ocsp_config.req, ocsp_config.reqnames, | 1033 | if (!print_ocsp_summary(out, bs, cfg.req, cfg.reqnames, |
| 1034 | ocsp_config.ids, ocsp_config.nsec, ocsp_config.maxage)) | 1034 | cfg.ids, cfg.nsec, cfg.maxage)) |
| 1035 | goto end; | 1035 | goto end; |
| 1036 | 1036 | ||
| 1037 | ret = 0; | 1037 | ret = 0; |
| @@ -1042,27 +1042,27 @@ ocsp_main(int argc, char **argv) | |||
| 1042 | X509_STORE_free(store); | 1042 | X509_STORE_free(store); |
| 1043 | EVP_PKEY_free(key); | 1043 | EVP_PKEY_free(key); |
| 1044 | EVP_PKEY_free(rkey); | 1044 | EVP_PKEY_free(rkey); |
| 1045 | X509_free(ocsp_config.issuer); | 1045 | X509_free(cfg.issuer); |
| 1046 | X509_free(ocsp_config.cert); | 1046 | X509_free(cfg.cert); |
| 1047 | X509_free(rsigner); | 1047 | X509_free(rsigner); |
| 1048 | X509_free(rca_cert); | 1048 | X509_free(rca_cert); |
| 1049 | free_index(rdb); | 1049 | free_index(rdb); |
| 1050 | BIO_free_all(cbio); | 1050 | BIO_free_all(cbio); |
| 1051 | BIO_free_all(acbio); | 1051 | BIO_free_all(acbio); |
| 1052 | BIO_free(out); | 1052 | BIO_free(out); |
| 1053 | OCSP_REQUEST_free(ocsp_config.req); | 1053 | OCSP_REQUEST_free(cfg.req); |
| 1054 | OCSP_RESPONSE_free(resp); | 1054 | OCSP_RESPONSE_free(resp); |
| 1055 | OCSP_BASICRESP_free(bs); | 1055 | OCSP_BASICRESP_free(bs); |
| 1056 | sk_OPENSSL_STRING_free(ocsp_config.reqnames); | 1056 | sk_OPENSSL_STRING_free(cfg.reqnames); |
| 1057 | sk_OCSP_CERTID_free(ocsp_config.ids); | 1057 | sk_OCSP_CERTID_free(cfg.ids); |
| 1058 | sk_X509_pop_free(sign_other, X509_free); | 1058 | sk_X509_pop_free(sign_other, X509_free); |
| 1059 | sk_X509_pop_free(verify_other, X509_free); | 1059 | sk_X509_pop_free(verify_other, X509_free); |
| 1060 | sk_CONF_VALUE_pop_free(ocsp_config.headers, X509V3_conf_free); | 1060 | sk_CONF_VALUE_pop_free(cfg.headers, X509V3_conf_free); |
| 1061 | 1061 | ||
| 1062 | if (ocsp_config.use_ssl != -1) { | 1062 | if (cfg.use_ssl != -1) { |
| 1063 | free(ocsp_config.host); | 1063 | free(cfg.host); |
| 1064 | free(ocsp_config.port); | 1064 | free(cfg.port); |
| 1065 | free(ocsp_config.path); | 1065 | free(cfg.path); |
| 1066 | } | 1066 | } |
| 1067 | return (ret); | 1067 | return (ret); |
| 1068 | } | 1068 | } |
diff --git a/src/usr.bin/openssl/passwd.c b/src/usr.bin/openssl/passwd.c index f05751f165..a8dfa27db1 100644 --- a/src/usr.bin/openssl/passwd.c +++ b/src/usr.bin/openssl/passwd.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: passwd.c,v 1.13 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: passwd.c,v 1.14 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | 2 | ||
| 3 | #if defined OPENSSL_NO_MD5 | 3 | #if defined OPENSSL_NO_MD5 |
| 4 | #define NO_MD5CRYPT_1 | 4 | #define NO_MD5CRYPT_1 |
| @@ -51,7 +51,7 @@ static struct { | |||
| 51 | int use1; | 51 | int use1; |
| 52 | int useapr1; | 52 | int useapr1; |
| 53 | int usecrypt; | 53 | int usecrypt; |
| 54 | } passwd_config; | 54 | } cfg; |
| 55 | 55 | ||
| 56 | static const struct option passwd_options[] = { | 56 | static const struct option passwd_options[] = { |
| 57 | #ifndef NO_MD5CRYPT_1 | 57 | #ifndef NO_MD5CRYPT_1 |
| @@ -59,13 +59,13 @@ static const struct option passwd_options[] = { | |||
| 59 | .name = "1", | 59 | .name = "1", |
| 60 | .desc = "Use MD5 based BSD password algorithm 1", | 60 | .desc = "Use MD5 based BSD password algorithm 1", |
| 61 | .type = OPTION_FLAG, | 61 | .type = OPTION_FLAG, |
| 62 | .opt.flag = &passwd_config.use1, | 62 | .opt.flag = &cfg.use1, |
| 63 | }, | 63 | }, |
| 64 | { | 64 | { |
| 65 | .name = "apr1", | 65 | .name = "apr1", |
| 66 | .desc = "Use apr1 algorithm (Apache variant of BSD algorithm)", | 66 | .desc = "Use apr1 algorithm (Apache variant of BSD algorithm)", |
| 67 | .type = OPTION_FLAG, | 67 | .type = OPTION_FLAG, |
| 68 | .opt.flag = &passwd_config.useapr1, | 68 | .opt.flag = &cfg.useapr1, |
| 69 | }, | 69 | }, |
| 70 | #endif | 70 | #endif |
| 71 | #ifndef OPENSSL_NO_DES | 71 | #ifndef OPENSSL_NO_DES |
| @@ -73,7 +73,7 @@ static const struct option passwd_options[] = { | |||
| 73 | .name = "crypt", | 73 | .name = "crypt", |
| 74 | .desc = "Use crypt algorithm (default)", | 74 | .desc = "Use crypt algorithm (default)", |
| 75 | .type = OPTION_FLAG, | 75 | .type = OPTION_FLAG, |
| 76 | .opt.flag = &passwd_config.usecrypt, | 76 | .opt.flag = &cfg.usecrypt, |
| 77 | }, | 77 | }, |
| 78 | #endif | 78 | #endif |
| 79 | { | 79 | { |
| @@ -81,44 +81,44 @@ static const struct option passwd_options[] = { | |||
| 81 | .argname = "file", | 81 | .argname = "file", |
| 82 | .desc = "Read passwords from specified file", | 82 | .desc = "Read passwords from specified file", |
| 83 | .type = OPTION_ARG, | 83 | .type = OPTION_ARG, |
| 84 | .opt.arg = &passwd_config.infile, | 84 | .opt.arg = &cfg.infile, |
| 85 | }, | 85 | }, |
| 86 | { | 86 | { |
| 87 | .name = "noverify", | 87 | .name = "noverify", |
| 88 | .desc = "Do not verify password", | 88 | .desc = "Do not verify password", |
| 89 | .type = OPTION_FLAG, | 89 | .type = OPTION_FLAG, |
| 90 | .opt.flag = &passwd_config.noverify, | 90 | .opt.flag = &cfg.noverify, |
| 91 | }, | 91 | }, |
| 92 | { | 92 | { |
| 93 | .name = "quiet", | 93 | .name = "quiet", |
| 94 | .desc = "Do not output warnings", | 94 | .desc = "Do not output warnings", |
| 95 | .type = OPTION_FLAG, | 95 | .type = OPTION_FLAG, |
| 96 | .opt.flag = &passwd_config.quiet, | 96 | .opt.flag = &cfg.quiet, |
| 97 | }, | 97 | }, |
| 98 | { | 98 | { |
| 99 | .name = "reverse", | 99 | .name = "reverse", |
| 100 | .desc = "Reverse table columns (requires -table)", | 100 | .desc = "Reverse table columns (requires -table)", |
| 101 | .type = OPTION_FLAG, | 101 | .type = OPTION_FLAG, |
| 102 | .opt.flag = &passwd_config.reverse, | 102 | .opt.flag = &cfg.reverse, |
| 103 | }, | 103 | }, |
| 104 | { | 104 | { |
| 105 | .name = "salt", | 105 | .name = "salt", |
| 106 | .argname = "string", | 106 | .argname = "string", |
| 107 | .desc = "Use specified salt", | 107 | .desc = "Use specified salt", |
| 108 | .type = OPTION_ARG, | 108 | .type = OPTION_ARG, |
| 109 | .opt.arg = &passwd_config.salt, | 109 | .opt.arg = &cfg.salt, |
| 110 | }, | 110 | }, |
| 111 | { | 111 | { |
| 112 | .name = "stdin", | 112 | .name = "stdin", |
| 113 | .desc = "Read passwords from stdin", | 113 | .desc = "Read passwords from stdin", |
| 114 | .type = OPTION_FLAG, | 114 | .type = OPTION_FLAG, |
| 115 | .opt.flag = &passwd_config.in_stdin, | 115 | .opt.flag = &cfg.in_stdin, |
| 116 | }, | 116 | }, |
| 117 | { | 117 | { |
| 118 | .name = "table", | 118 | .name = "table", |
| 119 | .desc = "Output cleartext and hashed passwords (tab separated)", | 119 | .desc = "Output cleartext and hashed passwords (tab separated)", |
| 120 | .type = OPTION_FLAG, | 120 | .type = OPTION_FLAG, |
| 121 | .opt.flag = &passwd_config.table, | 121 | .opt.flag = &cfg.table, |
| 122 | }, | 122 | }, |
| 123 | { NULL }, | 123 | { NULL }, |
| 124 | }; | 124 | }; |
| @@ -150,7 +150,7 @@ passwd_main(int argc, char **argv) | |||
| 150 | exit(1); | 150 | exit(1); |
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | memset(&passwd_config, 0, sizeof(passwd_config)); | 153 | memset(&cfg, 0, sizeof(cfg)); |
| 154 | 154 | ||
| 155 | if (options_parse(argc, argv, passwd_options, NULL, &argsused) != 0) { | 155 | if (options_parse(argc, argv, passwd_options, NULL, &argsused) != 0) { |
| 156 | passwd_usage(); | 156 | passwd_usage(); |
| @@ -159,23 +159,23 @@ passwd_main(int argc, char **argv) | |||
| 159 | 159 | ||
| 160 | if (argsused < argc) | 160 | if (argsused < argc) |
| 161 | passwds = &argv[argsused]; | 161 | passwds = &argv[argsused]; |
| 162 | if (passwd_config.salt != NULL) | 162 | if (cfg.salt != NULL) |
| 163 | passed_salt = 1; | 163 | passed_salt = 1; |
| 164 | 164 | ||
| 165 | if (!passwd_config.usecrypt && !passwd_config.use1 && | 165 | if (!cfg.usecrypt && !cfg.use1 && |
| 166 | !passwd_config.useapr1) | 166 | !cfg.useapr1) |
| 167 | passwd_config.usecrypt = 1; /* use default */ | 167 | cfg.usecrypt = 1; /* use default */ |
| 168 | if (passwd_config.usecrypt + passwd_config.use1 + | 168 | if (cfg.usecrypt + cfg.use1 + |
| 169 | passwd_config.useapr1 > 1) | 169 | cfg.useapr1 > 1) |
| 170 | badopt = 1; /* conflicting options */ | 170 | badopt = 1; /* conflicting options */ |
| 171 | 171 | ||
| 172 | /* Reject unsupported algorithms */ | 172 | /* Reject unsupported algorithms */ |
| 173 | #ifdef OPENSSL_NO_DES | 173 | #ifdef OPENSSL_NO_DES |
| 174 | if (passwd_config.usecrypt) | 174 | if (cfg.usecrypt) |
| 175 | badopt = 1; | 175 | badopt = 1; |
| 176 | #endif | 176 | #endif |
| 177 | #ifdef NO_MD5CRYPT_1 | 177 | #ifdef NO_MD5CRYPT_1 |
| 178 | if (passwd_config.use1 || passwd_config.useapr1) | 178 | if (cfg.use1 || cfg.useapr1) |
| 179 | badopt = 1; | 179 | badopt = 1; |
| 180 | #endif | 180 | #endif |
| 181 | 181 | ||
| @@ -188,21 +188,21 @@ passwd_main(int argc, char **argv) | |||
| 188 | goto err; | 188 | goto err; |
| 189 | BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); | 189 | BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); |
| 190 | 190 | ||
| 191 | if (passwd_config.infile != NULL || passwd_config.in_stdin) { | 191 | if (cfg.infile != NULL || cfg.in_stdin) { |
| 192 | if ((in = BIO_new(BIO_s_file())) == NULL) | 192 | if ((in = BIO_new(BIO_s_file())) == NULL) |
| 193 | goto err; | 193 | goto err; |
| 194 | if (passwd_config.infile != NULL) { | 194 | if (cfg.infile != NULL) { |
| 195 | assert(passwd_config.in_stdin == 0); | 195 | assert(cfg.in_stdin == 0); |
| 196 | if (BIO_read_filename(in, passwd_config.infile) <= 0) | 196 | if (BIO_read_filename(in, cfg.infile) <= 0) |
| 197 | goto err; | 197 | goto err; |
| 198 | } else { | 198 | } else { |
| 199 | assert(passwd_config.in_stdin); | 199 | assert(cfg.in_stdin); |
| 200 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 200 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 201 | } | 201 | } |
| 202 | } | 202 | } |
| 203 | if (passwd_config.usecrypt) | 203 | if (cfg.usecrypt) |
| 204 | pw_maxlen = 8; | 204 | pw_maxlen = 8; |
| 205 | else if (passwd_config.use1 || passwd_config.useapr1) | 205 | else if (cfg.use1 || cfg.useapr1) |
| 206 | pw_maxlen = 256;/* arbitrary limit, should be enough for most | 206 | pw_maxlen = 256;/* arbitrary limit, should be enough for most |
| 207 | * passwords */ | 207 | * passwords */ |
| 208 | 208 | ||
| @@ -223,7 +223,7 @@ passwd_main(int argc, char **argv) | |||
| 223 | if (in == NULL) | 223 | if (in == NULL) |
| 224 | if (EVP_read_pw_string(passwd_malloc, | 224 | if (EVP_read_pw_string(passwd_malloc, |
| 225 | passwd_malloc_size, "Password: ", | 225 | passwd_malloc_size, "Password: ", |
| 226 | !(passed_salt || passwd_config.noverify)) != 0) | 226 | !(passed_salt || cfg.noverify)) != 0) |
| 227 | goto err; | 227 | goto err; |
| 228 | passwds[0] = passwd_malloc; | 228 | passwds[0] = passwd_malloc; |
| 229 | } | 229 | } |
| @@ -233,11 +233,11 @@ passwd_main(int argc, char **argv) | |||
| 233 | 233 | ||
| 234 | do { /* loop over list of passwords */ | 234 | do { /* loop over list of passwords */ |
| 235 | passwd = *passwds++; | 235 | passwd = *passwds++; |
| 236 | if (!do_passwd(passed_salt, &passwd_config.salt, | 236 | if (!do_passwd(passed_salt, &cfg.salt, |
| 237 | &salt_malloc, passwd, out, passwd_config.quiet, | 237 | &salt_malloc, passwd, out, cfg.quiet, |
| 238 | passwd_config.table, passwd_config.reverse, | 238 | cfg.table, cfg.reverse, |
| 239 | pw_maxlen, passwd_config.usecrypt, | 239 | pw_maxlen, cfg.usecrypt, |
| 240 | passwd_config.use1, passwd_config.useapr1)) | 240 | cfg.use1, cfg.useapr1)) |
| 241 | goto err; | 241 | goto err; |
| 242 | } while (*passwds != NULL); | 242 | } while (*passwds != NULL); |
| 243 | } else { | 243 | } else { |
| @@ -258,12 +258,12 @@ passwd_main(int argc, char **argv) | |||
| 258 | while ((r > 0) && (!strchr(trash, '\n'))); | 258 | while ((r > 0) && (!strchr(trash, '\n'))); |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | if (!do_passwd(passed_salt, &passwd_config.salt, | 261 | if (!do_passwd(passed_salt, &cfg.salt, |
| 262 | &salt_malloc, passwd, out, | 262 | &salt_malloc, passwd, out, |
| 263 | passwd_config.quiet, passwd_config.table, | 263 | cfg.quiet, cfg.table, |
| 264 | passwd_config.reverse, pw_maxlen, | 264 | cfg.reverse, pw_maxlen, |
| 265 | passwd_config.usecrypt, passwd_config.use1, | 265 | cfg.usecrypt, cfg.use1, |
| 266 | passwd_config.useapr1)) | 266 | cfg.useapr1)) |
| 267 | goto err; | 267 | goto err; |
| 268 | } | 268 | } |
| 269 | done = (r <= 0); | 269 | done = (r <= 0); |
diff --git a/src/usr.bin/openssl/pkcs12.c b/src/usr.bin/openssl/pkcs12.c index 6e671e9275..aedae640e3 100644 --- a/src/usr.bin/openssl/pkcs12.c +++ b/src/usr.bin/openssl/pkcs12.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: pkcs12.c,v 1.24 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: pkcs12.c,v 1.25 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project. | 3 | * project. |
| 4 | */ | 4 | */ |
| @@ -118,16 +118,16 @@ static struct { | |||
| 118 | char *passargin; | 118 | char *passargin; |
| 119 | char *passargout; | 119 | char *passargout; |
| 120 | int twopass; | 120 | int twopass; |
| 121 | } pkcs12_config; | 121 | } cfg; |
| 122 | 122 | ||
| 123 | static int | 123 | static int |
| 124 | pkcs12_opt_canames(char *arg) | 124 | pkcs12_opt_canames(char *arg) |
| 125 | { | 125 | { |
| 126 | if (pkcs12_config.canames == NULL && | 126 | if (cfg.canames == NULL && |
| 127 | (pkcs12_config.canames = sk_OPENSSL_STRING_new_null()) == NULL) | 127 | (cfg.canames = sk_OPENSSL_STRING_new_null()) == NULL) |
| 128 | return (1); | 128 | return (1); |
| 129 | 129 | ||
| 130 | if (!sk_OPENSSL_STRING_push(pkcs12_config.canames, arg)) | 130 | if (!sk_OPENSSL_STRING_push(cfg.canames, arg)) |
| 131 | return (1); | 131 | return (1); |
| 132 | 132 | ||
| 133 | return (0); | 133 | return (0); |
| @@ -136,20 +136,20 @@ pkcs12_opt_canames(char *arg) | |||
| 136 | static int | 136 | static int |
| 137 | pkcs12_opt_cert_pbe(char *arg) | 137 | pkcs12_opt_cert_pbe(char *arg) |
| 138 | { | 138 | { |
| 139 | return (!set_pbe(bio_err, &pkcs12_config.cert_pbe, arg)); | 139 | return (!set_pbe(bio_err, &cfg.cert_pbe, arg)); |
| 140 | } | 140 | } |
| 141 | 141 | ||
| 142 | static int | 142 | static int |
| 143 | pkcs12_opt_key_pbe(char *arg) | 143 | pkcs12_opt_key_pbe(char *arg) |
| 144 | { | 144 | { |
| 145 | return (!set_pbe(bio_err, &pkcs12_config.key_pbe, arg)); | 145 | return (!set_pbe(bio_err, &cfg.key_pbe, arg)); |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | static int | 148 | static int |
| 149 | pkcs12_opt_passarg(char *arg) | 149 | pkcs12_opt_passarg(char *arg) |
| 150 | { | 150 | { |
| 151 | pkcs12_config.passarg = arg; | 151 | cfg.passarg = arg; |
| 152 | pkcs12_config.noprompt = 1; | 152 | cfg.noprompt = 1; |
| 153 | return (0); | 153 | return (0); |
| 154 | } | 154 | } |
| 155 | 155 | ||
| @@ -196,8 +196,8 @@ pkcs12_opt_enc(int argc, char **argv, int *argsused) | |||
| 196 | return (1); | 196 | return (1); |
| 197 | 197 | ||
| 198 | if (strcmp(name, "nodes") == 0) | 198 | if (strcmp(name, "nodes") == 0) |
| 199 | pkcs12_config.enc = NULL; | 199 | cfg.enc = NULL; |
| 200 | else if ((pkcs12_config.enc = get_cipher_by_name(name)) == NULL) | 200 | else if ((cfg.enc = get_cipher_by_name(name)) == NULL) |
| 201 | return (1); | 201 | return (1); |
| 202 | 202 | ||
| 203 | *argsused = 1; | 203 | *argsused = 1; |
| @@ -269,7 +269,7 @@ static const struct option pkcs12_options[] = { | |||
| 269 | .name = "cacerts", | 269 | .name = "cacerts", |
| 270 | .desc = "Only output CA certificates", | 270 | .desc = "Only output CA certificates", |
| 271 | .type = OPTION_VALUE_OR, | 271 | .type = OPTION_VALUE_OR, |
| 272 | .opt.value = &pkcs12_config.options, | 272 | .opt.value = &cfg.options, |
| 273 | .value = CACERTS, | 273 | .value = CACERTS, |
| 274 | }, | 274 | }, |
| 275 | { | 275 | { |
| @@ -277,7 +277,7 @@ static const struct option pkcs12_options[] = { | |||
| 277 | .argname = "file", | 277 | .argname = "file", |
| 278 | .desc = "PEM format file of CA certificates", | 278 | .desc = "PEM format file of CA certificates", |
| 279 | .type = OPTION_ARG, | 279 | .type = OPTION_ARG, |
| 280 | .opt.arg = &pkcs12_config.CAfile, | 280 | .opt.arg = &cfg.CAfile, |
| 281 | }, | 281 | }, |
| 282 | { | 282 | { |
| 283 | .name = "caname", | 283 | .name = "caname", |
| @@ -291,14 +291,14 @@ static const struct option pkcs12_options[] = { | |||
| 291 | .argname = "directory", | 291 | .argname = "directory", |
| 292 | .desc = "PEM format directory of CA certificates", | 292 | .desc = "PEM format directory of CA certificates", |
| 293 | .type = OPTION_ARG, | 293 | .type = OPTION_ARG, |
| 294 | .opt.arg = &pkcs12_config.CApath, | 294 | .opt.arg = &cfg.CApath, |
| 295 | }, | 295 | }, |
| 296 | { | 296 | { |
| 297 | .name = "certfile", | 297 | .name = "certfile", |
| 298 | .argname = "file", | 298 | .argname = "file", |
| 299 | .desc = "Add all certs in file", | 299 | .desc = "Add all certs in file", |
| 300 | .type = OPTION_ARG, | 300 | .type = OPTION_ARG, |
| 301 | .opt.arg = &pkcs12_config.certfile, | 301 | .opt.arg = &cfg.certfile, |
| 302 | }, | 302 | }, |
| 303 | { | 303 | { |
| 304 | .name = "certpbe", | 304 | .name = "certpbe", |
| @@ -311,13 +311,13 @@ static const struct option pkcs12_options[] = { | |||
| 311 | .name = "chain", | 311 | .name = "chain", |
| 312 | .desc = "Add certificate chain", | 312 | .desc = "Add certificate chain", |
| 313 | .type = OPTION_FLAG, | 313 | .type = OPTION_FLAG, |
| 314 | .opt.flag = &pkcs12_config.chain, | 314 | .opt.flag = &cfg.chain, |
| 315 | }, | 315 | }, |
| 316 | { | 316 | { |
| 317 | .name = "clcerts", | 317 | .name = "clcerts", |
| 318 | .desc = "Only output client certificates", | 318 | .desc = "Only output client certificates", |
| 319 | .type = OPTION_VALUE_OR, | 319 | .type = OPTION_VALUE_OR, |
| 320 | .opt.value = &pkcs12_config.options, | 320 | .opt.value = &cfg.options, |
| 321 | .value = CLCERTS, | 321 | .value = CLCERTS, |
| 322 | }, | 322 | }, |
| 323 | { | 323 | { |
| @@ -325,33 +325,33 @@ static const struct option pkcs12_options[] = { | |||
| 325 | .argname = "name", | 325 | .argname = "name", |
| 326 | .desc = "Microsoft CSP name", | 326 | .desc = "Microsoft CSP name", |
| 327 | .type = OPTION_ARG, | 327 | .type = OPTION_ARG, |
| 328 | .opt.arg = &pkcs12_config.csp_name, | 328 | .opt.arg = &cfg.csp_name, |
| 329 | }, | 329 | }, |
| 330 | { | 330 | { |
| 331 | .name = "descert", | 331 | .name = "descert", |
| 332 | .desc = "Encrypt PKCS#12 certificates with triple DES (default RC2-40)", | 332 | .desc = "Encrypt PKCS#12 certificates with triple DES (default RC2-40)", |
| 333 | .type = OPTION_VALUE, | 333 | .type = OPTION_VALUE, |
| 334 | .opt.value = &pkcs12_config.cert_pbe, | 334 | .opt.value = &cfg.cert_pbe, |
| 335 | .value = NID_pbe_WithSHA1And3_Key_TripleDES_CBC, | 335 | .value = NID_pbe_WithSHA1And3_Key_TripleDES_CBC, |
| 336 | }, | 336 | }, |
| 337 | { | 337 | { |
| 338 | .name = "export", | 338 | .name = "export", |
| 339 | .desc = "Output PKCS#12 file", | 339 | .desc = "Output PKCS#12 file", |
| 340 | .type = OPTION_FLAG, | 340 | .type = OPTION_FLAG, |
| 341 | .opt.flag = &pkcs12_config.export_cert, | 341 | .opt.flag = &cfg.export_cert, |
| 342 | }, | 342 | }, |
| 343 | { | 343 | { |
| 344 | .name = "in", | 344 | .name = "in", |
| 345 | .argname = "file", | 345 | .argname = "file", |
| 346 | .desc = "Input filename", | 346 | .desc = "Input filename", |
| 347 | .type = OPTION_ARG, | 347 | .type = OPTION_ARG, |
| 348 | .opt.arg = &pkcs12_config.infile, | 348 | .opt.arg = &cfg.infile, |
| 349 | }, | 349 | }, |
| 350 | { | 350 | { |
| 351 | .name = "info", | 351 | .name = "info", |
| 352 | .desc = "Give info about PKCS#12 structure", | 352 | .desc = "Give info about PKCS#12 structure", |
| 353 | .type = OPTION_VALUE_OR, | 353 | .type = OPTION_VALUE_OR, |
| 354 | .opt.value = &pkcs12_config.options, | 354 | .opt.value = &cfg.options, |
| 355 | .value = INFO, | 355 | .value = INFO, |
| 356 | }, | 356 | }, |
| 357 | { | 357 | { |
| @@ -359,13 +359,13 @@ static const struct option pkcs12_options[] = { | |||
| 359 | .argname = "file", | 359 | .argname = "file", |
| 360 | .desc = "Private key if not infile", | 360 | .desc = "Private key if not infile", |
| 361 | .type = OPTION_ARG, | 361 | .type = OPTION_ARG, |
| 362 | .opt.arg = &pkcs12_config.keyname, | 362 | .opt.arg = &cfg.keyname, |
| 363 | }, | 363 | }, |
| 364 | { | 364 | { |
| 365 | .name = "keyex", | 365 | .name = "keyex", |
| 366 | .desc = "Set MS key exchange type", | 366 | .desc = "Set MS key exchange type", |
| 367 | .type = OPTION_VALUE, | 367 | .type = OPTION_VALUE, |
| 368 | .opt.value = &pkcs12_config.keytype, | 368 | .opt.value = &cfg.keytype, |
| 369 | .value = KEY_EX, | 369 | .value = KEY_EX, |
| 370 | }, | 370 | }, |
| 371 | { | 371 | { |
| @@ -379,27 +379,27 @@ static const struct option pkcs12_options[] = { | |||
| 379 | .name = "keysig", | 379 | .name = "keysig", |
| 380 | .desc = "Set MS key signature type", | 380 | .desc = "Set MS key signature type", |
| 381 | .type = OPTION_VALUE, | 381 | .type = OPTION_VALUE, |
| 382 | .opt.value = &pkcs12_config.keytype, | 382 | .opt.value = &cfg.keytype, |
| 383 | .value = KEY_SIG, | 383 | .value = KEY_SIG, |
| 384 | }, | 384 | }, |
| 385 | { | 385 | { |
| 386 | .name = "LMK", | 386 | .name = "LMK", |
| 387 | .desc = "Add local machine keyset attribute to private key", | 387 | .desc = "Add local machine keyset attribute to private key", |
| 388 | .type = OPTION_FLAG, | 388 | .type = OPTION_FLAG, |
| 389 | .opt.flag = &pkcs12_config.add_lmk, | 389 | .opt.flag = &cfg.add_lmk, |
| 390 | }, | 390 | }, |
| 391 | { | 391 | { |
| 392 | .name = "macalg", | 392 | .name = "macalg", |
| 393 | .argname = "alg", | 393 | .argname = "alg", |
| 394 | .desc = "Digest algorithm used in MAC (default SHA1)", | 394 | .desc = "Digest algorithm used in MAC (default SHA1)", |
| 395 | .type = OPTION_ARG, | 395 | .type = OPTION_ARG, |
| 396 | .opt.arg = &pkcs12_config.macalg, | 396 | .opt.arg = &cfg.macalg, |
| 397 | }, | 397 | }, |
| 398 | { | 398 | { |
| 399 | .name = "maciter", | 399 | .name = "maciter", |
| 400 | .desc = "Use MAC iteration", | 400 | .desc = "Use MAC iteration", |
| 401 | .type = OPTION_VALUE, | 401 | .type = OPTION_VALUE, |
| 402 | .opt.value = &pkcs12_config.maciter, | 402 | .opt.value = &cfg.maciter, |
| 403 | .value = PKCS12_DEFAULT_ITER, | 403 | .value = PKCS12_DEFAULT_ITER, |
| 404 | }, | 404 | }, |
| 405 | { | 405 | { |
| @@ -407,13 +407,13 @@ static const struct option pkcs12_options[] = { | |||
| 407 | .argname = "name", | 407 | .argname = "name", |
| 408 | .desc = "Use name as friendly name", | 408 | .desc = "Use name as friendly name", |
| 409 | .type = OPTION_ARG, | 409 | .type = OPTION_ARG, |
| 410 | .opt.arg = &pkcs12_config.name, | 410 | .opt.arg = &cfg.name, |
| 411 | }, | 411 | }, |
| 412 | { | 412 | { |
| 413 | .name = "nocerts", | 413 | .name = "nocerts", |
| 414 | .desc = "Don't output certificates", | 414 | .desc = "Don't output certificates", |
| 415 | .type = OPTION_VALUE_OR, | 415 | .type = OPTION_VALUE_OR, |
| 416 | .opt.value = &pkcs12_config.options, | 416 | .opt.value = &cfg.options, |
| 417 | .value = NOCERTS, | 417 | .value = NOCERTS, |
| 418 | }, | 418 | }, |
| 419 | { | 419 | { |
| @@ -426,42 +426,42 @@ static const struct option pkcs12_options[] = { | |||
| 426 | .name = "noiter", | 426 | .name = "noiter", |
| 427 | .desc = "Don't use encryption iteration", | 427 | .desc = "Don't use encryption iteration", |
| 428 | .type = OPTION_VALUE, | 428 | .type = OPTION_VALUE, |
| 429 | .opt.value = &pkcs12_config.iter, | 429 | .opt.value = &cfg.iter, |
| 430 | .value = 1, | 430 | .value = 1, |
| 431 | }, | 431 | }, |
| 432 | { | 432 | { |
| 433 | .name = "nokeys", | 433 | .name = "nokeys", |
| 434 | .desc = "Don't output private keys", | 434 | .desc = "Don't output private keys", |
| 435 | .type = OPTION_VALUE_OR, | 435 | .type = OPTION_VALUE_OR, |
| 436 | .opt.value = &pkcs12_config.options, | 436 | .opt.value = &cfg.options, |
| 437 | .value = NOKEYS, | 437 | .value = NOKEYS, |
| 438 | }, | 438 | }, |
| 439 | { | 439 | { |
| 440 | .name = "nomac", | 440 | .name = "nomac", |
| 441 | .desc = "Don't generate MAC", | 441 | .desc = "Don't generate MAC", |
| 442 | .type = OPTION_VALUE, | 442 | .type = OPTION_VALUE, |
| 443 | .opt.value = &pkcs12_config.maciter, | 443 | .opt.value = &cfg.maciter, |
| 444 | .value = -1, | 444 | .value = -1, |
| 445 | }, | 445 | }, |
| 446 | { | 446 | { |
| 447 | .name = "nomaciter", | 447 | .name = "nomaciter", |
| 448 | .desc = "Don't use MAC iteration", | 448 | .desc = "Don't use MAC iteration", |
| 449 | .type = OPTION_VALUE, | 449 | .type = OPTION_VALUE, |
| 450 | .opt.value = &pkcs12_config.maciter, | 450 | .opt.value = &cfg.maciter, |
| 451 | .value = 1, | 451 | .value = 1, |
| 452 | }, | 452 | }, |
| 453 | { | 453 | { |
| 454 | .name = "nomacver", | 454 | .name = "nomacver", |
| 455 | .desc = "Don't verify MAC", | 455 | .desc = "Don't verify MAC", |
| 456 | .type = OPTION_VALUE, | 456 | .type = OPTION_VALUE, |
| 457 | .opt.value = &pkcs12_config.macver, | 457 | .opt.value = &cfg.macver, |
| 458 | .value = 0, | 458 | .value = 0, |
| 459 | }, | 459 | }, |
| 460 | { | 460 | { |
| 461 | .name = "noout", | 461 | .name = "noout", |
| 462 | .desc = "Don't output anything, just verify", | 462 | .desc = "Don't output anything, just verify", |
| 463 | .type = OPTION_VALUE_OR, | 463 | .type = OPTION_VALUE_OR, |
| 464 | .opt.value = &pkcs12_config.options, | 464 | .opt.value = &cfg.options, |
| 465 | .value = (NOKEYS | NOCERTS), | 465 | .value = (NOKEYS | NOCERTS), |
| 466 | }, | 466 | }, |
| 467 | { | 467 | { |
| @@ -469,21 +469,21 @@ static const struct option pkcs12_options[] = { | |||
| 469 | .argname = "file", | 469 | .argname = "file", |
| 470 | .desc = "Output filename", | 470 | .desc = "Output filename", |
| 471 | .type = OPTION_ARG, | 471 | .type = OPTION_ARG, |
| 472 | .opt.arg = &pkcs12_config.outfile, | 472 | .opt.arg = &cfg.outfile, |
| 473 | }, | 473 | }, |
| 474 | { | 474 | { |
| 475 | .name = "passin", | 475 | .name = "passin", |
| 476 | .argname = "arg", | 476 | .argname = "arg", |
| 477 | .desc = "Input file passphrase source", | 477 | .desc = "Input file passphrase source", |
| 478 | .type = OPTION_ARG, | 478 | .type = OPTION_ARG, |
| 479 | .opt.arg = &pkcs12_config.passargin, | 479 | .opt.arg = &cfg.passargin, |
| 480 | }, | 480 | }, |
| 481 | { | 481 | { |
| 482 | .name = "passout", | 482 | .name = "passout", |
| 483 | .argname = "arg", | 483 | .argname = "arg", |
| 484 | .desc = "Output file passphrase source", | 484 | .desc = "Output file passphrase source", |
| 485 | .type = OPTION_ARG, | 485 | .type = OPTION_ARG, |
| 486 | .opt.arg = &pkcs12_config.passargout, | 486 | .opt.arg = &cfg.passargout, |
| 487 | }, | 487 | }, |
| 488 | { | 488 | { |
| 489 | .name = "password", | 489 | .name = "password", |
| @@ -496,7 +496,7 @@ static const struct option pkcs12_options[] = { | |||
| 496 | .name = "twopass", | 496 | .name = "twopass", |
| 497 | .desc = "Separate MAC, encryption passwords", | 497 | .desc = "Separate MAC, encryption passwords", |
| 498 | .type = OPTION_FLAG, | 498 | .type = OPTION_FLAG, |
| 499 | .opt.flag = &pkcs12_config.twopass, | 499 | .opt.flag = &cfg.twopass, |
| 500 | }, | 500 | }, |
| 501 | { NULL }, | 501 | { NULL }, |
| 502 | }; | 502 | }; |
| @@ -541,73 +541,73 @@ pkcs12_main(int argc, char **argv) | |||
| 541 | exit(1); | 541 | exit(1); |
| 542 | } | 542 | } |
| 543 | 543 | ||
| 544 | memset(&pkcs12_config, 0, sizeof(pkcs12_config)); | 544 | memset(&cfg, 0, sizeof(cfg)); |
| 545 | pkcs12_config.cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; | 545 | cfg.cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; |
| 546 | pkcs12_config.enc = EVP_des_ede3_cbc(); | 546 | cfg.enc = EVP_des_ede3_cbc(); |
| 547 | pkcs12_config.iter = PKCS12_DEFAULT_ITER; | 547 | cfg.iter = PKCS12_DEFAULT_ITER; |
| 548 | pkcs12_config.key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; | 548 | cfg.key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; |
| 549 | pkcs12_config.maciter = PKCS12_DEFAULT_ITER; | 549 | cfg.maciter = PKCS12_DEFAULT_ITER; |
| 550 | pkcs12_config.macver = 1; | 550 | cfg.macver = 1; |
| 551 | 551 | ||
| 552 | if (options_parse(argc, argv, pkcs12_options, NULL, NULL) != 0) { | 552 | if (options_parse(argc, argv, pkcs12_options, NULL, NULL) != 0) { |
| 553 | pkcs12_usage(); | 553 | pkcs12_usage(); |
| 554 | goto end; | 554 | goto end; |
| 555 | } | 555 | } |
| 556 | 556 | ||
| 557 | if (pkcs12_config.passarg != NULL) { | 557 | if (cfg.passarg != NULL) { |
| 558 | if (pkcs12_config.export_cert) | 558 | if (cfg.export_cert) |
| 559 | pkcs12_config.passargout = pkcs12_config.passarg; | 559 | cfg.passargout = cfg.passarg; |
| 560 | else | 560 | else |
| 561 | pkcs12_config.passargin = pkcs12_config.passarg; | 561 | cfg.passargin = cfg.passarg; |
| 562 | } | 562 | } |
| 563 | if (!app_passwd(bio_err, pkcs12_config.passargin, | 563 | if (!app_passwd(bio_err, cfg.passargin, |
| 564 | pkcs12_config.passargout, &passin, &passout)) { | 564 | cfg.passargout, &passin, &passout)) { |
| 565 | BIO_printf(bio_err, "Error getting passwords\n"); | 565 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 566 | goto end; | 566 | goto end; |
| 567 | } | 567 | } |
| 568 | if (cpass == NULL) { | 568 | if (cpass == NULL) { |
| 569 | if (pkcs12_config.export_cert) | 569 | if (cfg.export_cert) |
| 570 | cpass = passout; | 570 | cpass = passout; |
| 571 | else | 571 | else |
| 572 | cpass = passin; | 572 | cpass = passin; |
| 573 | } | 573 | } |
| 574 | if (cpass != NULL) { | 574 | if (cpass != NULL) { |
| 575 | mpass = cpass; | 575 | mpass = cpass; |
| 576 | pkcs12_config.noprompt = 1; | 576 | cfg.noprompt = 1; |
| 577 | } else { | 577 | } else { |
| 578 | cpass = pass; | 578 | cpass = pass; |
| 579 | mpass = macpass; | 579 | mpass = macpass; |
| 580 | } | 580 | } |
| 581 | 581 | ||
| 582 | if (pkcs12_config.infile == NULL) | 582 | if (cfg.infile == NULL) |
| 583 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 583 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 584 | else | 584 | else |
| 585 | in = BIO_new_file(pkcs12_config.infile, "rb"); | 585 | in = BIO_new_file(cfg.infile, "rb"); |
| 586 | if (in == NULL) { | 586 | if (in == NULL) { |
| 587 | BIO_printf(bio_err, "Error opening input file %s\n", | 587 | BIO_printf(bio_err, "Error opening input file %s\n", |
| 588 | pkcs12_config.infile ? pkcs12_config.infile : "<stdin>"); | 588 | cfg.infile ? cfg.infile : "<stdin>"); |
| 589 | perror(pkcs12_config.infile); | 589 | perror(cfg.infile); |
| 590 | goto end; | 590 | goto end; |
| 591 | } | 591 | } |
| 592 | 592 | ||
| 593 | if (pkcs12_config.outfile == NULL) { | 593 | if (cfg.outfile == NULL) { |
| 594 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 594 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 595 | } else | 595 | } else |
| 596 | out = BIO_new_file(pkcs12_config.outfile, "wb"); | 596 | out = BIO_new_file(cfg.outfile, "wb"); |
| 597 | if (out == NULL) { | 597 | if (out == NULL) { |
| 598 | BIO_printf(bio_err, "Error opening output file %s\n", | 598 | BIO_printf(bio_err, "Error opening output file %s\n", |
| 599 | pkcs12_config.outfile ? pkcs12_config.outfile : "<stdout>"); | 599 | cfg.outfile ? cfg.outfile : "<stdout>"); |
| 600 | perror(pkcs12_config.outfile); | 600 | perror(cfg.outfile); |
| 601 | goto end; | 601 | goto end; |
| 602 | } | 602 | } |
| 603 | if (pkcs12_config.twopass) { | 603 | if (cfg.twopass) { |
| 604 | if (EVP_read_pw_string(macpass, sizeof macpass, | 604 | if (EVP_read_pw_string(macpass, sizeof macpass, |
| 605 | "Enter MAC Password:", pkcs12_config.export_cert)) { | 605 | "Enter MAC Password:", cfg.export_cert)) { |
| 606 | BIO_printf(bio_err, "Can't read Password\n"); | 606 | BIO_printf(bio_err, "Can't read Password\n"); |
| 607 | goto end; | 607 | goto end; |
| 608 | } | 608 | } |
| 609 | } | 609 | } |
| 610 | if (pkcs12_config.export_cert) { | 610 | if (cfg.export_cert) { |
| 611 | EVP_PKEY *key = NULL; | 611 | EVP_PKEY *key = NULL; |
| 612 | X509 *ucert = NULL, *x = NULL; | 612 | X509 *ucert = NULL, *x = NULL; |
| 613 | STACK_OF(X509) *certs = NULL; | 613 | STACK_OF(X509) *certs = NULL; |
| @@ -615,25 +615,25 @@ pkcs12_main(int argc, char **argv) | |||
| 615 | unsigned char *catmp = NULL; | 615 | unsigned char *catmp = NULL; |
| 616 | int i; | 616 | int i; |
| 617 | 617 | ||
| 618 | if ((pkcs12_config.options & (NOCERTS | NOKEYS)) == | 618 | if ((cfg.options & (NOCERTS | NOKEYS)) == |
| 619 | (NOCERTS | NOKEYS)) { | 619 | (NOCERTS | NOKEYS)) { |
| 620 | BIO_printf(bio_err, "Nothing to do!\n"); | 620 | BIO_printf(bio_err, "Nothing to do!\n"); |
| 621 | goto export_end; | 621 | goto export_end; |
| 622 | } | 622 | } |
| 623 | if (pkcs12_config.options & NOCERTS) | 623 | if (cfg.options & NOCERTS) |
| 624 | pkcs12_config.chain = 0; | 624 | cfg.chain = 0; |
| 625 | 625 | ||
| 626 | if (!(pkcs12_config.options & NOKEYS)) { | 626 | if (!(cfg.options & NOKEYS)) { |
| 627 | key = load_key(bio_err, pkcs12_config.keyname ? | 627 | key = load_key(bio_err, cfg.keyname ? |
| 628 | pkcs12_config.keyname : pkcs12_config.infile, | 628 | cfg.keyname : cfg.infile, |
| 629 | FORMAT_PEM, 1, passin, "private key"); | 629 | FORMAT_PEM, 1, passin, "private key"); |
| 630 | if (!key) | 630 | if (!key) |
| 631 | goto export_end; | 631 | goto export_end; |
| 632 | } | 632 | } |
| 633 | 633 | ||
| 634 | /* Load in all certs in input file */ | 634 | /* Load in all certs in input file */ |
| 635 | if (!(pkcs12_config.options & NOCERTS)) { | 635 | if (!(cfg.options & NOCERTS)) { |
| 636 | certs = load_certs(bio_err, pkcs12_config.infile, | 636 | certs = load_certs(bio_err, cfg.infile, |
| 637 | FORMAT_PEM, NULL, "certificates"); | 637 | FORMAT_PEM, NULL, "certificates"); |
| 638 | if (certs == NULL) | 638 | if (certs == NULL) |
| 639 | goto export_end; | 639 | goto export_end; |
| @@ -661,10 +661,10 @@ pkcs12_main(int argc, char **argv) | |||
| 661 | } | 661 | } |
| 662 | 662 | ||
| 663 | /* Add any more certificates asked for */ | 663 | /* Add any more certificates asked for */ |
| 664 | if (pkcs12_config.certfile != NULL) { | 664 | if (cfg.certfile != NULL) { |
| 665 | STACK_OF(X509) *morecerts = NULL; | 665 | STACK_OF(X509) *morecerts = NULL; |
| 666 | if ((morecerts = load_certs(bio_err, | 666 | if ((morecerts = load_certs(bio_err, |
| 667 | pkcs12_config.certfile, FORMAT_PEM, NULL, | 667 | cfg.certfile, FORMAT_PEM, NULL, |
| 668 | "certificates from certfile")) == NULL) | 668 | "certificates from certfile")) == NULL) |
| 669 | goto export_end; | 669 | goto export_end; |
| 670 | while (sk_X509_num(morecerts) > 0) | 670 | while (sk_X509_num(morecerts) > 0) |
| @@ -674,7 +674,7 @@ pkcs12_main(int argc, char **argv) | |||
| 674 | 674 | ||
| 675 | 675 | ||
| 676 | /* If chaining get chain from user cert */ | 676 | /* If chaining get chain from user cert */ |
| 677 | if (pkcs12_config.chain) { | 677 | if (cfg.chain) { |
| 678 | int vret; | 678 | int vret; |
| 679 | STACK_OF(X509) *chain2; | 679 | STACK_OF(X509) *chain2; |
| 680 | X509_STORE *store = X509_STORE_new(); | 680 | X509_STORE *store = X509_STORE_new(); |
| @@ -684,7 +684,7 @@ pkcs12_main(int argc, char **argv) | |||
| 684 | goto export_end; | 684 | goto export_end; |
| 685 | } | 685 | } |
| 686 | if (!X509_STORE_load_locations(store, | 686 | if (!X509_STORE_load_locations(store, |
| 687 | pkcs12_config.CAfile, pkcs12_config.CApath)) | 687 | cfg.CAfile, cfg.CApath)) |
| 688 | X509_STORE_set_default_paths(store); | 688 | X509_STORE_set_default_paths(store); |
| 689 | 689 | ||
| 690 | vret = get_cert_chain(ucert, store, &chain2); | 690 | vret = get_cert_chain(ucert, store, &chain2); |
| @@ -711,51 +711,51 @@ pkcs12_main(int argc, char **argv) | |||
| 711 | } | 711 | } |
| 712 | /* Add any CA names */ | 712 | /* Add any CA names */ |
| 713 | 713 | ||
| 714 | for (i = 0; i < sk_OPENSSL_STRING_num(pkcs12_config.canames); | 714 | for (i = 0; i < sk_OPENSSL_STRING_num(cfg.canames); |
| 715 | i++) { | 715 | i++) { |
| 716 | catmp = (unsigned char *) sk_OPENSSL_STRING_value( | 716 | catmp = (unsigned char *) sk_OPENSSL_STRING_value( |
| 717 | pkcs12_config.canames, i); | 717 | cfg.canames, i); |
| 718 | X509_alias_set1(sk_X509_value(certs, i), catmp, -1); | 718 | X509_alias_set1(sk_X509_value(certs, i), catmp, -1); |
| 719 | } | 719 | } |
| 720 | 720 | ||
| 721 | if (pkcs12_config.csp_name != NULL && key != NULL) | 721 | if (cfg.csp_name != NULL && key != NULL) |
| 722 | EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name, | 722 | EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name, |
| 723 | MBSTRING_ASC, | 723 | MBSTRING_ASC, |
| 724 | (unsigned char *) pkcs12_config.csp_name, -1); | 724 | (unsigned char *) cfg.csp_name, -1); |
| 725 | 725 | ||
| 726 | if (pkcs12_config.add_lmk && key != NULL) | 726 | if (cfg.add_lmk && key != NULL) |
| 727 | EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, | 727 | EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, |
| 728 | -1); | 728 | -1); |
| 729 | 729 | ||
| 730 | if (!pkcs12_config.noprompt && | 730 | if (!cfg.noprompt && |
| 731 | EVP_read_pw_string(pass, sizeof pass, | 731 | EVP_read_pw_string(pass, sizeof pass, |
| 732 | "Enter Export Password:", 1)) { | 732 | "Enter Export Password:", 1)) { |
| 733 | BIO_printf(bio_err, "Can't read Password\n"); | 733 | BIO_printf(bio_err, "Can't read Password\n"); |
| 734 | goto export_end; | 734 | goto export_end; |
| 735 | } | 735 | } |
| 736 | if (!pkcs12_config.twopass) | 736 | if (!cfg.twopass) |
| 737 | strlcpy(macpass, pass, sizeof macpass); | 737 | strlcpy(macpass, pass, sizeof macpass); |
| 738 | 738 | ||
| 739 | 739 | ||
| 740 | p12 = PKCS12_create(cpass, pkcs12_config.name, key, ucert, | 740 | p12 = PKCS12_create(cpass, cfg.name, key, ucert, |
| 741 | certs, pkcs12_config.key_pbe, pkcs12_config.cert_pbe, | 741 | certs, cfg.key_pbe, cfg.cert_pbe, |
| 742 | pkcs12_config.iter, -1, pkcs12_config.keytype); | 742 | cfg.iter, -1, cfg.keytype); |
| 743 | 743 | ||
| 744 | if (p12 == NULL) { | 744 | if (p12 == NULL) { |
| 745 | ERR_print_errors(bio_err); | 745 | ERR_print_errors(bio_err); |
| 746 | goto export_end; | 746 | goto export_end; |
| 747 | } | 747 | } |
| 748 | if (pkcs12_config.macalg != NULL) { | 748 | if (cfg.macalg != NULL) { |
| 749 | macmd = EVP_get_digestbyname(pkcs12_config.macalg); | 749 | macmd = EVP_get_digestbyname(cfg.macalg); |
| 750 | if (macmd == NULL) { | 750 | if (macmd == NULL) { |
| 751 | BIO_printf(bio_err, | 751 | BIO_printf(bio_err, |
| 752 | "Unknown digest algorithm %s\n", | 752 | "Unknown digest algorithm %s\n", |
| 753 | pkcs12_config.macalg); | 753 | cfg.macalg); |
| 754 | } | 754 | } |
| 755 | } | 755 | } |
| 756 | if (pkcs12_config.maciter != -1) | 756 | if (cfg.maciter != -1) |
| 757 | PKCS12_set_mac(p12, mpass, -1, NULL, 0, | 757 | PKCS12_set_mac(p12, mpass, -1, NULL, 0, |
| 758 | pkcs12_config.maciter, macmd); | 758 | cfg.maciter, macmd); |
| 759 | 759 | ||
| 760 | i2d_PKCS12_bio(out, p12); | 760 | i2d_PKCS12_bio(out, p12); |
| 761 | 761 | ||
| @@ -773,27 +773,27 @@ pkcs12_main(int argc, char **argv) | |||
| 773 | ERR_print_errors(bio_err); | 773 | ERR_print_errors(bio_err); |
| 774 | goto end; | 774 | goto end; |
| 775 | } | 775 | } |
| 776 | if (!pkcs12_config.noprompt && EVP_read_pw_string(pass, sizeof pass, | 776 | if (!cfg.noprompt && EVP_read_pw_string(pass, sizeof pass, |
| 777 | "Enter Import Password:", 0)) { | 777 | "Enter Import Password:", 0)) { |
| 778 | BIO_printf(bio_err, "Can't read Password\n"); | 778 | BIO_printf(bio_err, "Can't read Password\n"); |
| 779 | goto end; | 779 | goto end; |
| 780 | } | 780 | } |
| 781 | 781 | ||
| 782 | if (!pkcs12_config.twopass) | 782 | if (!cfg.twopass) |
| 783 | strlcpy(macpass, pass, sizeof macpass); | 783 | strlcpy(macpass, pass, sizeof macpass); |
| 784 | 784 | ||
| 785 | if ((pkcs12_config.options & INFO) != 0 && PKCS12_mac_present(p12)) { | 785 | if ((cfg.options & INFO) != 0 && PKCS12_mac_present(p12)) { |
| 786 | const ASN1_INTEGER *iter; | 786 | const ASN1_INTEGER *iter; |
| 787 | 787 | ||
| 788 | PKCS12_get0_mac(NULL, NULL, NULL, &iter, p12); | 788 | PKCS12_get0_mac(NULL, NULL, NULL, &iter, p12); |
| 789 | BIO_printf(bio_err, "MAC Iteration %ld\n", | 789 | BIO_printf(bio_err, "MAC Iteration %ld\n", |
| 790 | iter != NULL ? ASN1_INTEGER_get(iter) : 1); | 790 | iter != NULL ? ASN1_INTEGER_get(iter) : 1); |
| 791 | } | 791 | } |
| 792 | if (pkcs12_config.macver) { | 792 | if (cfg.macver) { |
| 793 | /* If we enter empty password try no password first */ | 793 | /* If we enter empty password try no password first */ |
| 794 | if (!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) { | 794 | if (!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) { |
| 795 | /* If mac and crypto pass the same set it to NULL too */ | 795 | /* If mac and crypto pass the same set it to NULL too */ |
| 796 | if (!pkcs12_config.twopass) | 796 | if (!cfg.twopass) |
| 797 | cpass = NULL; | 797 | cpass = NULL; |
| 798 | } else if (!PKCS12_verify_mac(p12, mpass, -1)) { | 798 | } else if (!PKCS12_verify_mac(p12, mpass, -1)) { |
| 799 | BIO_printf(bio_err, | 799 | BIO_printf(bio_err, |
| @@ -803,7 +803,7 @@ pkcs12_main(int argc, char **argv) | |||
| 803 | } | 803 | } |
| 804 | BIO_printf(bio_err, "MAC verified OK\n"); | 804 | BIO_printf(bio_err, "MAC verified OK\n"); |
| 805 | } | 805 | } |
| 806 | if (!dump_certs_keys_p12(out, p12, cpass, -1, pkcs12_config.options, | 806 | if (!dump_certs_keys_p12(out, p12, cpass, -1, cfg.options, |
| 807 | passout)) { | 807 | passout)) { |
| 808 | BIO_printf(bio_err, "Error outputting keys and certificates\n"); | 808 | BIO_printf(bio_err, "Error outputting keys and certificates\n"); |
| 809 | ERR_print_errors(bio_err); | 809 | ERR_print_errors(bio_err); |
| @@ -814,7 +814,7 @@ pkcs12_main(int argc, char **argv) | |||
| 814 | PKCS12_free(p12); | 814 | PKCS12_free(p12); |
| 815 | BIO_free(in); | 815 | BIO_free(in); |
| 816 | BIO_free_all(out); | 816 | BIO_free_all(out); |
| 817 | sk_OPENSSL_STRING_free(pkcs12_config.canames); | 817 | sk_OPENSSL_STRING_free(cfg.canames); |
| 818 | free(passin); | 818 | free(passin); |
| 819 | free(passout); | 819 | free(passout); |
| 820 | 820 | ||
| @@ -907,7 +907,7 @@ dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bag, char *pass, int passlen, | |||
| 907 | if ((pkey = EVP_PKCS82PKEY(p8)) == NULL) | 907 | if ((pkey = EVP_PKCS82PKEY(p8)) == NULL) |
| 908 | return 0; | 908 | return 0; |
| 909 | print_attribs(out, PKCS8_pkey_get0_attrs(p8), "Key Attributes"); | 909 | print_attribs(out, PKCS8_pkey_get0_attrs(p8), "Key Attributes"); |
| 910 | PEM_write_bio_PrivateKey(out, pkey, pkcs12_config.enc, NULL, 0, | 910 | PEM_write_bio_PrivateKey(out, pkey, cfg.enc, NULL, 0, |
| 911 | NULL, pempass); | 911 | NULL, pempass); |
| 912 | EVP_PKEY_free(pkey); | 912 | EVP_PKEY_free(pkey); |
| 913 | break; | 913 | break; |
| @@ -938,7 +938,7 @@ dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bag, char *pass, int passlen, | |||
| 938 | } | 938 | } |
| 939 | print_attribs(out, PKCS8_pkey_get0_attrs(p8), "Key Attributes"); | 939 | print_attribs(out, PKCS8_pkey_get0_attrs(p8), "Key Attributes"); |
| 940 | PKCS8_PRIV_KEY_INFO_free(p8); | 940 | PKCS8_PRIV_KEY_INFO_free(p8); |
| 941 | PEM_write_bio_PrivateKey(out, pkey, pkcs12_config.enc, NULL, 0, | 941 | PEM_write_bio_PrivateKey(out, pkey, cfg.enc, NULL, 0, |
| 942 | NULL, pempass); | 942 | NULL, pempass); |
| 943 | EVP_PKEY_free(pkey); | 943 | EVP_PKEY_free(pkey); |
| 944 | break; | 944 | break; |
diff --git a/src/usr.bin/openssl/pkcs7.c b/src/usr.bin/openssl/pkcs7.c index b0acf3fd98..4e66855a8d 100644 --- a/src/usr.bin/openssl/pkcs7.c +++ b/src/usr.bin/openssl/pkcs7.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: pkcs7.c,v 1.13 2023/02/08 07:59:24 tb Exp $ */ | 1 | /* $OpenBSD: pkcs7.c,v 1.14 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -79,7 +79,7 @@ static struct { | |||
| 79 | int p7_print; | 79 | int p7_print; |
| 80 | int print_certs; | 80 | int print_certs; |
| 81 | int text; | 81 | int text; |
| 82 | } pkcs7_config; | 82 | } cfg; |
| 83 | 83 | ||
| 84 | static const struct option pkcs7_options[] = { | 84 | static const struct option pkcs7_options[] = { |
| 85 | { | 85 | { |
| @@ -87,52 +87,52 @@ static const struct option pkcs7_options[] = { | |||
| 87 | .argname = "file", | 87 | .argname = "file", |
| 88 | .desc = "Input file (default stdin)", | 88 | .desc = "Input file (default stdin)", |
| 89 | .type = OPTION_ARG, | 89 | .type = OPTION_ARG, |
| 90 | .opt.arg = &pkcs7_config.infile, | 90 | .opt.arg = &cfg.infile, |
| 91 | }, | 91 | }, |
| 92 | { | 92 | { |
| 93 | .name = "inform", | 93 | .name = "inform", |
| 94 | .argname = "format", | 94 | .argname = "format", |
| 95 | .desc = "Input format (DER or PEM (default))", | 95 | .desc = "Input format (DER or PEM (default))", |
| 96 | .type = OPTION_ARG_FORMAT, | 96 | .type = OPTION_ARG_FORMAT, |
| 97 | .opt.value = &pkcs7_config.informat, | 97 | .opt.value = &cfg.informat, |
| 98 | }, | 98 | }, |
| 99 | { | 99 | { |
| 100 | .name = "noout", | 100 | .name = "noout", |
| 101 | .desc = "Do not output encoded version of PKCS#7 structure", | 101 | .desc = "Do not output encoded version of PKCS#7 structure", |
| 102 | .type = OPTION_FLAG, | 102 | .type = OPTION_FLAG, |
| 103 | .opt.flag = &pkcs7_config.noout, | 103 | .opt.flag = &cfg.noout, |
| 104 | }, | 104 | }, |
| 105 | { | 105 | { |
| 106 | .name = "out", | 106 | .name = "out", |
| 107 | .argname = "file", | 107 | .argname = "file", |
| 108 | .desc = "Output file (default stdout)", | 108 | .desc = "Output file (default stdout)", |
| 109 | .type = OPTION_ARG, | 109 | .type = OPTION_ARG, |
| 110 | .opt.arg = &pkcs7_config.outfile, | 110 | .opt.arg = &cfg.outfile, |
| 111 | }, | 111 | }, |
| 112 | { | 112 | { |
| 113 | .name = "outform", | 113 | .name = "outform", |
| 114 | .argname = "format", | 114 | .argname = "format", |
| 115 | .desc = "Output format (DER or PEM (default))", | 115 | .desc = "Output format (DER or PEM (default))", |
| 116 | .type = OPTION_ARG_FORMAT, | 116 | .type = OPTION_ARG_FORMAT, |
| 117 | .opt.value = &pkcs7_config.outformat, | 117 | .opt.value = &cfg.outformat, |
| 118 | }, | 118 | }, |
| 119 | { | 119 | { |
| 120 | .name = "print", | 120 | .name = "print", |
| 121 | .desc = "Output ASN.1 representation of PKCS#7 structure", | 121 | .desc = "Output ASN.1 representation of PKCS#7 structure", |
| 122 | .type = OPTION_FLAG, | 122 | .type = OPTION_FLAG, |
| 123 | .opt.flag = &pkcs7_config.p7_print, | 123 | .opt.flag = &cfg.p7_print, |
| 124 | }, | 124 | }, |
| 125 | { | 125 | { |
| 126 | .name = "print_certs", | 126 | .name = "print_certs", |
| 127 | .desc = "Print out any certificates or CRLs contained in file", | 127 | .desc = "Print out any certificates or CRLs contained in file", |
| 128 | .type = OPTION_FLAG, | 128 | .type = OPTION_FLAG, |
| 129 | .opt.flag = &pkcs7_config.print_certs, | 129 | .opt.flag = &cfg.print_certs, |
| 130 | }, | 130 | }, |
| 131 | { | 131 | { |
| 132 | .name = "text", | 132 | .name = "text", |
| 133 | .desc = "Print out full certificate details", | 133 | .desc = "Print out full certificate details", |
| 134 | .type = OPTION_FLAG, | 134 | .type = OPTION_FLAG, |
| 135 | .opt.flag = &pkcs7_config.text, | 135 | .opt.flag = &cfg.text, |
| 136 | }, | 136 | }, |
| 137 | { NULL }, | 137 | { NULL }, |
| 138 | }; | 138 | }; |
| @@ -159,10 +159,10 @@ pkcs7_main(int argc, char **argv) | |||
| 159 | exit(1); | 159 | exit(1); |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | memset(&pkcs7_config, 0, sizeof(pkcs7_config)); | 162 | memset(&cfg, 0, sizeof(cfg)); |
| 163 | 163 | ||
| 164 | pkcs7_config.informat = FORMAT_PEM; | 164 | cfg.informat = FORMAT_PEM; |
| 165 | pkcs7_config.outformat = FORMAT_PEM; | 165 | cfg.outformat = FORMAT_PEM; |
| 166 | 166 | ||
| 167 | if (options_parse(argc, argv, pkcs7_options, NULL, NULL) != 0) { | 167 | if (options_parse(argc, argv, pkcs7_options, NULL, NULL) != 0) { |
| 168 | pkcs7_usage(); | 168 | pkcs7_usage(); |
| @@ -175,18 +175,18 @@ pkcs7_main(int argc, char **argv) | |||
| 175 | ERR_print_errors(bio_err); | 175 | ERR_print_errors(bio_err); |
| 176 | goto end; | 176 | goto end; |
| 177 | } | 177 | } |
| 178 | if (pkcs7_config.infile == NULL) | 178 | if (cfg.infile == NULL) |
| 179 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 179 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 180 | else { | 180 | else { |
| 181 | if (BIO_read_filename(in, pkcs7_config.infile) <= 0) { | 181 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 182 | perror(pkcs7_config.infile); | 182 | perror(cfg.infile); |
| 183 | goto end; | 183 | goto end; |
| 184 | } | 184 | } |
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | if (pkcs7_config.informat == FORMAT_ASN1) | 187 | if (cfg.informat == FORMAT_ASN1) |
| 188 | p7 = d2i_PKCS7_bio(in, NULL); | 188 | p7 = d2i_PKCS7_bio(in, NULL); |
| 189 | else if (pkcs7_config.informat == FORMAT_PEM) | 189 | else if (cfg.informat == FORMAT_PEM) |
| 190 | p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); | 190 | p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); |
| 191 | else { | 191 | else { |
| 192 | BIO_printf(bio_err, "bad input format specified for pkcs7 object\n"); | 192 | BIO_printf(bio_err, "bad input format specified for pkcs7 object\n"); |
| @@ -197,19 +197,19 @@ pkcs7_main(int argc, char **argv) | |||
| 197 | ERR_print_errors(bio_err); | 197 | ERR_print_errors(bio_err); |
| 198 | goto end; | 198 | goto end; |
| 199 | } | 199 | } |
| 200 | if (pkcs7_config.outfile == NULL) { | 200 | if (cfg.outfile == NULL) { |
| 201 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 201 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 202 | } else { | 202 | } else { |
| 203 | if (BIO_write_filename(out, pkcs7_config.outfile) <= 0) { | 203 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 204 | perror(pkcs7_config.outfile); | 204 | perror(cfg.outfile); |
| 205 | goto end; | 205 | goto end; |
| 206 | } | 206 | } |
| 207 | } | 207 | } |
| 208 | 208 | ||
| 209 | if (pkcs7_config.p7_print) | 209 | if (cfg.p7_print) |
| 210 | PKCS7_print_ctx(out, p7, 0, NULL); | 210 | PKCS7_print_ctx(out, p7, 0, NULL); |
| 211 | 211 | ||
| 212 | if (pkcs7_config.print_certs) { | 212 | if (cfg.print_certs) { |
| 213 | STACK_OF(X509) * certs = NULL; | 213 | STACK_OF(X509) * certs = NULL; |
| 214 | STACK_OF(X509_CRL) * crls = NULL; | 214 | STACK_OF(X509_CRL) * crls = NULL; |
| 215 | 215 | ||
| @@ -236,12 +236,12 @@ pkcs7_main(int argc, char **argv) | |||
| 236 | 236 | ||
| 237 | for (i = 0; i < sk_X509_num(certs); i++) { | 237 | for (i = 0; i < sk_X509_num(certs); i++) { |
| 238 | x = sk_X509_value(certs, i); | 238 | x = sk_X509_value(certs, i); |
| 239 | if (pkcs7_config.text) | 239 | if (cfg.text) |
| 240 | X509_print(out, x); | 240 | X509_print(out, x); |
| 241 | else | 241 | else |
| 242 | dump_cert_text(out, x); | 242 | dump_cert_text(out, x); |
| 243 | 243 | ||
| 244 | if (!pkcs7_config.noout) | 244 | if (!cfg.noout) |
| 245 | PEM_write_bio_X509(out, x); | 245 | PEM_write_bio_X509(out, x); |
| 246 | BIO_puts(out, "\n"); | 246 | BIO_puts(out, "\n"); |
| 247 | } | 247 | } |
| @@ -254,7 +254,7 @@ pkcs7_main(int argc, char **argv) | |||
| 254 | 254 | ||
| 255 | X509_CRL_print(out, crl); | 255 | X509_CRL_print(out, crl); |
| 256 | 256 | ||
| 257 | if (!pkcs7_config.noout) | 257 | if (!cfg.noout) |
| 258 | PEM_write_bio_X509_CRL(out, crl); | 258 | PEM_write_bio_X509_CRL(out, crl); |
| 259 | BIO_puts(out, "\n"); | 259 | BIO_puts(out, "\n"); |
| 260 | } | 260 | } |
| @@ -262,10 +262,10 @@ pkcs7_main(int argc, char **argv) | |||
| 262 | ret = 0; | 262 | ret = 0; |
| 263 | goto end; | 263 | goto end; |
| 264 | } | 264 | } |
| 265 | if (!pkcs7_config.noout) { | 265 | if (!cfg.noout) { |
| 266 | if (pkcs7_config.outformat == FORMAT_ASN1) | 266 | if (cfg.outformat == FORMAT_ASN1) |
| 267 | i = i2d_PKCS7_bio(out, p7); | 267 | i = i2d_PKCS7_bio(out, p7); |
| 268 | else if (pkcs7_config.outformat == FORMAT_PEM) | 268 | else if (cfg.outformat == FORMAT_PEM) |
| 269 | i = PEM_write_bio_PKCS7(out, p7); | 269 | i = PEM_write_bio_PKCS7(out, p7); |
| 270 | else { | 270 | else { |
| 271 | BIO_printf(bio_err, "bad output format specified for outfile\n"); | 271 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
diff --git a/src/usr.bin/openssl/pkcs8.c b/src/usr.bin/openssl/pkcs8.c index ea12230006..d78202e03f 100644 --- a/src/usr.bin/openssl/pkcs8.c +++ b/src/usr.bin/openssl/pkcs8.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: pkcs8.c,v 1.15 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: pkcs8.c,v 1.16 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 1999-2004. | 3 | * project 1999-2004. |
| 4 | */ | 4 | */ |
| @@ -79,12 +79,12 @@ static struct { | |||
| 79 | char *passargout; | 79 | char *passargout; |
| 80 | int pbe_nid; | 80 | int pbe_nid; |
| 81 | int topk8; | 81 | int topk8; |
| 82 | } pkcs8_config; | 82 | } cfg; |
| 83 | 83 | ||
| 84 | static int | 84 | static int |
| 85 | pkcs8_opt_v1(char *arg) | 85 | pkcs8_opt_v1(char *arg) |
| 86 | { | 86 | { |
| 87 | if ((pkcs8_config.pbe_nid = OBJ_txt2nid(arg)) == NID_undef) { | 87 | if ((cfg.pbe_nid = OBJ_txt2nid(arg)) == NID_undef) { |
| 88 | fprintf(stderr, "Unknown PBE algorithm '%s'\n", arg); | 88 | fprintf(stderr, "Unknown PBE algorithm '%s'\n", arg); |
| 89 | return (1); | 89 | return (1); |
| 90 | } | 90 | } |
| @@ -95,7 +95,7 @@ pkcs8_opt_v1(char *arg) | |||
| 95 | static int | 95 | static int |
| 96 | pkcs8_opt_v2(char *arg) | 96 | pkcs8_opt_v2(char *arg) |
| 97 | { | 97 | { |
| 98 | if ((pkcs8_config.cipher = EVP_get_cipherbyname(arg)) == NULL) { | 98 | if ((cfg.cipher = EVP_get_cipherbyname(arg)) == NULL) { |
| 99 | fprintf(stderr, "Unknown cipher '%s'\n", arg); | 99 | fprintf(stderr, "Unknown cipher '%s'\n", arg); |
| 100 | return (1); | 100 | return (1); |
| 101 | } | 101 | } |
| @@ -109,62 +109,62 @@ static const struct option pkcs8_options[] = { | |||
| 109 | .argname = "file", | 109 | .argname = "file", |
| 110 | .desc = "Input file (default stdin)", | 110 | .desc = "Input file (default stdin)", |
| 111 | .type = OPTION_ARG, | 111 | .type = OPTION_ARG, |
| 112 | .opt.arg = &pkcs8_config.infile, | 112 | .opt.arg = &cfg.infile, |
| 113 | }, | 113 | }, |
| 114 | { | 114 | { |
| 115 | .name = "inform", | 115 | .name = "inform", |
| 116 | .argname = "der | pem", | 116 | .argname = "der | pem", |
| 117 | .desc = "Input format (default PEM)", | 117 | .desc = "Input format (default PEM)", |
| 118 | .type = OPTION_ARG_FORMAT, | 118 | .type = OPTION_ARG_FORMAT, |
| 119 | .opt.value = &pkcs8_config.informat, | 119 | .opt.value = &cfg.informat, |
| 120 | }, | 120 | }, |
| 121 | { | 121 | { |
| 122 | .name = "nocrypt", | 122 | .name = "nocrypt", |
| 123 | .desc = "Use or expect unencrypted private key", | 123 | .desc = "Use or expect unencrypted private key", |
| 124 | .type = OPTION_FLAG, | 124 | .type = OPTION_FLAG, |
| 125 | .opt.flag = &pkcs8_config.nocrypt, | 125 | .opt.flag = &cfg.nocrypt, |
| 126 | }, | 126 | }, |
| 127 | { | 127 | { |
| 128 | .name = "noiter", | 128 | .name = "noiter", |
| 129 | .desc = "Use 1 as iteration count", | 129 | .desc = "Use 1 as iteration count", |
| 130 | .type = OPTION_VALUE, | 130 | .type = OPTION_VALUE, |
| 131 | .value = 1, | 131 | .value = 1, |
| 132 | .opt.value = &pkcs8_config.iter, | 132 | .opt.value = &cfg.iter, |
| 133 | }, | 133 | }, |
| 134 | { | 134 | { |
| 135 | .name = "out", | 135 | .name = "out", |
| 136 | .argname = "file", | 136 | .argname = "file", |
| 137 | .desc = "Output file (default stdout)", | 137 | .desc = "Output file (default stdout)", |
| 138 | .type = OPTION_ARG, | 138 | .type = OPTION_ARG, |
| 139 | .opt.arg = &pkcs8_config.outfile, | 139 | .opt.arg = &cfg.outfile, |
| 140 | }, | 140 | }, |
| 141 | { | 141 | { |
| 142 | .name = "outform", | 142 | .name = "outform", |
| 143 | .argname = "der | pem", | 143 | .argname = "der | pem", |
| 144 | .desc = "Output format (default PEM)", | 144 | .desc = "Output format (default PEM)", |
| 145 | .type = OPTION_ARG_FORMAT, | 145 | .type = OPTION_ARG_FORMAT, |
| 146 | .opt.value = &pkcs8_config.outformat, | 146 | .opt.value = &cfg.outformat, |
| 147 | }, | 147 | }, |
| 148 | { | 148 | { |
| 149 | .name = "passin", | 149 | .name = "passin", |
| 150 | .argname = "source", | 150 | .argname = "source", |
| 151 | .desc = "Input file passphrase source", | 151 | .desc = "Input file passphrase source", |
| 152 | .type = OPTION_ARG, | 152 | .type = OPTION_ARG, |
| 153 | .opt.arg = &pkcs8_config.passargin, | 153 | .opt.arg = &cfg.passargin, |
| 154 | }, | 154 | }, |
| 155 | { | 155 | { |
| 156 | .name = "passout", | 156 | .name = "passout", |
| 157 | .argname = "source", | 157 | .argname = "source", |
| 158 | .desc = "Output file passphrase source", | 158 | .desc = "Output file passphrase source", |
| 159 | .type = OPTION_ARG, | 159 | .type = OPTION_ARG, |
| 160 | .opt.arg = &pkcs8_config.passargout, | 160 | .opt.arg = &cfg.passargout, |
| 161 | }, | 161 | }, |
| 162 | { | 162 | { |
| 163 | .name = "topk8", | 163 | .name = "topk8", |
| 164 | .desc = "Read traditional format key and write PKCS#8 format" | 164 | .desc = "Read traditional format key and write PKCS#8 format" |
| 165 | " key", | 165 | " key", |
| 166 | .type = OPTION_FLAG, | 166 | .type = OPTION_FLAG, |
| 167 | .opt.flag = &pkcs8_config.topk8, | 167 | .opt.flag = &cfg.topk8, |
| 168 | }, | 168 | }, |
| 169 | { | 169 | { |
| 170 | .name = "v1", | 170 | .name = "v1", |
| @@ -208,48 +208,48 @@ pkcs8_main(int argc, char **argv) | |||
| 208 | exit(1); | 208 | exit(1); |
| 209 | } | 209 | } |
| 210 | 210 | ||
| 211 | memset(&pkcs8_config, 0, sizeof(pkcs8_config)); | 211 | memset(&cfg, 0, sizeof(cfg)); |
| 212 | 212 | ||
| 213 | pkcs8_config.iter = PKCS12_DEFAULT_ITER; | 213 | cfg.iter = PKCS12_DEFAULT_ITER; |
| 214 | pkcs8_config.informat = FORMAT_PEM; | 214 | cfg.informat = FORMAT_PEM; |
| 215 | pkcs8_config.outformat = FORMAT_PEM; | 215 | cfg.outformat = FORMAT_PEM; |
| 216 | pkcs8_config.pbe_nid = -1; | 216 | cfg.pbe_nid = -1; |
| 217 | 217 | ||
| 218 | if (options_parse(argc, argv, pkcs8_options, NULL, NULL) != 0) { | 218 | if (options_parse(argc, argv, pkcs8_options, NULL, NULL) != 0) { |
| 219 | pkcs8_usage(); | 219 | pkcs8_usage(); |
| 220 | return (1); | 220 | return (1); |
| 221 | } | 221 | } |
| 222 | 222 | ||
| 223 | if (!app_passwd(bio_err, pkcs8_config.passargin, | 223 | if (!app_passwd(bio_err, cfg.passargin, |
| 224 | pkcs8_config.passargout, &passin, &passout)) { | 224 | cfg.passargout, &passin, &passout)) { |
| 225 | BIO_printf(bio_err, "Error getting passwords\n"); | 225 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 226 | goto end; | 226 | goto end; |
| 227 | } | 227 | } |
| 228 | if ((pkcs8_config.pbe_nid == -1) && !pkcs8_config.cipher) | 228 | if ((cfg.pbe_nid == -1) && !cfg.cipher) |
| 229 | pkcs8_config.pbe_nid = NID_pbeWithMD5AndDES_CBC; | 229 | cfg.pbe_nid = NID_pbeWithMD5AndDES_CBC; |
| 230 | 230 | ||
| 231 | if (pkcs8_config.infile) { | 231 | if (cfg.infile) { |
| 232 | if (!(in = BIO_new_file(pkcs8_config.infile, "rb"))) { | 232 | if (!(in = BIO_new_file(cfg.infile, "rb"))) { |
| 233 | BIO_printf(bio_err, | 233 | BIO_printf(bio_err, |
| 234 | "Can't open input file '%s'\n", | 234 | "Can't open input file '%s'\n", |
| 235 | pkcs8_config.infile); | 235 | cfg.infile); |
| 236 | goto end; | 236 | goto end; |
| 237 | } | 237 | } |
| 238 | } else | 238 | } else |
| 239 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 239 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 240 | 240 | ||
| 241 | if (pkcs8_config.outfile) { | 241 | if (cfg.outfile) { |
| 242 | if (!(out = BIO_new_file(pkcs8_config.outfile, "wb"))) { | 242 | if (!(out = BIO_new_file(cfg.outfile, "wb"))) { |
| 243 | BIO_printf(bio_err, "Can't open output file '%s'\n", | 243 | BIO_printf(bio_err, "Can't open output file '%s'\n", |
| 244 | pkcs8_config.outfile); | 244 | cfg.outfile); |
| 245 | goto end; | 245 | goto end; |
| 246 | } | 246 | } |
| 247 | } else { | 247 | } else { |
| 248 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 248 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 249 | } | 249 | } |
| 250 | if (pkcs8_config.topk8) { | 250 | if (cfg.topk8) { |
| 251 | pkey = load_key(bio_err, pkcs8_config.infile, | 251 | pkey = load_key(bio_err, cfg.infile, |
| 252 | pkcs8_config.informat, 1, passin, "key"); | 252 | cfg.informat, 1, passin, "key"); |
| 253 | if (!pkey) | 253 | if (!pkey) |
| 254 | goto end; | 254 | goto end; |
| 255 | if (!(p8inf = EVP_PKEY2PKCS8(pkey))) { | 255 | if (!(p8inf = EVP_PKEY2PKCS8(pkey))) { |
| @@ -257,10 +257,10 @@ pkcs8_main(int argc, char **argv) | |||
| 257 | ERR_print_errors(bio_err); | 257 | ERR_print_errors(bio_err); |
| 258 | goto end; | 258 | goto end; |
| 259 | } | 259 | } |
| 260 | if (pkcs8_config.nocrypt) { | 260 | if (cfg.nocrypt) { |
| 261 | if (pkcs8_config.outformat == FORMAT_PEM) | 261 | if (cfg.outformat == FORMAT_PEM) |
| 262 | PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf); | 262 | PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf); |
| 263 | else if (pkcs8_config.outformat == FORMAT_ASN1) | 263 | else if (cfg.outformat == FORMAT_ASN1) |
| 264 | i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf); | 264 | i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf); |
| 265 | else { | 265 | else { |
| 266 | BIO_printf(bio_err, | 266 | BIO_printf(bio_err, |
| @@ -276,16 +276,16 @@ pkcs8_main(int argc, char **argv) | |||
| 276 | "Enter Encryption Password:", 1)) | 276 | "Enter Encryption Password:", 1)) |
| 277 | goto end; | 277 | goto end; |
| 278 | } | 278 | } |
| 279 | if (!(p8 = PKCS8_encrypt(pkcs8_config.pbe_nid, | 279 | if (!(p8 = PKCS8_encrypt(cfg.pbe_nid, |
| 280 | pkcs8_config.cipher, p8pass, strlen(p8pass), | 280 | cfg.cipher, p8pass, strlen(p8pass), |
| 281 | NULL, 0, pkcs8_config.iter, p8inf))) { | 281 | NULL, 0, cfg.iter, p8inf))) { |
| 282 | BIO_printf(bio_err, "Error encrypting key\n"); | 282 | BIO_printf(bio_err, "Error encrypting key\n"); |
| 283 | ERR_print_errors(bio_err); | 283 | ERR_print_errors(bio_err); |
| 284 | goto end; | 284 | goto end; |
| 285 | } | 285 | } |
| 286 | if (pkcs8_config.outformat == FORMAT_PEM) | 286 | if (cfg.outformat == FORMAT_PEM) |
| 287 | PEM_write_bio_PKCS8(out, p8); | 287 | PEM_write_bio_PKCS8(out, p8); |
| 288 | else if (pkcs8_config.outformat == FORMAT_ASN1) | 288 | else if (cfg.outformat == FORMAT_ASN1) |
| 289 | i2d_PKCS8_bio(out, p8); | 289 | i2d_PKCS8_bio(out, p8); |
| 290 | else { | 290 | else { |
| 291 | BIO_printf(bio_err, | 291 | BIO_printf(bio_err, |
| @@ -297,20 +297,20 @@ pkcs8_main(int argc, char **argv) | |||
| 297 | ret = 0; | 297 | ret = 0; |
| 298 | goto end; | 298 | goto end; |
| 299 | } | 299 | } |
| 300 | if (pkcs8_config.nocrypt) { | 300 | if (cfg.nocrypt) { |
| 301 | if (pkcs8_config.informat == FORMAT_PEM) | 301 | if (cfg.informat == FORMAT_PEM) |
| 302 | p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL, | 302 | p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL, |
| 303 | NULL, NULL); | 303 | NULL, NULL); |
| 304 | else if (pkcs8_config.informat == FORMAT_ASN1) | 304 | else if (cfg.informat == FORMAT_ASN1) |
| 305 | p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL); | 305 | p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL); |
| 306 | else { | 306 | else { |
| 307 | BIO_printf(bio_err, "Bad format specified for key\n"); | 307 | BIO_printf(bio_err, "Bad format specified for key\n"); |
| 308 | goto end; | 308 | goto end; |
| 309 | } | 309 | } |
| 310 | } else { | 310 | } else { |
| 311 | if (pkcs8_config.informat == FORMAT_PEM) | 311 | if (cfg.informat == FORMAT_PEM) |
| 312 | p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL); | 312 | p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL); |
| 313 | else if (pkcs8_config.informat == FORMAT_ASN1) | 313 | else if (cfg.informat == FORMAT_ASN1) |
| 314 | p8 = d2i_PKCS8_bio(in, NULL); | 314 | p8 = d2i_PKCS8_bio(in, NULL); |
| 315 | else { | 315 | else { |
| 316 | BIO_printf(bio_err, "Bad format specified for key\n"); | 316 | BIO_printf(bio_err, "Bad format specified for key\n"); |
| @@ -342,10 +342,10 @@ pkcs8_main(int argc, char **argv) | |||
| 342 | ERR_print_errors(bio_err); | 342 | ERR_print_errors(bio_err); |
| 343 | goto end; | 343 | goto end; |
| 344 | } | 344 | } |
| 345 | if (pkcs8_config.outformat == FORMAT_PEM) | 345 | if (cfg.outformat == FORMAT_PEM) |
| 346 | PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, | 346 | PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, |
| 347 | passout); | 347 | passout); |
| 348 | else if (pkcs8_config.outformat == FORMAT_ASN1) | 348 | else if (cfg.outformat == FORMAT_ASN1) |
| 349 | i2d_PrivateKey_bio(out, pkey); | 349 | i2d_PrivateKey_bio(out, pkey); |
| 350 | else { | 350 | else { |
| 351 | BIO_printf(bio_err, "Bad format specified for key\n"); | 351 | BIO_printf(bio_err, "Bad format specified for key\n"); |
diff --git a/src/usr.bin/openssl/pkey.c b/src/usr.bin/openssl/pkey.c index 2d9b69f5c3..cb558f5ac8 100644 --- a/src/usr.bin/openssl/pkey.c +++ b/src/usr.bin/openssl/pkey.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: pkey.c,v 1.18 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: pkey.c,v 1.19 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2006 | 3 | * project 2006 |
| 4 | */ | 4 | */ |
| @@ -80,7 +80,7 @@ static struct { | |||
| 80 | int pubout; | 80 | int pubout; |
| 81 | int pubtext; | 81 | int pubtext; |
| 82 | int text; | 82 | int text; |
| 83 | } pkey_config; | 83 | } cfg; |
| 84 | 84 | ||
| 85 | static int | 85 | static int |
| 86 | pkey_opt_cipher(int argc, char **argv, int *argsused) | 86 | pkey_opt_cipher(int argc, char **argv, int *argsused) |
| @@ -90,7 +90,7 @@ pkey_opt_cipher(int argc, char **argv, int *argsused) | |||
| 90 | if (*name++ != '-') | 90 | if (*name++ != '-') |
| 91 | return (1); | 91 | return (1); |
| 92 | 92 | ||
| 93 | if ((pkey_config.cipher = EVP_get_cipherbyname(name)) == NULL) { | 93 | if ((cfg.cipher = EVP_get_cipherbyname(name)) == NULL) { |
| 94 | BIO_printf(bio_err, "Unknown cipher %s\n", name); | 94 | BIO_printf(bio_err, "Unknown cipher %s\n", name); |
| 95 | return (1); | 95 | return (1); |
| 96 | } | 96 | } |
| @@ -104,87 +104,87 @@ static const struct option pkey_options[] = { | |||
| 104 | .name = "check", | 104 | .name = "check", |
| 105 | .desc = "Check validity of key", | 105 | .desc = "Check validity of key", |
| 106 | .type = OPTION_FLAG, | 106 | .type = OPTION_FLAG, |
| 107 | .opt.flag = &pkey_config.check, | 107 | .opt.flag = &cfg.check, |
| 108 | }, | 108 | }, |
| 109 | { | 109 | { |
| 110 | .name = "in", | 110 | .name = "in", |
| 111 | .argname = "file", | 111 | .argname = "file", |
| 112 | .desc = "Input file (default stdin)", | 112 | .desc = "Input file (default stdin)", |
| 113 | .type = OPTION_ARG, | 113 | .type = OPTION_ARG, |
| 114 | .opt.arg = &pkey_config.infile, | 114 | .opt.arg = &cfg.infile, |
| 115 | }, | 115 | }, |
| 116 | { | 116 | { |
| 117 | .name = "inform", | 117 | .name = "inform", |
| 118 | .argname = "format", | 118 | .argname = "format", |
| 119 | .desc = "Input format (DER or PEM (default))", | 119 | .desc = "Input format (DER or PEM (default))", |
| 120 | .type = OPTION_ARG_FORMAT, | 120 | .type = OPTION_ARG_FORMAT, |
| 121 | .opt.value = &pkey_config.informat, | 121 | .opt.value = &cfg.informat, |
| 122 | }, | 122 | }, |
| 123 | { | 123 | { |
| 124 | .name = "noout", | 124 | .name = "noout", |
| 125 | .desc = "Do not print encoded version of the key", | 125 | .desc = "Do not print encoded version of the key", |
| 126 | .type = OPTION_FLAG, | 126 | .type = OPTION_FLAG, |
| 127 | .opt.flag = &pkey_config.noout, | 127 | .opt.flag = &cfg.noout, |
| 128 | }, | 128 | }, |
| 129 | { | 129 | { |
| 130 | .name = "out", | 130 | .name = "out", |
| 131 | .argname = "file", | 131 | .argname = "file", |
| 132 | .desc = "Output file (default stdout)", | 132 | .desc = "Output file (default stdout)", |
| 133 | .type = OPTION_ARG, | 133 | .type = OPTION_ARG, |
| 134 | .opt.arg = &pkey_config.outfile, | 134 | .opt.arg = &cfg.outfile, |
| 135 | }, | 135 | }, |
| 136 | { | 136 | { |
| 137 | .name = "outform", | 137 | .name = "outform", |
| 138 | .argname = "format", | 138 | .argname = "format", |
| 139 | .desc = "Output format (DER or PEM (default))", | 139 | .desc = "Output format (DER or PEM (default))", |
| 140 | .type = OPTION_ARG_FORMAT, | 140 | .type = OPTION_ARG_FORMAT, |
| 141 | .opt.value = &pkey_config.outformat, | 141 | .opt.value = &cfg.outformat, |
| 142 | }, | 142 | }, |
| 143 | { | 143 | { |
| 144 | .name = "passin", | 144 | .name = "passin", |
| 145 | .argname = "src", | 145 | .argname = "src", |
| 146 | .desc = "Input file passphrase source", | 146 | .desc = "Input file passphrase source", |
| 147 | .type = OPTION_ARG, | 147 | .type = OPTION_ARG, |
| 148 | .opt.arg = &pkey_config.passargin, | 148 | .opt.arg = &cfg.passargin, |
| 149 | }, | 149 | }, |
| 150 | { | 150 | { |
| 151 | .name = "passout", | 151 | .name = "passout", |
| 152 | .argname = "src", | 152 | .argname = "src", |
| 153 | .desc = "Output file passphrase source", | 153 | .desc = "Output file passphrase source", |
| 154 | .type = OPTION_ARG, | 154 | .type = OPTION_ARG, |
| 155 | .opt.arg = &pkey_config.passargout, | 155 | .opt.arg = &cfg.passargout, |
| 156 | }, | 156 | }, |
| 157 | { | 157 | { |
| 158 | .name = "pubcheck", | 158 | .name = "pubcheck", |
| 159 | .desc = "Check validity of public key", | 159 | .desc = "Check validity of public key", |
| 160 | .type = OPTION_FLAG, | 160 | .type = OPTION_FLAG, |
| 161 | .opt.flag = &pkey_config.pubcheck, | 161 | .opt.flag = &cfg.pubcheck, |
| 162 | }, | 162 | }, |
| 163 | { | 163 | { |
| 164 | .name = "pubin", | 164 | .name = "pubin", |
| 165 | .desc = "Expect a public key (default private key)", | 165 | .desc = "Expect a public key (default private key)", |
| 166 | .type = OPTION_VALUE, | 166 | .type = OPTION_VALUE, |
| 167 | .value = 1, | 167 | .value = 1, |
| 168 | .opt.value = &pkey_config.pubin, | 168 | .opt.value = &cfg.pubin, |
| 169 | }, | 169 | }, |
| 170 | { | 170 | { |
| 171 | .name = "pubout", | 171 | .name = "pubout", |
| 172 | .desc = "Output a public key (default private key)", | 172 | .desc = "Output a public key (default private key)", |
| 173 | .type = OPTION_VALUE, | 173 | .type = OPTION_VALUE, |
| 174 | .value = 1, | 174 | .value = 1, |
| 175 | .opt.value = &pkey_config.pubout, | 175 | .opt.value = &cfg.pubout, |
| 176 | }, | 176 | }, |
| 177 | { | 177 | { |
| 178 | .name = "text", | 178 | .name = "text", |
| 179 | .desc = "Print the public/private key in plain text", | 179 | .desc = "Print the public/private key in plain text", |
| 180 | .type = OPTION_FLAG, | 180 | .type = OPTION_FLAG, |
| 181 | .opt.flag = &pkey_config.text, | 181 | .opt.flag = &cfg.text, |
| 182 | }, | 182 | }, |
| 183 | { | 183 | { |
| 184 | .name = "text_pub", | 184 | .name = "text_pub", |
| 185 | .desc = "Print out only public key in plain text", | 185 | .desc = "Print out only public key in plain text", |
| 186 | .type = OPTION_FLAG, | 186 | .type = OPTION_FLAG, |
| 187 | .opt.flag = &pkey_config.pubtext, | 187 | .opt.flag = &cfg.pubtext, |
| 188 | }, | 188 | }, |
| 189 | { | 189 | { |
| 190 | .name = NULL, | 190 | .name = NULL, |
| @@ -226,61 +226,61 @@ pkey_main(int argc, char **argv) | |||
| 226 | exit(1); | 226 | exit(1); |
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | memset(&pkey_config, 0, sizeof(pkey_config)); | 229 | memset(&cfg, 0, sizeof(cfg)); |
| 230 | pkey_config.informat = FORMAT_PEM; | 230 | cfg.informat = FORMAT_PEM; |
| 231 | pkey_config.outformat = FORMAT_PEM; | 231 | cfg.outformat = FORMAT_PEM; |
| 232 | 232 | ||
| 233 | if (options_parse(argc, argv, pkey_options, NULL, NULL) != 0) { | 233 | if (options_parse(argc, argv, pkey_options, NULL, NULL) != 0) { |
| 234 | pkey_usage(); | 234 | pkey_usage(); |
| 235 | goto end; | 235 | goto end; |
| 236 | } | 236 | } |
| 237 | 237 | ||
| 238 | if (pkey_config.pubtext) | 238 | if (cfg.pubtext) |
| 239 | pkey_config.text = 1; | 239 | cfg.text = 1; |
| 240 | if (pkey_config.pubin) | 240 | if (cfg.pubin) |
| 241 | pkey_config.pubout = pkey_config.pubtext = 1; | 241 | cfg.pubout = cfg.pubtext = 1; |
| 242 | 242 | ||
| 243 | if (!app_passwd(bio_err, pkey_config.passargin, pkey_config.passargout, | 243 | if (!app_passwd(bio_err, cfg.passargin, cfg.passargout, |
| 244 | &passin, &passout)) { | 244 | &passin, &passout)) { |
| 245 | BIO_printf(bio_err, "Error getting passwords\n"); | 245 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 246 | goto end; | 246 | goto end; |
| 247 | } | 247 | } |
| 248 | if (pkey_config.outfile) { | 248 | if (cfg.outfile) { |
| 249 | if (!(out = BIO_new_file(pkey_config.outfile, "wb"))) { | 249 | if (!(out = BIO_new_file(cfg.outfile, "wb"))) { |
| 250 | BIO_printf(bio_err, | 250 | BIO_printf(bio_err, |
| 251 | "Can't open output file %s\n", pkey_config.outfile); | 251 | "Can't open output file %s\n", cfg.outfile); |
| 252 | goto end; | 252 | goto end; |
| 253 | } | 253 | } |
| 254 | } else { | 254 | } else { |
| 255 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 255 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 256 | } | 256 | } |
| 257 | 257 | ||
| 258 | if (pkey_config.pubin) | 258 | if (cfg.pubin) |
| 259 | pkey = load_pubkey(bio_err, pkey_config.infile, | 259 | pkey = load_pubkey(bio_err, cfg.infile, |
| 260 | pkey_config.informat, 1, passin, "Public Key"); | 260 | cfg.informat, 1, passin, "Public Key"); |
| 261 | else | 261 | else |
| 262 | pkey = load_key(bio_err, pkey_config.infile, | 262 | pkey = load_key(bio_err, cfg.infile, |
| 263 | pkey_config.informat, 1, passin, "key"); | 263 | cfg.informat, 1, passin, "key"); |
| 264 | if (!pkey) | 264 | if (!pkey) |
| 265 | goto end; | 265 | goto end; |
| 266 | 266 | ||
| 267 | if (pkey_config.check) { | 267 | if (cfg.check) { |
| 268 | if (!pkey_check(out, pkey, EVP_PKEY_check, "Key pair")) | 268 | if (!pkey_check(out, pkey, EVP_PKEY_check, "Key pair")) |
| 269 | goto end; | 269 | goto end; |
| 270 | } else if (pkey_config.pubcheck) { | 270 | } else if (cfg.pubcheck) { |
| 271 | if (!pkey_check(out, pkey, EVP_PKEY_public_check, "Public key")) | 271 | if (!pkey_check(out, pkey, EVP_PKEY_public_check, "Public key")) |
| 272 | goto end; | 272 | goto end; |
| 273 | } | 273 | } |
| 274 | 274 | ||
| 275 | if (!pkey_config.noout) { | 275 | if (!cfg.noout) { |
| 276 | if (pkey_config.outformat == FORMAT_PEM) { | 276 | if (cfg.outformat == FORMAT_PEM) { |
| 277 | if (pkey_config.pubout) | 277 | if (cfg.pubout) |
| 278 | PEM_write_bio_PUBKEY(out, pkey); | 278 | PEM_write_bio_PUBKEY(out, pkey); |
| 279 | else | 279 | else |
| 280 | PEM_write_bio_PrivateKey(out, pkey, | 280 | PEM_write_bio_PrivateKey(out, pkey, |
| 281 | pkey_config.cipher, NULL, 0, NULL, passout); | 281 | cfg.cipher, NULL, 0, NULL, passout); |
| 282 | } else if (pkey_config.outformat == FORMAT_ASN1) { | 282 | } else if (cfg.outformat == FORMAT_ASN1) { |
| 283 | if (pkey_config.pubout) | 283 | if (cfg.pubout) |
| 284 | i2d_PUBKEY_bio(out, pkey); | 284 | i2d_PUBKEY_bio(out, pkey); |
| 285 | else | 285 | else |
| 286 | i2d_PrivateKey_bio(out, pkey); | 286 | i2d_PrivateKey_bio(out, pkey); |
| @@ -290,8 +290,8 @@ pkey_main(int argc, char **argv) | |||
| 290 | } | 290 | } |
| 291 | 291 | ||
| 292 | } | 292 | } |
| 293 | if (pkey_config.text) { | 293 | if (cfg.text) { |
| 294 | if (pkey_config.pubtext) | 294 | if (cfg.pubtext) |
| 295 | EVP_PKEY_print_public(out, pkey, 0, NULL); | 295 | EVP_PKEY_print_public(out, pkey, 0, NULL); |
| 296 | else | 296 | else |
| 297 | EVP_PKEY_print_private(out, pkey, 0, NULL); | 297 | EVP_PKEY_print_private(out, pkey, 0, NULL); |
diff --git a/src/usr.bin/openssl/pkeyparam.c b/src/usr.bin/openssl/pkeyparam.c index 57b5ad8042..946195640e 100644 --- a/src/usr.bin/openssl/pkeyparam.c +++ b/src/usr.bin/openssl/pkeyparam.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: pkeyparam.c,v 1.16 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: pkeyparam.c,v 1.17 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2006 | 3 | * project 2006 |
| 4 | */ | 4 | */ |
| @@ -71,40 +71,40 @@ static struct { | |||
| 71 | int noout; | 71 | int noout; |
| 72 | char *outfile; | 72 | char *outfile; |
| 73 | int text; | 73 | int text; |
| 74 | } pkeyparam_config; | 74 | } cfg; |
| 75 | 75 | ||
| 76 | static const struct option pkeyparam_options[] = { | 76 | static const struct option pkeyparam_options[] = { |
| 77 | { | 77 | { |
| 78 | .name = "check", | 78 | .name = "check", |
| 79 | .desc = "Check validity of key parameters", | 79 | .desc = "Check validity of key parameters", |
| 80 | .type = OPTION_FLAG, | 80 | .type = OPTION_FLAG, |
| 81 | .opt.flag = &pkeyparam_config.check, | 81 | .opt.flag = &cfg.check, |
| 82 | }, | 82 | }, |
| 83 | { | 83 | { |
| 84 | .name = "in", | 84 | .name = "in", |
| 85 | .argname = "file", | 85 | .argname = "file", |
| 86 | .desc = "Input file (default stdin)", | 86 | .desc = "Input file (default stdin)", |
| 87 | .type = OPTION_ARG, | 87 | .type = OPTION_ARG, |
| 88 | .opt.arg = &pkeyparam_config.infile, | 88 | .opt.arg = &cfg.infile, |
| 89 | }, | 89 | }, |
| 90 | { | 90 | { |
| 91 | .name = "noout", | 91 | .name = "noout", |
| 92 | .desc = "Do not print encoded version of the parameters", | 92 | .desc = "Do not print encoded version of the parameters", |
| 93 | .type = OPTION_FLAG, | 93 | .type = OPTION_FLAG, |
| 94 | .opt.flag = &pkeyparam_config.noout, | 94 | .opt.flag = &cfg.noout, |
| 95 | }, | 95 | }, |
| 96 | { | 96 | { |
| 97 | .name = "out", | 97 | .name = "out", |
| 98 | .argname = "file", | 98 | .argname = "file", |
| 99 | .desc = "Output file (default stdout)", | 99 | .desc = "Output file (default stdout)", |
| 100 | .type = OPTION_ARG, | 100 | .type = OPTION_ARG, |
| 101 | .opt.arg = &pkeyparam_config.outfile, | 101 | .opt.arg = &cfg.outfile, |
| 102 | }, | 102 | }, |
| 103 | { | 103 | { |
| 104 | .name = "text", | 104 | .name = "text", |
| 105 | .desc = "Print out the parameters in plain text", | 105 | .desc = "Print out the parameters in plain text", |
| 106 | .type = OPTION_FLAG, | 106 | .type = OPTION_FLAG, |
| 107 | .opt.flag = &pkeyparam_config.text, | 107 | .opt.flag = &cfg.text, |
| 108 | }, | 108 | }, |
| 109 | { NULL }, | 109 | { NULL }, |
| 110 | }; | 110 | }; |
| @@ -130,26 +130,26 @@ pkeyparam_main(int argc, char **argv) | |||
| 130 | exit(1); | 130 | exit(1); |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | memset(&pkeyparam_config, 0, sizeof(pkeyparam_config)); | 133 | memset(&cfg, 0, sizeof(cfg)); |
| 134 | 134 | ||
| 135 | if (options_parse(argc, argv, pkeyparam_options, NULL, NULL) != 0) { | 135 | if (options_parse(argc, argv, pkeyparam_options, NULL, NULL) != 0) { |
| 136 | pkeyparam_usage(); | 136 | pkeyparam_usage(); |
| 137 | return (1); | 137 | return (1); |
| 138 | } | 138 | } |
| 139 | 139 | ||
| 140 | if (pkeyparam_config.infile) { | 140 | if (cfg.infile) { |
| 141 | if (!(in = BIO_new_file(pkeyparam_config.infile, "r"))) { | 141 | if (!(in = BIO_new_file(cfg.infile, "r"))) { |
| 142 | BIO_printf(bio_err, "Can't open input file %s\n", | 142 | BIO_printf(bio_err, "Can't open input file %s\n", |
| 143 | pkeyparam_config.infile); | 143 | cfg.infile); |
| 144 | goto end; | 144 | goto end; |
| 145 | } | 145 | } |
| 146 | } else | 146 | } else |
| 147 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 147 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 148 | 148 | ||
| 149 | if (pkeyparam_config.outfile) { | 149 | if (cfg.outfile) { |
| 150 | if (!(out = BIO_new_file(pkeyparam_config.outfile, "w"))) { | 150 | if (!(out = BIO_new_file(cfg.outfile, "w"))) { |
| 151 | BIO_printf(bio_err, "Can't open output file %s\n", | 151 | BIO_printf(bio_err, "Can't open output file %s\n", |
| 152 | pkeyparam_config.outfile); | 152 | cfg.outfile); |
| 153 | goto end; | 153 | goto end; |
| 154 | } | 154 | } |
| 155 | } else { | 155 | } else { |
| @@ -163,15 +163,15 @@ pkeyparam_main(int argc, char **argv) | |||
| 163 | goto end; | 163 | goto end; |
| 164 | } | 164 | } |
| 165 | 165 | ||
| 166 | if (pkeyparam_config.check) { | 166 | if (cfg.check) { |
| 167 | if (!pkey_check(out, pkey, EVP_PKEY_param_check, "Parameters")) | 167 | if (!pkey_check(out, pkey, EVP_PKEY_param_check, "Parameters")) |
| 168 | goto end; | 168 | goto end; |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | if (!pkeyparam_config.noout) | 171 | if (!cfg.noout) |
| 172 | PEM_write_bio_Parameters(out, pkey); | 172 | PEM_write_bio_Parameters(out, pkey); |
| 173 | 173 | ||
| 174 | if (pkeyparam_config.text) | 174 | if (cfg.text) |
| 175 | EVP_PKEY_print_params(out, pkey, 0, NULL); | 175 | EVP_PKEY_print_params(out, pkey, 0, NULL); |
| 176 | 176 | ||
| 177 | ret = 0; | 177 | ret = 0; |
diff --git a/src/usr.bin/openssl/pkeyutl.c b/src/usr.bin/openssl/pkeyutl.c index 8c0fd28b29..efd0896c02 100644 --- a/src/usr.bin/openssl/pkeyutl.c +++ b/src/usr.bin/openssl/pkeyutl.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: pkeyutl.c,v 1.18 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: pkeyutl.c,v 1.19 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2006. | 3 | * project 2006. |
| 4 | */ | 4 | */ |
| @@ -82,7 +82,7 @@ static struct { | |||
| 82 | int pkey_op; | 82 | int pkey_op; |
| 83 | int rev; | 83 | int rev; |
| 84 | char *sigfile; | 84 | char *sigfile; |
| 85 | } pkeyutl_config; | 85 | } cfg; |
| 86 | 86 | ||
| 87 | static void pkeyutl_usage(void); | 87 | static void pkeyutl_usage(void); |
| 88 | 88 | ||
| @@ -101,48 +101,48 @@ static const struct option pkeyutl_options[] = { | |||
| 101 | .name = "asn1parse", | 101 | .name = "asn1parse", |
| 102 | .desc = "ASN.1 parse the output data", | 102 | .desc = "ASN.1 parse the output data", |
| 103 | .type = OPTION_FLAG, | 103 | .type = OPTION_FLAG, |
| 104 | .opt.flag = &pkeyutl_config.asn1parse, | 104 | .opt.flag = &cfg.asn1parse, |
| 105 | }, | 105 | }, |
| 106 | { | 106 | { |
| 107 | .name = "certin", | 107 | .name = "certin", |
| 108 | .desc = "Input is a certificate containing a public key", | 108 | .desc = "Input is a certificate containing a public key", |
| 109 | .type = OPTION_VALUE, | 109 | .type = OPTION_VALUE, |
| 110 | .value = KEY_CERT, | 110 | .value = KEY_CERT, |
| 111 | .opt.value = &pkeyutl_config.key_type, | 111 | .opt.value = &cfg.key_type, |
| 112 | }, | 112 | }, |
| 113 | { | 113 | { |
| 114 | .name = "decrypt", | 114 | .name = "decrypt", |
| 115 | .desc = "Decrypt the input data using a private key", | 115 | .desc = "Decrypt the input data using a private key", |
| 116 | .type = OPTION_VALUE, | 116 | .type = OPTION_VALUE, |
| 117 | .value = EVP_PKEY_OP_DECRYPT, | 117 | .value = EVP_PKEY_OP_DECRYPT, |
| 118 | .opt.value = &pkeyutl_config.pkey_op, | 118 | .opt.value = &cfg.pkey_op, |
| 119 | }, | 119 | }, |
| 120 | { | 120 | { |
| 121 | .name = "derive", | 121 | .name = "derive", |
| 122 | .desc = "Derive a shared secret using the peer key", | 122 | .desc = "Derive a shared secret using the peer key", |
| 123 | .type = OPTION_VALUE, | 123 | .type = OPTION_VALUE, |
| 124 | .value = EVP_PKEY_OP_DERIVE, | 124 | .value = EVP_PKEY_OP_DERIVE, |
| 125 | .opt.value = &pkeyutl_config.pkey_op, | 125 | .opt.value = &cfg.pkey_op, |
| 126 | }, | 126 | }, |
| 127 | { | 127 | { |
| 128 | .name = "encrypt", | 128 | .name = "encrypt", |
| 129 | .desc = "Encrypt the input data using a public key", | 129 | .desc = "Encrypt the input data using a public key", |
| 130 | .type = OPTION_VALUE, | 130 | .type = OPTION_VALUE, |
| 131 | .value = EVP_PKEY_OP_ENCRYPT, | 131 | .value = EVP_PKEY_OP_ENCRYPT, |
| 132 | .opt.value = &pkeyutl_config.pkey_op, | 132 | .opt.value = &cfg.pkey_op, |
| 133 | }, | 133 | }, |
| 134 | { | 134 | { |
| 135 | .name = "hexdump", | 135 | .name = "hexdump", |
| 136 | .desc = "Hex dump the output data", | 136 | .desc = "Hex dump the output data", |
| 137 | .type = OPTION_FLAG, | 137 | .type = OPTION_FLAG, |
| 138 | .opt.flag = &pkeyutl_config.hexdump, | 138 | .opt.flag = &cfg.hexdump, |
| 139 | }, | 139 | }, |
| 140 | { | 140 | { |
| 141 | .name = "in", | 141 | .name = "in", |
| 142 | .argname = "file", | 142 | .argname = "file", |
| 143 | .desc = "Input file (default stdin)", | 143 | .desc = "Input file (default stdin)", |
| 144 | .type = OPTION_ARG, | 144 | .type = OPTION_ARG, |
| 145 | .opt.arg = &pkeyutl_config.infile, | 145 | .opt.arg = &cfg.infile, |
| 146 | }, | 146 | }, |
| 147 | { | 147 | { |
| 148 | .name = "inkey", | 148 | .name = "inkey", |
| @@ -156,28 +156,28 @@ static const struct option pkeyutl_options[] = { | |||
| 156 | .argname = "fmt", | 156 | .argname = "fmt", |
| 157 | .desc = "Input key format (DER or PEM (default))", | 157 | .desc = "Input key format (DER or PEM (default))", |
| 158 | .type = OPTION_ARG_FORMAT, | 158 | .type = OPTION_ARG_FORMAT, |
| 159 | .opt.value = &pkeyutl_config.keyform, | 159 | .opt.value = &cfg.keyform, |
| 160 | }, | 160 | }, |
| 161 | { | 161 | { |
| 162 | .name = "out", | 162 | .name = "out", |
| 163 | .argname = "file", | 163 | .argname = "file", |
| 164 | .desc = "Output file (default stdout)", | 164 | .desc = "Output file (default stdout)", |
| 165 | .type = OPTION_ARG, | 165 | .type = OPTION_ARG, |
| 166 | .opt.arg = &pkeyutl_config.outfile, | 166 | .opt.arg = &cfg.outfile, |
| 167 | }, | 167 | }, |
| 168 | { | 168 | { |
| 169 | .name = "passin", | 169 | .name = "passin", |
| 170 | .argname = "arg", | 170 | .argname = "arg", |
| 171 | .desc = "Key password source", | 171 | .desc = "Key password source", |
| 172 | .type = OPTION_ARG, | 172 | .type = OPTION_ARG, |
| 173 | .opt.arg = &pkeyutl_config.passargin, | 173 | .opt.arg = &cfg.passargin, |
| 174 | }, | 174 | }, |
| 175 | { | 175 | { |
| 176 | .name = "peerform", | 176 | .name = "peerform", |
| 177 | .argname = "fmt", | 177 | .argname = "fmt", |
| 178 | .desc = "Input key format (DER or PEM (default))", | 178 | .desc = "Input key format (DER or PEM (default))", |
| 179 | .type = OPTION_ARG_FORMAT, | 179 | .type = OPTION_ARG_FORMAT, |
| 180 | .opt.value = &pkeyutl_config.peerform, | 180 | .opt.value = &cfg.peerform, |
| 181 | }, | 181 | }, |
| 182 | { | 182 | { |
| 183 | .name = "peerkey", | 183 | .name = "peerkey", |
| @@ -198,41 +198,41 @@ static const struct option pkeyutl_options[] = { | |||
| 198 | .desc = "Input is a public key", | 198 | .desc = "Input is a public key", |
| 199 | .type = OPTION_VALUE, | 199 | .type = OPTION_VALUE, |
| 200 | .value = KEY_PUBKEY, | 200 | .value = KEY_PUBKEY, |
| 201 | .opt.value = &pkeyutl_config.key_type, | 201 | .opt.value = &cfg.key_type, |
| 202 | }, | 202 | }, |
| 203 | { | 203 | { |
| 204 | .name = "rev", | 204 | .name = "rev", |
| 205 | .desc = "Reverse the input data", | 205 | .desc = "Reverse the input data", |
| 206 | .type = OPTION_FLAG, | 206 | .type = OPTION_FLAG, |
| 207 | .opt.flag = &pkeyutl_config.rev, | 207 | .opt.flag = &cfg.rev, |
| 208 | }, | 208 | }, |
| 209 | { | 209 | { |
| 210 | .name = "sigfile", | 210 | .name = "sigfile", |
| 211 | .argname = "file", | 211 | .argname = "file", |
| 212 | .desc = "Signature file (verify operation only)", | 212 | .desc = "Signature file (verify operation only)", |
| 213 | .type = OPTION_ARG, | 213 | .type = OPTION_ARG, |
| 214 | .opt.arg = &pkeyutl_config.sigfile, | 214 | .opt.arg = &cfg.sigfile, |
| 215 | }, | 215 | }, |
| 216 | { | 216 | { |
| 217 | .name = "sign", | 217 | .name = "sign", |
| 218 | .desc = "Sign the input data using private key", | 218 | .desc = "Sign the input data using private key", |
| 219 | .type = OPTION_VALUE, | 219 | .type = OPTION_VALUE, |
| 220 | .value = EVP_PKEY_OP_SIGN, | 220 | .value = EVP_PKEY_OP_SIGN, |
| 221 | .opt.value = &pkeyutl_config.pkey_op, | 221 | .opt.value = &cfg.pkey_op, |
| 222 | }, | 222 | }, |
| 223 | { | 223 | { |
| 224 | .name = "verify", | 224 | .name = "verify", |
| 225 | .desc = "Verify the input data using public key", | 225 | .desc = "Verify the input data using public key", |
| 226 | .type = OPTION_VALUE, | 226 | .type = OPTION_VALUE, |
| 227 | .value = EVP_PKEY_OP_VERIFY, | 227 | .value = EVP_PKEY_OP_VERIFY, |
| 228 | .opt.value = &pkeyutl_config.pkey_op, | 228 | .opt.value = &cfg.pkey_op, |
| 229 | }, | 229 | }, |
| 230 | { | 230 | { |
| 231 | .name = "verifyrecover", | 231 | .name = "verifyrecover", |
| 232 | .desc = "Verify with public key, recover original data", | 232 | .desc = "Verify with public key, recover original data", |
| 233 | .type = OPTION_VALUE, | 233 | .type = OPTION_VALUE, |
| 234 | .value = EVP_PKEY_OP_VERIFYRECOVER, | 234 | .value = EVP_PKEY_OP_VERIFYRECOVER, |
| 235 | .opt.value = &pkeyutl_config.pkey_op, | 235 | .opt.value = &cfg.pkey_op, |
| 236 | }, | 236 | }, |
| 237 | 237 | ||
| 238 | {NULL}, | 238 | {NULL}, |
| @@ -268,36 +268,36 @@ pkeyutl_main(int argc, char **argv) | |||
| 268 | exit(1); | 268 | exit(1); |
| 269 | } | 269 | } |
| 270 | 270 | ||
| 271 | memset(&pkeyutl_config, 0, sizeof(pkeyutl_config)); | 271 | memset(&cfg, 0, sizeof(cfg)); |
| 272 | pkeyutl_config.pkey_op = EVP_PKEY_OP_SIGN; | 272 | cfg.pkey_op = EVP_PKEY_OP_SIGN; |
| 273 | pkeyutl_config.key_type = KEY_PRIVKEY; | 273 | cfg.key_type = KEY_PRIVKEY; |
| 274 | pkeyutl_config.keyform = FORMAT_PEM; | 274 | cfg.keyform = FORMAT_PEM; |
| 275 | pkeyutl_config.peerform = FORMAT_PEM; | 275 | cfg.peerform = FORMAT_PEM; |
| 276 | pkeyutl_config.keysize = -1; | 276 | cfg.keysize = -1; |
| 277 | 277 | ||
| 278 | if (options_parse(argc, argv, pkeyutl_options, NULL, NULL) != 0) { | 278 | if (options_parse(argc, argv, pkeyutl_options, NULL, NULL) != 0) { |
| 279 | pkeyutl_usage(); | 279 | pkeyutl_usage(); |
| 280 | goto end; | 280 | goto end; |
| 281 | } | 281 | } |
| 282 | 282 | ||
| 283 | if (!pkeyutl_config.ctx) { | 283 | if (!cfg.ctx) { |
| 284 | pkeyutl_usage(); | 284 | pkeyutl_usage(); |
| 285 | goto end; | 285 | goto end; |
| 286 | } | 286 | } |
| 287 | if (pkeyutl_config.sigfile && | 287 | if (cfg.sigfile && |
| 288 | (pkeyutl_config.pkey_op != EVP_PKEY_OP_VERIFY)) { | 288 | (cfg.pkey_op != EVP_PKEY_OP_VERIFY)) { |
| 289 | BIO_puts(bio_err, "Signature file specified for non verify\n"); | 289 | BIO_puts(bio_err, "Signature file specified for non verify\n"); |
| 290 | goto end; | 290 | goto end; |
| 291 | } | 291 | } |
| 292 | if (!pkeyutl_config.sigfile && | 292 | if (!cfg.sigfile && |
| 293 | (pkeyutl_config.pkey_op == EVP_PKEY_OP_VERIFY)) { | 293 | (cfg.pkey_op == EVP_PKEY_OP_VERIFY)) { |
| 294 | BIO_puts(bio_err, "No signature file specified for verify\n"); | 294 | BIO_puts(bio_err, "No signature file specified for verify\n"); |
| 295 | goto end; | 295 | goto end; |
| 296 | } | 296 | } |
| 297 | 297 | ||
| 298 | if (pkeyutl_config.pkey_op != EVP_PKEY_OP_DERIVE) { | 298 | if (cfg.pkey_op != EVP_PKEY_OP_DERIVE) { |
| 299 | if (pkeyutl_config.infile) { | 299 | if (cfg.infile) { |
| 300 | if (!(in = BIO_new_file(pkeyutl_config.infile, "rb"))) { | 300 | if (!(in = BIO_new_file(cfg.infile, "rb"))) { |
| 301 | BIO_puts(bio_err, | 301 | BIO_puts(bio_err, |
| 302 | "Error Opening Input File\n"); | 302 | "Error Opening Input File\n"); |
| 303 | ERR_print_errors(bio_err); | 303 | ERR_print_errors(bio_err); |
| @@ -306,8 +306,8 @@ pkeyutl_main(int argc, char **argv) | |||
| 306 | } else | 306 | } else |
| 307 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 307 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 308 | } | 308 | } |
| 309 | if (pkeyutl_config.outfile) { | 309 | if (cfg.outfile) { |
| 310 | if (!(out = BIO_new_file(pkeyutl_config.outfile, "wb"))) { | 310 | if (!(out = BIO_new_file(cfg.outfile, "wb"))) { |
| 311 | BIO_printf(bio_err, "Error Creating Output File\n"); | 311 | BIO_printf(bio_err, "Error Creating Output File\n"); |
| 312 | ERR_print_errors(bio_err); | 312 | ERR_print_errors(bio_err); |
| 313 | goto end; | 313 | goto end; |
| @@ -316,14 +316,14 @@ pkeyutl_main(int argc, char **argv) | |||
| 316 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 316 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 317 | } | 317 | } |
| 318 | 318 | ||
| 319 | if (pkeyutl_config.sigfile) { | 319 | if (cfg.sigfile) { |
| 320 | BIO *sigbio = BIO_new_file(pkeyutl_config.sigfile, "rb"); | 320 | BIO *sigbio = BIO_new_file(cfg.sigfile, "rb"); |
| 321 | if (!sigbio) { | 321 | if (!sigbio) { |
| 322 | BIO_printf(bio_err, "Can't open signature file %s\n", | 322 | BIO_printf(bio_err, "Can't open signature file %s\n", |
| 323 | pkeyutl_config.sigfile); | 323 | cfg.sigfile); |
| 324 | goto end; | 324 | goto end; |
| 325 | } | 325 | } |
| 326 | siglen = bio_to_mem(&sig, pkeyutl_config.keysize * 10, sigbio); | 326 | siglen = bio_to_mem(&sig, cfg.keysize * 10, sigbio); |
| 327 | BIO_free(sigbio); | 327 | BIO_free(sigbio); |
| 328 | if (siglen <= 0) { | 328 | if (siglen <= 0) { |
| 329 | BIO_printf(bio_err, "Error reading signature data\n"); | 329 | BIO_printf(bio_err, "Error reading signature data\n"); |
| @@ -332,12 +332,12 @@ pkeyutl_main(int argc, char **argv) | |||
| 332 | } | 332 | } |
| 333 | if (in) { | 333 | if (in) { |
| 334 | /* Read the input data */ | 334 | /* Read the input data */ |
| 335 | buf_inlen = bio_to_mem(&buf_in, pkeyutl_config.keysize * 10, in); | 335 | buf_inlen = bio_to_mem(&buf_in, cfg.keysize * 10, in); |
| 336 | if (buf_inlen <= 0) { | 336 | if (buf_inlen <= 0) { |
| 337 | BIO_printf(bio_err, "Error reading input Data\n"); | 337 | BIO_printf(bio_err, "Error reading input Data\n"); |
| 338 | exit(1); | 338 | exit(1); |
| 339 | } | 339 | } |
| 340 | if (pkeyutl_config.rev) { | 340 | if (cfg.rev) { |
| 341 | size_t i; | 341 | size_t i; |
| 342 | unsigned char ctmp; | 342 | unsigned char ctmp; |
| 343 | size_t l = (size_t) buf_inlen; | 343 | size_t l = (size_t) buf_inlen; |
| @@ -348,8 +348,8 @@ pkeyutl_main(int argc, char **argv) | |||
| 348 | } | 348 | } |
| 349 | } | 349 | } |
| 350 | } | 350 | } |
| 351 | if (pkeyutl_config.pkey_op == EVP_PKEY_OP_VERIFY) { | 351 | if (cfg.pkey_op == EVP_PKEY_OP_VERIFY) { |
| 352 | rv = EVP_PKEY_verify(pkeyutl_config.ctx, sig, (size_t) siglen, | 352 | rv = EVP_PKEY_verify(cfg.ctx, sig, (size_t) siglen, |
| 353 | buf_in, (size_t) buf_inlen); | 353 | buf_in, (size_t) buf_inlen); |
| 354 | if (rv == 1) { | 354 | if (rv == 1) { |
| 355 | BIO_puts(out, "Signature Verified Successfully\n"); | 355 | BIO_puts(out, "Signature Verified Successfully\n"); |
| @@ -359,15 +359,15 @@ pkeyutl_main(int argc, char **argv) | |||
| 359 | if (rv >= 0) | 359 | if (rv >= 0) |
| 360 | goto end; | 360 | goto end; |
| 361 | } else { | 361 | } else { |
| 362 | rv = do_keyop(pkeyutl_config.ctx, pkeyutl_config.pkey_op, NULL, | 362 | rv = do_keyop(cfg.ctx, cfg.pkey_op, NULL, |
| 363 | (size_t *)&buf_outlen, buf_in, (size_t) buf_inlen); | 363 | (size_t *)&buf_outlen, buf_in, (size_t) buf_inlen); |
| 364 | if (rv > 0) { | 364 | if (rv > 0) { |
| 365 | buf_out = malloc(buf_outlen); | 365 | buf_out = malloc(buf_outlen); |
| 366 | if (!buf_out) | 366 | if (!buf_out) |
| 367 | rv = -1; | 367 | rv = -1; |
| 368 | else | 368 | else |
| 369 | rv = do_keyop(pkeyutl_config.ctx, | 369 | rv = do_keyop(cfg.ctx, |
| 370 | pkeyutl_config.pkey_op, | 370 | cfg.pkey_op, |
| 371 | buf_out, (size_t *) & buf_outlen, | 371 | buf_out, (size_t *) & buf_outlen, |
| 372 | buf_in, (size_t) buf_inlen); | 372 | buf_in, (size_t) buf_inlen); |
| 373 | } | 373 | } |
| @@ -379,16 +379,16 @@ pkeyutl_main(int argc, char **argv) | |||
| 379 | goto end; | 379 | goto end; |
| 380 | } | 380 | } |
| 381 | ret = 0; | 381 | ret = 0; |
| 382 | if (pkeyutl_config.asn1parse) { | 382 | if (cfg.asn1parse) { |
| 383 | if (!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1)) | 383 | if (!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1)) |
| 384 | ERR_print_errors(bio_err); | 384 | ERR_print_errors(bio_err); |
| 385 | } else if (pkeyutl_config.hexdump) | 385 | } else if (cfg.hexdump) |
| 386 | BIO_dump(out, (char *) buf_out, buf_outlen); | 386 | BIO_dump(out, (char *) buf_out, buf_outlen); |
| 387 | else | 387 | else |
| 388 | BIO_write(out, buf_out, buf_outlen); | 388 | BIO_write(out, buf_out, buf_outlen); |
| 389 | 389 | ||
| 390 | end: | 390 | end: |
| 391 | EVP_PKEY_CTX_free(pkeyutl_config.ctx); | 391 | EVP_PKEY_CTX_free(cfg.ctx); |
| 392 | BIO_free(in); | 392 | BIO_free(in); |
| 393 | BIO_free_all(out); | 393 | BIO_free_all(out); |
| 394 | free(buf_in); | 394 | free(buf_in); |
| @@ -406,32 +406,32 @@ init_ctx(char *keyfile) | |||
| 406 | int rv = -1; | 406 | int rv = -1; |
| 407 | X509 *x; | 407 | X509 *x; |
| 408 | 408 | ||
| 409 | if (((pkeyutl_config.pkey_op == EVP_PKEY_OP_SIGN) | 409 | if (((cfg.pkey_op == EVP_PKEY_OP_SIGN) |
| 410 | || (pkeyutl_config.pkey_op == EVP_PKEY_OP_DECRYPT) | 410 | || (cfg.pkey_op == EVP_PKEY_OP_DECRYPT) |
| 411 | || (pkeyutl_config.pkey_op == EVP_PKEY_OP_DERIVE)) | 411 | || (cfg.pkey_op == EVP_PKEY_OP_DERIVE)) |
| 412 | && (pkeyutl_config.key_type != KEY_PRIVKEY)) { | 412 | && (cfg.key_type != KEY_PRIVKEY)) { |
| 413 | BIO_printf(bio_err, | 413 | BIO_printf(bio_err, |
| 414 | "A private key is needed for this operation\n"); | 414 | "A private key is needed for this operation\n"); |
| 415 | goto end; | 415 | goto end; |
| 416 | } | 416 | } |
| 417 | if (!app_passwd(bio_err, pkeyutl_config.passargin, NULL, &passin, | 417 | if (!app_passwd(bio_err, cfg.passargin, NULL, &passin, |
| 418 | NULL)) { | 418 | NULL)) { |
| 419 | BIO_printf(bio_err, "Error getting password\n"); | 419 | BIO_printf(bio_err, "Error getting password\n"); |
| 420 | goto end; | 420 | goto end; |
| 421 | } | 421 | } |
| 422 | switch (pkeyutl_config.key_type) { | 422 | switch (cfg.key_type) { |
| 423 | case KEY_PRIVKEY: | 423 | case KEY_PRIVKEY: |
| 424 | pkey = load_key(bio_err, keyfile, pkeyutl_config.keyform, 0, | 424 | pkey = load_key(bio_err, keyfile, cfg.keyform, 0, |
| 425 | passin, "Private Key"); | 425 | passin, "Private Key"); |
| 426 | break; | 426 | break; |
| 427 | 427 | ||
| 428 | case KEY_PUBKEY: | 428 | case KEY_PUBKEY: |
| 429 | pkey = load_pubkey(bio_err, keyfile, pkeyutl_config.keyform, 0, | 429 | pkey = load_pubkey(bio_err, keyfile, cfg.keyform, 0, |
| 430 | NULL, "Public Key"); | 430 | NULL, "Public Key"); |
| 431 | break; | 431 | break; |
| 432 | 432 | ||
| 433 | case KEY_CERT: | 433 | case KEY_CERT: |
| 434 | x = load_cert(bio_err, keyfile, pkeyutl_config.keyform, | 434 | x = load_cert(bio_err, keyfile, cfg.keyform, |
| 435 | NULL, "Certificate"); | 435 | NULL, "Certificate"); |
| 436 | if (x) { | 436 | if (x) { |
| 437 | pkey = X509_get_pubkey(x); | 437 | pkey = X509_get_pubkey(x); |
| @@ -440,53 +440,53 @@ init_ctx(char *keyfile) | |||
| 440 | break; | 440 | break; |
| 441 | } | 441 | } |
| 442 | 442 | ||
| 443 | pkeyutl_config.keysize = EVP_PKEY_size(pkey); | 443 | cfg.keysize = EVP_PKEY_size(pkey); |
| 444 | 444 | ||
| 445 | if (!pkey) | 445 | if (!pkey) |
| 446 | goto end; | 446 | goto end; |
| 447 | 447 | ||
| 448 | pkeyutl_config.ctx = EVP_PKEY_CTX_new(pkey, NULL); | 448 | cfg.ctx = EVP_PKEY_CTX_new(pkey, NULL); |
| 449 | 449 | ||
| 450 | EVP_PKEY_free(pkey); | 450 | EVP_PKEY_free(pkey); |
| 451 | 451 | ||
| 452 | if (!pkeyutl_config.ctx) | 452 | if (!cfg.ctx) |
| 453 | goto end; | 453 | goto end; |
| 454 | 454 | ||
| 455 | switch (pkeyutl_config.pkey_op) { | 455 | switch (cfg.pkey_op) { |
| 456 | case EVP_PKEY_OP_SIGN: | 456 | case EVP_PKEY_OP_SIGN: |
| 457 | rv = EVP_PKEY_sign_init(pkeyutl_config.ctx); | 457 | rv = EVP_PKEY_sign_init(cfg.ctx); |
| 458 | break; | 458 | break; |
| 459 | 459 | ||
| 460 | case EVP_PKEY_OP_VERIFY: | 460 | case EVP_PKEY_OP_VERIFY: |
| 461 | rv = EVP_PKEY_verify_init(pkeyutl_config.ctx); | 461 | rv = EVP_PKEY_verify_init(cfg.ctx); |
| 462 | break; | 462 | break; |
| 463 | 463 | ||
| 464 | case EVP_PKEY_OP_VERIFYRECOVER: | 464 | case EVP_PKEY_OP_VERIFYRECOVER: |
| 465 | rv = EVP_PKEY_verify_recover_init(pkeyutl_config.ctx); | 465 | rv = EVP_PKEY_verify_recover_init(cfg.ctx); |
| 466 | break; | 466 | break; |
| 467 | 467 | ||
| 468 | case EVP_PKEY_OP_ENCRYPT: | 468 | case EVP_PKEY_OP_ENCRYPT: |
| 469 | rv = EVP_PKEY_encrypt_init(pkeyutl_config.ctx); | 469 | rv = EVP_PKEY_encrypt_init(cfg.ctx); |
| 470 | break; | 470 | break; |
| 471 | 471 | ||
| 472 | case EVP_PKEY_OP_DECRYPT: | 472 | case EVP_PKEY_OP_DECRYPT: |
| 473 | rv = EVP_PKEY_decrypt_init(pkeyutl_config.ctx); | 473 | rv = EVP_PKEY_decrypt_init(cfg.ctx); |
| 474 | break; | 474 | break; |
| 475 | 475 | ||
| 476 | case EVP_PKEY_OP_DERIVE: | 476 | case EVP_PKEY_OP_DERIVE: |
| 477 | rv = EVP_PKEY_derive_init(pkeyutl_config.ctx); | 477 | rv = EVP_PKEY_derive_init(cfg.ctx); |
| 478 | break; | 478 | break; |
| 479 | } | 479 | } |
| 480 | 480 | ||
| 481 | if (rv <= 0) { | 481 | if (rv <= 0) { |
| 482 | EVP_PKEY_CTX_free(pkeyutl_config.ctx); | 482 | EVP_PKEY_CTX_free(cfg.ctx); |
| 483 | pkeyutl_config.ctx = NULL; | 483 | cfg.ctx = NULL; |
| 484 | } | 484 | } |
| 485 | 485 | ||
| 486 | end: | 486 | end: |
| 487 | free(passin); | 487 | free(passin); |
| 488 | 488 | ||
| 489 | if (!pkeyutl_config.ctx) { | 489 | if (!cfg.ctx) { |
| 490 | BIO_puts(bio_err, "Error initializing context\n"); | 490 | BIO_puts(bio_err, "Error initializing context\n"); |
| 491 | ERR_print_errors(bio_err); | 491 | ERR_print_errors(bio_err); |
| 492 | return (1); | 492 | return (1); |
| @@ -501,11 +501,11 @@ setup_peer(char *file) | |||
| 501 | EVP_PKEY *peer = NULL; | 501 | EVP_PKEY *peer = NULL; |
| 502 | int ret; | 502 | int ret; |
| 503 | 503 | ||
| 504 | if (!pkeyutl_config.ctx) { | 504 | if (!cfg.ctx) { |
| 505 | BIO_puts(bio_err, "-peerkey command before -inkey\n"); | 505 | BIO_puts(bio_err, "-peerkey command before -inkey\n"); |
| 506 | return (1); | 506 | return (1); |
| 507 | } | 507 | } |
| 508 | peer = load_pubkey(bio_err, file, pkeyutl_config.peerform, 0, NULL, | 508 | peer = load_pubkey(bio_err, file, cfg.peerform, 0, NULL, |
| 509 | "Peer Key"); | 509 | "Peer Key"); |
| 510 | 510 | ||
| 511 | if (!peer) { | 511 | if (!peer) { |
| @@ -513,7 +513,7 @@ setup_peer(char *file) | |||
| 513 | ERR_print_errors(bio_err); | 513 | ERR_print_errors(bio_err); |
| 514 | return (1); | 514 | return (1); |
| 515 | } | 515 | } |
| 516 | ret = EVP_PKEY_derive_set_peer(pkeyutl_config.ctx, peer); | 516 | ret = EVP_PKEY_derive_set_peer(cfg.ctx, peer); |
| 517 | 517 | ||
| 518 | EVP_PKEY_free(peer); | 518 | EVP_PKEY_free(peer); |
| 519 | if (ret <= 0) { | 519 | if (ret <= 0) { |
| @@ -527,10 +527,10 @@ setup_peer(char *file) | |||
| 527 | static int | 527 | static int |
| 528 | pkeyutl_pkeyopt(char *pkeyopt) | 528 | pkeyutl_pkeyopt(char *pkeyopt) |
| 529 | { | 529 | { |
| 530 | if (!pkeyutl_config.ctx) { | 530 | if (!cfg.ctx) { |
| 531 | BIO_puts(bio_err, "-pkeyopt command before -inkey\n"); | 531 | BIO_puts(bio_err, "-pkeyopt command before -inkey\n"); |
| 532 | return (1); | 532 | return (1); |
| 533 | } else if (pkey_ctrl_string(pkeyutl_config.ctx, pkeyopt) <= 0) { | 533 | } else if (pkey_ctrl_string(cfg.ctx, pkeyopt) <= 0) { |
| 534 | BIO_puts(bio_err, "parameter setting error\n"); | 534 | BIO_puts(bio_err, "parameter setting error\n"); |
| 535 | ERR_print_errors(bio_err); | 535 | ERR_print_errors(bio_err); |
| 536 | return (1); | 536 | return (1); |
diff --git a/src/usr.bin/openssl/prime.c b/src/usr.bin/openssl/prime.c index 64b1953e33..d704d882fc 100644 --- a/src/usr.bin/openssl/prime.c +++ b/src/usr.bin/openssl/prime.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: prime.c,v 1.16 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: prime.c,v 1.17 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* ==================================================================== | 2 | /* ==================================================================== |
| 3 | * Copyright (c) 2004 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 2004 The OpenSSL Project. All rights reserved. |
| 4 | * | 4 | * |
| @@ -62,7 +62,7 @@ static struct { | |||
| 62 | int generate; | 62 | int generate; |
| 63 | int hex; | 63 | int hex; |
| 64 | int safe; | 64 | int safe; |
| 65 | } prime_config; | 65 | } cfg; |
| 66 | 66 | ||
| 67 | static const struct option prime_options[] = { | 67 | static const struct option prime_options[] = { |
| 68 | { | 68 | { |
| @@ -70,32 +70,32 @@ static const struct option prime_options[] = { | |||
| 70 | .argname = "n", | 70 | .argname = "n", |
| 71 | .desc = "Number of bits in the generated prime number", | 71 | .desc = "Number of bits in the generated prime number", |
| 72 | .type = OPTION_ARG_INT, | 72 | .type = OPTION_ARG_INT, |
| 73 | .opt.value = &prime_config.bits, | 73 | .opt.value = &cfg.bits, |
| 74 | }, | 74 | }, |
| 75 | { | 75 | { |
| 76 | .name = "checks", | 76 | .name = "checks", |
| 77 | .argname = "n", | 77 | .argname = "n", |
| 78 | .desc = "Miller-Rabin probabilistic primality test iterations", | 78 | .desc = "Miller-Rabin probabilistic primality test iterations", |
| 79 | .type = OPTION_ARG_INT, | 79 | .type = OPTION_ARG_INT, |
| 80 | .opt.value = &prime_config.checks, | 80 | .opt.value = &cfg.checks, |
| 81 | }, | 81 | }, |
| 82 | { | 82 | { |
| 83 | .name = "generate", | 83 | .name = "generate", |
| 84 | .desc = "Generate a pseudo-random prime number", | 84 | .desc = "Generate a pseudo-random prime number", |
| 85 | .type = OPTION_FLAG, | 85 | .type = OPTION_FLAG, |
| 86 | .opt.flag = &prime_config.generate, | 86 | .opt.flag = &cfg.generate, |
| 87 | }, | 87 | }, |
| 88 | { | 88 | { |
| 89 | .name = "hex", | 89 | .name = "hex", |
| 90 | .desc = "Hexadecimal prime numbers", | 90 | .desc = "Hexadecimal prime numbers", |
| 91 | .type = OPTION_FLAG, | 91 | .type = OPTION_FLAG, |
| 92 | .opt.flag = &prime_config.hex, | 92 | .opt.flag = &cfg.hex, |
| 93 | }, | 93 | }, |
| 94 | { | 94 | { |
| 95 | .name = "safe", | 95 | .name = "safe", |
| 96 | .desc = "Generate only \"safe\" prime numbers", | 96 | .desc = "Generate only \"safe\" prime numbers", |
| 97 | .type = OPTION_FLAG, | 97 | .type = OPTION_FLAG, |
| 98 | .opt.flag = &prime_config.safe, | 98 | .opt.flag = &cfg.safe, |
| 99 | }, | 99 | }, |
| 100 | {NULL}, | 100 | {NULL}, |
| 101 | }; | 101 | }; |
| @@ -123,17 +123,17 @@ prime_main(int argc, char **argv) | |||
| 123 | exit(1); | 123 | exit(1); |
| 124 | } | 124 | } |
| 125 | 125 | ||
| 126 | memset(&prime_config, 0, sizeof(prime_config)); | 126 | memset(&cfg, 0, sizeof(cfg)); |
| 127 | 127 | ||
| 128 | /* Default iterations for Miller-Rabin probabilistic primality test. */ | 128 | /* Default iterations for Miller-Rabin probabilistic primality test. */ |
| 129 | prime_config.checks = 20; | 129 | cfg.checks = 20; |
| 130 | 130 | ||
| 131 | if (options_parse(argc, argv, prime_options, &prime, NULL) != 0) { | 131 | if (options_parse(argc, argv, prime_options, &prime, NULL) != 0) { |
| 132 | prime_usage(); | 132 | prime_usage(); |
| 133 | return (1); | 133 | return (1); |
| 134 | } | 134 | } |
| 135 | 135 | ||
| 136 | if (prime == NULL && prime_config.generate == 0) { | 136 | if (prime == NULL && cfg.generate == 0) { |
| 137 | BIO_printf(bio_err, "No prime specified.\n"); | 137 | BIO_printf(bio_err, "No prime specified.\n"); |
| 138 | prime_usage(); | 138 | prime_usage(); |
| 139 | return (1); | 139 | return (1); |
| @@ -145,8 +145,8 @@ prime_main(int argc, char **argv) | |||
| 145 | } | 145 | } |
| 146 | BIO_set_fp(bio_out, stdout, BIO_NOCLOSE); | 146 | BIO_set_fp(bio_out, stdout, BIO_NOCLOSE); |
| 147 | 147 | ||
| 148 | if (prime_config.generate != 0) { | 148 | if (cfg.generate != 0) { |
| 149 | if (prime_config.bits == 0) { | 149 | if (cfg.bits == 0) { |
| 150 | BIO_printf(bio_err, "Specify the number of bits.\n"); | 150 | BIO_printf(bio_err, "Specify the number of bits.\n"); |
| 151 | goto end; | 151 | goto end; |
| 152 | } | 152 | } |
| @@ -155,12 +155,12 @@ prime_main(int argc, char **argv) | |||
| 155 | BIO_printf(bio_err, "Out of memory.\n"); | 155 | BIO_printf(bio_err, "Out of memory.\n"); |
| 156 | goto end; | 156 | goto end; |
| 157 | } | 157 | } |
| 158 | if (!BN_generate_prime_ex(bn, prime_config.bits, | 158 | if (!BN_generate_prime_ex(bn, cfg.bits, |
| 159 | prime_config.safe, NULL, NULL, NULL)) { | 159 | cfg.safe, NULL, NULL, NULL)) { |
| 160 | BIO_printf(bio_err, "Prime generation error.\n"); | 160 | BIO_printf(bio_err, "Prime generation error.\n"); |
| 161 | goto end; | 161 | goto end; |
| 162 | } | 162 | } |
| 163 | s = prime_config.hex ? BN_bn2hex(bn) : BN_bn2dec(bn); | 163 | s = cfg.hex ? BN_bn2hex(bn) : BN_bn2dec(bn); |
| 164 | if (s == NULL) { | 164 | if (s == NULL) { |
| 165 | BIO_printf(bio_err, "Out of memory.\n"); | 165 | BIO_printf(bio_err, "Out of memory.\n"); |
| 166 | goto end; | 166 | goto end; |
| @@ -168,7 +168,7 @@ prime_main(int argc, char **argv) | |||
| 168 | BIO_printf(bio_out, "%s\n", s); | 168 | BIO_printf(bio_out, "%s\n", s); |
| 169 | free(s); | 169 | free(s); |
| 170 | } else { | 170 | } else { |
| 171 | if (prime_config.hex) { | 171 | if (cfg.hex) { |
| 172 | if (!BN_hex2bn(&bn, prime)) { | 172 | if (!BN_hex2bn(&bn, prime)) { |
| 173 | BIO_printf(bio_err, "%s is an invalid hex " | 173 | BIO_printf(bio_err, "%s is an invalid hex " |
| 174 | "value.\n", prime); | 174 | "value.\n", prime); |
| @@ -182,7 +182,7 @@ prime_main(int argc, char **argv) | |||
| 182 | } | 182 | } |
| 183 | } | 183 | } |
| 184 | 184 | ||
| 185 | is_prime = BN_is_prime_ex(bn, prime_config.checks, NULL, NULL); | 185 | is_prime = BN_is_prime_ex(bn, cfg.checks, NULL, NULL); |
| 186 | if (is_prime < 0) { | 186 | if (is_prime < 0) { |
| 187 | BIO_printf(bio_err, "BN_is_prime_ex failed.\n"); | 187 | BIO_printf(bio_err, "BN_is_prime_ex failed.\n"); |
| 188 | goto end; | 188 | goto end; |
diff --git a/src/usr.bin/openssl/rand.c b/src/usr.bin/openssl/rand.c index 6ae6a8d8ee..a0f3b44664 100644 --- a/src/usr.bin/openssl/rand.c +++ b/src/usr.bin/openssl/rand.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: rand.c,v 1.16 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: rand.c,v 1.17 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* ==================================================================== | 2 | /* ==================================================================== |
| 3 | * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. |
| 4 | * | 4 | * |
| @@ -66,27 +66,27 @@ static struct { | |||
| 66 | int base64; | 66 | int base64; |
| 67 | int hex; | 67 | int hex; |
| 68 | char *outfile; | 68 | char *outfile; |
| 69 | } rand_config; | 69 | } cfg; |
| 70 | 70 | ||
| 71 | static const struct option rand_options[] = { | 71 | static const struct option rand_options[] = { |
| 72 | { | 72 | { |
| 73 | .name = "base64", | 73 | .name = "base64", |
| 74 | .desc = "Perform base64 encoding on output", | 74 | .desc = "Perform base64 encoding on output", |
| 75 | .type = OPTION_FLAG, | 75 | .type = OPTION_FLAG, |
| 76 | .opt.flag = &rand_config.base64, | 76 | .opt.flag = &cfg.base64, |
| 77 | }, | 77 | }, |
| 78 | { | 78 | { |
| 79 | .name = "hex", | 79 | .name = "hex", |
| 80 | .desc = "Hexadecimal output", | 80 | .desc = "Hexadecimal output", |
| 81 | .type = OPTION_FLAG, | 81 | .type = OPTION_FLAG, |
| 82 | .opt.flag = &rand_config.hex, | 82 | .opt.flag = &cfg.hex, |
| 83 | }, | 83 | }, |
| 84 | { | 84 | { |
| 85 | .name = "out", | 85 | .name = "out", |
| 86 | .argname = "file", | 86 | .argname = "file", |
| 87 | .desc = "Write to the given file instead of standard output", | 87 | .desc = "Write to the given file instead of standard output", |
| 88 | .type = OPTION_ARG, | 88 | .type = OPTION_ARG, |
| 89 | .opt.arg = &rand_config.outfile, | 89 | .opt.arg = &cfg.outfile, |
| 90 | }, | 90 | }, |
| 91 | {NULL}, | 91 | {NULL}, |
| 92 | }; | 92 | }; |
| @@ -114,7 +114,7 @@ rand_main(int argc, char **argv) | |||
| 114 | exit(1); | 114 | exit(1); |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | memset(&rand_config, 0, sizeof(rand_config)); | 117 | memset(&cfg, 0, sizeof(cfg)); |
| 118 | 118 | ||
| 119 | if (options_parse(argc, argv, rand_options, &num_bytes, NULL) != 0) { | 119 | if (options_parse(argc, argv, rand_options, &num_bytes, NULL) != 0) { |
| 120 | rand_usage(); | 120 | rand_usage(); |
| @@ -128,7 +128,7 @@ rand_main(int argc, char **argv) | |||
| 128 | } else | 128 | } else |
| 129 | badopt = 1; | 129 | badopt = 1; |
| 130 | 130 | ||
| 131 | if (rand_config.hex && rand_config.base64) | 131 | if (cfg.hex && cfg.base64) |
| 132 | badopt = 1; | 132 | badopt = 1; |
| 133 | 133 | ||
| 134 | if (badopt) { | 134 | if (badopt) { |
| @@ -139,13 +139,13 @@ rand_main(int argc, char **argv) | |||
| 139 | out = BIO_new(BIO_s_file()); | 139 | out = BIO_new(BIO_s_file()); |
| 140 | if (out == NULL) | 140 | if (out == NULL) |
| 141 | goto err; | 141 | goto err; |
| 142 | if (rand_config.outfile != NULL) | 142 | if (cfg.outfile != NULL) |
| 143 | r = BIO_write_filename(out, rand_config.outfile); | 143 | r = BIO_write_filename(out, cfg.outfile); |
| 144 | else | 144 | else |
| 145 | r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); | 145 | r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); |
| 146 | if (r <= 0) | 146 | if (r <= 0) |
| 147 | goto err; | 147 | goto err; |
| 148 | if (rand_config.base64) { | 148 | if (cfg.base64) { |
| 149 | BIO *b64 = BIO_new(BIO_f_base64()); | 149 | BIO *b64 = BIO_new(BIO_f_base64()); |
| 150 | if (b64 == NULL) | 150 | if (b64 == NULL) |
| 151 | goto err; | 151 | goto err; |
| @@ -160,7 +160,7 @@ rand_main(int argc, char **argv) | |||
| 160 | if (chunk > (int) sizeof(buf)) | 160 | if (chunk > (int) sizeof(buf)) |
| 161 | chunk = sizeof(buf); | 161 | chunk = sizeof(buf); |
| 162 | arc4random_buf(buf, chunk); | 162 | arc4random_buf(buf, chunk); |
| 163 | if (rand_config.hex) { | 163 | if (cfg.hex) { |
| 164 | for (i = 0; i < chunk; i++) | 164 | for (i = 0; i < chunk; i++) |
| 165 | BIO_printf(out, "%02x", buf[i]); | 165 | BIO_printf(out, "%02x", buf[i]); |
| 166 | } else | 166 | } else |
| @@ -168,7 +168,7 @@ rand_main(int argc, char **argv) | |||
| 168 | num -= chunk; | 168 | num -= chunk; |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | if (rand_config.hex) | 171 | if (cfg.hex) |
| 172 | BIO_puts(out, "\n"); | 172 | BIO_puts(out, "\n"); |
| 173 | (void) BIO_flush(out); | 173 | (void) BIO_flush(out); |
| 174 | 174 | ||
diff --git a/src/usr.bin/openssl/req.c b/src/usr.bin/openssl/req.c index 797cbfa718..0994d0b288 100644 --- a/src/usr.bin/openssl/req.c +++ b/src/usr.bin/openssl/req.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: req.c,v 1.26 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: req.c,v 1.27 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -168,26 +168,26 @@ static struct { | |||
| 168 | int verbose; | 168 | int verbose; |
| 169 | int verify; | 169 | int verify; |
| 170 | int x509; | 170 | int x509; |
| 171 | } req_config; | 171 | } cfg; |
| 172 | 172 | ||
| 173 | static int | 173 | static int |
| 174 | req_opt_addext(char *arg) | 174 | req_opt_addext(char *arg) |
| 175 | { | 175 | { |
| 176 | int i; | 176 | int i; |
| 177 | 177 | ||
| 178 | if (req_config.addexts == NULL) { | 178 | if (cfg.addexts == NULL) { |
| 179 | req_config.addexts = (LHASH_OF(OPENSSL_STRING) *)lh_new( | 179 | cfg.addexts = (LHASH_OF(OPENSSL_STRING) *)lh_new( |
| 180 | (LHASH_HASH_FN_TYPE)ext_name_hash, | 180 | (LHASH_HASH_FN_TYPE)ext_name_hash, |
| 181 | (LHASH_COMP_FN_TYPE)ext_name_cmp); | 181 | (LHASH_COMP_FN_TYPE)ext_name_cmp); |
| 182 | req_config.addext_bio = BIO_new(BIO_s_mem()); | 182 | cfg.addext_bio = BIO_new(BIO_s_mem()); |
| 183 | if (req_config.addexts == NULL || | 183 | if (cfg.addexts == NULL || |
| 184 | req_config.addext_bio == NULL) | 184 | cfg.addext_bio == NULL) |
| 185 | return (1); | 185 | return (1); |
| 186 | } | 186 | } |
| 187 | i = duplicated(req_config.addexts, arg); | 187 | i = duplicated(cfg.addexts, arg); |
| 188 | if (i == 1) | 188 | if (i == 1) |
| 189 | return (1); | 189 | return (1); |
| 190 | if (i < 0 || BIO_printf(req_config.addext_bio, "%s\n", arg) < 0) | 190 | if (i < 0 || BIO_printf(cfg.addext_bio, "%s\n", arg) < 0) |
| 191 | return (1); | 191 | return (1); |
| 192 | 192 | ||
| 193 | return (0); | 193 | return (0); |
| @@ -198,11 +198,11 @@ req_opt_days(char *arg) | |||
| 198 | { | 198 | { |
| 199 | const char *errstr; | 199 | const char *errstr; |
| 200 | 200 | ||
| 201 | req_config.days = strtonum(arg, 1, INT_MAX, &errstr); | 201 | cfg.days = strtonum(arg, 1, INT_MAX, &errstr); |
| 202 | if (errstr != NULL) { | 202 | if (errstr != NULL) { |
| 203 | BIO_printf(bio_err, "bad -days %s, using 0: %s\n", | 203 | BIO_printf(bio_err, "bad -days %s, using 0: %s\n", |
| 204 | arg, errstr); | 204 | arg, errstr); |
| 205 | req_config.days = 30; | 205 | cfg.days = 30; |
| 206 | } | 206 | } |
| 207 | return (0); | 207 | return (0); |
| 208 | } | 208 | } |
| @@ -215,7 +215,7 @@ req_opt_digest(int argc, char **argv, int *argsused) | |||
| 215 | if (*name++ != '-') | 215 | if (*name++ != '-') |
| 216 | return (1); | 216 | return (1); |
| 217 | 217 | ||
| 218 | if ((req_config.digest = EVP_get_digestbyname(name)) == NULL) | 218 | if ((cfg.digest = EVP_get_digestbyname(name)) == NULL) |
| 219 | return (1); | 219 | return (1); |
| 220 | 220 | ||
| 221 | *argsused = 1; | 221 | *argsused = 1; |
| @@ -225,15 +225,15 @@ req_opt_digest(int argc, char **argv, int *argsused) | |||
| 225 | static int | 225 | static int |
| 226 | req_opt_newkey(char *arg) | 226 | req_opt_newkey(char *arg) |
| 227 | { | 227 | { |
| 228 | req_config.keyalg = arg; | 228 | cfg.keyalg = arg; |
| 229 | req_config.newreq = 1; | 229 | cfg.newreq = 1; |
| 230 | return (0); | 230 | return (0); |
| 231 | } | 231 | } |
| 232 | 232 | ||
| 233 | static int | 233 | static int |
| 234 | req_opt_nameopt(char *arg) | 234 | req_opt_nameopt(char *arg) |
| 235 | { | 235 | { |
| 236 | if (!set_name_ex(&req_config.nmflag, arg)) | 236 | if (!set_name_ex(&cfg.nmflag, arg)) |
| 237 | return (1); | 237 | return (1); |
| 238 | return (0); | 238 | return (0); |
| 239 | } | 239 | } |
| @@ -241,11 +241,11 @@ req_opt_nameopt(char *arg) | |||
| 241 | static int | 241 | static int |
| 242 | req_opt_pkeyopt(char *arg) | 242 | req_opt_pkeyopt(char *arg) |
| 243 | { | 243 | { |
| 244 | if (req_config.pkeyopts == NULL) | 244 | if (cfg.pkeyopts == NULL) |
| 245 | req_config.pkeyopts = sk_OPENSSL_STRING_new_null(); | 245 | cfg.pkeyopts = sk_OPENSSL_STRING_new_null(); |
| 246 | if (req_config.pkeyopts == NULL) | 246 | if (cfg.pkeyopts == NULL) |
| 247 | return (1); | 247 | return (1); |
| 248 | if (!sk_OPENSSL_STRING_push(req_config.pkeyopts, arg)) | 248 | if (!sk_OPENSSL_STRING_push(cfg.pkeyopts, arg)) |
| 249 | return (1); | 249 | return (1); |
| 250 | return (0); | 250 | return (0); |
| 251 | } | 251 | } |
| @@ -253,7 +253,7 @@ req_opt_pkeyopt(char *arg) | |||
| 253 | static int | 253 | static int |
| 254 | req_opt_reqopt(char *arg) | 254 | req_opt_reqopt(char *arg) |
| 255 | { | 255 | { |
| 256 | if (!set_cert_ex(&req_config.reqflag, arg)) | 256 | if (!set_cert_ex(&cfg.reqflag, arg)) |
| 257 | return (1); | 257 | return (1); |
| 258 | return (0); | 258 | return (0); |
| 259 | } | 259 | } |
| @@ -261,8 +261,8 @@ req_opt_reqopt(char *arg) | |||
| 261 | static int | 261 | static int |
| 262 | req_opt_set_serial(char *arg) | 262 | req_opt_set_serial(char *arg) |
| 263 | { | 263 | { |
| 264 | req_config.serial = s2i_ASN1_INTEGER(NULL, arg); | 264 | cfg.serial = s2i_ASN1_INTEGER(NULL, arg); |
| 265 | if (req_config.serial == NULL) | 265 | if (cfg.serial == NULL) |
| 266 | return (1); | 266 | return (1); |
| 267 | return (0); | 267 | return (0); |
| 268 | } | 268 | } |
| @@ -270,11 +270,11 @@ req_opt_set_serial(char *arg) | |||
| 270 | static int | 270 | static int |
| 271 | req_opt_sigopt(char *arg) | 271 | req_opt_sigopt(char *arg) |
| 272 | { | 272 | { |
| 273 | if (req_config.sigopts == NULL) | 273 | if (cfg.sigopts == NULL) |
| 274 | req_config.sigopts = sk_OPENSSL_STRING_new_null(); | 274 | cfg.sigopts = sk_OPENSSL_STRING_new_null(); |
| 275 | if (req_config.sigopts == NULL) | 275 | if (cfg.sigopts == NULL) |
| 276 | return (1); | 276 | return (1); |
| 277 | if (!sk_OPENSSL_STRING_push(req_config.sigopts, arg)) | 277 | if (!sk_OPENSSL_STRING_push(cfg.sigopts, arg)) |
| 278 | return (1); | 278 | return (1); |
| 279 | return (0); | 279 | return (0); |
| 280 | } | 280 | } |
| @@ -282,7 +282,7 @@ req_opt_sigopt(char *arg) | |||
| 282 | static int | 282 | static int |
| 283 | req_opt_utf8(void) | 283 | req_opt_utf8(void) |
| 284 | { | 284 | { |
| 285 | req_config.chtype = MBSTRING_UTF8; | 285 | cfg.chtype = MBSTRING_UTF8; |
| 286 | return (0); | 286 | return (0); |
| 287 | } | 287 | } |
| 288 | 288 | ||
| @@ -298,14 +298,14 @@ static const struct option req_options[] = { | |||
| 298 | .name = "batch", | 298 | .name = "batch", |
| 299 | .desc = "Operate in batch mode", | 299 | .desc = "Operate in batch mode", |
| 300 | .type = OPTION_FLAG, | 300 | .type = OPTION_FLAG, |
| 301 | .opt.flag = &req_config.batch, | 301 | .opt.flag = &cfg.batch, |
| 302 | }, | 302 | }, |
| 303 | { | 303 | { |
| 304 | .name = "config", | 304 | .name = "config", |
| 305 | .argname = "file", | 305 | .argname = "file", |
| 306 | .desc = "Configuration file to use as request template", | 306 | .desc = "Configuration file to use as request template", |
| 307 | .type = OPTION_ARG, | 307 | .type = OPTION_ARG, |
| 308 | .opt.arg = &req_config.template, | 308 | .opt.arg = &cfg.template, |
| 309 | }, | 309 | }, |
| 310 | { | 310 | { |
| 311 | .name = "days", | 311 | .name = "days", |
| @@ -319,54 +319,54 @@ static const struct option req_options[] = { | |||
| 319 | .argname = "section", | 319 | .argname = "section", |
| 320 | .desc = "Config section to use for certificate extensions", | 320 | .desc = "Config section to use for certificate extensions", |
| 321 | .type = OPTION_ARG, | 321 | .type = OPTION_ARG, |
| 322 | .opt.arg = &req_config.extensions, | 322 | .opt.arg = &cfg.extensions, |
| 323 | }, | 323 | }, |
| 324 | { | 324 | { |
| 325 | .name = "in", | 325 | .name = "in", |
| 326 | .argname = "file", | 326 | .argname = "file", |
| 327 | .desc = "Input file (default stdin)", | 327 | .desc = "Input file (default stdin)", |
| 328 | .type = OPTION_ARG, | 328 | .type = OPTION_ARG, |
| 329 | .opt.arg = &req_config.infile, | 329 | .opt.arg = &cfg.infile, |
| 330 | }, | 330 | }, |
| 331 | { | 331 | { |
| 332 | .name = "inform", | 332 | .name = "inform", |
| 333 | .argname = "format", | 333 | .argname = "format", |
| 334 | .desc = "Input format (DER or PEM (default))", | 334 | .desc = "Input format (DER or PEM (default))", |
| 335 | .type = OPTION_ARG_FORMAT, | 335 | .type = OPTION_ARG_FORMAT, |
| 336 | .opt.value = &req_config.informat, | 336 | .opt.value = &cfg.informat, |
| 337 | }, | 337 | }, |
| 338 | { | 338 | { |
| 339 | .name = "key", | 339 | .name = "key", |
| 340 | .argname = "file", | 340 | .argname = "file", |
| 341 | .desc = "Private key file", | 341 | .desc = "Private key file", |
| 342 | .type = OPTION_ARG, | 342 | .type = OPTION_ARG, |
| 343 | .opt.arg = &req_config.keyfile, | 343 | .opt.arg = &cfg.keyfile, |
| 344 | }, | 344 | }, |
| 345 | { | 345 | { |
| 346 | .name = "keyform", | 346 | .name = "keyform", |
| 347 | .argname = "format", | 347 | .argname = "format", |
| 348 | .desc = "Private key format (DER or PEM (default))", | 348 | .desc = "Private key format (DER or PEM (default))", |
| 349 | .type = OPTION_ARG_FORMAT, | 349 | .type = OPTION_ARG_FORMAT, |
| 350 | .opt.value = &req_config.keyform, | 350 | .opt.value = &cfg.keyform, |
| 351 | }, | 351 | }, |
| 352 | { | 352 | { |
| 353 | .name = "keyout", | 353 | .name = "keyout", |
| 354 | .argname = "file", | 354 | .argname = "file", |
| 355 | .desc = "Private key output file", | 355 | .desc = "Private key output file", |
| 356 | .type = OPTION_ARG, | 356 | .type = OPTION_ARG, |
| 357 | .opt.arg = &req_config.keyout, | 357 | .opt.arg = &cfg.keyout, |
| 358 | }, | 358 | }, |
| 359 | { | 359 | { |
| 360 | .name = "modulus", | 360 | .name = "modulus", |
| 361 | .desc = "Print RSA modulus", | 361 | .desc = "Print RSA modulus", |
| 362 | .type = OPTION_FLAG, | 362 | .type = OPTION_FLAG, |
| 363 | .opt.flag = &req_config.modulus, | 363 | .opt.flag = &cfg.modulus, |
| 364 | }, | 364 | }, |
| 365 | { | 365 | { |
| 366 | .name = "multivalue-rdn", | 366 | .name = "multivalue-rdn", |
| 367 | .desc = "Enable support for multivalued RDNs", | 367 | .desc = "Enable support for multivalued RDNs", |
| 368 | .type = OPTION_FLAG, | 368 | .type = OPTION_FLAG, |
| 369 | .opt.flag = &req_config.multirdn, | 369 | .opt.flag = &cfg.multirdn, |
| 370 | }, | 370 | }, |
| 371 | { | 371 | { |
| 372 | .name = "nameopt", | 372 | .name = "nameopt", |
| @@ -379,13 +379,13 @@ static const struct option req_options[] = { | |||
| 379 | .name = "new", | 379 | .name = "new", |
| 380 | .desc = "New request", | 380 | .desc = "New request", |
| 381 | .type = OPTION_FLAG, | 381 | .type = OPTION_FLAG, |
| 382 | .opt.flag = &req_config.newreq, | 382 | .opt.flag = &cfg.newreq, |
| 383 | }, | 383 | }, |
| 384 | { | 384 | { |
| 385 | .name = "newhdr", | 385 | .name = "newhdr", |
| 386 | .desc = "Include 'NEW' in header lines", | 386 | .desc = "Include 'NEW' in header lines", |
| 387 | .type = OPTION_FLAG, | 387 | .type = OPTION_FLAG, |
| 388 | .opt.flag = &req_config.newhdr, | 388 | .opt.flag = &cfg.newhdr, |
| 389 | }, | 389 | }, |
| 390 | { | 390 | { |
| 391 | .name = "newkey", | 391 | .name = "newkey", |
| @@ -398,41 +398,41 @@ static const struct option req_options[] = { | |||
| 398 | .name = "nodes", | 398 | .name = "nodes", |
| 399 | .desc = "Do not encrypt output private key", | 399 | .desc = "Do not encrypt output private key", |
| 400 | .type = OPTION_FLAG, | 400 | .type = OPTION_FLAG, |
| 401 | .opt.flag = &req_config.nodes, | 401 | .opt.flag = &cfg.nodes, |
| 402 | }, | 402 | }, |
| 403 | { | 403 | { |
| 404 | .name = "noout", | 404 | .name = "noout", |
| 405 | .desc = "Do not output request", | 405 | .desc = "Do not output request", |
| 406 | .type = OPTION_FLAG, | 406 | .type = OPTION_FLAG, |
| 407 | .opt.flag = &req_config.noout, | 407 | .opt.flag = &cfg.noout, |
| 408 | }, | 408 | }, |
| 409 | { | 409 | { |
| 410 | .name = "out", | 410 | .name = "out", |
| 411 | .argname = "file", | 411 | .argname = "file", |
| 412 | .desc = "Output file (default stdout)", | 412 | .desc = "Output file (default stdout)", |
| 413 | .type = OPTION_ARG, | 413 | .type = OPTION_ARG, |
| 414 | .opt.arg = &req_config.outfile, | 414 | .opt.arg = &cfg.outfile, |
| 415 | }, | 415 | }, |
| 416 | { | 416 | { |
| 417 | .name = "outform", | 417 | .name = "outform", |
| 418 | .argname = "format", | 418 | .argname = "format", |
| 419 | .desc = "Output format (DER or PEM (default))", | 419 | .desc = "Output format (DER or PEM (default))", |
| 420 | .type = OPTION_ARG_FORMAT, | 420 | .type = OPTION_ARG_FORMAT, |
| 421 | .opt.value = &req_config.outformat, | 421 | .opt.value = &cfg.outformat, |
| 422 | }, | 422 | }, |
| 423 | { | 423 | { |
| 424 | .name = "passin", | 424 | .name = "passin", |
| 425 | .argname = "source", | 425 | .argname = "source", |
| 426 | .desc = "Private key input password source", | 426 | .desc = "Private key input password source", |
| 427 | .type = OPTION_ARG, | 427 | .type = OPTION_ARG, |
| 428 | .opt.arg = &req_config.passargin, | 428 | .opt.arg = &cfg.passargin, |
| 429 | }, | 429 | }, |
| 430 | { | 430 | { |
| 431 | .name = "passout", | 431 | .name = "passout", |
| 432 | .argname = "source", | 432 | .argname = "source", |
| 433 | .desc = "Private key output password source", | 433 | .desc = "Private key output password source", |
| 434 | .type = OPTION_ARG, | 434 | .type = OPTION_ARG, |
| 435 | .opt.arg = &req_config.passargout, | 435 | .opt.arg = &cfg.passargout, |
| 436 | }, | 436 | }, |
| 437 | { | 437 | { |
| 438 | .name = "pkeyopt", | 438 | .name = "pkeyopt", |
| @@ -445,14 +445,14 @@ static const struct option req_options[] = { | |||
| 445 | .name = "pubkey", | 445 | .name = "pubkey", |
| 446 | .desc = "Output the public key", | 446 | .desc = "Output the public key", |
| 447 | .type = OPTION_FLAG, | 447 | .type = OPTION_FLAG, |
| 448 | .opt.flag = &req_config.pubkey, | 448 | .opt.flag = &cfg.pubkey, |
| 449 | }, | 449 | }, |
| 450 | { | 450 | { |
| 451 | .name = "reqexts", | 451 | .name = "reqexts", |
| 452 | .argname = "section", | 452 | .argname = "section", |
| 453 | .desc = "Config section to use for request extensions", | 453 | .desc = "Config section to use for request extensions", |
| 454 | .type = OPTION_ARG, | 454 | .type = OPTION_ARG, |
| 455 | .opt.arg = &req_config.req_exts, | 455 | .opt.arg = &cfg.req_exts, |
| 456 | }, | 456 | }, |
| 457 | { | 457 | { |
| 458 | .name = "reqopt", | 458 | .name = "reqopt", |
| @@ -480,19 +480,19 @@ static const struct option req_options[] = { | |||
| 480 | .argname = "name", | 480 | .argname = "name", |
| 481 | .desc = "Set or modify the request subject", | 481 | .desc = "Set or modify the request subject", |
| 482 | .type = OPTION_ARG, | 482 | .type = OPTION_ARG, |
| 483 | .opt.arg = &req_config.subj, | 483 | .opt.arg = &cfg.subj, |
| 484 | }, | 484 | }, |
| 485 | { | 485 | { |
| 486 | .name = "subject", | 486 | .name = "subject", |
| 487 | .desc = "Output the subject of the request", | 487 | .desc = "Output the subject of the request", |
| 488 | .type = OPTION_FLAG, | 488 | .type = OPTION_FLAG, |
| 489 | .opt.flag = &req_config.subject, | 489 | .opt.flag = &cfg.subject, |
| 490 | }, | 490 | }, |
| 491 | { | 491 | { |
| 492 | .name = "text", | 492 | .name = "text", |
| 493 | .desc = "Print request in text form", | 493 | .desc = "Print request in text form", |
| 494 | .type = OPTION_FLAG, | 494 | .type = OPTION_FLAG, |
| 495 | .opt.flag = &req_config.text, | 495 | .opt.flag = &cfg.text, |
| 496 | }, | 496 | }, |
| 497 | { | 497 | { |
| 498 | .name = "utf8", | 498 | .name = "utf8", |
| @@ -504,19 +504,19 @@ static const struct option req_options[] = { | |||
| 504 | .name = "verbose", | 504 | .name = "verbose", |
| 505 | .desc = "Verbose", | 505 | .desc = "Verbose", |
| 506 | .type = OPTION_FLAG, | 506 | .type = OPTION_FLAG, |
| 507 | .opt.flag = &req_config.verbose, | 507 | .opt.flag = &cfg.verbose, |
| 508 | }, | 508 | }, |
| 509 | { | 509 | { |
| 510 | .name = "verify", | 510 | .name = "verify", |
| 511 | .desc = "Verify signature on request", | 511 | .desc = "Verify signature on request", |
| 512 | .type = OPTION_FLAG, | 512 | .type = OPTION_FLAG, |
| 513 | .opt.flag = &req_config.verify, | 513 | .opt.flag = &cfg.verify, |
| 514 | }, | 514 | }, |
| 515 | { | 515 | { |
| 516 | .name = "x509", | 516 | .name = "x509", |
| 517 | .desc = "Output an X.509 structure instead of a certificate request", | 517 | .desc = "Output an X.509 structure instead of a certificate request", |
| 518 | .type = OPTION_FLAG, | 518 | .type = OPTION_FLAG, |
| 519 | .opt.flag = &req_config.x509, | 519 | .opt.flag = &cfg.x509, |
| 520 | }, | 520 | }, |
| 521 | { | 521 | { |
| 522 | .name = NULL, | 522 | .name = NULL, |
| @@ -568,15 +568,15 @@ req_main(int argc, char **argv) | |||
| 568 | exit(1); | 568 | exit(1); |
| 569 | } | 569 | } |
| 570 | 570 | ||
| 571 | memset(&req_config, 0, sizeof(req_config)); | 571 | memset(&cfg, 0, sizeof(cfg)); |
| 572 | 572 | ||
| 573 | req_config.chtype = MBSTRING_ASC; | 573 | cfg.chtype = MBSTRING_ASC; |
| 574 | req_config.days = 30; | 574 | cfg.days = 30; |
| 575 | req_config.digest = EVP_sha256(); | 575 | cfg.digest = EVP_sha256(); |
| 576 | req_config.newkey = -1; | 576 | cfg.newkey = -1; |
| 577 | req_config.informat = FORMAT_PEM; | 577 | cfg.informat = FORMAT_PEM; |
| 578 | req_config.keyform = FORMAT_PEM; | 578 | cfg.keyform = FORMAT_PEM; |
| 579 | req_config.outformat = FORMAT_PEM; | 579 | cfg.outformat = FORMAT_PEM; |
| 580 | 580 | ||
| 581 | if (options_parse(argc, argv, req_options, NULL, NULL) != 0) { | 581 | if (options_parse(argc, argv, req_options, NULL, NULL) != 0) { |
| 582 | req_usage(); | 582 | req_usage(); |
| @@ -586,19 +586,19 @@ req_main(int argc, char **argv) | |||
| 586 | req_conf = NULL; | 586 | req_conf = NULL; |
| 587 | cipher = EVP_aes_256_cbc(); | 587 | cipher = EVP_aes_256_cbc(); |
| 588 | 588 | ||
| 589 | if (!app_passwd(bio_err, req_config.passargin, req_config.passargout, &passin, &passout)) { | 589 | if (!app_passwd(bio_err, cfg.passargin, cfg.passargout, &passin, &passout)) { |
| 590 | BIO_printf(bio_err, "Error getting passwords\n"); | 590 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 591 | goto end; | 591 | goto end; |
| 592 | } | 592 | } |
| 593 | if (req_config.template != NULL) { | 593 | if (cfg.template != NULL) { |
| 594 | long errline = -1; | 594 | long errline = -1; |
| 595 | 595 | ||
| 596 | if (req_config.verbose) | 596 | if (cfg.verbose) |
| 597 | BIO_printf(bio_err, "Using configuration from %s\n", req_config.template); | 597 | BIO_printf(bio_err, "Using configuration from %s\n", cfg.template); |
| 598 | if ((req_conf = NCONF_new(NULL)) == NULL) | 598 | if ((req_conf = NCONF_new(NULL)) == NULL) |
| 599 | goto end; | 599 | goto end; |
| 600 | if(!NCONF_load(req_conf, req_config.template, &errline)) { | 600 | if(!NCONF_load(req_conf, cfg.template, &errline)) { |
| 601 | BIO_printf(bio_err, "error on line %ld of %s\n", errline, req_config.template); | 601 | BIO_printf(bio_err, "error on line %ld of %s\n", errline, cfg.template); |
| 602 | goto end; | 602 | goto end; |
| 603 | } | 603 | } |
| 604 | } else { | 604 | } else { |
| @@ -606,21 +606,21 @@ req_main(int argc, char **argv) | |||
| 606 | 606 | ||
| 607 | if (req_conf == NULL) { | 607 | if (req_conf == NULL) { |
| 608 | BIO_printf(bio_err, "Unable to load config info from %s\n", default_config_file); | 608 | BIO_printf(bio_err, "Unable to load config info from %s\n", default_config_file); |
| 609 | if (req_config.newreq) | 609 | if (cfg.newreq) |
| 610 | goto end; | 610 | goto end; |
| 611 | } else if (req_config.verbose) | 611 | } else if (cfg.verbose) |
| 612 | BIO_printf(bio_err, "Using configuration from %s\n", | 612 | BIO_printf(bio_err, "Using configuration from %s\n", |
| 613 | default_config_file); | 613 | default_config_file); |
| 614 | } | 614 | } |
| 615 | 615 | ||
| 616 | if (req_config.addext_bio != NULL) { | 616 | if (cfg.addext_bio != NULL) { |
| 617 | long errline = -1; | 617 | long errline = -1; |
| 618 | if (req_config.verbose) | 618 | if (cfg.verbose) |
| 619 | BIO_printf(bio_err, | 619 | BIO_printf(bio_err, |
| 620 | "Using additional configuration from command line\n"); | 620 | "Using additional configuration from command line\n"); |
| 621 | if ((addext_conf = NCONF_new(NULL)) == NULL) | 621 | if ((addext_conf = NCONF_new(NULL)) == NULL) |
| 622 | goto end; | 622 | goto end; |
| 623 | if (!NCONF_load_bio(addext_conf, req_config.addext_bio, &errline)) { | 623 | if (!NCONF_load_bio(addext_conf, cfg.addext_bio, &errline)) { |
| 624 | BIO_printf(bio_err, | 624 | BIO_printf(bio_err, |
| 625 | "req: Error on line %ld of config input\n", | 625 | "req: Error on line %ld of config input\n", |
| 626 | errline); | 626 | errline); |
| @@ -658,22 +658,22 @@ req_main(int argc, char **argv) | |||
| 658 | ERR_clear_error(); | 658 | ERR_clear_error(); |
| 659 | if (p != NULL) { | 659 | if (p != NULL) { |
| 660 | if ((md_alg = EVP_get_digestbyname(p)) != NULL) | 660 | if ((md_alg = EVP_get_digestbyname(p)) != NULL) |
| 661 | req_config.digest = md_alg; | 661 | cfg.digest = md_alg; |
| 662 | } | 662 | } |
| 663 | } | 663 | } |
| 664 | if (!req_config.extensions) { | 664 | if (!cfg.extensions) { |
| 665 | req_config.extensions = NCONF_get_string(req_conf, SECTION, V3_EXTENSIONS); | 665 | cfg.extensions = NCONF_get_string(req_conf, SECTION, V3_EXTENSIONS); |
| 666 | if (!req_config.extensions) | 666 | if (!cfg.extensions) |
| 667 | ERR_clear_error(); | 667 | ERR_clear_error(); |
| 668 | } | 668 | } |
| 669 | if (req_config.extensions) { | 669 | if (cfg.extensions) { |
| 670 | /* Check syntax of file */ | 670 | /* Check syntax of file */ |
| 671 | X509V3_CTX ctx; | 671 | X509V3_CTX ctx; |
| 672 | X509V3_set_ctx_test(&ctx); | 672 | X509V3_set_ctx_test(&ctx); |
| 673 | X509V3_set_nconf(&ctx, req_conf); | 673 | X509V3_set_nconf(&ctx, req_conf); |
| 674 | if (!X509V3_EXT_add_nconf(req_conf, &ctx, req_config.extensions, NULL)) { | 674 | if (!X509V3_EXT_add_nconf(req_conf, &ctx, cfg.extensions, NULL)) { |
| 675 | BIO_printf(bio_err, | 675 | BIO_printf(bio_err, |
| 676 | "Error Loading extension section %s\n", req_config.extensions); | 676 | "Error Loading extension section %s\n", cfg.extensions); |
| 677 | goto end; | 677 | goto end; |
| 678 | } | 678 | } |
| 679 | } | 679 | } |
| @@ -706,27 +706,27 @@ req_main(int argc, char **argv) | |||
| 706 | BIO_printf(bio_err, "Invalid global string mask setting %s\n", p); | 706 | BIO_printf(bio_err, "Invalid global string mask setting %s\n", p); |
| 707 | goto end; | 707 | goto end; |
| 708 | } | 708 | } |
| 709 | if (req_config.chtype != MBSTRING_UTF8) { | 709 | if (cfg.chtype != MBSTRING_UTF8) { |
| 710 | p = NCONF_get_string(req_conf, SECTION, UTF8_IN); | 710 | p = NCONF_get_string(req_conf, SECTION, UTF8_IN); |
| 711 | if (!p) | 711 | if (!p) |
| 712 | ERR_clear_error(); | 712 | ERR_clear_error(); |
| 713 | else if (!strcmp(p, "yes")) | 713 | else if (!strcmp(p, "yes")) |
| 714 | req_config.chtype = MBSTRING_UTF8; | 714 | cfg.chtype = MBSTRING_UTF8; |
| 715 | } | 715 | } |
| 716 | if (!req_config.req_exts) { | 716 | if (!cfg.req_exts) { |
| 717 | req_config.req_exts = NCONF_get_string(req_conf, SECTION, REQ_EXTENSIONS); | 717 | cfg.req_exts = NCONF_get_string(req_conf, SECTION, REQ_EXTENSIONS); |
| 718 | if (!req_config.req_exts) | 718 | if (!cfg.req_exts) |
| 719 | ERR_clear_error(); | 719 | ERR_clear_error(); |
| 720 | } | 720 | } |
| 721 | if (req_config.req_exts) { | 721 | if (cfg.req_exts) { |
| 722 | /* Check syntax of file */ | 722 | /* Check syntax of file */ |
| 723 | X509V3_CTX ctx; | 723 | X509V3_CTX ctx; |
| 724 | X509V3_set_ctx_test(&ctx); | 724 | X509V3_set_ctx_test(&ctx); |
| 725 | X509V3_set_nconf(&ctx, req_conf); | 725 | X509V3_set_nconf(&ctx, req_conf); |
| 726 | if (!X509V3_EXT_add_nconf(req_conf, &ctx, req_config.req_exts, NULL)) { | 726 | if (!X509V3_EXT_add_nconf(req_conf, &ctx, cfg.req_exts, NULL)) { |
| 727 | BIO_printf(bio_err, | 727 | BIO_printf(bio_err, |
| 728 | "Error Loading request extension section %s\n", | 728 | "Error Loading request extension section %s\n", |
| 729 | req_config.req_exts); | 729 | cfg.req_exts); |
| 730 | goto end; | 730 | goto end; |
| 731 | } | 731 | } |
| 732 | } | 732 | } |
| @@ -735,8 +735,8 @@ req_main(int argc, char **argv) | |||
| 735 | if ((in == NULL) || (out == NULL)) | 735 | if ((in == NULL) || (out == NULL)) |
| 736 | goto end; | 736 | goto end; |
| 737 | 737 | ||
| 738 | if (req_config.keyfile != NULL) { | 738 | if (cfg.keyfile != NULL) { |
| 739 | pkey = load_key(bio_err, req_config.keyfile, req_config.keyform, 0, passin, | 739 | pkey = load_key(bio_err, cfg.keyfile, cfg.keyform, 0, passin, |
| 740 | "Private Key"); | 740 | "Private Key"); |
| 741 | if (!pkey) { | 741 | if (!pkey) { |
| 742 | /* | 742 | /* |
| @@ -746,31 +746,31 @@ req_main(int argc, char **argv) | |||
| 746 | goto end; | 746 | goto end; |
| 747 | } | 747 | } |
| 748 | } | 748 | } |
| 749 | if (req_config.newreq && (pkey == NULL)) { | 749 | if (cfg.newreq && (pkey == NULL)) { |
| 750 | if (!NCONF_get_number(req_conf, SECTION, BITS, &req_config.newkey)) { | 750 | if (!NCONF_get_number(req_conf, SECTION, BITS, &cfg.newkey)) { |
| 751 | req_config.newkey = DEFAULT_KEY_LENGTH; | 751 | cfg.newkey = DEFAULT_KEY_LENGTH; |
| 752 | } | 752 | } |
| 753 | if (req_config.keyalg) { | 753 | if (cfg.keyalg) { |
| 754 | genctx = set_keygen_ctx(bio_err, req_config.keyalg, &pkey_type, &req_config.newkey, | 754 | genctx = set_keygen_ctx(bio_err, cfg.keyalg, &pkey_type, &cfg.newkey, |
| 755 | &keyalgstr); | 755 | &keyalgstr); |
| 756 | if (!genctx) | 756 | if (!genctx) |
| 757 | goto end; | 757 | goto end; |
| 758 | } | 758 | } |
| 759 | if (req_config.newkey < MIN_KEY_LENGTH && (pkey_type == EVP_PKEY_RSA || pkey_type == EVP_PKEY_DSA)) { | 759 | if (cfg.newkey < MIN_KEY_LENGTH && (pkey_type == EVP_PKEY_RSA || pkey_type == EVP_PKEY_DSA)) { |
| 760 | BIO_printf(bio_err, "private key length is too short,\n"); | 760 | BIO_printf(bio_err, "private key length is too short,\n"); |
| 761 | BIO_printf(bio_err, "it needs to be at least %d bits, not %ld\n", MIN_KEY_LENGTH, req_config.newkey); | 761 | BIO_printf(bio_err, "it needs to be at least %d bits, not %ld\n", MIN_KEY_LENGTH, cfg.newkey); |
| 762 | goto end; | 762 | goto end; |
| 763 | } | 763 | } |
| 764 | if (!genctx) { | 764 | if (!genctx) { |
| 765 | genctx = set_keygen_ctx(bio_err, NULL, &pkey_type, &req_config.newkey, | 765 | genctx = set_keygen_ctx(bio_err, NULL, &pkey_type, &cfg.newkey, |
| 766 | &keyalgstr); | 766 | &keyalgstr); |
| 767 | if (!genctx) | 767 | if (!genctx) |
| 768 | goto end; | 768 | goto end; |
| 769 | } | 769 | } |
| 770 | if (req_config.pkeyopts) { | 770 | if (cfg.pkeyopts) { |
| 771 | char *genopt; | 771 | char *genopt; |
| 772 | for (i = 0; i < sk_OPENSSL_STRING_num(req_config.pkeyopts); i++) { | 772 | for (i = 0; i < sk_OPENSSL_STRING_num(cfg.pkeyopts); i++) { |
| 773 | genopt = sk_OPENSSL_STRING_value(req_config.pkeyopts, i); | 773 | genopt = sk_OPENSSL_STRING_value(cfg.pkeyopts, i); |
| 774 | if (pkey_ctrl_string(genctx, genopt) <= 0) { | 774 | if (pkey_ctrl_string(genctx, genopt) <= 0) { |
| 775 | BIO_printf(bio_err, | 775 | BIO_printf(bio_err, |
| 776 | "parameter error \"%s\"\n", | 776 | "parameter error \"%s\"\n", |
| @@ -781,7 +781,7 @@ req_main(int argc, char **argv) | |||
| 781 | } | 781 | } |
| 782 | } | 782 | } |
| 783 | BIO_printf(bio_err, "Generating a %ld bit %s private key\n", | 783 | BIO_printf(bio_err, "Generating a %ld bit %s private key\n", |
| 784 | req_config.newkey, keyalgstr); | 784 | cfg.newkey, keyalgstr); |
| 785 | 785 | ||
| 786 | EVP_PKEY_CTX_set_cb(genctx, genpkey_cb); | 786 | EVP_PKEY_CTX_set_cb(genctx, genpkey_cb); |
| 787 | EVP_PKEY_CTX_set_app_data(genctx, bio_err); | 787 | EVP_PKEY_CTX_set_app_data(genctx, bio_err); |
| @@ -793,18 +793,18 @@ req_main(int argc, char **argv) | |||
| 793 | EVP_PKEY_CTX_free(genctx); | 793 | EVP_PKEY_CTX_free(genctx); |
| 794 | genctx = NULL; | 794 | genctx = NULL; |
| 795 | 795 | ||
| 796 | if (req_config.keyout == NULL) { | 796 | if (cfg.keyout == NULL) { |
| 797 | req_config.keyout = NCONF_get_string(req_conf, SECTION, KEYFILE); | 797 | cfg.keyout = NCONF_get_string(req_conf, SECTION, KEYFILE); |
| 798 | if (req_config.keyout == NULL) | 798 | if (cfg.keyout == NULL) |
| 799 | ERR_clear_error(); | 799 | ERR_clear_error(); |
| 800 | } | 800 | } |
| 801 | if (req_config.keyout == NULL) { | 801 | if (cfg.keyout == NULL) { |
| 802 | BIO_printf(bio_err, "writing new private key to stdout\n"); | 802 | BIO_printf(bio_err, "writing new private key to stdout\n"); |
| 803 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 803 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 804 | } else { | 804 | } else { |
| 805 | BIO_printf(bio_err, "writing new private key to '%s'\n", req_config.keyout); | 805 | BIO_printf(bio_err, "writing new private key to '%s'\n", cfg.keyout); |
| 806 | if (BIO_write_filename(out, req_config.keyout) <= 0) { | 806 | if (BIO_write_filename(out, cfg.keyout) <= 0) { |
| 807 | perror(req_config.keyout); | 807 | perror(cfg.keyout); |
| 808 | goto end; | 808 | goto end; |
| 809 | } | 809 | } |
| 810 | } | 810 | } |
| @@ -818,7 +818,7 @@ req_main(int argc, char **argv) | |||
| 818 | } | 818 | } |
| 819 | if ((p != NULL) && (strcmp(p, "no") == 0)) | 819 | if ((p != NULL) && (strcmp(p, "no") == 0)) |
| 820 | cipher = NULL; | 820 | cipher = NULL; |
| 821 | if (req_config.nodes) | 821 | if (cfg.nodes) |
| 822 | cipher = NULL; | 822 | cipher = NULL; |
| 823 | 823 | ||
| 824 | i = 0; | 824 | i = 0; |
| @@ -835,19 +835,19 @@ req_main(int argc, char **argv) | |||
| 835 | } | 835 | } |
| 836 | BIO_printf(bio_err, "-----\n"); | 836 | BIO_printf(bio_err, "-----\n"); |
| 837 | } | 837 | } |
| 838 | if (!req_config.newreq) { | 838 | if (!cfg.newreq) { |
| 839 | if (req_config.infile == NULL) | 839 | if (cfg.infile == NULL) |
| 840 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 840 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 841 | else { | 841 | else { |
| 842 | if (BIO_read_filename(in, req_config.infile) <= 0) { | 842 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 843 | perror(req_config.infile); | 843 | perror(cfg.infile); |
| 844 | goto end; | 844 | goto end; |
| 845 | } | 845 | } |
| 846 | } | 846 | } |
| 847 | 847 | ||
| 848 | if (req_config.informat == FORMAT_ASN1) | 848 | if (cfg.informat == FORMAT_ASN1) |
| 849 | req = d2i_X509_REQ_bio(in, NULL); | 849 | req = d2i_X509_REQ_bio(in, NULL); |
| 850 | else if (req_config.informat == FORMAT_PEM) | 850 | else if (cfg.informat == FORMAT_PEM) |
| 851 | req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL); | 851 | req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL); |
| 852 | else { | 852 | else { |
| 853 | BIO_printf(bio_err, "bad input format specified for X509 request\n"); | 853 | BIO_printf(bio_err, "bad input format specified for X509 request\n"); |
| @@ -858,7 +858,7 @@ req_main(int argc, char **argv) | |||
| 858 | goto end; | 858 | goto end; |
| 859 | } | 859 | } |
| 860 | } | 860 | } |
| 861 | if (req_config.newreq || req_config.x509) { | 861 | if (cfg.newreq || cfg.x509) { |
| 862 | if (pkey == NULL) { | 862 | if (pkey == NULL) { |
| 863 | BIO_printf(bio_err, "you need to specify a private key\n"); | 863 | BIO_printf(bio_err, "you need to specify a private key\n"); |
| 864 | goto end; | 864 | goto end; |
| @@ -868,14 +868,14 @@ req_main(int argc, char **argv) | |||
| 868 | if (req == NULL) { | 868 | if (req == NULL) { |
| 869 | goto end; | 869 | goto end; |
| 870 | } | 870 | } |
| 871 | i = make_REQ(req, pkey, req_config.subj, req_config.multirdn, !req_config.x509, req_config.chtype); | 871 | i = make_REQ(req, pkey, cfg.subj, cfg.multirdn, !cfg.x509, cfg.chtype); |
| 872 | req_config.subj = NULL; /* done processing '-subj' option */ | 872 | cfg.subj = NULL; /* done processing '-subj' option */ |
| 873 | if (!i) { | 873 | if (!i) { |
| 874 | BIO_printf(bio_err, "problems making Certificate Request\n"); | 874 | BIO_printf(bio_err, "problems making Certificate Request\n"); |
| 875 | goto end; | 875 | goto end; |
| 876 | } | 876 | } |
| 877 | } | 877 | } |
| 878 | if (req_config.x509) { | 878 | if (cfg.x509) { |
| 879 | EVP_PKEY *tmppkey; | 879 | EVP_PKEY *tmppkey; |
| 880 | 880 | ||
| 881 | X509V3_CTX ext_ctx; | 881 | X509V3_CTX ext_ctx; |
| @@ -883,11 +883,11 @@ req_main(int argc, char **argv) | |||
| 883 | goto end; | 883 | goto end; |
| 884 | 884 | ||
| 885 | /* Set version to V3 */ | 885 | /* Set version to V3 */ |
| 886 | if ((req_config.extensions != NULL || addext_conf != NULL) && | 886 | if ((cfg.extensions != NULL || addext_conf != NULL) && |
| 887 | !X509_set_version(x509ss, 2)) | 887 | !X509_set_version(x509ss, 2)) |
| 888 | goto end; | 888 | goto end; |
| 889 | if (req_config.serial) { | 889 | if (cfg.serial) { |
| 890 | if (!X509_set_serialNumber(x509ss, req_config.serial)) | 890 | if (!X509_set_serialNumber(x509ss, cfg.serial)) |
| 891 | goto end; | 891 | goto end; |
| 892 | } else { | 892 | } else { |
| 893 | if (!rand_serial(NULL, | 893 | if (!rand_serial(NULL, |
| @@ -899,7 +899,7 @@ req_main(int argc, char **argv) | |||
| 899 | goto end; | 899 | goto end; |
| 900 | if (!X509_gmtime_adj(X509_get_notBefore(x509ss), 0)) | 900 | if (!X509_gmtime_adj(X509_get_notBefore(x509ss), 0)) |
| 901 | goto end; | 901 | goto end; |
| 902 | if (!X509_time_adj_ex(X509_get_notAfter(x509ss), req_config.days, 0, NULL)) | 902 | if (!X509_time_adj_ex(X509_get_notAfter(x509ss), cfg.days, 0, NULL)) |
| 903 | goto end; | 903 | goto end; |
| 904 | if (!X509_set_subject_name(x509ss, X509_REQ_get_subject_name(req))) | 904 | if (!X509_set_subject_name(x509ss, X509_REQ_get_subject_name(req))) |
| 905 | goto end; | 905 | goto end; |
| @@ -914,11 +914,11 @@ req_main(int argc, char **argv) | |||
| 914 | X509V3_set_nconf(&ext_ctx, req_conf); | 914 | X509V3_set_nconf(&ext_ctx, req_conf); |
| 915 | 915 | ||
| 916 | /* Add extensions */ | 916 | /* Add extensions */ |
| 917 | if (req_config.extensions && !X509V3_EXT_add_nconf(req_conf, | 917 | if (cfg.extensions && !X509V3_EXT_add_nconf(req_conf, |
| 918 | &ext_ctx, req_config.extensions, x509ss)) { | 918 | &ext_ctx, cfg.extensions, x509ss)) { |
| 919 | BIO_printf(bio_err, | 919 | BIO_printf(bio_err, |
| 920 | "Error Loading extension section %s\n", | 920 | "Error Loading extension section %s\n", |
| 921 | req_config.extensions); | 921 | cfg.extensions); |
| 922 | goto end; | 922 | goto end; |
| 923 | } | 923 | } |
| 924 | if (addext_conf != NULL && | 924 | if (addext_conf != NULL && |
| @@ -928,7 +928,7 @@ req_main(int argc, char **argv) | |||
| 928 | "Error Loading command line extensions\n"); | 928 | "Error Loading command line extensions\n"); |
| 929 | goto end; | 929 | goto end; |
| 930 | } | 930 | } |
| 931 | i = do_X509_sign(bio_err, x509ss, pkey, req_config.digest, req_config.sigopts); | 931 | i = do_X509_sign(bio_err, x509ss, pkey, cfg.digest, cfg.sigopts); |
| 932 | if (!i) { | 932 | if (!i) { |
| 933 | ERR_print_errors(bio_err); | 933 | ERR_print_errors(bio_err); |
| 934 | goto end; | 934 | goto end; |
| @@ -942,11 +942,11 @@ req_main(int argc, char **argv) | |||
| 942 | X509V3_set_nconf(&ext_ctx, req_conf); | 942 | X509V3_set_nconf(&ext_ctx, req_conf); |
| 943 | 943 | ||
| 944 | /* Add extensions */ | 944 | /* Add extensions */ |
| 945 | if (req_config.req_exts && !X509V3_EXT_REQ_add_nconf(req_conf, | 945 | if (cfg.req_exts && !X509V3_EXT_REQ_add_nconf(req_conf, |
| 946 | &ext_ctx, req_config.req_exts, req)) { | 946 | &ext_ctx, cfg.req_exts, req)) { |
| 947 | BIO_printf(bio_err, | 947 | BIO_printf(bio_err, |
| 948 | "Error Loading extension section %s\n", | 948 | "Error Loading extension section %s\n", |
| 949 | req_config.req_exts); | 949 | cfg.req_exts); |
| 950 | goto end; | 950 | goto end; |
| 951 | } | 951 | } |
| 952 | if (addext_conf != NULL && | 952 | if (addext_conf != NULL && |
| @@ -956,33 +956,33 @@ req_main(int argc, char **argv) | |||
| 956 | "Error Loading command line extensions\n"); | 956 | "Error Loading command line extensions\n"); |
| 957 | goto end; | 957 | goto end; |
| 958 | } | 958 | } |
| 959 | i = do_X509_REQ_sign(bio_err, req, pkey, req_config.digest, req_config.sigopts); | 959 | i = do_X509_REQ_sign(bio_err, req, pkey, cfg.digest, cfg.sigopts); |
| 960 | if (!i) { | 960 | if (!i) { |
| 961 | ERR_print_errors(bio_err); | 961 | ERR_print_errors(bio_err); |
| 962 | goto end; | 962 | goto end; |
| 963 | } | 963 | } |
| 964 | } | 964 | } |
| 965 | } | 965 | } |
| 966 | if (req_config.subj && req_config.x509) { | 966 | if (cfg.subj && cfg.x509) { |
| 967 | BIO_printf(bio_err, "Cannot modify certificate subject\n"); | 967 | BIO_printf(bio_err, "Cannot modify certificate subject\n"); |
| 968 | goto end; | 968 | goto end; |
| 969 | } | 969 | } |
| 970 | if (req_config.subj && !req_config.x509) { | 970 | if (cfg.subj && !cfg.x509) { |
| 971 | if (req_config.verbose) { | 971 | if (cfg.verbose) { |
| 972 | BIO_printf(bio_err, "Modifying Request's Subject\n"); | 972 | BIO_printf(bio_err, "Modifying Request's Subject\n"); |
| 973 | print_name(bio_err, "old subject=", X509_REQ_get_subject_name(req), req_config.nmflag); | 973 | print_name(bio_err, "old subject=", X509_REQ_get_subject_name(req), cfg.nmflag); |
| 974 | } | 974 | } |
| 975 | if (build_subject(req, req_config.subj, req_config.chtype, req_config.multirdn) == 0) { | 975 | if (build_subject(req, cfg.subj, cfg.chtype, cfg.multirdn) == 0) { |
| 976 | BIO_printf(bio_err, "ERROR: cannot modify subject\n"); | 976 | BIO_printf(bio_err, "ERROR: cannot modify subject\n"); |
| 977 | ex = 1; | 977 | ex = 1; |
| 978 | goto end; | 978 | goto end; |
| 979 | } | 979 | } |
| 980 | 980 | ||
| 981 | if (req_config.verbose) { | 981 | if (cfg.verbose) { |
| 982 | print_name(bio_err, "new subject=", X509_REQ_get_subject_name(req), req_config.nmflag); | 982 | print_name(bio_err, "new subject=", X509_REQ_get_subject_name(req), cfg.nmflag); |
| 983 | } | 983 | } |
| 984 | } | 984 | } |
| 985 | if (req_config.verify && !req_config.x509) { | 985 | if (cfg.verify && !cfg.x509) { |
| 986 | EVP_PKEY *pubkey = pkey; | 986 | EVP_PKEY *pubkey = pkey; |
| 987 | 987 | ||
| 988 | if (pubkey == NULL) | 988 | if (pubkey == NULL) |
| @@ -998,24 +998,24 @@ req_main(int argc, char **argv) | |||
| 998 | } else /* if (i > 0) */ | 998 | } else /* if (i > 0) */ |
| 999 | BIO_printf(bio_err, "verify OK\n"); | 999 | BIO_printf(bio_err, "verify OK\n"); |
| 1000 | } | 1000 | } |
| 1001 | if (req_config.noout && !req_config.text && !req_config.modulus && !req_config.subject && !req_config.pubkey) { | 1001 | if (cfg.noout && !cfg.text && !cfg.modulus && !cfg.subject && !cfg.pubkey) { |
| 1002 | ex = 0; | 1002 | ex = 0; |
| 1003 | goto end; | 1003 | goto end; |
| 1004 | } | 1004 | } |
| 1005 | if (req_config.outfile == NULL) { | 1005 | if (cfg.outfile == NULL) { |
| 1006 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 1006 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 1007 | } else { | 1007 | } else { |
| 1008 | if ((req_config.keyout != NULL) && (strcmp(req_config.outfile, req_config.keyout) == 0)) | 1008 | if ((cfg.keyout != NULL) && (strcmp(cfg.outfile, cfg.keyout) == 0)) |
| 1009 | i = (int) BIO_append_filename(out, req_config.outfile); | 1009 | i = (int) BIO_append_filename(out, cfg.outfile); |
| 1010 | else | 1010 | else |
| 1011 | i = (int) BIO_write_filename(out, req_config.outfile); | 1011 | i = (int) BIO_write_filename(out, cfg.outfile); |
| 1012 | if (!i) { | 1012 | if (!i) { |
| 1013 | perror(req_config.outfile); | 1013 | perror(cfg.outfile); |
| 1014 | goto end; | 1014 | goto end; |
| 1015 | } | 1015 | } |
| 1016 | } | 1016 | } |
| 1017 | 1017 | ||
| 1018 | if (req_config.pubkey) { | 1018 | if (cfg.pubkey) { |
| 1019 | EVP_PKEY *tpubkey; | 1019 | EVP_PKEY *tpubkey; |
| 1020 | 1020 | ||
| 1021 | if ((tpubkey = X509_REQ_get0_pubkey(req)) == NULL) { | 1021 | if ((tpubkey = X509_REQ_get0_pubkey(req)) == NULL) { |
| @@ -1025,22 +1025,22 @@ req_main(int argc, char **argv) | |||
| 1025 | } | 1025 | } |
| 1026 | PEM_write_bio_PUBKEY(out, tpubkey); | 1026 | PEM_write_bio_PUBKEY(out, tpubkey); |
| 1027 | } | 1027 | } |
| 1028 | if (req_config.text) { | 1028 | if (cfg.text) { |
| 1029 | if (req_config.x509) | 1029 | if (cfg.x509) |
| 1030 | X509_print_ex(out, x509ss, req_config.nmflag, req_config.reqflag); | 1030 | X509_print_ex(out, x509ss, cfg.nmflag, cfg.reqflag); |
| 1031 | else | 1031 | else |
| 1032 | X509_REQ_print_ex(out, req, req_config.nmflag, req_config.reqflag); | 1032 | X509_REQ_print_ex(out, req, cfg.nmflag, cfg.reqflag); |
| 1033 | } | 1033 | } |
| 1034 | if (req_config.subject) { | 1034 | if (cfg.subject) { |
| 1035 | if (req_config.x509) | 1035 | if (cfg.x509) |
| 1036 | print_name(out, "subject=", X509_get_subject_name(x509ss), req_config.nmflag); | 1036 | print_name(out, "subject=", X509_get_subject_name(x509ss), cfg.nmflag); |
| 1037 | else | 1037 | else |
| 1038 | print_name(out, "subject=", X509_REQ_get_subject_name(req), req_config.nmflag); | 1038 | print_name(out, "subject=", X509_REQ_get_subject_name(req), cfg.nmflag); |
| 1039 | } | 1039 | } |
| 1040 | if (req_config.modulus) { | 1040 | if (cfg.modulus) { |
| 1041 | EVP_PKEY *tpubkey; | 1041 | EVP_PKEY *tpubkey; |
| 1042 | 1042 | ||
| 1043 | if (req_config.x509) | 1043 | if (cfg.x509) |
| 1044 | tpubkey = X509_get0_pubkey(x509ss); | 1044 | tpubkey = X509_get0_pubkey(x509ss); |
| 1045 | else | 1045 | else |
| 1046 | tpubkey = X509_REQ_get0_pubkey(req); | 1046 | tpubkey = X509_REQ_get0_pubkey(req); |
| @@ -1059,11 +1059,11 @@ req_main(int argc, char **argv) | |||
| 1059 | fprintf(stdout, "Wrong Algorithm type"); | 1059 | fprintf(stdout, "Wrong Algorithm type"); |
| 1060 | fprintf(stdout, "\n"); | 1060 | fprintf(stdout, "\n"); |
| 1061 | } | 1061 | } |
| 1062 | if (!req_config.noout && !req_config.x509) { | 1062 | if (!cfg.noout && !cfg.x509) { |
| 1063 | if (req_config.outformat == FORMAT_ASN1) | 1063 | if (cfg.outformat == FORMAT_ASN1) |
| 1064 | i = i2d_X509_REQ_bio(out, req); | 1064 | i = i2d_X509_REQ_bio(out, req); |
| 1065 | else if (req_config.outformat == FORMAT_PEM) { | 1065 | else if (cfg.outformat == FORMAT_PEM) { |
| 1066 | if (req_config.newhdr) | 1066 | if (cfg.newhdr) |
| 1067 | i = PEM_write_bio_X509_REQ_NEW(out, req); | 1067 | i = PEM_write_bio_X509_REQ_NEW(out, req); |
| 1068 | else | 1068 | else |
| 1069 | i = PEM_write_bio_X509_REQ(out, req); | 1069 | i = PEM_write_bio_X509_REQ(out, req); |
| @@ -1076,10 +1076,10 @@ req_main(int argc, char **argv) | |||
| 1076 | goto end; | 1076 | goto end; |
| 1077 | } | 1077 | } |
| 1078 | } | 1078 | } |
| 1079 | if (!req_config.noout && req_config.x509 && (x509ss != NULL)) { | 1079 | if (!cfg.noout && cfg.x509 && (x509ss != NULL)) { |
| 1080 | if (req_config.outformat == FORMAT_ASN1) | 1080 | if (cfg.outformat == FORMAT_ASN1) |
| 1081 | i = i2d_X509_bio(out, x509ss); | 1081 | i = i2d_X509_bio(out, x509ss); |
| 1082 | else if (req_config.outformat == FORMAT_PEM) | 1082 | else if (cfg.outformat == FORMAT_PEM) |
| 1083 | i = PEM_write_bio_X509(out, x509ss); | 1083 | i = PEM_write_bio_X509(out, x509ss); |
| 1084 | else { | 1084 | else { |
| 1085 | BIO_printf(bio_err, "bad output format specified for outfile\n"); | 1085 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| @@ -1098,25 +1098,25 @@ req_main(int argc, char **argv) | |||
| 1098 | if ((req_conf != NULL) && (req_conf != config)) | 1098 | if ((req_conf != NULL) && (req_conf != config)) |
| 1099 | NCONF_free(req_conf); | 1099 | NCONF_free(req_conf); |
| 1100 | NCONF_free(addext_conf); | 1100 | NCONF_free(addext_conf); |
| 1101 | BIO_free(req_config.addext_bio); | 1101 | BIO_free(cfg.addext_bio); |
| 1102 | BIO_free(in); | 1102 | BIO_free(in); |
| 1103 | BIO_free_all(out); | 1103 | BIO_free_all(out); |
| 1104 | EVP_PKEY_free(pkey); | 1104 | EVP_PKEY_free(pkey); |
| 1105 | if (genctx) | 1105 | if (genctx) |
| 1106 | EVP_PKEY_CTX_free(genctx); | 1106 | EVP_PKEY_CTX_free(genctx); |
| 1107 | if (req_config.pkeyopts) | 1107 | if (cfg.pkeyopts) |
| 1108 | sk_OPENSSL_STRING_free(req_config.pkeyopts); | 1108 | sk_OPENSSL_STRING_free(cfg.pkeyopts); |
| 1109 | if (req_config.sigopts) | 1109 | if (cfg.sigopts) |
| 1110 | sk_OPENSSL_STRING_free(req_config.sigopts); | 1110 | sk_OPENSSL_STRING_free(cfg.sigopts); |
| 1111 | lh_OPENSSL_STRING_doall(req_config.addexts, (LHASH_DOALL_FN_TYPE)exts_cleanup); | 1111 | lh_OPENSSL_STRING_doall(cfg.addexts, (LHASH_DOALL_FN_TYPE)exts_cleanup); |
| 1112 | lh_OPENSSL_STRING_free(req_config.addexts); | 1112 | lh_OPENSSL_STRING_free(cfg.addexts); |
| 1113 | free(keyalgstr); | 1113 | free(keyalgstr); |
| 1114 | X509_REQ_free(req); | 1114 | X509_REQ_free(req); |
| 1115 | X509_free(x509ss); | 1115 | X509_free(x509ss); |
| 1116 | ASN1_INTEGER_free(req_config.serial); | 1116 | ASN1_INTEGER_free(cfg.serial); |
| 1117 | if (req_config.passargin && passin) | 1117 | if (cfg.passargin && passin) |
| 1118 | free(passin); | 1118 | free(passin); |
| 1119 | if (req_config.passargout && passout) | 1119 | if (cfg.passargout && passout) |
| 1120 | free(passout); | 1120 | free(passout); |
| 1121 | OBJ_cleanup(); | 1121 | OBJ_cleanup(); |
| 1122 | 1122 | ||
| @@ -1222,7 +1222,7 @@ prompt_info(X509_REQ * req, | |||
| 1222 | X509_NAME *subj; | 1222 | X509_NAME *subj; |
| 1223 | subj = X509_REQ_get_subject_name(req); | 1223 | subj = X509_REQ_get_subject_name(req); |
| 1224 | 1224 | ||
| 1225 | if (!req_config.batch) { | 1225 | if (!cfg.batch) { |
| 1226 | BIO_printf(bio_err, "You are about to be asked to enter information that will be incorporated\n"); | 1226 | BIO_printf(bio_err, "You are about to be asked to enter information that will be incorporated\n"); |
| 1227 | BIO_printf(bio_err, "into your certificate request.\n"); | 1227 | BIO_printf(bio_err, "into your certificate request.\n"); |
| 1228 | BIO_printf(bio_err, "What you are about to enter is what is called a Distinguished Name or a DN.\n"); | 1228 | BIO_printf(bio_err, "What you are about to enter is what is called a Distinguished Name or a DN.\n"); |
| @@ -1316,7 +1316,7 @@ prompt_info(X509_REQ * req, | |||
| 1316 | } | 1316 | } |
| 1317 | if (attribs) { | 1317 | if (attribs) { |
| 1318 | if ((attr_sk != NULL) && (sk_CONF_VALUE_num(attr_sk) > 0) && | 1318 | if ((attr_sk != NULL) && (sk_CONF_VALUE_num(attr_sk) > 0) && |
| 1319 | (!req_config.batch)) { | 1319 | (!cfg.batch)) { |
| 1320 | BIO_printf(bio_err, | 1320 | BIO_printf(bio_err, |
| 1321 | "\nPlease enter the following 'extra' attributes\n"); | 1321 | "\nPlease enter the following 'extra' attributes\n"); |
| 1322 | BIO_printf(bio_err, | 1322 | BIO_printf(bio_err, |
| @@ -1452,7 +1452,7 @@ add_DN_object(X509_NAME * n, char *text, const char *def, char *value, | |||
| 1452 | int i, ret = 0; | 1452 | int i, ret = 0; |
| 1453 | char buf[1024]; | 1453 | char buf[1024]; |
| 1454 | start: | 1454 | start: |
| 1455 | if (!req_config.batch) | 1455 | if (!cfg.batch) |
| 1456 | BIO_printf(bio_err, "%s [%s]:", text, def); | 1456 | BIO_printf(bio_err, "%s [%s]:", text, def); |
| 1457 | (void) BIO_flush(bio_err); | 1457 | (void) BIO_flush(bio_err); |
| 1458 | if (value != NULL) { | 1458 | if (value != NULL) { |
| @@ -1461,7 +1461,7 @@ add_DN_object(X509_NAME * n, char *text, const char *def, char *value, | |||
| 1461 | BIO_printf(bio_err, "%s\n", value); | 1461 | BIO_printf(bio_err, "%s\n", value); |
| 1462 | } else { | 1462 | } else { |
| 1463 | buf[0] = '\0'; | 1463 | buf[0] = '\0'; |
| 1464 | if (!req_config.batch) { | 1464 | if (!cfg.batch) { |
| 1465 | if (!fgets(buf, sizeof buf, stdin)) | 1465 | if (!fgets(buf, sizeof buf, stdin)) |
| 1466 | return 0; | 1466 | return 0; |
| 1467 | } else { | 1467 | } else { |
| @@ -1505,7 +1505,7 @@ add_attribute_object(X509_REQ * req, char *text, const char *def, | |||
| 1505 | static char buf[1024]; | 1505 | static char buf[1024]; |
| 1506 | 1506 | ||
| 1507 | start: | 1507 | start: |
| 1508 | if (!req_config.batch) | 1508 | if (!cfg.batch) |
| 1509 | BIO_printf(bio_err, "%s [%s]:", text, def); | 1509 | BIO_printf(bio_err, "%s [%s]:", text, def); |
| 1510 | (void) BIO_flush(bio_err); | 1510 | (void) BIO_flush(bio_err); |
| 1511 | if (value != NULL) { | 1511 | if (value != NULL) { |
| @@ -1514,7 +1514,7 @@ add_attribute_object(X509_REQ * req, char *text, const char *def, | |||
| 1514 | BIO_printf(bio_err, "%s\n", value); | 1514 | BIO_printf(bio_err, "%s\n", value); |
| 1515 | } else { | 1515 | } else { |
| 1516 | buf[0] = '\0'; | 1516 | buf[0] = '\0'; |
| 1517 | if (!req_config.batch) { | 1517 | if (!cfg.batch) { |
| 1518 | if (!fgets(buf, sizeof buf, stdin)) | 1518 | if (!fgets(buf, sizeof buf, stdin)) |
| 1519 | return 0; | 1519 | return 0; |
| 1520 | } else { | 1520 | } else { |
diff --git a/src/usr.bin/openssl/rsa.c b/src/usr.bin/openssl/rsa.c index bdd263ce7c..953daaacf7 100644 --- a/src/usr.bin/openssl/rsa.c +++ b/src/usr.bin/openssl/rsa.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: rsa.c,v 1.17 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: rsa.c,v 1.18 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -89,7 +89,7 @@ static struct { | |||
| 89 | int pubout; | 89 | int pubout; |
| 90 | int pvk_encr; | 90 | int pvk_encr; |
| 91 | int text; | 91 | int text; |
| 92 | } rsa_config; | 92 | } cfg; |
| 93 | 93 | ||
| 94 | static int | 94 | static int |
| 95 | rsa_opt_cipher(int argc, char **argv, int *argsused) | 95 | rsa_opt_cipher(int argc, char **argv, int *argsused) |
| @@ -99,7 +99,7 @@ rsa_opt_cipher(int argc, char **argv, int *argsused) | |||
| 99 | if (*name++ != '-') | 99 | if (*name++ != '-') |
| 100 | return (1); | 100 | return (1); |
| 101 | 101 | ||
| 102 | if ((rsa_config.enc = EVP_get_cipherbyname(name)) == NULL) { | 102 | if ((cfg.enc = EVP_get_cipherbyname(name)) == NULL) { |
| 103 | fprintf(stderr, "Invalid cipher '%s'\n", name); | 103 | fprintf(stderr, "Invalid cipher '%s'\n", name); |
| 104 | return (1); | 104 | return (1); |
| 105 | } | 105 | } |
| @@ -113,111 +113,111 @@ static const struct option rsa_options[] = { | |||
| 113 | .name = "check", | 113 | .name = "check", |
| 114 | .desc = "Check consistency of RSA private key", | 114 | .desc = "Check consistency of RSA private key", |
| 115 | .type = OPTION_FLAG, | 115 | .type = OPTION_FLAG, |
| 116 | .opt.flag = &rsa_config.check, | 116 | .opt.flag = &cfg.check, |
| 117 | }, | 117 | }, |
| 118 | { | 118 | { |
| 119 | .name = "in", | 119 | .name = "in", |
| 120 | .argname = "file", | 120 | .argname = "file", |
| 121 | .desc = "Input file (default stdin)", | 121 | .desc = "Input file (default stdin)", |
| 122 | .type = OPTION_ARG, | 122 | .type = OPTION_ARG, |
| 123 | .opt.arg = &rsa_config.infile, | 123 | .opt.arg = &cfg.infile, |
| 124 | }, | 124 | }, |
| 125 | { | 125 | { |
| 126 | .name = "inform", | 126 | .name = "inform", |
| 127 | .argname = "format", | 127 | .argname = "format", |
| 128 | .desc = "Input format (DER, NET or PEM (default))", | 128 | .desc = "Input format (DER, NET or PEM (default))", |
| 129 | .type = OPTION_ARG_FORMAT, | 129 | .type = OPTION_ARG_FORMAT, |
| 130 | .opt.value = &rsa_config.informat, | 130 | .opt.value = &cfg.informat, |
| 131 | }, | 131 | }, |
| 132 | { | 132 | { |
| 133 | .name = "modulus", | 133 | .name = "modulus", |
| 134 | .desc = "Print the RSA key modulus", | 134 | .desc = "Print the RSA key modulus", |
| 135 | .type = OPTION_FLAG, | 135 | .type = OPTION_FLAG, |
| 136 | .opt.flag = &rsa_config.modulus, | 136 | .opt.flag = &cfg.modulus, |
| 137 | }, | 137 | }, |
| 138 | { | 138 | { |
| 139 | .name = "noout", | 139 | .name = "noout", |
| 140 | .desc = "Do not print encoded version of the key", | 140 | .desc = "Do not print encoded version of the key", |
| 141 | .type = OPTION_FLAG, | 141 | .type = OPTION_FLAG, |
| 142 | .opt.flag = &rsa_config.noout, | 142 | .opt.flag = &cfg.noout, |
| 143 | }, | 143 | }, |
| 144 | { | 144 | { |
| 145 | .name = "out", | 145 | .name = "out", |
| 146 | .argname = "file", | 146 | .argname = "file", |
| 147 | .desc = "Output file (default stdout)", | 147 | .desc = "Output file (default stdout)", |
| 148 | .type = OPTION_ARG, | 148 | .type = OPTION_ARG, |
| 149 | .opt.arg = &rsa_config.outfile, | 149 | .opt.arg = &cfg.outfile, |
| 150 | }, | 150 | }, |
| 151 | { | 151 | { |
| 152 | .name = "outform", | 152 | .name = "outform", |
| 153 | .argname = "format", | 153 | .argname = "format", |
| 154 | .desc = "Output format (DER, NET or PEM (default PEM))", | 154 | .desc = "Output format (DER, NET or PEM (default PEM))", |
| 155 | .type = OPTION_ARG_FORMAT, | 155 | .type = OPTION_ARG_FORMAT, |
| 156 | .opt.value = &rsa_config.outformat, | 156 | .opt.value = &cfg.outformat, |
| 157 | }, | 157 | }, |
| 158 | { | 158 | { |
| 159 | .name = "passin", | 159 | .name = "passin", |
| 160 | .argname = "src", | 160 | .argname = "src", |
| 161 | .desc = "Input file passphrase source", | 161 | .desc = "Input file passphrase source", |
| 162 | .type = OPTION_ARG, | 162 | .type = OPTION_ARG, |
| 163 | .opt.arg = &rsa_config.passargin, | 163 | .opt.arg = &cfg.passargin, |
| 164 | }, | 164 | }, |
| 165 | { | 165 | { |
| 166 | .name = "passout", | 166 | .name = "passout", |
| 167 | .argname = "src", | 167 | .argname = "src", |
| 168 | .desc = "Output file passphrase source", | 168 | .desc = "Output file passphrase source", |
| 169 | .type = OPTION_ARG, | 169 | .type = OPTION_ARG, |
| 170 | .opt.arg = &rsa_config.passargout, | 170 | .opt.arg = &cfg.passargout, |
| 171 | }, | 171 | }, |
| 172 | { | 172 | { |
| 173 | .name = "pubin", | 173 | .name = "pubin", |
| 174 | .desc = "Expect a public key (default private key)", | 174 | .desc = "Expect a public key (default private key)", |
| 175 | .type = OPTION_VALUE, | 175 | .type = OPTION_VALUE, |
| 176 | .value = 1, | 176 | .value = 1, |
| 177 | .opt.value = &rsa_config.pubin, | 177 | .opt.value = &cfg.pubin, |
| 178 | }, | 178 | }, |
| 179 | { | 179 | { |
| 180 | .name = "pubout", | 180 | .name = "pubout", |
| 181 | .desc = "Output a public key (default private key)", | 181 | .desc = "Output a public key (default private key)", |
| 182 | .type = OPTION_VALUE, | 182 | .type = OPTION_VALUE, |
| 183 | .value = 1, | 183 | .value = 1, |
| 184 | .opt.value = &rsa_config.pubout, | 184 | .opt.value = &cfg.pubout, |
| 185 | }, | 185 | }, |
| 186 | { | 186 | { |
| 187 | .name = "pvk-none", | 187 | .name = "pvk-none", |
| 188 | .type = OPTION_VALUE, | 188 | .type = OPTION_VALUE, |
| 189 | .value = 0, | 189 | .value = 0, |
| 190 | .opt.value = &rsa_config.pvk_encr, | 190 | .opt.value = &cfg.pvk_encr, |
| 191 | }, | 191 | }, |
| 192 | { | 192 | { |
| 193 | .name = "pvk-strong", | 193 | .name = "pvk-strong", |
| 194 | .type = OPTION_VALUE, | 194 | .type = OPTION_VALUE, |
| 195 | .value = 2, | 195 | .value = 2, |
| 196 | .opt.value = &rsa_config.pvk_encr, | 196 | .opt.value = &cfg.pvk_encr, |
| 197 | }, | 197 | }, |
| 198 | { | 198 | { |
| 199 | .name = "pvk-weak", | 199 | .name = "pvk-weak", |
| 200 | .type = OPTION_VALUE, | 200 | .type = OPTION_VALUE, |
| 201 | .value = 1, | 201 | .value = 1, |
| 202 | .opt.value = &rsa_config.pvk_encr, | 202 | .opt.value = &cfg.pvk_encr, |
| 203 | }, | 203 | }, |
| 204 | { | 204 | { |
| 205 | .name = "RSAPublicKey_in", | 205 | .name = "RSAPublicKey_in", |
| 206 | .type = OPTION_VALUE, | 206 | .type = OPTION_VALUE, |
| 207 | .value = 2, | 207 | .value = 2, |
| 208 | .opt.value = &rsa_config.pubin, | 208 | .opt.value = &cfg.pubin, |
| 209 | }, | 209 | }, |
| 210 | { | 210 | { |
| 211 | .name = "RSAPublicKey_out", | 211 | .name = "RSAPublicKey_out", |
| 212 | .type = OPTION_VALUE, | 212 | .type = OPTION_VALUE, |
| 213 | .value = 2, | 213 | .value = 2, |
| 214 | .opt.value = &rsa_config.pubout, | 214 | .opt.value = &cfg.pubout, |
| 215 | }, | 215 | }, |
| 216 | { | 216 | { |
| 217 | .name = "text", | 217 | .name = "text", |
| 218 | .desc = "Print in plain text in addition to encoded", | 218 | .desc = "Print in plain text in addition to encoded", |
| 219 | .type = OPTION_FLAG, | 219 | .type = OPTION_FLAG, |
| 220 | .opt.flag = &rsa_config.text, | 220 | .opt.flag = &cfg.text, |
| 221 | }, | 221 | }, |
| 222 | { | 222 | { |
| 223 | .name = NULL, | 223 | .name = NULL, |
| @@ -260,22 +260,22 @@ rsa_main(int argc, char **argv) | |||
| 260 | exit(1); | 260 | exit(1); |
| 261 | } | 261 | } |
| 262 | 262 | ||
| 263 | memset(&rsa_config, 0, sizeof(rsa_config)); | 263 | memset(&cfg, 0, sizeof(cfg)); |
| 264 | rsa_config.pvk_encr = 2; | 264 | cfg.pvk_encr = 2; |
| 265 | rsa_config.informat = FORMAT_PEM; | 265 | cfg.informat = FORMAT_PEM; |
| 266 | rsa_config.outformat = FORMAT_PEM; | 266 | cfg.outformat = FORMAT_PEM; |
| 267 | 267 | ||
| 268 | if (options_parse(argc, argv, rsa_options, NULL, NULL) != 0) { | 268 | if (options_parse(argc, argv, rsa_options, NULL, NULL) != 0) { |
| 269 | rsa_usage(); | 269 | rsa_usage(); |
| 270 | goto end; | 270 | goto end; |
| 271 | } | 271 | } |
| 272 | 272 | ||
| 273 | if (!app_passwd(bio_err, rsa_config.passargin, rsa_config.passargout, | 273 | if (!app_passwd(bio_err, cfg.passargin, cfg.passargout, |
| 274 | &passin, &passout)) { | 274 | &passin, &passout)) { |
| 275 | BIO_printf(bio_err, "Error getting passwords\n"); | 275 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 276 | goto end; | 276 | goto end; |
| 277 | } | 277 | } |
| 278 | if (rsa_config.check && rsa_config.pubin) { | 278 | if (cfg.check && cfg.pubin) { |
| 279 | BIO_printf(bio_err, "Only private keys can be checked\n"); | 279 | BIO_printf(bio_err, "Only private keys can be checked\n"); |
| 280 | goto end; | 280 | goto end; |
| 281 | } | 281 | } |
| @@ -284,21 +284,21 @@ rsa_main(int argc, char **argv) | |||
| 284 | { | 284 | { |
| 285 | EVP_PKEY *pkey; | 285 | EVP_PKEY *pkey; |
| 286 | 286 | ||
| 287 | if (rsa_config.pubin) { | 287 | if (cfg.pubin) { |
| 288 | int tmpformat = -1; | 288 | int tmpformat = -1; |
| 289 | if (rsa_config.pubin == 2) { | 289 | if (cfg.pubin == 2) { |
| 290 | if (rsa_config.informat == FORMAT_PEM) | 290 | if (cfg.informat == FORMAT_PEM) |
| 291 | tmpformat = FORMAT_PEMRSA; | 291 | tmpformat = FORMAT_PEMRSA; |
| 292 | else if (rsa_config.informat == FORMAT_ASN1) | 292 | else if (cfg.informat == FORMAT_ASN1) |
| 293 | tmpformat = FORMAT_ASN1RSA; | 293 | tmpformat = FORMAT_ASN1RSA; |
| 294 | } else | 294 | } else |
| 295 | tmpformat = rsa_config.informat; | 295 | tmpformat = cfg.informat; |
| 296 | 296 | ||
| 297 | pkey = load_pubkey(bio_err, rsa_config.infile, | 297 | pkey = load_pubkey(bio_err, cfg.infile, |
| 298 | tmpformat, 1, passin, "Public Key"); | 298 | tmpformat, 1, passin, "Public Key"); |
| 299 | } else | 299 | } else |
| 300 | pkey = load_key(bio_err, rsa_config.infile, | 300 | pkey = load_key(bio_err, cfg.infile, |
| 301 | rsa_config.informat, 1, passin, "Private Key"); | 301 | cfg.informat, 1, passin, "Private Key"); |
| 302 | 302 | ||
| 303 | if (pkey != NULL) | 303 | if (pkey != NULL) |
| 304 | rsa = EVP_PKEY_get1_RSA(pkey); | 304 | rsa = EVP_PKEY_get1_RSA(pkey); |
| @@ -309,27 +309,27 @@ rsa_main(int argc, char **argv) | |||
| 309 | ERR_print_errors(bio_err); | 309 | ERR_print_errors(bio_err); |
| 310 | goto end; | 310 | goto end; |
| 311 | } | 311 | } |
| 312 | if (rsa_config.outfile == NULL) { | 312 | if (cfg.outfile == NULL) { |
| 313 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 313 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 314 | } else { | 314 | } else { |
| 315 | if (BIO_write_filename(out, rsa_config.outfile) <= 0) { | 315 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 316 | perror(rsa_config.outfile); | 316 | perror(cfg.outfile); |
| 317 | goto end; | 317 | goto end; |
| 318 | } | 318 | } |
| 319 | } | 319 | } |
| 320 | 320 | ||
| 321 | if (rsa_config.text) | 321 | if (cfg.text) |
| 322 | if (!RSA_print(out, rsa, 0)) { | 322 | if (!RSA_print(out, rsa, 0)) { |
| 323 | perror(rsa_config.outfile); | 323 | perror(cfg.outfile); |
| 324 | ERR_print_errors(bio_err); | 324 | ERR_print_errors(bio_err); |
| 325 | goto end; | 325 | goto end; |
| 326 | } | 326 | } |
| 327 | if (rsa_config.modulus) { | 327 | if (cfg.modulus) { |
| 328 | BIO_printf(out, "Modulus="); | 328 | BIO_printf(out, "Modulus="); |
| 329 | BN_print(out, RSA_get0_n(rsa)); | 329 | BN_print(out, RSA_get0_n(rsa)); |
| 330 | BIO_printf(out, "\n"); | 330 | BIO_printf(out, "\n"); |
| 331 | } | 331 | } |
| 332 | if (rsa_config.check) { | 332 | if (cfg.check) { |
| 333 | int r = RSA_check_key(rsa); | 333 | int r = RSA_check_key(rsa); |
| 334 | 334 | ||
| 335 | if (r == 1) | 335 | if (r == 1) |
| @@ -353,38 +353,38 @@ rsa_main(int argc, char **argv) | |||
| 353 | goto end; | 353 | goto end; |
| 354 | } | 354 | } |
| 355 | } | 355 | } |
| 356 | if (rsa_config.noout) { | 356 | if (cfg.noout) { |
| 357 | ret = 0; | 357 | ret = 0; |
| 358 | goto end; | 358 | goto end; |
| 359 | } | 359 | } |
| 360 | BIO_printf(bio_err, "writing RSA key\n"); | 360 | BIO_printf(bio_err, "writing RSA key\n"); |
| 361 | if (rsa_config.outformat == FORMAT_ASN1) { | 361 | if (cfg.outformat == FORMAT_ASN1) { |
| 362 | if (rsa_config.pubout || rsa_config.pubin) { | 362 | if (cfg.pubout || cfg.pubin) { |
| 363 | if (rsa_config.pubout == 2) | 363 | if (cfg.pubout == 2) |
| 364 | i = i2d_RSAPublicKey_bio(out, rsa); | 364 | i = i2d_RSAPublicKey_bio(out, rsa); |
| 365 | else | 365 | else |
| 366 | i = i2d_RSA_PUBKEY_bio(out, rsa); | 366 | i = i2d_RSA_PUBKEY_bio(out, rsa); |
| 367 | } else | 367 | } else |
| 368 | i = i2d_RSAPrivateKey_bio(out, rsa); | 368 | i = i2d_RSAPrivateKey_bio(out, rsa); |
| 369 | } else if (rsa_config.outformat == FORMAT_PEM) { | 369 | } else if (cfg.outformat == FORMAT_PEM) { |
| 370 | if (rsa_config.pubout || rsa_config.pubin) { | 370 | if (cfg.pubout || cfg.pubin) { |
| 371 | if (rsa_config.pubout == 2) | 371 | if (cfg.pubout == 2) |
| 372 | i = PEM_write_bio_RSAPublicKey(out, rsa); | 372 | i = PEM_write_bio_RSAPublicKey(out, rsa); |
| 373 | else | 373 | else |
| 374 | i = PEM_write_bio_RSA_PUBKEY(out, rsa); | 374 | i = PEM_write_bio_RSA_PUBKEY(out, rsa); |
| 375 | } else | 375 | } else |
| 376 | i = PEM_write_bio_RSAPrivateKey(out, rsa, | 376 | i = PEM_write_bio_RSAPrivateKey(out, rsa, |
| 377 | rsa_config.enc, NULL, 0, NULL, passout); | 377 | cfg.enc, NULL, 0, NULL, passout); |
| 378 | #if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4) | 378 | #if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4) |
| 379 | } else if (rsa_config.outformat == FORMAT_MSBLOB || | 379 | } else if (cfg.outformat == FORMAT_MSBLOB || |
| 380 | rsa_config.outformat == FORMAT_PVK) { | 380 | cfg.outformat == FORMAT_PVK) { |
| 381 | EVP_PKEY *pk; | 381 | EVP_PKEY *pk; |
| 382 | pk = EVP_PKEY_new(); | 382 | pk = EVP_PKEY_new(); |
| 383 | EVP_PKEY_set1_RSA(pk, rsa); | 383 | EVP_PKEY_set1_RSA(pk, rsa); |
| 384 | if (rsa_config.outformat == FORMAT_PVK) | 384 | if (cfg.outformat == FORMAT_PVK) |
| 385 | i = i2b_PVK_bio(out, pk, rsa_config.pvk_encr, 0, | 385 | i = i2b_PVK_bio(out, pk, cfg.pvk_encr, 0, |
| 386 | passout); | 386 | passout); |
| 387 | else if (rsa_config.pubin || rsa_config.pubout) | 387 | else if (cfg.pubin || cfg.pubout) |
| 388 | i = i2b_PublicKey_bio(out, pk); | 388 | i = i2b_PublicKey_bio(out, pk); |
| 389 | else | 389 | else |
| 390 | i = i2b_PrivateKey_bio(out, pk); | 390 | i = i2b_PrivateKey_bio(out, pk); |
diff --git a/src/usr.bin/openssl/rsautl.c b/src/usr.bin/openssl/rsautl.c index 2916b2d9a0..9327223123 100644 --- a/src/usr.bin/openssl/rsautl.c +++ b/src/usr.bin/openssl/rsautl.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: rsautl.c,v 1.20 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: rsautl.c,v 1.21 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2000. | 3 | * project 2000. |
| 4 | */ | 4 | */ |
| @@ -87,131 +87,131 @@ static struct { | |||
| 87 | char *passargin; | 87 | char *passargin; |
| 88 | int rev; | 88 | int rev; |
| 89 | int rsa_mode; | 89 | int rsa_mode; |
| 90 | } rsautl_config; | 90 | } cfg; |
| 91 | 91 | ||
| 92 | static const struct option rsautl_options[] = { | 92 | static const struct option rsautl_options[] = { |
| 93 | { | 93 | { |
| 94 | .name = "asn1parse", | 94 | .name = "asn1parse", |
| 95 | .desc = "ASN.1 parse the output data", | 95 | .desc = "ASN.1 parse the output data", |
| 96 | .type = OPTION_FLAG, | 96 | .type = OPTION_FLAG, |
| 97 | .opt.flag = &rsautl_config.asn1parse, | 97 | .opt.flag = &cfg.asn1parse, |
| 98 | }, | 98 | }, |
| 99 | { | 99 | { |
| 100 | .name = "certin", | 100 | .name = "certin", |
| 101 | .desc = "Input is a certificate containing an RSA public key", | 101 | .desc = "Input is a certificate containing an RSA public key", |
| 102 | .type = OPTION_VALUE, | 102 | .type = OPTION_VALUE, |
| 103 | .value = KEY_CERT, | 103 | .value = KEY_CERT, |
| 104 | .opt.value = &rsautl_config.key_type, | 104 | .opt.value = &cfg.key_type, |
| 105 | }, | 105 | }, |
| 106 | { | 106 | { |
| 107 | .name = "decrypt", | 107 | .name = "decrypt", |
| 108 | .desc = "Decrypt the input data using RSA private key", | 108 | .desc = "Decrypt the input data using RSA private key", |
| 109 | .type = OPTION_VALUE, | 109 | .type = OPTION_VALUE, |
| 110 | .value = RSA_DECRYPT, | 110 | .value = RSA_DECRYPT, |
| 111 | .opt.value = &rsautl_config.rsa_mode, | 111 | .opt.value = &cfg.rsa_mode, |
| 112 | }, | 112 | }, |
| 113 | { | 113 | { |
| 114 | .name = "encrypt", | 114 | .name = "encrypt", |
| 115 | .desc = "Encrypt the input data using RSA public key", | 115 | .desc = "Encrypt the input data using RSA public key", |
| 116 | .type = OPTION_VALUE, | 116 | .type = OPTION_VALUE, |
| 117 | .value = RSA_ENCRYPT, | 117 | .value = RSA_ENCRYPT, |
| 118 | .opt.value = &rsautl_config.rsa_mode, | 118 | .opt.value = &cfg.rsa_mode, |
| 119 | }, | 119 | }, |
| 120 | { | 120 | { |
| 121 | .name = "hexdump", | 121 | .name = "hexdump", |
| 122 | .desc = "Hex dump the output data", | 122 | .desc = "Hex dump the output data", |
| 123 | .type = OPTION_FLAG, | 123 | .type = OPTION_FLAG, |
| 124 | .opt.flag = &rsautl_config.hexdump, | 124 | .opt.flag = &cfg.hexdump, |
| 125 | }, | 125 | }, |
| 126 | { | 126 | { |
| 127 | .name = "in", | 127 | .name = "in", |
| 128 | .argname = "file", | 128 | .argname = "file", |
| 129 | .desc = "Input file (default stdin)", | 129 | .desc = "Input file (default stdin)", |
| 130 | .type = OPTION_ARG, | 130 | .type = OPTION_ARG, |
| 131 | .opt.arg = &rsautl_config.infile, | 131 | .opt.arg = &cfg.infile, |
| 132 | }, | 132 | }, |
| 133 | { | 133 | { |
| 134 | .name = "inkey", | 134 | .name = "inkey", |
| 135 | .argname = "file", | 135 | .argname = "file", |
| 136 | .desc = "Input key file", | 136 | .desc = "Input key file", |
| 137 | .type = OPTION_ARG, | 137 | .type = OPTION_ARG, |
| 138 | .opt.arg = &rsautl_config.keyfile, | 138 | .opt.arg = &cfg.keyfile, |
| 139 | }, | 139 | }, |
| 140 | { | 140 | { |
| 141 | .name = "keyform", | 141 | .name = "keyform", |
| 142 | .argname = "fmt", | 142 | .argname = "fmt", |
| 143 | .desc = "Input key format (DER, TXT or PEM (default))", | 143 | .desc = "Input key format (DER, TXT or PEM (default))", |
| 144 | .type = OPTION_ARG_FORMAT, | 144 | .type = OPTION_ARG_FORMAT, |
| 145 | .opt.value = &rsautl_config.keyform, | 145 | .opt.value = &cfg.keyform, |
| 146 | }, | 146 | }, |
| 147 | { | 147 | { |
| 148 | .name = "oaep", | 148 | .name = "oaep", |
| 149 | .desc = "Use PKCS#1 OAEP padding", | 149 | .desc = "Use PKCS#1 OAEP padding", |
| 150 | .type = OPTION_VALUE, | 150 | .type = OPTION_VALUE, |
| 151 | .value = RSA_PKCS1_OAEP_PADDING, | 151 | .value = RSA_PKCS1_OAEP_PADDING, |
| 152 | .opt.value = &rsautl_config.pad, | 152 | .opt.value = &cfg.pad, |
| 153 | }, | 153 | }, |
| 154 | { | 154 | { |
| 155 | .name = "out", | 155 | .name = "out", |
| 156 | .argname = "file", | 156 | .argname = "file", |
| 157 | .desc = "Output file (default stdout)", | 157 | .desc = "Output file (default stdout)", |
| 158 | .type = OPTION_ARG, | 158 | .type = OPTION_ARG, |
| 159 | .opt.arg = &rsautl_config.outfile, | 159 | .opt.arg = &cfg.outfile, |
| 160 | }, | 160 | }, |
| 161 | { | 161 | { |
| 162 | .name = "passin", | 162 | .name = "passin", |
| 163 | .argname = "arg", | 163 | .argname = "arg", |
| 164 | .desc = "Key password source", | 164 | .desc = "Key password source", |
| 165 | .type = OPTION_ARG, | 165 | .type = OPTION_ARG, |
| 166 | .opt.arg = &rsautl_config.passargin, | 166 | .opt.arg = &cfg.passargin, |
| 167 | }, | 167 | }, |
| 168 | { | 168 | { |
| 169 | .name = "pkcs", | 169 | .name = "pkcs", |
| 170 | .desc = "Use PKCS#1 v1.5 padding (default)", | 170 | .desc = "Use PKCS#1 v1.5 padding (default)", |
| 171 | .type = OPTION_VALUE, | 171 | .type = OPTION_VALUE, |
| 172 | .value = RSA_PKCS1_PADDING, | 172 | .value = RSA_PKCS1_PADDING, |
| 173 | .opt.value = &rsautl_config.pad, | 173 | .opt.value = &cfg.pad, |
| 174 | }, | 174 | }, |
| 175 | { | 175 | { |
| 176 | .name = "pubin", | 176 | .name = "pubin", |
| 177 | .desc = "Input is an RSA public key", | 177 | .desc = "Input is an RSA public key", |
| 178 | .type = OPTION_VALUE, | 178 | .type = OPTION_VALUE, |
| 179 | .value = KEY_PUBKEY, | 179 | .value = KEY_PUBKEY, |
| 180 | .opt.value = &rsautl_config.key_type, | 180 | .opt.value = &cfg.key_type, |
| 181 | }, | 181 | }, |
| 182 | { | 182 | { |
| 183 | .name = "raw", | 183 | .name = "raw", |
| 184 | .desc = "Use no padding", | 184 | .desc = "Use no padding", |
| 185 | .type = OPTION_VALUE, | 185 | .type = OPTION_VALUE, |
| 186 | .value = RSA_NO_PADDING, | 186 | .value = RSA_NO_PADDING, |
| 187 | .opt.value = &rsautl_config.pad, | 187 | .opt.value = &cfg.pad, |
| 188 | }, | 188 | }, |
| 189 | { | 189 | { |
| 190 | .name = "rev", | 190 | .name = "rev", |
| 191 | .desc = "Reverse the input data", | 191 | .desc = "Reverse the input data", |
| 192 | .type = OPTION_FLAG, | 192 | .type = OPTION_FLAG, |
| 193 | .opt.flag = &rsautl_config.rev, | 193 | .opt.flag = &cfg.rev, |
| 194 | }, | 194 | }, |
| 195 | { | 195 | { |
| 196 | .name = "sign", | 196 | .name = "sign", |
| 197 | .desc = "Sign the input data using RSA private key", | 197 | .desc = "Sign the input data using RSA private key", |
| 198 | .type = OPTION_VALUE, | 198 | .type = OPTION_VALUE, |
| 199 | .value = RSA_SIGN, | 199 | .value = RSA_SIGN, |
| 200 | .opt.value = &rsautl_config.rsa_mode, | 200 | .opt.value = &cfg.rsa_mode, |
| 201 | }, | 201 | }, |
| 202 | { | 202 | { |
| 203 | .name = "verify", | 203 | .name = "verify", |
| 204 | .desc = "Verify the input data using RSA public key", | 204 | .desc = "Verify the input data using RSA public key", |
| 205 | .type = OPTION_VALUE, | 205 | .type = OPTION_VALUE, |
| 206 | .value = RSA_VERIFY, | 206 | .value = RSA_VERIFY, |
| 207 | .opt.value = &rsautl_config.rsa_mode, | 207 | .opt.value = &cfg.rsa_mode, |
| 208 | }, | 208 | }, |
| 209 | { | 209 | { |
| 210 | .name = "x931", | 210 | .name = "x931", |
| 211 | .desc = "Use ANSI X9.31 padding", | 211 | .desc = "Use ANSI X9.31 padding", |
| 212 | .type = OPTION_VALUE, | 212 | .type = OPTION_VALUE, |
| 213 | .value = RSA_X931_PADDING, | 213 | .value = RSA_X931_PADDING, |
| 214 | .opt.value = &rsautl_config.pad, | 214 | .opt.value = &cfg.pad, |
| 215 | }, | 215 | }, |
| 216 | 216 | ||
| 217 | {NULL}, | 217 | {NULL}, |
| @@ -249,44 +249,44 @@ rsautl_main(int argc, char **argv) | |||
| 249 | exit(1); | 249 | exit(1); |
| 250 | } | 250 | } |
| 251 | 251 | ||
| 252 | memset(&rsautl_config, 0, sizeof(rsautl_config)); | 252 | memset(&cfg, 0, sizeof(cfg)); |
| 253 | rsautl_config.keyform = FORMAT_PEM; | 253 | cfg.keyform = FORMAT_PEM; |
| 254 | rsautl_config.key_type = KEY_PRIVKEY; | 254 | cfg.key_type = KEY_PRIVKEY; |
| 255 | rsautl_config.pad = RSA_PKCS1_PADDING; | 255 | cfg.pad = RSA_PKCS1_PADDING; |
| 256 | rsautl_config.rsa_mode = RSA_VERIFY; | 256 | cfg.rsa_mode = RSA_VERIFY; |
| 257 | 257 | ||
| 258 | if (options_parse(argc, argv, rsautl_options, NULL, NULL) != 0) { | 258 | if (options_parse(argc, argv, rsautl_options, NULL, NULL) != 0) { |
| 259 | rsautl_usage(); | 259 | rsautl_usage(); |
| 260 | return (1); | 260 | return (1); |
| 261 | } | 261 | } |
| 262 | 262 | ||
| 263 | if (rsautl_config.rsa_mode == RSA_SIGN || | 263 | if (cfg.rsa_mode == RSA_SIGN || |
| 264 | rsautl_config.rsa_mode == RSA_DECRYPT) | 264 | cfg.rsa_mode == RSA_DECRYPT) |
| 265 | need_priv = 1; | 265 | need_priv = 1; |
| 266 | 266 | ||
| 267 | if (need_priv && rsautl_config.key_type != KEY_PRIVKEY) { | 267 | if (need_priv && cfg.key_type != KEY_PRIVKEY) { |
| 268 | BIO_printf(bio_err, "A private key is needed for this operation\n"); | 268 | BIO_printf(bio_err, "A private key is needed for this operation\n"); |
| 269 | goto end; | 269 | goto end; |
| 270 | } | 270 | } |
| 271 | if (!app_passwd(bio_err, rsautl_config.passargin, NULL, &passin, NULL)) { | 271 | if (!app_passwd(bio_err, cfg.passargin, NULL, &passin, NULL)) { |
| 272 | BIO_printf(bio_err, "Error getting password\n"); | 272 | BIO_printf(bio_err, "Error getting password\n"); |
| 273 | goto end; | 273 | goto end; |
| 274 | } | 274 | } |
| 275 | 275 | ||
| 276 | switch (rsautl_config.key_type) { | 276 | switch (cfg.key_type) { |
| 277 | case KEY_PRIVKEY: | 277 | case KEY_PRIVKEY: |
| 278 | pkey = load_key(bio_err, rsautl_config.keyfile, | 278 | pkey = load_key(bio_err, cfg.keyfile, |
| 279 | rsautl_config.keyform, 0, passin, "Private Key"); | 279 | cfg.keyform, 0, passin, "Private Key"); |
| 280 | break; | 280 | break; |
| 281 | 281 | ||
| 282 | case KEY_PUBKEY: | 282 | case KEY_PUBKEY: |
| 283 | pkey = load_pubkey(bio_err, rsautl_config.keyfile, | 283 | pkey = load_pubkey(bio_err, cfg.keyfile, |
| 284 | rsautl_config.keyform, 0, NULL, "Public Key"); | 284 | cfg.keyform, 0, NULL, "Public Key"); |
| 285 | break; | 285 | break; |
| 286 | 286 | ||
| 287 | case KEY_CERT: | 287 | case KEY_CERT: |
| 288 | x = load_cert(bio_err, rsautl_config.keyfile, | 288 | x = load_cert(bio_err, cfg.keyfile, |
| 289 | rsautl_config.keyform, NULL, "Certificate"); | 289 | cfg.keyform, NULL, "Certificate"); |
| 290 | if (x) { | 290 | if (x) { |
| 291 | pkey = X509_get_pubkey(x); | 291 | pkey = X509_get_pubkey(x); |
| 292 | X509_free(x); | 292 | X509_free(x); |
| @@ -305,8 +305,8 @@ rsautl_main(int argc, char **argv) | |||
| 305 | ERR_print_errors(bio_err); | 305 | ERR_print_errors(bio_err); |
| 306 | goto end; | 306 | goto end; |
| 307 | } | 307 | } |
| 308 | if (rsautl_config.infile) { | 308 | if (cfg.infile) { |
| 309 | if (!(in = BIO_new_file(rsautl_config.infile, "rb"))) { | 309 | if (!(in = BIO_new_file(cfg.infile, "rb"))) { |
| 310 | BIO_printf(bio_err, "Error Reading Input File\n"); | 310 | BIO_printf(bio_err, "Error Reading Input File\n"); |
| 311 | ERR_print_errors(bio_err); | 311 | ERR_print_errors(bio_err); |
| 312 | goto end; | 312 | goto end; |
| @@ -314,8 +314,8 @@ rsautl_main(int argc, char **argv) | |||
| 314 | } else | 314 | } else |
| 315 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 315 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 316 | 316 | ||
| 317 | if (rsautl_config.outfile) { | 317 | if (cfg.outfile) { |
| 318 | if (!(out = BIO_new_file(rsautl_config.outfile, "wb"))) { | 318 | if (!(out = BIO_new_file(cfg.outfile, "wb"))) { |
| 319 | BIO_printf(bio_err, "Error Reading Output File\n"); | 319 | BIO_printf(bio_err, "Error Reading Output File\n"); |
| 320 | ERR_print_errors(bio_err); | 320 | ERR_print_errors(bio_err); |
| 321 | goto end; | 321 | goto end; |
| @@ -343,7 +343,7 @@ rsautl_main(int argc, char **argv) | |||
| 343 | BIO_printf(bio_err, "Error reading input Data\n"); | 343 | BIO_printf(bio_err, "Error reading input Data\n"); |
| 344 | exit(1); | 344 | exit(1); |
| 345 | } | 345 | } |
| 346 | if (rsautl_config.rev) { | 346 | if (cfg.rev) { |
| 347 | int i; | 347 | int i; |
| 348 | unsigned char ctmp; | 348 | unsigned char ctmp; |
| 349 | for (i = 0; i < rsa_inlen / 2; i++) { | 349 | for (i = 0; i < rsa_inlen / 2; i++) { |
| @@ -353,25 +353,25 @@ rsautl_main(int argc, char **argv) | |||
| 353 | } | 353 | } |
| 354 | } | 354 | } |
| 355 | 355 | ||
| 356 | switch (rsautl_config.rsa_mode) { | 356 | switch (cfg.rsa_mode) { |
| 357 | case RSA_VERIFY: | 357 | case RSA_VERIFY: |
| 358 | rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, | 358 | rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, |
| 359 | rsa, rsautl_config.pad); | 359 | rsa, cfg.pad); |
| 360 | break; | 360 | break; |
| 361 | 361 | ||
| 362 | case RSA_SIGN: | 362 | case RSA_SIGN: |
| 363 | rsa_outlen = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, | 363 | rsa_outlen = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, |
| 364 | rsa, rsautl_config.pad); | 364 | rsa, cfg.pad); |
| 365 | break; | 365 | break; |
| 366 | 366 | ||
| 367 | case RSA_ENCRYPT: | 367 | case RSA_ENCRYPT: |
| 368 | rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, | 368 | rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, |
| 369 | rsa, rsautl_config.pad); | 369 | rsa, cfg.pad); |
| 370 | break; | 370 | break; |
| 371 | 371 | ||
| 372 | case RSA_DECRYPT: | 372 | case RSA_DECRYPT: |
| 373 | rsa_outlen = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, | 373 | rsa_outlen = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, |
| 374 | rsa, rsautl_config.pad); | 374 | rsa, cfg.pad); |
| 375 | break; | 375 | break; |
| 376 | } | 376 | } |
| 377 | 377 | ||
| @@ -381,11 +381,11 @@ rsautl_main(int argc, char **argv) | |||
| 381 | goto end; | 381 | goto end; |
| 382 | } | 382 | } |
| 383 | ret = 0; | 383 | ret = 0; |
| 384 | if (rsautl_config.asn1parse) { | 384 | if (cfg.asn1parse) { |
| 385 | if (!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) { | 385 | if (!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) { |
| 386 | ERR_print_errors(bio_err); | 386 | ERR_print_errors(bio_err); |
| 387 | } | 387 | } |
| 388 | } else if (rsautl_config.hexdump) | 388 | } else if (cfg.hexdump) |
| 389 | BIO_dump(out, (char *) rsa_out, rsa_outlen); | 389 | BIO_dump(out, (char *) rsa_out, rsa_outlen); |
| 390 | else | 390 | else |
| 391 | BIO_write(out, rsa_out, rsa_outlen); | 391 | BIO_write(out, rsa_out, rsa_outlen); |
diff --git a/src/usr.bin/openssl/s_client.c b/src/usr.bin/openssl/s_client.c index 41f6502325..82a8128243 100644 --- a/src/usr.bin/openssl/s_client.c +++ b/src/usr.bin/openssl/s_client.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s_client.c,v 1.59 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: s_client.c,v 1.60 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -246,16 +246,16 @@ static struct { | |||
| 246 | int verify; | 246 | int verify; |
| 247 | X509_VERIFY_PARAM *vpm; | 247 | X509_VERIFY_PARAM *vpm; |
| 248 | char *xmpphost; | 248 | char *xmpphost; |
| 249 | } s_client_config; | 249 | } cfg; |
| 250 | 250 | ||
| 251 | static int | 251 | static int |
| 252 | s_client_opt_keymatexportlen(char *arg) | 252 | s_client_opt_keymatexportlen(char *arg) |
| 253 | { | 253 | { |
| 254 | s_client_config.keymatexportlen = strtonum(arg, 1, INT_MAX, | 254 | cfg.keymatexportlen = strtonum(arg, 1, INT_MAX, |
| 255 | &s_client_config.errstr); | 255 | &cfg.errstr); |
| 256 | if (s_client_config.errstr != NULL) { | 256 | if (cfg.errstr != NULL) { |
| 257 | BIO_printf(bio_err, "invalid argument %s: %s\n", | 257 | BIO_printf(bio_err, "invalid argument %s: %s\n", |
| 258 | arg, s_client_config.errstr); | 258 | arg, cfg.errstr); |
| 259 | return (1); | 259 | return (1); |
| 260 | } | 260 | } |
| 261 | return (0); | 261 | return (0); |
| @@ -265,11 +265,11 @@ s_client_opt_keymatexportlen(char *arg) | |||
| 265 | static int | 265 | static int |
| 266 | s_client_opt_mtu(char *arg) | 266 | s_client_opt_mtu(char *arg) |
| 267 | { | 267 | { |
| 268 | s_client_config.socket_mtu = strtonum(arg, 0, LONG_MAX, | 268 | cfg.socket_mtu = strtonum(arg, 0, LONG_MAX, |
| 269 | &s_client_config.errstr); | 269 | &cfg.errstr); |
| 270 | if (s_client_config.errstr != NULL) { | 270 | if (cfg.errstr != NULL) { |
| 271 | BIO_printf(bio_err, "invalid argument %s: %s\n", | 271 | BIO_printf(bio_err, "invalid argument %s: %s\n", |
| 272 | arg, s_client_config.errstr); | 272 | arg, cfg.errstr); |
| 273 | return (1); | 273 | return (1); |
| 274 | } | 274 | } |
| 275 | return (0); | 275 | return (0); |
| @@ -282,7 +282,7 @@ s_client_opt_port(char *arg) | |||
| 282 | if (*arg == '\0') | 282 | if (*arg == '\0') |
| 283 | return (1); | 283 | return (1); |
| 284 | 284 | ||
| 285 | s_client_config.port = arg; | 285 | cfg.port = arg; |
| 286 | return (0); | 286 | return (0); |
| 287 | } | 287 | } |
| 288 | 288 | ||
| @@ -290,8 +290,8 @@ s_client_opt_port(char *arg) | |||
| 290 | static int | 290 | static int |
| 291 | s_client_opt_protocol_version_dtls(void) | 291 | s_client_opt_protocol_version_dtls(void) |
| 292 | { | 292 | { |
| 293 | s_client_config.meth = DTLS_client_method(); | 293 | cfg.meth = DTLS_client_method(); |
| 294 | s_client_config.socket_type = SOCK_DGRAM; | 294 | cfg.socket_type = SOCK_DGRAM; |
| 295 | return (0); | 295 | return (0); |
| 296 | } | 296 | } |
| 297 | #endif | 297 | #endif |
| @@ -300,10 +300,10 @@ s_client_opt_protocol_version_dtls(void) | |||
| 300 | static int | 300 | static int |
| 301 | s_client_opt_protocol_version_dtls1(void) | 301 | s_client_opt_protocol_version_dtls1(void) |
| 302 | { | 302 | { |
| 303 | s_client_config.meth = DTLS_client_method(); | 303 | cfg.meth = DTLS_client_method(); |
| 304 | s_client_config.min_version = DTLS1_VERSION; | 304 | cfg.min_version = DTLS1_VERSION; |
| 305 | s_client_config.max_version = DTLS1_VERSION; | 305 | cfg.max_version = DTLS1_VERSION; |
| 306 | s_client_config.socket_type = SOCK_DGRAM; | 306 | cfg.socket_type = SOCK_DGRAM; |
| 307 | return (0); | 307 | return (0); |
| 308 | } | 308 | } |
| 309 | #endif | 309 | #endif |
| @@ -312,10 +312,10 @@ s_client_opt_protocol_version_dtls1(void) | |||
| 312 | static int | 312 | static int |
| 313 | s_client_opt_protocol_version_dtls1_2(void) | 313 | s_client_opt_protocol_version_dtls1_2(void) |
| 314 | { | 314 | { |
| 315 | s_client_config.meth = DTLS_client_method(); | 315 | cfg.meth = DTLS_client_method(); |
| 316 | s_client_config.min_version = DTLS1_2_VERSION; | 316 | cfg.min_version = DTLS1_2_VERSION; |
| 317 | s_client_config.max_version = DTLS1_2_VERSION; | 317 | cfg.max_version = DTLS1_2_VERSION; |
| 318 | s_client_config.socket_type = SOCK_DGRAM; | 318 | cfg.socket_type = SOCK_DGRAM; |
| 319 | return (0); | 319 | return (0); |
| 320 | } | 320 | } |
| 321 | #endif | 321 | #endif |
| @@ -323,40 +323,40 @@ s_client_opt_protocol_version_dtls1_2(void) | |||
| 323 | static int | 323 | static int |
| 324 | s_client_opt_protocol_version_tls1(void) | 324 | s_client_opt_protocol_version_tls1(void) |
| 325 | { | 325 | { |
| 326 | s_client_config.min_version = TLS1_VERSION; | 326 | cfg.min_version = TLS1_VERSION; |
| 327 | s_client_config.max_version = TLS1_VERSION; | 327 | cfg.max_version = TLS1_VERSION; |
| 328 | return (0); | 328 | return (0); |
| 329 | } | 329 | } |
| 330 | 330 | ||
| 331 | static int | 331 | static int |
| 332 | s_client_opt_protocol_version_tls1_1(void) | 332 | s_client_opt_protocol_version_tls1_1(void) |
| 333 | { | 333 | { |
| 334 | s_client_config.min_version = TLS1_1_VERSION; | 334 | cfg.min_version = TLS1_1_VERSION; |
| 335 | s_client_config.max_version = TLS1_1_VERSION; | 335 | cfg.max_version = TLS1_1_VERSION; |
| 336 | return (0); | 336 | return (0); |
| 337 | } | 337 | } |
| 338 | 338 | ||
| 339 | static int | 339 | static int |
| 340 | s_client_opt_protocol_version_tls1_2(void) | 340 | s_client_opt_protocol_version_tls1_2(void) |
| 341 | { | 341 | { |
| 342 | s_client_config.min_version = TLS1_2_VERSION; | 342 | cfg.min_version = TLS1_2_VERSION; |
| 343 | s_client_config.max_version = TLS1_2_VERSION; | 343 | cfg.max_version = TLS1_2_VERSION; |
| 344 | return (0); | 344 | return (0); |
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | static int | 347 | static int |
| 348 | s_client_opt_protocol_version_tls1_3(void) | 348 | s_client_opt_protocol_version_tls1_3(void) |
| 349 | { | 349 | { |
| 350 | s_client_config.min_version = TLS1_3_VERSION; | 350 | cfg.min_version = TLS1_3_VERSION; |
| 351 | s_client_config.max_version = TLS1_3_VERSION; | 351 | cfg.max_version = TLS1_3_VERSION; |
| 352 | return (0); | 352 | return (0); |
| 353 | } | 353 | } |
| 354 | 354 | ||
| 355 | static int | 355 | static int |
| 356 | s_client_opt_quiet(void) | 356 | s_client_opt_quiet(void) |
| 357 | { | 357 | { |
| 358 | s_client_config.quiet = 1; | 358 | cfg.quiet = 1; |
| 359 | s_client_config.ign_eof = 1; | 359 | cfg.ign_eof = 1; |
| 360 | return (0); | 360 | return (0); |
| 361 | } | 361 | } |
| 362 | 362 | ||
| @@ -364,17 +364,17 @@ static int | |||
| 364 | s_client_opt_starttls(char *arg) | 364 | s_client_opt_starttls(char *arg) |
| 365 | { | 365 | { |
| 366 | if (strcmp(arg, "smtp") == 0) | 366 | if (strcmp(arg, "smtp") == 0) |
| 367 | s_client_config.starttls_proto = PROTO_SMTP; | 367 | cfg.starttls_proto = PROTO_SMTP; |
| 368 | else if (strcmp(arg, "lmtp") == 0) | 368 | else if (strcmp(arg, "lmtp") == 0) |
| 369 | s_client_config.starttls_proto = PROTO_LMTP; | 369 | cfg.starttls_proto = PROTO_LMTP; |
| 370 | else if (strcmp(arg, "pop3") == 0) | 370 | else if (strcmp(arg, "pop3") == 0) |
| 371 | s_client_config.starttls_proto = PROTO_POP3; | 371 | cfg.starttls_proto = PROTO_POP3; |
| 372 | else if (strcmp(arg, "imap") == 0) | 372 | else if (strcmp(arg, "imap") == 0) |
| 373 | s_client_config.starttls_proto = PROTO_IMAP; | 373 | cfg.starttls_proto = PROTO_IMAP; |
| 374 | else if (strcmp(arg, "ftp") == 0) | 374 | else if (strcmp(arg, "ftp") == 0) |
| 375 | s_client_config.starttls_proto = PROTO_FTP; | 375 | cfg.starttls_proto = PROTO_FTP; |
| 376 | else if (strcmp(arg, "xmpp") == 0) | 376 | else if (strcmp(arg, "xmpp") == 0) |
| 377 | s_client_config.starttls_proto = PROTO_XMPP; | 377 | cfg.starttls_proto = PROTO_XMPP; |
| 378 | else | 378 | else |
| 379 | return (1); | 379 | return (1); |
| 380 | return (0); | 380 | return (0); |
| @@ -383,12 +383,12 @@ s_client_opt_starttls(char *arg) | |||
| 383 | static int | 383 | static int |
| 384 | s_client_opt_verify(char *arg) | 384 | s_client_opt_verify(char *arg) |
| 385 | { | 385 | { |
| 386 | s_client_config.verify = SSL_VERIFY_PEER; | 386 | cfg.verify = SSL_VERIFY_PEER; |
| 387 | 387 | ||
| 388 | verify_depth = strtonum(arg, 0, INT_MAX, &s_client_config.errstr); | 388 | verify_depth = strtonum(arg, 0, INT_MAX, &cfg.errstr); |
| 389 | if (s_client_config.errstr != NULL) { | 389 | if (cfg.errstr != NULL) { |
| 390 | BIO_printf(bio_err, "invalid argument %s: %s\n", | 390 | BIO_printf(bio_err, "invalid argument %s: %s\n", |
| 391 | arg, s_client_config.errstr); | 391 | arg, cfg.errstr); |
| 392 | return (1); | 392 | return (1); |
| 393 | } | 393 | } |
| 394 | BIO_printf(bio_err, "verify depth is %d\n", verify_depth); | 394 | BIO_printf(bio_err, "verify depth is %d\n", verify_depth); |
| @@ -403,7 +403,7 @@ s_client_opt_verify_param(int argc, char **argv, int *argsused) | |||
| 403 | int badarg = 0; | 403 | int badarg = 0; |
| 404 | 404 | ||
| 405 | if (!args_verify(&pargs, &pargc, &badarg, bio_err, | 405 | if (!args_verify(&pargs, &pargc, &badarg, bio_err, |
| 406 | &s_client_config.vpm)) { | 406 | &cfg.vpm)) { |
| 407 | BIO_printf(bio_err, "unknown option %s\n", *argv); | 407 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 408 | return (1); | 408 | return (1); |
| 409 | } | 409 | } |
| @@ -419,14 +419,14 @@ static const struct option s_client_options[] = { | |||
| 419 | .name = "4", | 419 | .name = "4", |
| 420 | .desc = "Use IPv4 only", | 420 | .desc = "Use IPv4 only", |
| 421 | .type = OPTION_VALUE, | 421 | .type = OPTION_VALUE, |
| 422 | .opt.value = &s_client_config.af, | 422 | .opt.value = &cfg.af, |
| 423 | .value = AF_INET, | 423 | .value = AF_INET, |
| 424 | }, | 424 | }, |
| 425 | { | 425 | { |
| 426 | .name = "6", | 426 | .name = "6", |
| 427 | .desc = "Use IPv6 only", | 427 | .desc = "Use IPv6 only", |
| 428 | .type = OPTION_VALUE, | 428 | .type = OPTION_VALUE, |
| 429 | .opt.value = &s_client_config.af, | 429 | .opt.value = &cfg.af, |
| 430 | .value = AF_INET6, | 430 | .value = AF_INET6, |
| 431 | }, | 431 | }, |
| 432 | { | 432 | { |
| @@ -435,67 +435,67 @@ static const struct option s_client_options[] = { | |||
| 435 | .desc = "Set the advertised protocols for ALPN" | 435 | .desc = "Set the advertised protocols for ALPN" |
| 436 | " (comma-separated list)", | 436 | " (comma-separated list)", |
| 437 | .type = OPTION_ARG, | 437 | .type = OPTION_ARG, |
| 438 | .opt.arg = &s_client_config.alpn_in, | 438 | .opt.arg = &cfg.alpn_in, |
| 439 | }, | 439 | }, |
| 440 | { | 440 | { |
| 441 | .name = "bugs", | 441 | .name = "bugs", |
| 442 | .desc = "Enable various workarounds for buggy implementations", | 442 | .desc = "Enable various workarounds for buggy implementations", |
| 443 | .type = OPTION_FLAG, | 443 | .type = OPTION_FLAG, |
| 444 | .opt.flag = &s_client_config.bugs, | 444 | .opt.flag = &cfg.bugs, |
| 445 | }, | 445 | }, |
| 446 | { | 446 | { |
| 447 | .name = "CAfile", | 447 | .name = "CAfile", |
| 448 | .argname = "file", | 448 | .argname = "file", |
| 449 | .desc = "PEM format file of CA certificates", | 449 | .desc = "PEM format file of CA certificates", |
| 450 | .type = OPTION_ARG, | 450 | .type = OPTION_ARG, |
| 451 | .opt.arg = &s_client_config.CAfile, | 451 | .opt.arg = &cfg.CAfile, |
| 452 | }, | 452 | }, |
| 453 | { | 453 | { |
| 454 | .name = "CApath", | 454 | .name = "CApath", |
| 455 | .argname = "directory", | 455 | .argname = "directory", |
| 456 | .desc = "PEM format directory of CA certificates", | 456 | .desc = "PEM format directory of CA certificates", |
| 457 | .type = OPTION_ARG, | 457 | .type = OPTION_ARG, |
| 458 | .opt.arg = &s_client_config.CApath, | 458 | .opt.arg = &cfg.CApath, |
| 459 | }, | 459 | }, |
| 460 | { | 460 | { |
| 461 | .name = "cert", | 461 | .name = "cert", |
| 462 | .argname = "file", | 462 | .argname = "file", |
| 463 | .desc = "Certificate file to use, PEM format assumed", | 463 | .desc = "Certificate file to use, PEM format assumed", |
| 464 | .type = OPTION_ARG, | 464 | .type = OPTION_ARG, |
| 465 | .opt.arg = &s_client_config.cert_file, | 465 | .opt.arg = &cfg.cert_file, |
| 466 | }, | 466 | }, |
| 467 | { | 467 | { |
| 468 | .name = "certform", | 468 | .name = "certform", |
| 469 | .argname = "fmt", | 469 | .argname = "fmt", |
| 470 | .desc = "Certificate format (PEM or DER) PEM default", | 470 | .desc = "Certificate format (PEM or DER) PEM default", |
| 471 | .type = OPTION_ARG_FORMAT, | 471 | .type = OPTION_ARG_FORMAT, |
| 472 | .opt.value = &s_client_config.cert_format, | 472 | .opt.value = &cfg.cert_format, |
| 473 | }, | 473 | }, |
| 474 | { | 474 | { |
| 475 | .name = "cipher", | 475 | .name = "cipher", |
| 476 | .argname = "cipherlist", | 476 | .argname = "cipherlist", |
| 477 | .desc = "Preferred cipher to use (see 'openssl ciphers')", | 477 | .desc = "Preferred cipher to use (see 'openssl ciphers')", |
| 478 | .type = OPTION_ARG, | 478 | .type = OPTION_ARG, |
| 479 | .opt.arg = &s_client_config.cipher, | 479 | .opt.arg = &cfg.cipher, |
| 480 | }, | 480 | }, |
| 481 | { | 481 | { |
| 482 | .name = "connect", | 482 | .name = "connect", |
| 483 | .argname = "host:port", | 483 | .argname = "host:port", |
| 484 | .desc = "Who to connect to (default is localhost:4433)", | 484 | .desc = "Who to connect to (default is localhost:4433)", |
| 485 | .type = OPTION_ARG, | 485 | .type = OPTION_ARG, |
| 486 | .opt.arg = &s_client_config.connect, | 486 | .opt.arg = &cfg.connect, |
| 487 | }, | 487 | }, |
| 488 | { | 488 | { |
| 489 | .name = "crlf", | 489 | .name = "crlf", |
| 490 | .desc = "Convert LF from terminal into CRLF", | 490 | .desc = "Convert LF from terminal into CRLF", |
| 491 | .type = OPTION_FLAG, | 491 | .type = OPTION_FLAG, |
| 492 | .opt.flag = &s_client_config.crlf, | 492 | .opt.flag = &cfg.crlf, |
| 493 | }, | 493 | }, |
| 494 | { | 494 | { |
| 495 | .name = "debug", | 495 | .name = "debug", |
| 496 | .desc = "Print extensive debugging information", | 496 | .desc = "Print extensive debugging information", |
| 497 | .type = OPTION_FLAG, | 497 | .type = OPTION_FLAG, |
| 498 | .opt.flag = &s_client_config.debug, | 498 | .opt.flag = &cfg.debug, |
| 499 | }, | 499 | }, |
| 500 | #ifndef OPENSSL_NO_DTLS | 500 | #ifndef OPENSSL_NO_DTLS |
| 501 | { | 501 | { |
| @@ -526,20 +526,20 @@ static const struct option s_client_options[] = { | |||
| 526 | .argname = "list", | 526 | .argname = "list", |
| 527 | .desc = "Specify EC groups (colon-separated list)", | 527 | .desc = "Specify EC groups (colon-separated list)", |
| 528 | .type = OPTION_ARG, | 528 | .type = OPTION_ARG, |
| 529 | .opt.arg = &s_client_config.groups_in, | 529 | .opt.arg = &cfg.groups_in, |
| 530 | }, | 530 | }, |
| 531 | { | 531 | { |
| 532 | .name = "host", | 532 | .name = "host", |
| 533 | .argname = "host", | 533 | .argname = "host", |
| 534 | .desc = "Use -connect instead", | 534 | .desc = "Use -connect instead", |
| 535 | .type = OPTION_ARG, | 535 | .type = OPTION_ARG, |
| 536 | .opt.arg = &s_client_config.host, | 536 | .opt.arg = &cfg.host, |
| 537 | }, | 537 | }, |
| 538 | { | 538 | { |
| 539 | .name = "ign_eof", | 539 | .name = "ign_eof", |
| 540 | .desc = "Ignore input EOF (default when -quiet)", | 540 | .desc = "Ignore input EOF (default when -quiet)", |
| 541 | .type = OPTION_VALUE, | 541 | .type = OPTION_VALUE, |
| 542 | .opt.value = &s_client_config.ign_eof, | 542 | .opt.value = &cfg.ign_eof, |
| 543 | .value = 1, | 543 | .value = 1, |
| 544 | }, | 544 | }, |
| 545 | { | 545 | { |
| @@ -547,21 +547,21 @@ static const struct option s_client_options[] = { | |||
| 547 | .argname = "file", | 547 | .argname = "file", |
| 548 | .desc = "Private key file to use, if not, -cert file is used", | 548 | .desc = "Private key file to use, if not, -cert file is used", |
| 549 | .type = OPTION_ARG, | 549 | .type = OPTION_ARG, |
| 550 | .opt.arg = &s_client_config.key_file, | 550 | .opt.arg = &cfg.key_file, |
| 551 | }, | 551 | }, |
| 552 | { | 552 | { |
| 553 | .name = "keyform", | 553 | .name = "keyform", |
| 554 | .argname = "fmt", | 554 | .argname = "fmt", |
| 555 | .desc = "Key format (PEM or DER) PEM default", | 555 | .desc = "Key format (PEM or DER) PEM default", |
| 556 | .type = OPTION_ARG_FORMAT, | 556 | .type = OPTION_ARG_FORMAT, |
| 557 | .opt.value = &s_client_config.key_format, | 557 | .opt.value = &cfg.key_format, |
| 558 | }, | 558 | }, |
| 559 | { | 559 | { |
| 560 | .name = "keymatexport", | 560 | .name = "keymatexport", |
| 561 | .argname = "label", | 561 | .argname = "label", |
| 562 | .desc = "Export keying material using label", | 562 | .desc = "Export keying material using label", |
| 563 | .type = OPTION_ARG, | 563 | .type = OPTION_ARG, |
| 564 | .opt.arg = &s_client_config.keymatexportlabel, | 564 | .opt.arg = &cfg.keymatexportlabel, |
| 565 | }, | 565 | }, |
| 566 | { | 566 | { |
| 567 | .name = "keymatexportlen", | 567 | .name = "keymatexportlen", |
| @@ -578,14 +578,14 @@ static const struct option s_client_options[] = { | |||
| 578 | .name = "legacy_server_connect", | 578 | .name = "legacy_server_connect", |
| 579 | .desc = "Allow initial connection to servers that don't support RI", | 579 | .desc = "Allow initial connection to servers that don't support RI", |
| 580 | .type = OPTION_VALUE_OR, | 580 | .type = OPTION_VALUE_OR, |
| 581 | .opt.value = &s_client_config.off, | 581 | .opt.value = &cfg.off, |
| 582 | .value = SSL_OP_LEGACY_SERVER_CONNECT, | 582 | .value = SSL_OP_LEGACY_SERVER_CONNECT, |
| 583 | }, | 583 | }, |
| 584 | { | 584 | { |
| 585 | .name = "msg", | 585 | .name = "msg", |
| 586 | .desc = "Show all protocol messages with hex dump", | 586 | .desc = "Show all protocol messages with hex dump", |
| 587 | .type = OPTION_FLAG, | 587 | .type = OPTION_FLAG, |
| 588 | .opt.flag = &s_client_config.msg, | 588 | .opt.flag = &cfg.msg, |
| 589 | }, | 589 | }, |
| 590 | #ifndef OPENSSL_NO_DTLS | 590 | #ifndef OPENSSL_NO_DTLS |
| 591 | { | 591 | { |
| @@ -600,115 +600,115 @@ static const struct option s_client_options[] = { | |||
| 600 | .name = "nbio", | 600 | .name = "nbio", |
| 601 | .desc = "Turn on non-blocking I/O", | 601 | .desc = "Turn on non-blocking I/O", |
| 602 | .type = OPTION_FLAG, | 602 | .type = OPTION_FLAG, |
| 603 | .opt.flag = &s_client_config.nbio, | 603 | .opt.flag = &cfg.nbio, |
| 604 | }, | 604 | }, |
| 605 | { | 605 | { |
| 606 | .name = "nbio_test", | 606 | .name = "nbio_test", |
| 607 | .desc = "Test non-blocking I/O", | 607 | .desc = "Test non-blocking I/O", |
| 608 | .type = OPTION_FLAG, | 608 | .type = OPTION_FLAG, |
| 609 | .opt.flag = &s_client_config.nbio_test, | 609 | .opt.flag = &cfg.nbio_test, |
| 610 | }, | 610 | }, |
| 611 | { | 611 | { |
| 612 | .name = "nextprotoneg", | 612 | .name = "nextprotoneg", |
| 613 | .argname = "protocols", | 613 | .argname = "protocols", |
| 614 | .type = OPTION_ARG, | 614 | .type = OPTION_ARG, |
| 615 | .opt.arg = &s_client_config.npn_in, /* Ignored. */ | 615 | .opt.arg = &cfg.npn_in, /* Ignored. */ |
| 616 | }, | 616 | }, |
| 617 | { | 617 | { |
| 618 | .name = "no_comp", | 618 | .name = "no_comp", |
| 619 | .type = OPTION_VALUE_OR, | 619 | .type = OPTION_VALUE_OR, |
| 620 | .opt.value = &s_client_config.off, | 620 | .opt.value = &cfg.off, |
| 621 | .value = SSL_OP_NO_COMPRESSION, | 621 | .value = SSL_OP_NO_COMPRESSION, |
| 622 | }, | 622 | }, |
| 623 | { | 623 | { |
| 624 | .name = "no_ign_eof", | 624 | .name = "no_ign_eof", |
| 625 | .desc = "Don't ignore input EOF", | 625 | .desc = "Don't ignore input EOF", |
| 626 | .type = OPTION_VALUE, | 626 | .type = OPTION_VALUE, |
| 627 | .opt.value = &s_client_config.ign_eof, | 627 | .opt.value = &cfg.ign_eof, |
| 628 | .value = 0, | 628 | .value = 0, |
| 629 | }, | 629 | }, |
| 630 | { | 630 | { |
| 631 | .name = "no_legacy_server_connect", | 631 | .name = "no_legacy_server_connect", |
| 632 | .desc = "Disallow initial connection to servers that don't support RI", | 632 | .desc = "Disallow initial connection to servers that don't support RI", |
| 633 | .type = OPTION_VALUE_OR, | 633 | .type = OPTION_VALUE_OR, |
| 634 | .opt.value = &s_client_config.clr, | 634 | .opt.value = &cfg.clr, |
| 635 | .value = SSL_OP_LEGACY_SERVER_CONNECT, | 635 | .value = SSL_OP_LEGACY_SERVER_CONNECT, |
| 636 | }, | 636 | }, |
| 637 | { | 637 | { |
| 638 | .name = "no_servername", | 638 | .name = "no_servername", |
| 639 | .desc = "Do not send a Server Name Indication (SNI) extension", | 639 | .desc = "Do not send a Server Name Indication (SNI) extension", |
| 640 | .type = OPTION_FLAG, | 640 | .type = OPTION_FLAG, |
| 641 | .opt.value = &s_client_config.no_servername, | 641 | .opt.value = &cfg.no_servername, |
| 642 | }, | 642 | }, |
| 643 | { | 643 | { |
| 644 | .name = "no_ssl2", | 644 | .name = "no_ssl2", |
| 645 | .type = OPTION_VALUE_OR, | 645 | .type = OPTION_VALUE_OR, |
| 646 | .opt.value = &s_client_config.off, | 646 | .opt.value = &cfg.off, |
| 647 | .value = SSL_OP_NO_SSLv2, | 647 | .value = SSL_OP_NO_SSLv2, |
| 648 | }, | 648 | }, |
| 649 | { | 649 | { |
| 650 | .name = "no_ssl3", | 650 | .name = "no_ssl3", |
| 651 | .type = OPTION_VALUE_OR, | 651 | .type = OPTION_VALUE_OR, |
| 652 | .opt.value = &s_client_config.off, | 652 | .opt.value = &cfg.off, |
| 653 | .value = SSL_OP_NO_SSLv3, | 653 | .value = SSL_OP_NO_SSLv3, |
| 654 | }, | 654 | }, |
| 655 | { | 655 | { |
| 656 | .name = "no_ticket", | 656 | .name = "no_ticket", |
| 657 | .desc = "Disable use of RFC4507 session ticket support", | 657 | .desc = "Disable use of RFC4507 session ticket support", |
| 658 | .type = OPTION_VALUE_OR, | 658 | .type = OPTION_VALUE_OR, |
| 659 | .opt.value = &s_client_config.off, | 659 | .opt.value = &cfg.off, |
| 660 | .value = SSL_OP_NO_TICKET, | 660 | .value = SSL_OP_NO_TICKET, |
| 661 | }, | 661 | }, |
| 662 | { | 662 | { |
| 663 | .name = "no_tls1", | 663 | .name = "no_tls1", |
| 664 | .desc = "Disable the use of TLSv1", | 664 | .desc = "Disable the use of TLSv1", |
| 665 | .type = OPTION_VALUE_OR, | 665 | .type = OPTION_VALUE_OR, |
| 666 | .opt.value = &s_client_config.off, | 666 | .opt.value = &cfg.off, |
| 667 | .value = SSL_OP_NO_TLSv1, | 667 | .value = SSL_OP_NO_TLSv1, |
| 668 | }, | 668 | }, |
| 669 | { | 669 | { |
| 670 | .name = "no_tls1_1", | 670 | .name = "no_tls1_1", |
| 671 | .desc = "Disable the use of TLSv1.1", | 671 | .desc = "Disable the use of TLSv1.1", |
| 672 | .type = OPTION_VALUE_OR, | 672 | .type = OPTION_VALUE_OR, |
| 673 | .opt.value = &s_client_config.off, | 673 | .opt.value = &cfg.off, |
| 674 | .value = SSL_OP_NO_TLSv1_1, | 674 | .value = SSL_OP_NO_TLSv1_1, |
| 675 | }, | 675 | }, |
| 676 | { | 676 | { |
| 677 | .name = "no_tls1_2", | 677 | .name = "no_tls1_2", |
| 678 | .desc = "Disable the use of TLSv1.2", | 678 | .desc = "Disable the use of TLSv1.2", |
| 679 | .type = OPTION_VALUE_OR, | 679 | .type = OPTION_VALUE_OR, |
| 680 | .opt.value = &s_client_config.off, | 680 | .opt.value = &cfg.off, |
| 681 | .value = SSL_OP_NO_TLSv1_2, | 681 | .value = SSL_OP_NO_TLSv1_2, |
| 682 | }, | 682 | }, |
| 683 | { | 683 | { |
| 684 | .name = "no_tls1_3", | 684 | .name = "no_tls1_3", |
| 685 | .desc = "Disable the use of TLSv1.3", | 685 | .desc = "Disable the use of TLSv1.3", |
| 686 | .type = OPTION_VALUE_OR, | 686 | .type = OPTION_VALUE_OR, |
| 687 | .opt.value = &s_client_config.off, | 687 | .opt.value = &cfg.off, |
| 688 | .value = SSL_OP_NO_TLSv1_3, | 688 | .value = SSL_OP_NO_TLSv1_3, |
| 689 | }, | 689 | }, |
| 690 | { | 690 | { |
| 691 | .name = "noservername", | 691 | .name = "noservername", |
| 692 | .type = OPTION_FLAG, | 692 | .type = OPTION_FLAG, |
| 693 | .opt.value = &s_client_config.no_servername, | 693 | .opt.value = &cfg.no_servername, |
| 694 | }, | 694 | }, |
| 695 | { | 695 | { |
| 696 | .name = "pass", | 696 | .name = "pass", |
| 697 | .argname = "arg", | 697 | .argname = "arg", |
| 698 | .desc = "Private key file pass phrase source", | 698 | .desc = "Private key file pass phrase source", |
| 699 | .type = OPTION_ARG, | 699 | .type = OPTION_ARG, |
| 700 | .opt.arg = &s_client_config.passarg, | 700 | .opt.arg = &cfg.passarg, |
| 701 | }, | 701 | }, |
| 702 | { | 702 | { |
| 703 | .name = "pause", | 703 | .name = "pause", |
| 704 | .desc = "Pause 1 second between each read and write call", | 704 | .desc = "Pause 1 second between each read and write call", |
| 705 | .type = OPTION_FLAG, | 705 | .type = OPTION_FLAG, |
| 706 | .opt.flag = &s_client_config.pause, | 706 | .opt.flag = &cfg.pause, |
| 707 | }, | 707 | }, |
| 708 | { | 708 | { |
| 709 | .name = "peekaboo", | 709 | .name = "peekaboo", |
| 710 | .type = OPTION_FLAG, | 710 | .type = OPTION_FLAG, |
| 711 | .opt.flag = &s_client_config.peekaboo, | 711 | .opt.flag = &cfg.peekaboo, |
| 712 | }, | 712 | }, |
| 713 | { | 713 | { |
| 714 | .name = "port", | 714 | .name = "port", |
| @@ -721,14 +721,14 @@ static const struct option s_client_options[] = { | |||
| 721 | .name = "prexit", | 721 | .name = "prexit", |
| 722 | .desc = "Print session information when the program exits", | 722 | .desc = "Print session information when the program exits", |
| 723 | .type = OPTION_FLAG, | 723 | .type = OPTION_FLAG, |
| 724 | .opt.flag = &s_client_config.prexit, | 724 | .opt.flag = &cfg.prexit, |
| 725 | }, | 725 | }, |
| 726 | { | 726 | { |
| 727 | .name = "proxy", | 727 | .name = "proxy", |
| 728 | .argname = "host:port", | 728 | .argname = "host:port", |
| 729 | .desc = "Connect to http proxy", | 729 | .desc = "Connect to http proxy", |
| 730 | .type = OPTION_ARG, | 730 | .type = OPTION_ARG, |
| 731 | .opt.arg = &s_client_config.proxy, | 731 | .opt.arg = &cfg.proxy, |
| 732 | }, | 732 | }, |
| 733 | { | 733 | { |
| 734 | .name = "quiet", | 734 | .name = "quiet", |
| @@ -740,7 +740,7 @@ static const struct option s_client_options[] = { | |||
| 740 | .name = "reconnect", | 740 | .name = "reconnect", |
| 741 | .desc = "Drop and re-make the connection with the same Session-ID", | 741 | .desc = "Drop and re-make the connection with the same Session-ID", |
| 742 | .type = OPTION_VALUE, | 742 | .type = OPTION_VALUE, |
| 743 | .opt.value = &s_client_config.reconnect, | 743 | .opt.value = &cfg.reconnect, |
| 744 | .value = 5, | 744 | .value = 5, |
| 745 | }, | 745 | }, |
| 746 | { | 746 | { |
| @@ -748,13 +748,13 @@ static const struct option s_client_options[] = { | |||
| 748 | .argname = "name", | 748 | .argname = "name", |
| 749 | .desc = "Set TLS extension servername in ClientHello (SNI)", | 749 | .desc = "Set TLS extension servername in ClientHello (SNI)", |
| 750 | .type = OPTION_ARG, | 750 | .type = OPTION_ARG, |
| 751 | .opt.arg = &s_client_config.servername, | 751 | .opt.arg = &cfg.servername, |
| 752 | }, | 752 | }, |
| 753 | { | 753 | { |
| 754 | .name = "serverpref", | 754 | .name = "serverpref", |
| 755 | .desc = "Use server's cipher preferences", | 755 | .desc = "Use server's cipher preferences", |
| 756 | .type = OPTION_VALUE_OR, | 756 | .type = OPTION_VALUE_OR, |
| 757 | .opt.value = &s_client_config.off, | 757 | .opt.value = &cfg.off, |
| 758 | .value = SSL_OP_CIPHER_SERVER_PREFERENCE, | 758 | .value = SSL_OP_CIPHER_SERVER_PREFERENCE, |
| 759 | }, | 759 | }, |
| 760 | { | 760 | { |
| @@ -762,20 +762,20 @@ static const struct option s_client_options[] = { | |||
| 762 | .argname = "file", | 762 | .argname = "file", |
| 763 | .desc = "File to read TLS session from", | 763 | .desc = "File to read TLS session from", |
| 764 | .type = OPTION_ARG, | 764 | .type = OPTION_ARG, |
| 765 | .opt.arg = &s_client_config.sess_in, | 765 | .opt.arg = &cfg.sess_in, |
| 766 | }, | 766 | }, |
| 767 | { | 767 | { |
| 768 | .name = "sess_out", | 768 | .name = "sess_out", |
| 769 | .argname = "file", | 769 | .argname = "file", |
| 770 | .desc = "File to write TLS session to", | 770 | .desc = "File to write TLS session to", |
| 771 | .type = OPTION_ARG, | 771 | .type = OPTION_ARG, |
| 772 | .opt.arg = &s_client_config.sess_out, | 772 | .opt.arg = &cfg.sess_out, |
| 773 | }, | 773 | }, |
| 774 | { | 774 | { |
| 775 | .name = "showcerts", | 775 | .name = "showcerts", |
| 776 | .desc = "Show all server certificates in the chain", | 776 | .desc = "Show all server certificates in the chain", |
| 777 | .type = OPTION_FLAG, | 777 | .type = OPTION_FLAG, |
| 778 | .opt.flag = &s_client_config.showcerts, | 778 | .opt.flag = &cfg.showcerts, |
| 779 | }, | 779 | }, |
| 780 | { | 780 | { |
| 781 | .name = "starttls", | 781 | .name = "starttls", |
| @@ -789,20 +789,20 @@ static const struct option s_client_options[] = { | |||
| 789 | .name = "state", | 789 | .name = "state", |
| 790 | .desc = "Print the TLS session states", | 790 | .desc = "Print the TLS session states", |
| 791 | .type = OPTION_FLAG, | 791 | .type = OPTION_FLAG, |
| 792 | .opt.flag = &s_client_config.state, | 792 | .opt.flag = &cfg.state, |
| 793 | }, | 793 | }, |
| 794 | { | 794 | { |
| 795 | .name = "status", | 795 | .name = "status", |
| 796 | .desc = "Send a certificate status request to the server (OCSP)", | 796 | .desc = "Send a certificate status request to the server (OCSP)", |
| 797 | .type = OPTION_FLAG, | 797 | .type = OPTION_FLAG, |
| 798 | .opt.flag = &s_client_config.status_req, | 798 | .opt.flag = &cfg.status_req, |
| 799 | }, | 799 | }, |
| 800 | #ifndef OPENSSL_NO_DTLS | 800 | #ifndef OPENSSL_NO_DTLS |
| 801 | { | 801 | { |
| 802 | .name = "timeout", | 802 | .name = "timeout", |
| 803 | .desc = "Enable send/receive timeout on DTLS connections", | 803 | .desc = "Enable send/receive timeout on DTLS connections", |
| 804 | .type = OPTION_FLAG, | 804 | .type = OPTION_FLAG, |
| 805 | .opt.flag = &s_client_config.enable_timeouts, | 805 | .opt.flag = &cfg.enable_timeouts, |
| 806 | }, | 806 | }, |
| 807 | #endif | 807 | #endif |
| 808 | { | 808 | { |
| @@ -833,7 +833,7 @@ static const struct option s_client_options[] = { | |||
| 833 | .name = "tlsextdebug", | 833 | .name = "tlsextdebug", |
| 834 | .desc = "Hex dump of all TLS extensions received", | 834 | .desc = "Hex dump of all TLS extensions received", |
| 835 | .type = OPTION_FLAG, | 835 | .type = OPTION_FLAG, |
| 836 | .opt.flag = &s_client_config.tlsextdebug, | 836 | .opt.flag = &cfg.tlsextdebug, |
| 837 | }, | 837 | }, |
| 838 | #ifndef OPENSSL_NO_SRTP | 838 | #ifndef OPENSSL_NO_SRTP |
| 839 | { | 839 | { |
| @@ -841,7 +841,7 @@ static const struct option s_client_options[] = { | |||
| 841 | .argname = "profiles", | 841 | .argname = "profiles", |
| 842 | .desc = "Offer SRTP key management with a colon-separated profiles", | 842 | .desc = "Offer SRTP key management with a colon-separated profiles", |
| 843 | .type = OPTION_ARG, | 843 | .type = OPTION_ARG, |
| 844 | .opt.arg = &s_client_config.srtp_profiles, | 844 | .opt.arg = &cfg.srtp_profiles, |
| 845 | }, | 845 | }, |
| 846 | #endif | 846 | #endif |
| 847 | { | 847 | { |
| @@ -862,7 +862,7 @@ static const struct option s_client_options[] = { | |||
| 862 | .argname = "host", | 862 | .argname = "host", |
| 863 | .desc = "Connect to this virtual host on the xmpp server", | 863 | .desc = "Connect to this virtual host on the xmpp server", |
| 864 | .type = OPTION_ARG, | 864 | .type = OPTION_ARG, |
| 865 | .opt.arg = &s_client_config.xmpphost, | 865 | .opt.arg = &cfg.xmpphost, |
| 866 | }, | 866 | }, |
| 867 | { | 867 | { |
| 868 | .name = NULL, | 868 | .name = NULL, |
| @@ -928,17 +928,17 @@ s_client_main(int argc, char **argv) | |||
| 928 | exit(1); | 928 | exit(1); |
| 929 | } | 929 | } |
| 930 | 930 | ||
| 931 | memset(&s_client_config, 0, sizeof(s_client_config)); | 931 | memset(&cfg, 0, sizeof(cfg)); |
| 932 | s_client_config.af = AF_UNSPEC; | 932 | cfg.af = AF_UNSPEC; |
| 933 | s_client_config.cert_format = FORMAT_PEM; | 933 | cfg.cert_format = FORMAT_PEM; |
| 934 | s_client_config.host = SSL_HOST_NAME; | 934 | cfg.host = SSL_HOST_NAME; |
| 935 | s_client_config.key_format = FORMAT_PEM; | 935 | cfg.key_format = FORMAT_PEM; |
| 936 | s_client_config.keymatexportlen = 20; | 936 | cfg.keymatexportlen = 20; |
| 937 | s_client_config.meth = TLS_client_method(); | 937 | cfg.meth = TLS_client_method(); |
| 938 | s_client_config.port = PORT_STR; | 938 | cfg.port = PORT_STR; |
| 939 | s_client_config.socket_type = SOCK_STREAM; | 939 | cfg.socket_type = SOCK_STREAM; |
| 940 | s_client_config.starttls_proto = PROTO_OFF; | 940 | cfg.starttls_proto = PROTO_OFF; |
| 941 | s_client_config.verify = SSL_VERIFY_NONE; | 941 | cfg.verify = SSL_VERIFY_NONE; |
| 942 | 942 | ||
| 943 | if (((cbuf = malloc(BUFSIZZ)) == NULL) || | 943 | if (((cbuf = malloc(BUFSIZZ)) == NULL) || |
| 944 | ((sbuf = malloc(BUFSIZZ)) == NULL) || | 944 | ((sbuf = malloc(BUFSIZZ)) == NULL) || |
| @@ -953,45 +953,45 @@ s_client_main(int argc, char **argv) | |||
| 953 | badop = 1; | 953 | badop = 1; |
| 954 | goto bad; | 954 | goto bad; |
| 955 | } | 955 | } |
| 956 | if (s_client_config.proxy != NULL) { | 956 | if (cfg.proxy != NULL) { |
| 957 | if (!extract_host_port(s_client_config.proxy, | 957 | if (!extract_host_port(cfg.proxy, |
| 958 | &s_client_config.host, NULL, &s_client_config.port)) | 958 | &cfg.host, NULL, &cfg.port)) |
| 959 | goto bad; | 959 | goto bad; |
| 960 | if (s_client_config.connect == NULL) | 960 | if (cfg.connect == NULL) |
| 961 | s_client_config.connect = SSL_HOST_NAME; | 961 | cfg.connect = SSL_HOST_NAME; |
| 962 | } else if (s_client_config.connect != NULL) { | 962 | } else if (cfg.connect != NULL) { |
| 963 | if (!extract_host_port(s_client_config.connect, | 963 | if (!extract_host_port(cfg.connect, |
| 964 | &s_client_config.host, NULL, &s_client_config.port)) | 964 | &cfg.host, NULL, &cfg.port)) |
| 965 | goto bad; | 965 | goto bad; |
| 966 | } | 966 | } |
| 967 | if (badop) { | 967 | if (badop) { |
| 968 | bad: | 968 | bad: |
| 969 | if (s_client_config.errstr == NULL) | 969 | if (cfg.errstr == NULL) |
| 970 | sc_usage(); | 970 | sc_usage(); |
| 971 | goto end; | 971 | goto end; |
| 972 | } | 972 | } |
| 973 | 973 | ||
| 974 | if (!app_passwd(bio_err, s_client_config.passarg, NULL, &pass, NULL)) { | 974 | if (!app_passwd(bio_err, cfg.passarg, NULL, &pass, NULL)) { |
| 975 | BIO_printf(bio_err, "Error getting password\n"); | 975 | BIO_printf(bio_err, "Error getting password\n"); |
| 976 | goto end; | 976 | goto end; |
| 977 | } | 977 | } |
| 978 | if (s_client_config.key_file == NULL) | 978 | if (cfg.key_file == NULL) |
| 979 | s_client_config.key_file = s_client_config.cert_file; | 979 | cfg.key_file = cfg.cert_file; |
| 980 | 980 | ||
| 981 | 981 | ||
| 982 | if (s_client_config.key_file) { | 982 | if (cfg.key_file) { |
| 983 | 983 | ||
| 984 | key = load_key(bio_err, s_client_config.key_file, | 984 | key = load_key(bio_err, cfg.key_file, |
| 985 | s_client_config.key_format, 0, pass, | 985 | cfg.key_format, 0, pass, |
| 986 | "client certificate private key file"); | 986 | "client certificate private key file"); |
| 987 | if (!key) { | 987 | if (!key) { |
| 988 | ERR_print_errors(bio_err); | 988 | ERR_print_errors(bio_err); |
| 989 | goto end; | 989 | goto end; |
| 990 | } | 990 | } |
| 991 | } | 991 | } |
| 992 | if (s_client_config.cert_file) { | 992 | if (cfg.cert_file) { |
| 993 | cert = load_cert(bio_err, s_client_config.cert_file, | 993 | cert = load_cert(bio_err, cfg.cert_file, |
| 994 | s_client_config.cert_format, | 994 | cfg.cert_format, |
| 995 | NULL, "client certificate file"); | 995 | NULL, "client certificate file"); |
| 996 | 996 | ||
| 997 | if (!cert) { | 997 | if (!cert) { |
| @@ -999,8 +999,8 @@ s_client_main(int argc, char **argv) | |||
| 999 | goto end; | 999 | goto end; |
| 1000 | } | 1000 | } |
| 1001 | } | 1001 | } |
| 1002 | if (s_client_config.quiet && !s_client_config.debug && | 1002 | if (cfg.quiet && !cfg.debug && |
| 1003 | !s_client_config.msg) { | 1003 | !cfg.msg) { |
| 1004 | if ((bio_c_out = BIO_new(BIO_s_null())) == NULL) | 1004 | if ((bio_c_out = BIO_new(BIO_s_null())) == NULL) |
| 1005 | goto end; | 1005 | goto end; |
| 1006 | } else { | 1006 | } else { |
| @@ -1008,7 +1008,7 @@ s_client_main(int argc, char **argv) | |||
| 1008 | goto end; | 1008 | goto end; |
| 1009 | } | 1009 | } |
| 1010 | 1010 | ||
| 1011 | ctx = SSL_CTX_new(s_client_config.meth); | 1011 | ctx = SSL_CTX_new(cfg.meth); |
| 1012 | if (ctx == NULL) { | 1012 | if (ctx == NULL) { |
| 1013 | ERR_print_errors(bio_err); | 1013 | ERR_print_errors(bio_err); |
| 1014 | goto end; | 1014 | goto end; |
| @@ -1016,31 +1016,31 @@ s_client_main(int argc, char **argv) | |||
| 1016 | 1016 | ||
| 1017 | SSL_CTX_clear_mode(ctx, SSL_MODE_AUTO_RETRY); | 1017 | SSL_CTX_clear_mode(ctx, SSL_MODE_AUTO_RETRY); |
| 1018 | 1018 | ||
| 1019 | if (s_client_config.vpm) | 1019 | if (cfg.vpm) |
| 1020 | SSL_CTX_set1_param(ctx, s_client_config.vpm); | 1020 | SSL_CTX_set1_param(ctx, cfg.vpm); |
| 1021 | 1021 | ||
| 1022 | if (!SSL_CTX_set_min_proto_version(ctx, s_client_config.min_version)) | 1022 | if (!SSL_CTX_set_min_proto_version(ctx, cfg.min_version)) |
| 1023 | goto end; | 1023 | goto end; |
| 1024 | if (!SSL_CTX_set_max_proto_version(ctx, s_client_config.max_version)) | 1024 | if (!SSL_CTX_set_max_proto_version(ctx, cfg.max_version)) |
| 1025 | goto end; | 1025 | goto end; |
| 1026 | 1026 | ||
| 1027 | #ifndef OPENSSL_NO_SRTP | 1027 | #ifndef OPENSSL_NO_SRTP |
| 1028 | if (s_client_config.srtp_profiles != NULL) | 1028 | if (cfg.srtp_profiles != NULL) |
| 1029 | SSL_CTX_set_tlsext_use_srtp(ctx, s_client_config.srtp_profiles); | 1029 | SSL_CTX_set_tlsext_use_srtp(ctx, cfg.srtp_profiles); |
| 1030 | #endif | 1030 | #endif |
| 1031 | if (s_client_config.bugs) | 1031 | if (cfg.bugs) |
| 1032 | SSL_CTX_set_options(ctx, SSL_OP_ALL | s_client_config.off); | 1032 | SSL_CTX_set_options(ctx, SSL_OP_ALL | cfg.off); |
| 1033 | else | 1033 | else |
| 1034 | SSL_CTX_set_options(ctx, s_client_config.off); | 1034 | SSL_CTX_set_options(ctx, cfg.off); |
| 1035 | 1035 | ||
| 1036 | if (s_client_config.clr) | 1036 | if (cfg.clr) |
| 1037 | SSL_CTX_clear_options(ctx, s_client_config.clr); | 1037 | SSL_CTX_clear_options(ctx, cfg.clr); |
| 1038 | 1038 | ||
| 1039 | if (s_client_config.alpn_in) { | 1039 | if (cfg.alpn_in) { |
| 1040 | unsigned short alpn_len; | 1040 | unsigned short alpn_len; |
| 1041 | unsigned char *alpn; | 1041 | unsigned char *alpn; |
| 1042 | 1042 | ||
| 1043 | alpn = next_protos_parse(&alpn_len, s_client_config.alpn_in); | 1043 | alpn = next_protos_parse(&alpn_len, cfg.alpn_in); |
| 1044 | if (alpn == NULL) { | 1044 | if (alpn == NULL) { |
| 1045 | BIO_printf(bio_err, "Error parsing -alpn argument\n"); | 1045 | BIO_printf(bio_err, "Error parsing -alpn argument\n"); |
| 1046 | goto end; | 1046 | goto end; |
| @@ -1048,42 +1048,42 @@ s_client_main(int argc, char **argv) | |||
| 1048 | SSL_CTX_set_alpn_protos(ctx, alpn, alpn_len); | 1048 | SSL_CTX_set_alpn_protos(ctx, alpn, alpn_len); |
| 1049 | free(alpn); | 1049 | free(alpn); |
| 1050 | } | 1050 | } |
| 1051 | if (s_client_config.groups_in != NULL) { | 1051 | if (cfg.groups_in != NULL) { |
| 1052 | if (SSL_CTX_set1_groups_list(ctx, s_client_config.groups_in) != 1) { | 1052 | if (SSL_CTX_set1_groups_list(ctx, cfg.groups_in) != 1) { |
| 1053 | BIO_printf(bio_err, "Failed to set groups '%s'\n", | 1053 | BIO_printf(bio_err, "Failed to set groups '%s'\n", |
| 1054 | s_client_config.groups_in); | 1054 | cfg.groups_in); |
| 1055 | goto end; | 1055 | goto end; |
| 1056 | } | 1056 | } |
| 1057 | } | 1057 | } |
| 1058 | 1058 | ||
| 1059 | if (s_client_config.state) | 1059 | if (cfg.state) |
| 1060 | SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback); | 1060 | SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback); |
| 1061 | if (s_client_config.cipher != NULL) | 1061 | if (cfg.cipher != NULL) |
| 1062 | if (!SSL_CTX_set_cipher_list(ctx, s_client_config.cipher)) { | 1062 | if (!SSL_CTX_set_cipher_list(ctx, cfg.cipher)) { |
| 1063 | BIO_printf(bio_err, "error setting cipher list\n"); | 1063 | BIO_printf(bio_err, "error setting cipher list\n"); |
| 1064 | ERR_print_errors(bio_err); | 1064 | ERR_print_errors(bio_err); |
| 1065 | goto end; | 1065 | goto end; |
| 1066 | } | 1066 | } |
| 1067 | 1067 | ||
| 1068 | SSL_CTX_set_verify(ctx, s_client_config.verify, verify_callback); | 1068 | SSL_CTX_set_verify(ctx, cfg.verify, verify_callback); |
| 1069 | if (!set_cert_key_stuff(ctx, cert, key)) | 1069 | if (!set_cert_key_stuff(ctx, cert, key)) |
| 1070 | goto end; | 1070 | goto end; |
| 1071 | 1071 | ||
| 1072 | if ((s_client_config.CAfile || s_client_config.CApath) | 1072 | if ((cfg.CAfile || cfg.CApath) |
| 1073 | && !SSL_CTX_load_verify_locations(ctx, s_client_config.CAfile, | 1073 | && !SSL_CTX_load_verify_locations(ctx, cfg.CAfile, |
| 1074 | s_client_config.CApath)) | 1074 | cfg.CApath)) |
| 1075 | ERR_print_errors(bio_err); | 1075 | ERR_print_errors(bio_err); |
| 1076 | 1076 | ||
| 1077 | if (!SSL_CTX_set_default_verify_paths(ctx)) | 1077 | if (!SSL_CTX_set_default_verify_paths(ctx)) |
| 1078 | ERR_print_errors(bio_err); | 1078 | ERR_print_errors(bio_err); |
| 1079 | 1079 | ||
| 1080 | con = SSL_new(ctx); | 1080 | con = SSL_new(ctx); |
| 1081 | if (s_client_config.sess_in) { | 1081 | if (cfg.sess_in) { |
| 1082 | SSL_SESSION *sess; | 1082 | SSL_SESSION *sess; |
| 1083 | BIO *stmp = BIO_new_file(s_client_config.sess_in, "r"); | 1083 | BIO *stmp = BIO_new_file(cfg.sess_in, "r"); |
| 1084 | if (!stmp) { | 1084 | if (!stmp) { |
| 1085 | BIO_printf(bio_err, "Can't open session file %s\n", | 1085 | BIO_printf(bio_err, "Can't open session file %s\n", |
| 1086 | s_client_config.sess_in); | 1086 | cfg.sess_in); |
| 1087 | ERR_print_errors(bio_err); | 1087 | ERR_print_errors(bio_err); |
| 1088 | goto end; | 1088 | goto end; |
| 1089 | } | 1089 | } |
| @@ -1091,7 +1091,7 @@ s_client_main(int argc, char **argv) | |||
| 1091 | BIO_free(stmp); | 1091 | BIO_free(stmp); |
| 1092 | if (!sess) { | 1092 | if (!sess) { |
| 1093 | BIO_printf(bio_err, "Can't open session file %s\n", | 1093 | BIO_printf(bio_err, "Can't open session file %s\n", |
| 1094 | s_client_config.sess_in); | 1094 | cfg.sess_in); |
| 1095 | ERR_print_errors(bio_err); | 1095 | ERR_print_errors(bio_err); |
| 1096 | goto end; | 1096 | goto end; |
| 1097 | } | 1097 | } |
| @@ -1100,15 +1100,15 @@ s_client_main(int argc, char **argv) | |||
| 1100 | } | 1100 | } |
| 1101 | 1101 | ||
| 1102 | /* Attempt to opportunistically use the host name for SNI. */ | 1102 | /* Attempt to opportunistically use the host name for SNI. */ |
| 1103 | servername = s_client_config.servername; | 1103 | servername = cfg.servername; |
| 1104 | if (servername == NULL) | 1104 | if (servername == NULL) |
| 1105 | servername = s_client_config.host; | 1105 | servername = cfg.host; |
| 1106 | 1106 | ||
| 1107 | if (!s_client_config.no_servername && servername != NULL && | 1107 | if (!cfg.no_servername && servername != NULL && |
| 1108 | !SSL_set_tlsext_host_name(con, servername)) { | 1108 | !SSL_set_tlsext_host_name(con, servername)) { |
| 1109 | long ssl_err = ERR_peek_error(); | 1109 | long ssl_err = ERR_peek_error(); |
| 1110 | 1110 | ||
| 1111 | if (s_client_config.servername != NULL || | 1111 | if (cfg.servername != NULL || |
| 1112 | ERR_GET_LIB(ssl_err) != ERR_LIB_SSL || | 1112 | ERR_GET_LIB(ssl_err) != ERR_LIB_SSL || |
| 1113 | ERR_GET_REASON(ssl_err) != SSL_R_SSL3_EXT_INVALID_SERVERNAME) { | 1113 | ERR_GET_REASON(ssl_err) != SSL_R_SSL3_EXT_INVALID_SERVERNAME) { |
| 1114 | BIO_printf(bio_err, | 1114 | BIO_printf(bio_err, |
| @@ -1119,7 +1119,7 @@ s_client_main(int argc, char **argv) | |||
| 1119 | servername = NULL; | 1119 | servername = NULL; |
| 1120 | ERR_clear_error(); | 1120 | ERR_clear_error(); |
| 1121 | } | 1121 | } |
| 1122 | if (!s_client_config.no_servername && servername != NULL) { | 1122 | if (!cfg.no_servername && servername != NULL) { |
| 1123 | tlsextcbp.biodebug = bio_err; | 1123 | tlsextcbp.biodebug = bio_err; |
| 1124 | SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); | 1124 | SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); |
| 1125 | SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp); | 1125 | SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp); |
| @@ -1127,22 +1127,22 @@ s_client_main(int argc, char **argv) | |||
| 1127 | 1127 | ||
| 1128 | re_start: | 1128 | re_start: |
| 1129 | 1129 | ||
| 1130 | if (init_client(&s, s_client_config.host, s_client_config.port, | 1130 | if (init_client(&s, cfg.host, cfg.port, |
| 1131 | s_client_config.socket_type, s_client_config.af) == 0) { | 1131 | cfg.socket_type, cfg.af) == 0) { |
| 1132 | BIO_printf(bio_err, "connect:errno=%d\n", errno); | 1132 | BIO_printf(bio_err, "connect:errno=%d\n", errno); |
| 1133 | goto end; | 1133 | goto end; |
| 1134 | } | 1134 | } |
| 1135 | BIO_printf(bio_c_out, "CONNECTED(%08X)\n", s); | 1135 | BIO_printf(bio_c_out, "CONNECTED(%08X)\n", s); |
| 1136 | 1136 | ||
| 1137 | if (s_client_config.nbio) { | 1137 | if (cfg.nbio) { |
| 1138 | if (!s_client_config.quiet) | 1138 | if (!cfg.quiet) |
| 1139 | BIO_printf(bio_c_out, "turning on non blocking io\n"); | 1139 | BIO_printf(bio_c_out, "turning on non blocking io\n"); |
| 1140 | if (!BIO_socket_nbio(s, 1)) { | 1140 | if (!BIO_socket_nbio(s, 1)) { |
| 1141 | ERR_print_errors(bio_err); | 1141 | ERR_print_errors(bio_err); |
| 1142 | goto end; | 1142 | goto end; |
| 1143 | } | 1143 | } |
| 1144 | } | 1144 | } |
| 1145 | if (s_client_config.pause & 0x01) | 1145 | if (cfg.pause & 0x01) |
| 1146 | SSL_set_debug(con, 1); | 1146 | SSL_set_debug(con, 1); |
| 1147 | 1147 | ||
| 1148 | if (SSL_is_dtls(con)) { | 1148 | if (SSL_is_dtls(con)) { |
| @@ -1157,7 +1157,7 @@ s_client_main(int argc, char **argv) | |||
| 1157 | } | 1157 | } |
| 1158 | (void) BIO_ctrl_set_connected(sbio, 1, &peer); | 1158 | (void) BIO_ctrl_set_connected(sbio, 1, &peer); |
| 1159 | 1159 | ||
| 1160 | if (s_client_config.enable_timeouts) { | 1160 | if (cfg.enable_timeouts) { |
| 1161 | timeout.tv_sec = 0; | 1161 | timeout.tv_sec = 0; |
| 1162 | timeout.tv_usec = DGRAM_RCV_TIMEOUT; | 1162 | timeout.tv_usec = DGRAM_RCV_TIMEOUT; |
| 1163 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, | 1163 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, |
| @@ -1168,35 +1168,35 @@ s_client_main(int argc, char **argv) | |||
| 1168 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, | 1168 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, |
| 1169 | &timeout); | 1169 | &timeout); |
| 1170 | } | 1170 | } |
| 1171 | if (s_client_config.socket_mtu > 28) { | 1171 | if (cfg.socket_mtu > 28) { |
| 1172 | SSL_set_options(con, SSL_OP_NO_QUERY_MTU); | 1172 | SSL_set_options(con, SSL_OP_NO_QUERY_MTU); |
| 1173 | SSL_set_mtu(con, s_client_config.socket_mtu - 28); | 1173 | SSL_set_mtu(con, cfg.socket_mtu - 28); |
| 1174 | } else | 1174 | } else |
| 1175 | /* want to do MTU discovery */ | 1175 | /* want to do MTU discovery */ |
| 1176 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); | 1176 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); |
| 1177 | } else | 1177 | } else |
| 1178 | sbio = BIO_new_socket(s, BIO_NOCLOSE); | 1178 | sbio = BIO_new_socket(s, BIO_NOCLOSE); |
| 1179 | 1179 | ||
| 1180 | if (s_client_config.nbio_test) { | 1180 | if (cfg.nbio_test) { |
| 1181 | BIO *test; | 1181 | BIO *test; |
| 1182 | 1182 | ||
| 1183 | test = BIO_new(BIO_f_nbio_test()); | 1183 | test = BIO_new(BIO_f_nbio_test()); |
| 1184 | sbio = BIO_push(test, sbio); | 1184 | sbio = BIO_push(test, sbio); |
| 1185 | } | 1185 | } |
| 1186 | if (s_client_config.debug) { | 1186 | if (cfg.debug) { |
| 1187 | SSL_set_debug(con, 1); | 1187 | SSL_set_debug(con, 1); |
| 1188 | BIO_set_callback(sbio, bio_dump_callback); | 1188 | BIO_set_callback(sbio, bio_dump_callback); |
| 1189 | BIO_set_callback_arg(sbio, (char *) bio_c_out); | 1189 | BIO_set_callback_arg(sbio, (char *) bio_c_out); |
| 1190 | } | 1190 | } |
| 1191 | if (s_client_config.msg) { | 1191 | if (cfg.msg) { |
| 1192 | SSL_set_msg_callback(con, msg_cb); | 1192 | SSL_set_msg_callback(con, msg_cb); |
| 1193 | SSL_set_msg_callback_arg(con, bio_c_out); | 1193 | SSL_set_msg_callback_arg(con, bio_c_out); |
| 1194 | } | 1194 | } |
| 1195 | if (s_client_config.tlsextdebug) { | 1195 | if (cfg.tlsextdebug) { |
| 1196 | SSL_set_tlsext_debug_callback(con, tlsext_cb); | 1196 | SSL_set_tlsext_debug_callback(con, tlsext_cb); |
| 1197 | SSL_set_tlsext_debug_arg(con, bio_c_out); | 1197 | SSL_set_tlsext_debug_arg(con, bio_c_out); |
| 1198 | } | 1198 | } |
| 1199 | if (s_client_config.status_req) { | 1199 | if (cfg.status_req) { |
| 1200 | SSL_set_tlsext_status_type(con, TLSEXT_STATUSTYPE_ocsp); | 1200 | SSL_set_tlsext_status_type(con, TLSEXT_STATUSTYPE_ocsp); |
| 1201 | SSL_CTX_set_tlsext_status_cb(ctx, ocsp_resp_cb); | 1201 | SSL_CTX_set_tlsext_status_cb(ctx, ocsp_resp_cb); |
| 1202 | SSL_CTX_set_tlsext_status_arg(ctx, bio_c_out); | 1202 | SSL_CTX_set_tlsext_status_arg(ctx, bio_c_out); |
| @@ -1225,8 +1225,8 @@ s_client_main(int argc, char **argv) | |||
| 1225 | * push a buffering BIO into the chain that is removed again later on | 1225 | * push a buffering BIO into the chain that is removed again later on |
| 1226 | * to not disturb the rest of the s_client operation. | 1226 | * to not disturb the rest of the s_client operation. |
| 1227 | */ | 1227 | */ |
| 1228 | if (s_client_config.starttls_proto == PROTO_SMTP || | 1228 | if (cfg.starttls_proto == PROTO_SMTP || |
| 1229 | s_client_config.starttls_proto == PROTO_LMTP) { | 1229 | cfg.starttls_proto == PROTO_LMTP) { |
| 1230 | int foundit = 0; | 1230 | int foundit = 0; |
| 1231 | BIO *fbio = BIO_new(BIO_f_buffer()); | 1231 | BIO *fbio = BIO_new(BIO_f_buffer()); |
| 1232 | BIO_push(fbio, sbio); | 1232 | BIO_push(fbio, sbio); |
| @@ -1237,7 +1237,7 @@ s_client_main(int argc, char **argv) | |||
| 1237 | while (mbuf_len > 3 && mbuf[3] == '-'); | 1237 | while (mbuf_len > 3 && mbuf[3] == '-'); |
| 1238 | /* STARTTLS command requires EHLO... */ | 1238 | /* STARTTLS command requires EHLO... */ |
| 1239 | BIO_printf(fbio, "%cHLO openssl.client.net\r\n", | 1239 | BIO_printf(fbio, "%cHLO openssl.client.net\r\n", |
| 1240 | s_client_config.starttls_proto == PROTO_SMTP ? 'E' : 'L'); | 1240 | cfg.starttls_proto == PROTO_SMTP ? 'E' : 'L'); |
| 1241 | (void) BIO_flush(fbio); | 1241 | (void) BIO_flush(fbio); |
| 1242 | /* wait for multi-line response to end EHLO SMTP response */ | 1242 | /* wait for multi-line response to end EHLO SMTP response */ |
| 1243 | do { | 1243 | do { |
| @@ -1255,7 +1255,7 @@ s_client_main(int argc, char **argv) | |||
| 1255 | " try anyway...\n"); | 1255 | " try anyway...\n"); |
| 1256 | BIO_printf(sbio, "STARTTLS\r\n"); | 1256 | BIO_printf(sbio, "STARTTLS\r\n"); |
| 1257 | BIO_read(sbio, sbuf, BUFSIZZ); | 1257 | BIO_read(sbio, sbuf, BUFSIZZ); |
| 1258 | } else if (s_client_config.starttls_proto == PROTO_POP3) { | 1258 | } else if (cfg.starttls_proto == PROTO_POP3) { |
| 1259 | mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); | 1259 | mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); |
| 1260 | if (mbuf_len == -1) { | 1260 | if (mbuf_len == -1) { |
| 1261 | BIO_printf(bio_err, "BIO_read failed\n"); | 1261 | BIO_printf(bio_err, "BIO_read failed\n"); |
| @@ -1263,7 +1263,7 @@ s_client_main(int argc, char **argv) | |||
| 1263 | } | 1263 | } |
| 1264 | BIO_printf(sbio, "STLS\r\n"); | 1264 | BIO_printf(sbio, "STLS\r\n"); |
| 1265 | BIO_read(sbio, sbuf, BUFSIZZ); | 1265 | BIO_read(sbio, sbuf, BUFSIZZ); |
| 1266 | } else if (s_client_config.starttls_proto == PROTO_IMAP) { | 1266 | } else if (cfg.starttls_proto == PROTO_IMAP) { |
| 1267 | int foundit = 0; | 1267 | int foundit = 0; |
| 1268 | BIO *fbio = BIO_new(BIO_f_buffer()); | 1268 | BIO *fbio = BIO_new(BIO_f_buffer()); |
| 1269 | BIO_push(fbio, sbio); | 1269 | BIO_push(fbio, sbio); |
| @@ -1287,7 +1287,7 @@ s_client_main(int argc, char **argv) | |||
| 1287 | " try anyway...\n"); | 1287 | " try anyway...\n"); |
| 1288 | BIO_printf(sbio, ". STARTTLS\r\n"); | 1288 | BIO_printf(sbio, ". STARTTLS\r\n"); |
| 1289 | BIO_read(sbio, sbuf, BUFSIZZ); | 1289 | BIO_read(sbio, sbuf, BUFSIZZ); |
| 1290 | } else if (s_client_config.starttls_proto == PROTO_FTP) { | 1290 | } else if (cfg.starttls_proto == PROTO_FTP) { |
| 1291 | BIO *fbio = BIO_new(BIO_f_buffer()); | 1291 | BIO *fbio = BIO_new(BIO_f_buffer()); |
| 1292 | BIO_push(fbio, sbio); | 1292 | BIO_push(fbio, sbio); |
| 1293 | /* wait for multi-line response to end from FTP */ | 1293 | /* wait for multi-line response to end from FTP */ |
| @@ -1300,13 +1300,13 @@ s_client_main(int argc, char **argv) | |||
| 1300 | BIO_free(fbio); | 1300 | BIO_free(fbio); |
| 1301 | BIO_printf(sbio, "AUTH TLS\r\n"); | 1301 | BIO_printf(sbio, "AUTH TLS\r\n"); |
| 1302 | BIO_read(sbio, sbuf, BUFSIZZ); | 1302 | BIO_read(sbio, sbuf, BUFSIZZ); |
| 1303 | } else if (s_client_config.starttls_proto == PROTO_XMPP) { | 1303 | } else if (cfg.starttls_proto == PROTO_XMPP) { |
| 1304 | int seen = 0; | 1304 | int seen = 0; |
| 1305 | BIO_printf(sbio, "<stream:stream " | 1305 | BIO_printf(sbio, "<stream:stream " |
| 1306 | "xmlns:stream='http://etherx.jabber.org/streams' " | 1306 | "xmlns:stream='http://etherx.jabber.org/streams' " |
| 1307 | "xmlns='jabber:client' to='%s' version='1.0'>", | 1307 | "xmlns='jabber:client' to='%s' version='1.0'>", |
| 1308 | s_client_config.xmpphost ? | 1308 | cfg.xmpphost ? |
| 1309 | s_client_config.xmpphost : s_client_config.host); | 1309 | cfg.xmpphost : cfg.host); |
| 1310 | seen = BIO_read(sbio, mbuf, BUFSIZZ); | 1310 | seen = BIO_read(sbio, mbuf, BUFSIZZ); |
| 1311 | 1311 | ||
| 1312 | if (seen <= 0) | 1312 | if (seen <= 0) |
| @@ -1329,9 +1329,9 @@ s_client_main(int argc, char **argv) | |||
| 1329 | if (!strstr(sbuf, "<proceed")) | 1329 | if (!strstr(sbuf, "<proceed")) |
| 1330 | goto shut; | 1330 | goto shut; |
| 1331 | mbuf[0] = 0; | 1331 | mbuf[0] = 0; |
| 1332 | } else if (s_client_config.proxy != NULL) { | 1332 | } else if (cfg.proxy != NULL) { |
| 1333 | BIO_printf(sbio, "CONNECT %s HTTP/1.0\r\n\r\n", | 1333 | BIO_printf(sbio, "CONNECT %s HTTP/1.0\r\n\r\n", |
| 1334 | s_client_config.connect); | 1334 | cfg.connect); |
| 1335 | mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); | 1335 | mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); |
| 1336 | if (mbuf_len == -1) { | 1336 | if (mbuf_len == -1) { |
| 1337 | BIO_printf(bio_err, "BIO_read failed\n"); | 1337 | BIO_printf(bio_err, "BIO_read failed\n"); |
| @@ -1353,9 +1353,9 @@ s_client_main(int argc, char **argv) | |||
| 1353 | tty_on = 1; | 1353 | tty_on = 1; |
| 1354 | if (in_init) { | 1354 | if (in_init) { |
| 1355 | in_init = 0; | 1355 | in_init = 0; |
| 1356 | if (s_client_config.sess_out) { | 1356 | if (cfg.sess_out) { |
| 1357 | BIO *stmp = BIO_new_file( | 1357 | BIO *stmp = BIO_new_file( |
| 1358 | s_client_config.sess_out, "w"); | 1358 | cfg.sess_out, "w"); |
| 1359 | if (stmp) { | 1359 | if (stmp) { |
| 1360 | PEM_write_bio_SSL_SESSION(stmp, | 1360 | PEM_write_bio_SSL_SESSION(stmp, |
| 1361 | SSL_get_session(con)); | 1361 | SSL_get_session(con)); |
| @@ -1363,19 +1363,19 @@ s_client_main(int argc, char **argv) | |||
| 1363 | } else | 1363 | } else |
| 1364 | BIO_printf(bio_err, | 1364 | BIO_printf(bio_err, |
| 1365 | "Error writing session file %s\n", | 1365 | "Error writing session file %s\n", |
| 1366 | s_client_config.sess_out); | 1366 | cfg.sess_out); |
| 1367 | } | 1367 | } |
| 1368 | print_stuff(bio_c_out, con, full_log); | 1368 | print_stuff(bio_c_out, con, full_log); |
| 1369 | if (full_log > 0) | 1369 | if (full_log > 0) |
| 1370 | full_log--; | 1370 | full_log--; |
| 1371 | 1371 | ||
| 1372 | if (s_client_config.starttls_proto) { | 1372 | if (cfg.starttls_proto) { |
| 1373 | BIO_write(bio_err, mbuf, mbuf_len); | 1373 | BIO_write(bio_err, mbuf, mbuf_len); |
| 1374 | /* We don't need to know any more */ | 1374 | /* We don't need to know any more */ |
| 1375 | s_client_config.starttls_proto = PROTO_OFF; | 1375 | cfg.starttls_proto = PROTO_OFF; |
| 1376 | } | 1376 | } |
| 1377 | if (s_client_config.reconnect) { | 1377 | if (cfg.reconnect) { |
| 1378 | s_client_config.reconnect--; | 1378 | cfg.reconnect--; |
| 1379 | BIO_printf(bio_c_out, | 1379 | BIO_printf(bio_c_out, |
| 1380 | "drop connection and then reconnect\n"); | 1380 | "drop connection and then reconnect\n"); |
| 1381 | SSL_shutdown(con); | 1381 | SSL_shutdown(con); |
| @@ -1516,7 +1516,7 @@ s_client_main(int argc, char **argv) | |||
| 1516 | } | 1516 | } |
| 1517 | } | 1517 | } |
| 1518 | #endif | 1518 | #endif |
| 1519 | if (s_client_config.peekaboo) { | 1519 | if (cfg.peekaboo) { |
| 1520 | k = p = SSL_peek(con, pbuf, 1024 /* BUFSIZZ */ ); | 1520 | k = p = SSL_peek(con, pbuf, 1024 /* BUFSIZZ */ ); |
| 1521 | pending = SSL_pending(con); | 1521 | pending = SSL_pending(con); |
| 1522 | if (SSL_get_error(con, p) == SSL_ERROR_NONE) { | 1522 | if (SSL_get_error(con, p) == SSL_ERROR_NONE) { |
| @@ -1535,7 +1535,7 @@ s_client_main(int argc, char **argv) | |||
| 1535 | goto end; | 1535 | goto end; |
| 1536 | sbuf_off = 0; | 1536 | sbuf_off = 0; |
| 1537 | sbuf_len = k; | 1537 | sbuf_len = k; |
| 1538 | if (s_client_config.peekaboo) { | 1538 | if (cfg.peekaboo) { |
| 1539 | if (p != pending) { | 1539 | if (p != pending) { |
| 1540 | ret = -1; | 1540 | ret = -1; |
| 1541 | BIO_printf(bio_err, | 1541 | BIO_printf(bio_err, |
| @@ -1594,7 +1594,7 @@ s_client_main(int argc, char **argv) | |||
| 1594 | BIO_printf(bio_err, "poll error"); | 1594 | BIO_printf(bio_err, "poll error"); |
| 1595 | goto shut; | 1595 | goto shut; |
| 1596 | } | 1596 | } |
| 1597 | if (s_client_config.crlf) { | 1597 | if (cfg.crlf) { |
| 1598 | int j, lf_num; | 1598 | int j, lf_num; |
| 1599 | 1599 | ||
| 1600 | i = read(fileno(stdin), cbuf, BUFSIZZ / 2); | 1600 | i = read(fileno(stdin), cbuf, BUFSIZZ / 2); |
| @@ -1615,13 +1615,13 @@ s_client_main(int argc, char **argv) | |||
| 1615 | } else | 1615 | } else |
| 1616 | i = read(fileno(stdin), cbuf, BUFSIZZ); | 1616 | i = read(fileno(stdin), cbuf, BUFSIZZ); |
| 1617 | 1617 | ||
| 1618 | if ((!s_client_config.ign_eof) && | 1618 | if ((!cfg.ign_eof) && |
| 1619 | ((i <= 0) || (cbuf[0] == 'Q'))) { | 1619 | ((i <= 0) || (cbuf[0] == 'Q'))) { |
| 1620 | BIO_printf(bio_err, "DONE\n"); | 1620 | BIO_printf(bio_err, "DONE\n"); |
| 1621 | ret = 0; | 1621 | ret = 0; |
| 1622 | goto shut; | 1622 | goto shut; |
| 1623 | } | 1623 | } |
| 1624 | if ((!s_client_config.ign_eof) && (cbuf[0] == 'R')) { | 1624 | if ((!cfg.ign_eof) && (cbuf[0] == 'R')) { |
| 1625 | BIO_printf(bio_err, "RENEGOTIATING\n"); | 1625 | BIO_printf(bio_err, "RENEGOTIATING\n"); |
| 1626 | SSL_renegotiate(con); | 1626 | SSL_renegotiate(con); |
| 1627 | cbuf_len = 0; | 1627 | cbuf_len = 0; |
| @@ -1644,7 +1644,7 @@ s_client_main(int argc, char **argv) | |||
| 1644 | close(SSL_get_fd(con)); | 1644 | close(SSL_get_fd(con)); |
| 1645 | end: | 1645 | end: |
| 1646 | if (con != NULL) { | 1646 | if (con != NULL) { |
| 1647 | if (s_client_config.prexit != 0) | 1647 | if (cfg.prexit != 0) |
| 1648 | print_stuff(bio_c_out, con, 1); | 1648 | print_stuff(bio_c_out, con, 1); |
| 1649 | SSL_free(con); | 1649 | SSL_free(con); |
| 1650 | } | 1650 | } |
| @@ -1652,7 +1652,7 @@ s_client_main(int argc, char **argv) | |||
| 1652 | X509_free(cert); | 1652 | X509_free(cert); |
| 1653 | EVP_PKEY_free(key); | 1653 | EVP_PKEY_free(key); |
| 1654 | free(pass); | 1654 | free(pass); |
| 1655 | X509_VERIFY_PARAM_free(s_client_config.vpm); | 1655 | X509_VERIFY_PARAM_free(cfg.vpm); |
| 1656 | freezero(cbuf, BUFSIZZ); | 1656 | freezero(cbuf, BUFSIZZ); |
| 1657 | freezero(sbuf, BUFSIZZ); | 1657 | freezero(sbuf, BUFSIZZ); |
| 1658 | freezero(pbuf, BUFSIZZ); | 1658 | freezero(pbuf, BUFSIZZ); |
| @@ -1692,7 +1692,7 @@ print_stuff(BIO *bio, SSL *s, int full) | |||
| 1692 | X509_NAME_oneline(X509_get_issuer_name( | 1692 | X509_NAME_oneline(X509_get_issuer_name( |
| 1693 | sk_X509_value(sk, i)), buf, sizeof buf); | 1693 | sk_X509_value(sk, i)), buf, sizeof buf); |
| 1694 | BIO_printf(bio, " i:%s\n", buf); | 1694 | BIO_printf(bio, " i:%s\n", buf); |
| 1695 | if (s_client_config.showcerts) | 1695 | if (cfg.showcerts) |
| 1696 | PEM_write_bio_X509(bio, | 1696 | PEM_write_bio_X509(bio, |
| 1697 | sk_X509_value(sk, i)); | 1697 | sk_X509_value(sk, i)); |
| 1698 | } | 1698 | } |
| @@ -1701,7 +1701,7 @@ print_stuff(BIO *bio, SSL *s, int full) | |||
| 1701 | peer = SSL_get_peer_certificate(s); | 1701 | peer = SSL_get_peer_certificate(s); |
| 1702 | if (peer != NULL) { | 1702 | if (peer != NULL) { |
| 1703 | BIO_printf(bio, "Server certificate\n"); | 1703 | BIO_printf(bio, "Server certificate\n"); |
| 1704 | if (!(s_client_config.showcerts && got_a_chain)) { | 1704 | if (!(cfg.showcerts && got_a_chain)) { |
| 1705 | /* Redundant if we showed the whole chain */ | 1705 | /* Redundant if we showed the whole chain */ |
| 1706 | PEM_write_bio_X509(bio, peer); | 1706 | PEM_write_bio_X509(bio, peer); |
| 1707 | } | 1707 | } |
| @@ -1820,23 +1820,23 @@ print_stuff(BIO *bio, SSL *s, int full) | |||
| 1820 | #endif | 1820 | #endif |
| 1821 | 1821 | ||
| 1822 | SSL_SESSION_print(bio, SSL_get_session(s)); | 1822 | SSL_SESSION_print(bio, SSL_get_session(s)); |
| 1823 | if (s_client_config.keymatexportlabel != NULL) { | 1823 | if (cfg.keymatexportlabel != NULL) { |
| 1824 | BIO_printf(bio, "Keying material exporter:\n"); | 1824 | BIO_printf(bio, "Keying material exporter:\n"); |
| 1825 | BIO_printf(bio, " Label: '%s'\n", | 1825 | BIO_printf(bio, " Label: '%s'\n", |
| 1826 | s_client_config.keymatexportlabel); | 1826 | cfg.keymatexportlabel); |
| 1827 | BIO_printf(bio, " Length: %i bytes\n", | 1827 | BIO_printf(bio, " Length: %i bytes\n", |
| 1828 | s_client_config.keymatexportlen); | 1828 | cfg.keymatexportlen); |
| 1829 | exportedkeymat = malloc(s_client_config.keymatexportlen); | 1829 | exportedkeymat = malloc(cfg.keymatexportlen); |
| 1830 | if (exportedkeymat != NULL) { | 1830 | if (exportedkeymat != NULL) { |
| 1831 | if (!SSL_export_keying_material(s, exportedkeymat, | 1831 | if (!SSL_export_keying_material(s, exportedkeymat, |
| 1832 | s_client_config.keymatexportlen, | 1832 | cfg.keymatexportlen, |
| 1833 | s_client_config.keymatexportlabel, | 1833 | cfg.keymatexportlabel, |
| 1834 | strlen(s_client_config.keymatexportlabel), | 1834 | strlen(cfg.keymatexportlabel), |
| 1835 | NULL, 0, 0)) { | 1835 | NULL, 0, 0)) { |
| 1836 | BIO_printf(bio, " Error\n"); | 1836 | BIO_printf(bio, " Error\n"); |
| 1837 | } else { | 1837 | } else { |
| 1838 | BIO_printf(bio, " Keying material: "); | 1838 | BIO_printf(bio, " Keying material: "); |
| 1839 | for (i = 0; i < s_client_config.keymatexportlen; i++) | 1839 | for (i = 0; i < cfg.keymatexportlen; i++) |
| 1840 | BIO_printf(bio, "%02X", | 1840 | BIO_printf(bio, "%02X", |
| 1841 | exportedkeymat[i]); | 1841 | exportedkeymat[i]); |
| 1842 | BIO_printf(bio, "\n"); | 1842 | BIO_printf(bio, "\n"); |
diff --git a/src/usr.bin/openssl/s_server.c b/src/usr.bin/openssl/s_server.c index adf98451ec..a7f6146c4c 100644 --- a/src/usr.bin/openssl/s_server.c +++ b/src/usr.bin/openssl/s_server.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s_server.c,v 1.55 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: s_server.c,v 1.56 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -294,23 +294,23 @@ static struct { | |||
| 294 | int tlsextstatus; | 294 | int tlsextstatus; |
| 295 | X509_VERIFY_PARAM *vpm; | 295 | X509_VERIFY_PARAM *vpm; |
| 296 | int www; | 296 | int www; |
| 297 | } s_server_config; | 297 | } cfg; |
| 298 | 298 | ||
| 299 | static int | 299 | static int |
| 300 | s_server_opt_context(char *arg) | 300 | s_server_opt_context(char *arg) |
| 301 | { | 301 | { |
| 302 | s_server_config.context = (unsigned char *) arg; | 302 | cfg.context = (unsigned char *) arg; |
| 303 | return (0); | 303 | return (0); |
| 304 | } | 304 | } |
| 305 | 305 | ||
| 306 | static int | 306 | static int |
| 307 | s_server_opt_keymatexportlen(char *arg) | 307 | s_server_opt_keymatexportlen(char *arg) |
| 308 | { | 308 | { |
| 309 | s_server_config.keymatexportlen = strtonum(arg, 1, INT_MAX, | 309 | cfg.keymatexportlen = strtonum(arg, 1, INT_MAX, |
| 310 | &s_server_config.errstr); | 310 | &cfg.errstr); |
| 311 | if (s_server_config.errstr != NULL) { | 311 | if (cfg.errstr != NULL) { |
| 312 | BIO_printf(bio_err, "invalid argument %s: %s\n", | 312 | BIO_printf(bio_err, "invalid argument %s: %s\n", |
| 313 | arg, s_server_config.errstr); | 313 | arg, cfg.errstr); |
| 314 | return (1); | 314 | return (1); |
| 315 | } | 315 | } |
| 316 | return (0); | 316 | return (0); |
| @@ -320,11 +320,11 @@ s_server_opt_keymatexportlen(char *arg) | |||
| 320 | static int | 320 | static int |
| 321 | s_server_opt_mtu(char *arg) | 321 | s_server_opt_mtu(char *arg) |
| 322 | { | 322 | { |
| 323 | s_server_config.socket_mtu = strtonum(arg, 0, LONG_MAX, | 323 | cfg.socket_mtu = strtonum(arg, 0, LONG_MAX, |
| 324 | &s_server_config.errstr); | 324 | &cfg.errstr); |
| 325 | if (s_server_config.errstr != NULL) { | 325 | if (cfg.errstr != NULL) { |
| 326 | BIO_printf(bio_err, "invalid argument %s: %s\n", | 326 | BIO_printf(bio_err, "invalid argument %s: %s\n", |
| 327 | arg, s_server_config.errstr); | 327 | arg, cfg.errstr); |
| 328 | return (1); | 328 | return (1); |
| 329 | } | 329 | } |
| 330 | return (0); | 330 | return (0); |
| @@ -335,8 +335,8 @@ s_server_opt_mtu(char *arg) | |||
| 335 | static int | 335 | static int |
| 336 | s_server_opt_protocol_version_dtls(void) | 336 | s_server_opt_protocol_version_dtls(void) |
| 337 | { | 337 | { |
| 338 | s_server_config.meth = DTLS_server_method(); | 338 | cfg.meth = DTLS_server_method(); |
| 339 | s_server_config.socket_type = SOCK_DGRAM; | 339 | cfg.socket_type = SOCK_DGRAM; |
| 340 | return (0); | 340 | return (0); |
| 341 | } | 341 | } |
| 342 | #endif | 342 | #endif |
| @@ -345,10 +345,10 @@ s_server_opt_protocol_version_dtls(void) | |||
| 345 | static int | 345 | static int |
| 346 | s_server_opt_protocol_version_dtls1(void) | 346 | s_server_opt_protocol_version_dtls1(void) |
| 347 | { | 347 | { |
| 348 | s_server_config.meth = DTLS_server_method(); | 348 | cfg.meth = DTLS_server_method(); |
| 349 | s_server_config.min_version = DTLS1_VERSION; | 349 | cfg.min_version = DTLS1_VERSION; |
| 350 | s_server_config.max_version = DTLS1_VERSION; | 350 | cfg.max_version = DTLS1_VERSION; |
| 351 | s_server_config.socket_type = SOCK_DGRAM; | 351 | cfg.socket_type = SOCK_DGRAM; |
| 352 | return (0); | 352 | return (0); |
| 353 | } | 353 | } |
| 354 | #endif | 354 | #endif |
| @@ -357,10 +357,10 @@ s_server_opt_protocol_version_dtls1(void) | |||
| 357 | static int | 357 | static int |
| 358 | s_server_opt_protocol_version_dtls1_2(void) | 358 | s_server_opt_protocol_version_dtls1_2(void) |
| 359 | { | 359 | { |
| 360 | s_server_config.meth = DTLS_server_method(); | 360 | cfg.meth = DTLS_server_method(); |
| 361 | s_server_config.min_version = DTLS1_2_VERSION; | 361 | cfg.min_version = DTLS1_2_VERSION; |
| 362 | s_server_config.max_version = DTLS1_2_VERSION; | 362 | cfg.max_version = DTLS1_2_VERSION; |
| 363 | s_server_config.socket_type = SOCK_DGRAM; | 363 | cfg.socket_type = SOCK_DGRAM; |
| 364 | return (0); | 364 | return (0); |
| 365 | } | 365 | } |
| 366 | #endif | 366 | #endif |
| @@ -368,47 +368,47 @@ s_server_opt_protocol_version_dtls1_2(void) | |||
| 368 | static int | 368 | static int |
| 369 | s_server_opt_protocol_version_tls1(void) | 369 | s_server_opt_protocol_version_tls1(void) |
| 370 | { | 370 | { |
| 371 | s_server_config.min_version = TLS1_VERSION; | 371 | cfg.min_version = TLS1_VERSION; |
| 372 | s_server_config.max_version = TLS1_VERSION; | 372 | cfg.max_version = TLS1_VERSION; |
| 373 | return (0); | 373 | return (0); |
| 374 | } | 374 | } |
| 375 | 375 | ||
| 376 | static int | 376 | static int |
| 377 | s_server_opt_protocol_version_tls1_1(void) | 377 | s_server_opt_protocol_version_tls1_1(void) |
| 378 | { | 378 | { |
| 379 | s_server_config.min_version = TLS1_1_VERSION; | 379 | cfg.min_version = TLS1_1_VERSION; |
| 380 | s_server_config.max_version = TLS1_1_VERSION; | 380 | cfg.max_version = TLS1_1_VERSION; |
| 381 | return (0); | 381 | return (0); |
| 382 | } | 382 | } |
| 383 | 383 | ||
| 384 | static int | 384 | static int |
| 385 | s_server_opt_protocol_version_tls1_2(void) | 385 | s_server_opt_protocol_version_tls1_2(void) |
| 386 | { | 386 | { |
| 387 | s_server_config.min_version = TLS1_2_VERSION; | 387 | cfg.min_version = TLS1_2_VERSION; |
| 388 | s_server_config.max_version = TLS1_2_VERSION; | 388 | cfg.max_version = TLS1_2_VERSION; |
| 389 | return (0); | 389 | return (0); |
| 390 | } | 390 | } |
| 391 | 391 | ||
| 392 | static int | 392 | static int |
| 393 | s_server_opt_protocol_version_tls1_3(void) | 393 | s_server_opt_protocol_version_tls1_3(void) |
| 394 | { | 394 | { |
| 395 | s_server_config.min_version = TLS1_3_VERSION; | 395 | cfg.min_version = TLS1_3_VERSION; |
| 396 | s_server_config.max_version = TLS1_3_VERSION; | 396 | cfg.max_version = TLS1_3_VERSION; |
| 397 | return (0); | 397 | return (0); |
| 398 | } | 398 | } |
| 399 | 399 | ||
| 400 | static int | 400 | static int |
| 401 | s_server_opt_nbio_test(void) | 401 | s_server_opt_nbio_test(void) |
| 402 | { | 402 | { |
| 403 | s_server_config.nbio = 1; | 403 | cfg.nbio = 1; |
| 404 | s_server_config.nbio_test = 1; | 404 | cfg.nbio_test = 1; |
| 405 | return (0); | 405 | return (0); |
| 406 | } | 406 | } |
| 407 | 407 | ||
| 408 | static int | 408 | static int |
| 409 | s_server_opt_port(char *arg) | 409 | s_server_opt_port(char *arg) |
| 410 | { | 410 | { |
| 411 | if (!extract_port(arg, &s_server_config.port)) | 411 | if (!extract_port(arg, &cfg.port)) |
| 412 | return (1); | 412 | return (1); |
| 413 | return (0); | 413 | return (0); |
| 414 | } | 414 | } |
| @@ -416,12 +416,12 @@ s_server_opt_port(char *arg) | |||
| 416 | static int | 416 | static int |
| 417 | s_server_opt_status_timeout(char *arg) | 417 | s_server_opt_status_timeout(char *arg) |
| 418 | { | 418 | { |
| 419 | s_server_config.tlsextstatus = 1; | 419 | cfg.tlsextstatus = 1; |
| 420 | s_server_config.tlscstatp.timeout = strtonum(arg, 0, INT_MAX, | 420 | cfg.tlscstatp.timeout = strtonum(arg, 0, INT_MAX, |
| 421 | &s_server_config.errstr); | 421 | &cfg.errstr); |
| 422 | if (s_server_config.errstr != NULL) { | 422 | if (cfg.errstr != NULL) { |
| 423 | BIO_printf(bio_err, "invalid argument %s: %s\n", | 423 | BIO_printf(bio_err, "invalid argument %s: %s\n", |
| 424 | arg, s_server_config.errstr); | 424 | arg, cfg.errstr); |
| 425 | return (1); | 425 | return (1); |
| 426 | } | 426 | } |
| 427 | return (0); | 427 | return (0); |
| @@ -430,10 +430,10 @@ s_server_opt_status_timeout(char *arg) | |||
| 430 | static int | 430 | static int |
| 431 | s_server_opt_status_url(char *arg) | 431 | s_server_opt_status_url(char *arg) |
| 432 | { | 432 | { |
| 433 | s_server_config.tlsextstatus = 1; | 433 | cfg.tlsextstatus = 1; |
| 434 | if (!OCSP_parse_url(arg, &s_server_config.tlscstatp.host, | 434 | if (!OCSP_parse_url(arg, &cfg.tlscstatp.host, |
| 435 | &s_server_config.tlscstatp.port, &s_server_config.tlscstatp.path, | 435 | &cfg.tlscstatp.port, &cfg.tlscstatp.path, |
| 436 | &s_server_config.tlscstatp.use_ssl)) { | 436 | &cfg.tlscstatp.use_ssl)) { |
| 437 | BIO_printf(bio_err, "Error parsing URL\n"); | 437 | BIO_printf(bio_err, "Error parsing URL\n"); |
| 438 | return (1); | 438 | return (1); |
| 439 | } | 439 | } |
| @@ -443,20 +443,20 @@ s_server_opt_status_url(char *arg) | |||
| 443 | static int | 443 | static int |
| 444 | s_server_opt_status_verbose(void) | 444 | s_server_opt_status_verbose(void) |
| 445 | { | 445 | { |
| 446 | s_server_config.tlsextstatus = 1; | 446 | cfg.tlsextstatus = 1; |
| 447 | s_server_config.tlscstatp.verbose = 1; | 447 | cfg.tlscstatp.verbose = 1; |
| 448 | return (0); | 448 | return (0); |
| 449 | } | 449 | } |
| 450 | 450 | ||
| 451 | static int | 451 | static int |
| 452 | s_server_opt_verify(char *arg) | 452 | s_server_opt_verify(char *arg) |
| 453 | { | 453 | { |
| 454 | s_server_config.server_verify = SSL_VERIFY_PEER | | 454 | cfg.server_verify = SSL_VERIFY_PEER | |
| 455 | SSL_VERIFY_CLIENT_ONCE; | 455 | SSL_VERIFY_CLIENT_ONCE; |
| 456 | verify_depth = strtonum(arg, 0, INT_MAX, &s_server_config.errstr); | 456 | verify_depth = strtonum(arg, 0, INT_MAX, &cfg.errstr); |
| 457 | if (s_server_config.errstr != NULL) { | 457 | if (cfg.errstr != NULL) { |
| 458 | BIO_printf(bio_err, "invalid argument %s: %s\n", | 458 | BIO_printf(bio_err, "invalid argument %s: %s\n", |
| 459 | arg, s_server_config.errstr); | 459 | arg, cfg.errstr); |
| 460 | return (1); | 460 | return (1); |
| 461 | } | 461 | } |
| 462 | BIO_printf(bio_err, "verify depth is %d\n", verify_depth); | 462 | BIO_printf(bio_err, "verify depth is %d\n", verify_depth); |
| @@ -466,12 +466,12 @@ s_server_opt_verify(char *arg) | |||
| 466 | static int | 466 | static int |
| 467 | s_server_opt_verify_fail(char *arg) | 467 | s_server_opt_verify_fail(char *arg) |
| 468 | { | 468 | { |
| 469 | s_server_config.server_verify = SSL_VERIFY_PEER | | 469 | cfg.server_verify = SSL_VERIFY_PEER | |
| 470 | SSL_VERIFY_FAIL_IF_NO_PEER_CERT | SSL_VERIFY_CLIENT_ONCE; | 470 | SSL_VERIFY_FAIL_IF_NO_PEER_CERT | SSL_VERIFY_CLIENT_ONCE; |
| 471 | verify_depth = strtonum(arg, 0, INT_MAX, &s_server_config.errstr); | 471 | verify_depth = strtonum(arg, 0, INT_MAX, &cfg.errstr); |
| 472 | if (s_server_config.errstr != NULL) { | 472 | if (cfg.errstr != NULL) { |
| 473 | BIO_printf(bio_err, "invalid argument %s: %s\n", | 473 | BIO_printf(bio_err, "invalid argument %s: %s\n", |
| 474 | arg, s_server_config.errstr); | 474 | arg, cfg.errstr); |
| 475 | return (1); | 475 | return (1); |
| 476 | } | 476 | } |
| 477 | BIO_printf(bio_err, "verify depth is %d, must return a certificate\n", | 477 | BIO_printf(bio_err, "verify depth is %d, must return a certificate\n", |
| @@ -487,7 +487,7 @@ s_server_opt_verify_param(int argc, char **argv, int *argsused) | |||
| 487 | int badarg = 0; | 487 | int badarg = 0; |
| 488 | 488 | ||
| 489 | if (!args_verify(&pargs, &pargc, &badarg, bio_err, | 489 | if (!args_verify(&pargs, &pargc, &badarg, bio_err, |
| 490 | &s_server_config.vpm)) { | 490 | &cfg.vpm)) { |
| 491 | BIO_printf(bio_err, "unknown option %s\n", *argv); | 491 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 492 | return (1); | 492 | return (1); |
| 493 | } | 493 | } |
| @@ -520,27 +520,27 @@ static const struct option s_server_options[] = { | |||
| 520 | .desc = "Set the advertised protocols for the ALPN extension" | 520 | .desc = "Set the advertised protocols for the ALPN extension" |
| 521 | " (comma-separated list)", | 521 | " (comma-separated list)", |
| 522 | .type = OPTION_ARG, | 522 | .type = OPTION_ARG, |
| 523 | .opt.arg = &s_server_config.alpn_in, | 523 | .opt.arg = &cfg.alpn_in, |
| 524 | }, | 524 | }, |
| 525 | { | 525 | { |
| 526 | .name = "bugs", | 526 | .name = "bugs", |
| 527 | .desc = "Turn on SSL bug compatibility", | 527 | .desc = "Turn on SSL bug compatibility", |
| 528 | .type = OPTION_FLAG, | 528 | .type = OPTION_FLAG, |
| 529 | .opt.flag = &s_server_config.bugs, | 529 | .opt.flag = &cfg.bugs, |
| 530 | }, | 530 | }, |
| 531 | { | 531 | { |
| 532 | .name = "CAfile", | 532 | .name = "CAfile", |
| 533 | .argname = "file", | 533 | .argname = "file", |
| 534 | .desc = "PEM format file of CA certificates", | 534 | .desc = "PEM format file of CA certificates", |
| 535 | .type = OPTION_ARG, | 535 | .type = OPTION_ARG, |
| 536 | .opt.arg = &s_server_config.CAfile, | 536 | .opt.arg = &cfg.CAfile, |
| 537 | }, | 537 | }, |
| 538 | { | 538 | { |
| 539 | .name = "CApath", | 539 | .name = "CApath", |
| 540 | .argname = "directory", | 540 | .argname = "directory", |
| 541 | .desc = "PEM format directory of CA certificates", | 541 | .desc = "PEM format directory of CA certificates", |
| 542 | .type = OPTION_ARG, | 542 | .type = OPTION_ARG, |
| 543 | .opt.arg = &s_server_config.CApath, | 543 | .opt.arg = &cfg.CApath, |
| 544 | }, | 544 | }, |
| 545 | { | 545 | { |
| 546 | .name = "cert", | 546 | .name = "cert", |
| @@ -548,7 +548,7 @@ static const struct option s_server_options[] = { | |||
| 548 | .desc = "Certificate file to use\n" | 548 | .desc = "Certificate file to use\n" |
| 549 | "(default is " TEST_CERT ")", | 549 | "(default is " TEST_CERT ")", |
| 550 | .type = OPTION_ARG, | 550 | .type = OPTION_ARG, |
| 551 | .opt.arg = &s_server_config.cert_file, | 551 | .opt.arg = &cfg.cert_file, |
| 552 | }, | 552 | }, |
| 553 | { | 553 | { |
| 554 | .name = "cert2", | 554 | .name = "cert2", |
| @@ -556,20 +556,20 @@ static const struct option s_server_options[] = { | |||
| 556 | .desc = "Certificate file to use for servername\n" | 556 | .desc = "Certificate file to use for servername\n" |
| 557 | "(default is " TEST_CERT2 ")", | 557 | "(default is " TEST_CERT2 ")", |
| 558 | .type = OPTION_ARG, | 558 | .type = OPTION_ARG, |
| 559 | .opt.arg = &s_server_config.cert_file2, | 559 | .opt.arg = &cfg.cert_file2, |
| 560 | }, | 560 | }, |
| 561 | { | 561 | { |
| 562 | .name = "certform", | 562 | .name = "certform", |
| 563 | .argname = "fmt", | 563 | .argname = "fmt", |
| 564 | .desc = "Certificate format (PEM or DER) PEM default", | 564 | .desc = "Certificate format (PEM or DER) PEM default", |
| 565 | .type = OPTION_ARG_FORMAT, | 565 | .type = OPTION_ARG_FORMAT, |
| 566 | .opt.value = &s_server_config.cert_format, | 566 | .opt.value = &cfg.cert_format, |
| 567 | }, | 567 | }, |
| 568 | #ifndef OPENSSL_NO_DTLS | 568 | #ifndef OPENSSL_NO_DTLS |
| 569 | { | 569 | { |
| 570 | .name = "chain", | 570 | .name = "chain", |
| 571 | .type = OPTION_FLAG, | 571 | .type = OPTION_FLAG, |
| 572 | .opt.flag = &s_server_config.cert_chain, | 572 | .opt.flag = &cfg.cert_chain, |
| 573 | }, | 573 | }, |
| 574 | #endif | 574 | #endif |
| 575 | { | 575 | { |
| @@ -577,7 +577,7 @@ static const struct option s_server_options[] = { | |||
| 577 | .argname = "list", | 577 | .argname = "list", |
| 578 | .desc = "List of ciphers to enable (see `openssl ciphers`)", | 578 | .desc = "List of ciphers to enable (see `openssl ciphers`)", |
| 579 | .type = OPTION_ARG, | 579 | .type = OPTION_ARG, |
| 580 | .opt.arg = &s_server_config.cipher, | 580 | .opt.arg = &cfg.cipher, |
| 581 | }, | 581 | }, |
| 582 | { | 582 | { |
| 583 | .name = "context", | 583 | .name = "context", |
| @@ -590,55 +590,55 @@ static const struct option s_server_options[] = { | |||
| 590 | .name = "crlf", | 590 | .name = "crlf", |
| 591 | .desc = "Convert LF from terminal into CRLF", | 591 | .desc = "Convert LF from terminal into CRLF", |
| 592 | .type = OPTION_FLAG, | 592 | .type = OPTION_FLAG, |
| 593 | .opt.flag = &s_server_config.crlf, | 593 | .opt.flag = &cfg.crlf, |
| 594 | }, | 594 | }, |
| 595 | { | 595 | { |
| 596 | .name = "dcert", | 596 | .name = "dcert", |
| 597 | .argname = "file", | 597 | .argname = "file", |
| 598 | .desc = "Second certificate file to use (usually for DSA)", | 598 | .desc = "Second certificate file to use (usually for DSA)", |
| 599 | .type = OPTION_ARG, | 599 | .type = OPTION_ARG, |
| 600 | .opt.arg = &s_server_config.dcert_file, | 600 | .opt.arg = &cfg.dcert_file, |
| 601 | }, | 601 | }, |
| 602 | { | 602 | { |
| 603 | .name = "dcertform", | 603 | .name = "dcertform", |
| 604 | .argname = "fmt", | 604 | .argname = "fmt", |
| 605 | .desc = "Second certificate format (PEM or DER) PEM default", | 605 | .desc = "Second certificate format (PEM or DER) PEM default", |
| 606 | .type = OPTION_ARG_FORMAT, | 606 | .type = OPTION_ARG_FORMAT, |
| 607 | .opt.value = &s_server_config.dcert_format, | 607 | .opt.value = &cfg.dcert_format, |
| 608 | }, | 608 | }, |
| 609 | { | 609 | { |
| 610 | .name = "debug", | 610 | .name = "debug", |
| 611 | .desc = "Print more output", | 611 | .desc = "Print more output", |
| 612 | .type = OPTION_FLAG, | 612 | .type = OPTION_FLAG, |
| 613 | .opt.flag = &s_server_config.debug, | 613 | .opt.flag = &cfg.debug, |
| 614 | }, | 614 | }, |
| 615 | { | 615 | { |
| 616 | .name = "dhparam", | 616 | .name = "dhparam", |
| 617 | .argname = "file", | 617 | .argname = "file", |
| 618 | .desc = "DH parameter file to use, in cert file if not specified", | 618 | .desc = "DH parameter file to use, in cert file if not specified", |
| 619 | .type = OPTION_ARG, | 619 | .type = OPTION_ARG, |
| 620 | .opt.arg = &s_server_config.dhfile, | 620 | .opt.arg = &cfg.dhfile, |
| 621 | }, | 621 | }, |
| 622 | { | 622 | { |
| 623 | .name = "dkey", | 623 | .name = "dkey", |
| 624 | .argname = "file", | 624 | .argname = "file", |
| 625 | .desc = "Second private key file to use (usually for DSA)", | 625 | .desc = "Second private key file to use (usually for DSA)", |
| 626 | .type = OPTION_ARG, | 626 | .type = OPTION_ARG, |
| 627 | .opt.arg = &s_server_config.dkey_file, | 627 | .opt.arg = &cfg.dkey_file, |
| 628 | }, | 628 | }, |
| 629 | { | 629 | { |
| 630 | .name = "dkeyform", | 630 | .name = "dkeyform", |
| 631 | .argname = "fmt", | 631 | .argname = "fmt", |
| 632 | .desc = "Second key format (PEM or DER) PEM default", | 632 | .desc = "Second key format (PEM or DER) PEM default", |
| 633 | .type = OPTION_ARG_FORMAT, | 633 | .type = OPTION_ARG_FORMAT, |
| 634 | .opt.value = &s_server_config.dkey_format, | 634 | .opt.value = &cfg.dkey_format, |
| 635 | }, | 635 | }, |
| 636 | { | 636 | { |
| 637 | .name = "dpass", | 637 | .name = "dpass", |
| 638 | .argname = "arg", | 638 | .argname = "arg", |
| 639 | .desc = "Second private key file pass phrase source", | 639 | .desc = "Second private key file pass phrase source", |
| 640 | .type = OPTION_ARG, | 640 | .type = OPTION_ARG, |
| 641 | .opt.arg = &s_server_config.dpassarg, | 641 | .opt.arg = &cfg.dpassarg, |
| 642 | }, | 642 | }, |
| 643 | #ifndef OPENSSL_NO_DTLS | 643 | #ifndef OPENSSL_NO_DTLS |
| 644 | { | 644 | { |
| @@ -669,13 +669,13 @@ static const struct option s_server_options[] = { | |||
| 669 | .argname = "list", | 669 | .argname = "list", |
| 670 | .desc = "Specify EC groups (colon-separated list)", | 670 | .desc = "Specify EC groups (colon-separated list)", |
| 671 | .type = OPTION_ARG, | 671 | .type = OPTION_ARG, |
| 672 | .opt.arg = &s_server_config.groups_in, | 672 | .opt.arg = &cfg.groups_in, |
| 673 | }, | 673 | }, |
| 674 | { | 674 | { |
| 675 | .name = "HTTP", | 675 | .name = "HTTP", |
| 676 | .desc = "Respond to a 'GET /<path> HTTP/1.0' with file ./<path>", | 676 | .desc = "Respond to a 'GET /<path> HTTP/1.0' with file ./<path>", |
| 677 | .type = OPTION_VALUE, | 677 | .type = OPTION_VALUE, |
| 678 | .opt.value = &s_server_config.www, | 678 | .opt.value = &cfg.www, |
| 679 | .value = 3, | 679 | .value = 3, |
| 680 | }, | 680 | }, |
| 681 | { | 681 | { |
| @@ -683,7 +683,7 @@ static const struct option s_server_options[] = { | |||
| 683 | .argname = "arg", | 683 | .argname = "arg", |
| 684 | .desc = "Generate SSL/TLS session IDs prefixed by 'arg'", | 684 | .desc = "Generate SSL/TLS session IDs prefixed by 'arg'", |
| 685 | .type = OPTION_ARG, | 685 | .type = OPTION_ARG, |
| 686 | .opt.arg = &s_server_config.session_id_prefix, | 686 | .opt.arg = &cfg.session_id_prefix, |
| 687 | }, | 687 | }, |
| 688 | { | 688 | { |
| 689 | .name = "key", | 689 | .name = "key", |
| @@ -691,7 +691,7 @@ static const struct option s_server_options[] = { | |||
| 691 | .desc = "Private Key file to use, in cert file if\n" | 691 | .desc = "Private Key file to use, in cert file if\n" |
| 692 | "not specified (default is " TEST_CERT ")", | 692 | "not specified (default is " TEST_CERT ")", |
| 693 | .type = OPTION_ARG, | 693 | .type = OPTION_ARG, |
| 694 | .opt.arg = &s_server_config.key_file, | 694 | .opt.arg = &cfg.key_file, |
| 695 | }, | 695 | }, |
| 696 | { | 696 | { |
| 697 | .name = "key2", | 697 | .name = "key2", |
| @@ -699,21 +699,21 @@ static const struct option s_server_options[] = { | |||
| 699 | .desc = "Private Key file to use for servername, in cert file if\n" | 699 | .desc = "Private Key file to use for servername, in cert file if\n" |
| 700 | "not specified (default is " TEST_CERT2 ")", | 700 | "not specified (default is " TEST_CERT2 ")", |
| 701 | .type = OPTION_ARG, | 701 | .type = OPTION_ARG, |
| 702 | .opt.arg = &s_server_config.key_file2, | 702 | .opt.arg = &cfg.key_file2, |
| 703 | }, | 703 | }, |
| 704 | { | 704 | { |
| 705 | .name = "keyform", | 705 | .name = "keyform", |
| 706 | .argname = "fmt", | 706 | .argname = "fmt", |
| 707 | .desc = "Key format (PEM or DER) PEM default", | 707 | .desc = "Key format (PEM or DER) PEM default", |
| 708 | .type = OPTION_ARG_FORMAT, | 708 | .type = OPTION_ARG_FORMAT, |
| 709 | .opt.value = &s_server_config.key_format, | 709 | .opt.value = &cfg.key_format, |
| 710 | }, | 710 | }, |
| 711 | { | 711 | { |
| 712 | .name = "keymatexport", | 712 | .name = "keymatexport", |
| 713 | .argname = "label", | 713 | .argname = "label", |
| 714 | .desc = "Export keying material using label", | 714 | .desc = "Export keying material using label", |
| 715 | .type = OPTION_ARG, | 715 | .type = OPTION_ARG, |
| 716 | .opt.arg = &s_server_config.keymatexportlabel, | 716 | .opt.arg = &cfg.keymatexportlabel, |
| 717 | }, | 717 | }, |
| 718 | { | 718 | { |
| 719 | .name = "keymatexportlen", | 719 | .name = "keymatexportlen", |
| @@ -730,7 +730,7 @@ static const struct option s_server_options[] = { | |||
| 730 | .name = "msg", | 730 | .name = "msg", |
| 731 | .desc = "Show protocol messages", | 731 | .desc = "Show protocol messages", |
| 732 | .type = OPTION_FLAG, | 732 | .type = OPTION_FLAG, |
| 733 | .opt.flag = &s_server_config.msg, | 733 | .opt.flag = &cfg.msg, |
| 734 | }, | 734 | }, |
| 735 | #ifndef OPENSSL_NO_DTLS | 735 | #ifndef OPENSSL_NO_DTLS |
| 736 | { | 736 | { |
| @@ -746,19 +746,19 @@ static const struct option s_server_options[] = { | |||
| 746 | .argname = "num", | 746 | .argname = "num", |
| 747 | .desc = "Terminate after num connections", | 747 | .desc = "Terminate after num connections", |
| 748 | .type = OPTION_ARG_INT, | 748 | .type = OPTION_ARG_INT, |
| 749 | .opt.value = &s_server_config.naccept | 749 | .opt.value = &cfg.naccept |
| 750 | }, | 750 | }, |
| 751 | { | 751 | { |
| 752 | .name = "named_curve", | 752 | .name = "named_curve", |
| 753 | .argname = "arg", | 753 | .argname = "arg", |
| 754 | .type = OPTION_ARG, | 754 | .type = OPTION_ARG, |
| 755 | .opt.arg = &s_server_config.named_curve, | 755 | .opt.arg = &cfg.named_curve, |
| 756 | }, | 756 | }, |
| 757 | { | 757 | { |
| 758 | .name = "nbio", | 758 | .name = "nbio", |
| 759 | .desc = "Run with non-blocking I/O", | 759 | .desc = "Run with non-blocking I/O", |
| 760 | .type = OPTION_FLAG, | 760 | .type = OPTION_FLAG, |
| 761 | .opt.flag = &s_server_config.nbio, | 761 | .opt.flag = &cfg.nbio, |
| 762 | }, | 762 | }, |
| 763 | { | 763 | { |
| 764 | .name = "nbio_test", | 764 | .name = "nbio_test", |
| @@ -770,78 +770,78 @@ static const struct option s_server_options[] = { | |||
| 770 | .name = "nextprotoneg", | 770 | .name = "nextprotoneg", |
| 771 | .argname = "arg", | 771 | .argname = "arg", |
| 772 | .type = OPTION_ARG, | 772 | .type = OPTION_ARG, |
| 773 | .opt.arg = &s_server_config.npn_in, /* Ignored. */ | 773 | .opt.arg = &cfg.npn_in, /* Ignored. */ |
| 774 | }, | 774 | }, |
| 775 | { | 775 | { |
| 776 | .name = "no_cache", | 776 | .name = "no_cache", |
| 777 | .desc = "Disable session cache", | 777 | .desc = "Disable session cache", |
| 778 | .type = OPTION_FLAG, | 778 | .type = OPTION_FLAG, |
| 779 | .opt.flag = &s_server_config.no_cache, | 779 | .opt.flag = &cfg.no_cache, |
| 780 | }, | 780 | }, |
| 781 | { | 781 | { |
| 782 | .name = "no_comp", | 782 | .name = "no_comp", |
| 783 | .desc = "Disable SSL/TLS compression", | 783 | .desc = "Disable SSL/TLS compression", |
| 784 | .type = OPTION_VALUE_OR, | 784 | .type = OPTION_VALUE_OR, |
| 785 | .opt.value = &s_server_config.off, | 785 | .opt.value = &cfg.off, |
| 786 | .value = SSL_OP_NO_COMPRESSION, | 786 | .value = SSL_OP_NO_COMPRESSION, |
| 787 | }, | 787 | }, |
| 788 | { | 788 | { |
| 789 | .name = "no_dhe", | 789 | .name = "no_dhe", |
| 790 | .desc = "Disable ephemeral DH", | 790 | .desc = "Disable ephemeral DH", |
| 791 | .type = OPTION_FLAG, | 791 | .type = OPTION_FLAG, |
| 792 | .opt.flag = &s_server_config.no_dhe, | 792 | .opt.flag = &cfg.no_dhe, |
| 793 | }, | 793 | }, |
| 794 | { | 794 | { |
| 795 | .name = "no_ecdhe", | 795 | .name = "no_ecdhe", |
| 796 | .desc = "Disable ephemeral ECDH", | 796 | .desc = "Disable ephemeral ECDH", |
| 797 | .type = OPTION_FLAG, | 797 | .type = OPTION_FLAG, |
| 798 | .opt.flag = &s_server_config.no_ecdhe, | 798 | .opt.flag = &cfg.no_ecdhe, |
| 799 | }, | 799 | }, |
| 800 | { | 800 | { |
| 801 | .name = "no_ticket", | 801 | .name = "no_ticket", |
| 802 | .desc = "Disable use of RFC4507bis session tickets", | 802 | .desc = "Disable use of RFC4507bis session tickets", |
| 803 | .type = OPTION_VALUE_OR, | 803 | .type = OPTION_VALUE_OR, |
| 804 | .opt.value = &s_server_config.off, | 804 | .opt.value = &cfg.off, |
| 805 | .value = SSL_OP_NO_TICKET, | 805 | .value = SSL_OP_NO_TICKET, |
| 806 | }, | 806 | }, |
| 807 | { | 807 | { |
| 808 | .name = "no_ssl2", | 808 | .name = "no_ssl2", |
| 809 | .type = OPTION_VALUE_OR, | 809 | .type = OPTION_VALUE_OR, |
| 810 | .opt.value = &s_server_config.off, | 810 | .opt.value = &cfg.off, |
| 811 | .value = SSL_OP_NO_SSLv2, | 811 | .value = SSL_OP_NO_SSLv2, |
| 812 | }, | 812 | }, |
| 813 | { | 813 | { |
| 814 | .name = "no_ssl3", | 814 | .name = "no_ssl3", |
| 815 | .type = OPTION_VALUE_OR, | 815 | .type = OPTION_VALUE_OR, |
| 816 | .opt.value = &s_server_config.off, | 816 | .opt.value = &cfg.off, |
| 817 | .value = SSL_OP_NO_SSLv3, | 817 | .value = SSL_OP_NO_SSLv3, |
| 818 | }, | 818 | }, |
| 819 | { | 819 | { |
| 820 | .name = "no_tls1", | 820 | .name = "no_tls1", |
| 821 | .desc = "Just disable TLSv1", | 821 | .desc = "Just disable TLSv1", |
| 822 | .type = OPTION_VALUE_OR, | 822 | .type = OPTION_VALUE_OR, |
| 823 | .opt.value = &s_server_config.off, | 823 | .opt.value = &cfg.off, |
| 824 | .value = SSL_OP_NO_TLSv1, | 824 | .value = SSL_OP_NO_TLSv1, |
| 825 | }, | 825 | }, |
| 826 | { | 826 | { |
| 827 | .name = "no_tls1_1", | 827 | .name = "no_tls1_1", |
| 828 | .desc = "Just disable TLSv1.1", | 828 | .desc = "Just disable TLSv1.1", |
| 829 | .type = OPTION_VALUE_OR, | 829 | .type = OPTION_VALUE_OR, |
| 830 | .opt.value = &s_server_config.off, | 830 | .opt.value = &cfg.off, |
| 831 | .value = SSL_OP_NO_TLSv1_1, | 831 | .value = SSL_OP_NO_TLSv1_1, |
| 832 | }, | 832 | }, |
| 833 | { | 833 | { |
| 834 | .name = "no_tls1_2", | 834 | .name = "no_tls1_2", |
| 835 | .desc = "Just disable TLSv1.2", | 835 | .desc = "Just disable TLSv1.2", |
| 836 | .type = OPTION_VALUE_OR, | 836 | .type = OPTION_VALUE_OR, |
| 837 | .opt.value = &s_server_config.off, | 837 | .opt.value = &cfg.off, |
| 838 | .value = SSL_OP_NO_TLSv1_2, | 838 | .value = SSL_OP_NO_TLSv1_2, |
| 839 | }, | 839 | }, |
| 840 | { | 840 | { |
| 841 | .name = "no_tls1_3", | 841 | .name = "no_tls1_3", |
| 842 | .desc = "Just disable TLSv1.3", | 842 | .desc = "Just disable TLSv1.3", |
| 843 | .type = OPTION_VALUE_OR, | 843 | .type = OPTION_VALUE_OR, |
| 844 | .opt.value = &s_server_config.off, | 844 | .opt.value = &cfg.off, |
| 845 | .value = SSL_OP_NO_TLSv1_3, | 845 | .value = SSL_OP_NO_TLSv1_3, |
| 846 | }, | 846 | }, |
| 847 | { | 847 | { |
| @@ -852,14 +852,14 @@ static const struct option s_server_options[] = { | |||
| 852 | .name = "nocert", | 852 | .name = "nocert", |
| 853 | .desc = "Don't use any certificates (Anon-DH)", | 853 | .desc = "Don't use any certificates (Anon-DH)", |
| 854 | .type = OPTION_FLAG, | 854 | .type = OPTION_FLAG, |
| 855 | .opt.flag = &s_server_config.nocert, | 855 | .opt.flag = &cfg.nocert, |
| 856 | }, | 856 | }, |
| 857 | { | 857 | { |
| 858 | .name = "pass", | 858 | .name = "pass", |
| 859 | .argname = "arg", | 859 | .argname = "arg", |
| 860 | .desc = "Private key file pass phrase source", | 860 | .desc = "Private key file pass phrase source", |
| 861 | .type = OPTION_ARG, | 861 | .type = OPTION_ARG, |
| 862 | .opt.arg = &s_server_config.passarg, | 862 | .opt.arg = &cfg.passarg, |
| 863 | }, | 863 | }, |
| 864 | { | 864 | { |
| 865 | .name = "port", | 865 | .name = "port", |
| @@ -871,40 +871,40 @@ static const struct option s_server_options[] = { | |||
| 871 | .name = "quiet", | 871 | .name = "quiet", |
| 872 | .desc = "Inhibit printing of session and certificate information", | 872 | .desc = "Inhibit printing of session and certificate information", |
| 873 | .type = OPTION_FLAG, | 873 | .type = OPTION_FLAG, |
| 874 | .opt.flag = &s_server_config.quiet, | 874 | .opt.flag = &cfg.quiet, |
| 875 | }, | 875 | }, |
| 876 | { | 876 | { |
| 877 | .name = "servername", | 877 | .name = "servername", |
| 878 | .argname = "name", | 878 | .argname = "name", |
| 879 | .desc = "Servername for HostName TLS extension", | 879 | .desc = "Servername for HostName TLS extension", |
| 880 | .type = OPTION_ARG, | 880 | .type = OPTION_ARG, |
| 881 | .opt.arg = &s_server_config.tlsextcbp.servername, | 881 | .opt.arg = &cfg.tlsextcbp.servername, |
| 882 | }, | 882 | }, |
| 883 | { | 883 | { |
| 884 | .name = "servername_fatal", | 884 | .name = "servername_fatal", |
| 885 | .desc = "On mismatch send fatal alert (default warning alert)", | 885 | .desc = "On mismatch send fatal alert (default warning alert)", |
| 886 | .type = OPTION_VALUE, | 886 | .type = OPTION_VALUE, |
| 887 | .opt.value = &s_server_config.tlsextcbp.extension_error, | 887 | .opt.value = &cfg.tlsextcbp.extension_error, |
| 888 | .value = SSL_TLSEXT_ERR_ALERT_FATAL, | 888 | .value = SSL_TLSEXT_ERR_ALERT_FATAL, |
| 889 | }, | 889 | }, |
| 890 | { | 890 | { |
| 891 | .name = "serverpref", | 891 | .name = "serverpref", |
| 892 | .desc = "Use server's cipher preferences", | 892 | .desc = "Use server's cipher preferences", |
| 893 | .type = OPTION_VALUE_OR, | 893 | .type = OPTION_VALUE_OR, |
| 894 | .opt.value = &s_server_config.off, | 894 | .opt.value = &cfg.off, |
| 895 | .value = SSL_OP_CIPHER_SERVER_PREFERENCE, | 895 | .value = SSL_OP_CIPHER_SERVER_PREFERENCE, |
| 896 | }, | 896 | }, |
| 897 | { | 897 | { |
| 898 | .name = "state", | 898 | .name = "state", |
| 899 | .desc = "Print the SSL states", | 899 | .desc = "Print the SSL states", |
| 900 | .type = OPTION_FLAG, | 900 | .type = OPTION_FLAG, |
| 901 | .opt.flag = &s_server_config.state, | 901 | .opt.flag = &cfg.state, |
| 902 | }, | 902 | }, |
| 903 | { | 903 | { |
| 904 | .name = "status", | 904 | .name = "status", |
| 905 | .desc = "Respond to certificate status requests", | 905 | .desc = "Respond to certificate status requests", |
| 906 | .type = OPTION_FLAG, | 906 | .type = OPTION_FLAG, |
| 907 | .opt.flag = &s_server_config.tlsextstatus, | 907 | .opt.flag = &cfg.tlsextstatus, |
| 908 | }, | 908 | }, |
| 909 | { | 909 | { |
| 910 | .name = "status_timeout", | 910 | .name = "status_timeout", |
| @@ -931,7 +931,7 @@ static const struct option s_server_options[] = { | |||
| 931 | .name = "timeout", | 931 | .name = "timeout", |
| 932 | .desc = "Enable timeouts", | 932 | .desc = "Enable timeouts", |
| 933 | .type = OPTION_FLAG, | 933 | .type = OPTION_FLAG, |
| 934 | .opt.flag = &s_server_config.enable_timeouts, | 934 | .opt.flag = &cfg.enable_timeouts, |
| 935 | }, | 935 | }, |
| 936 | #endif | 936 | #endif |
| 937 | { | 937 | { |
| @@ -962,7 +962,7 @@ static const struct option s_server_options[] = { | |||
| 962 | .name = "tlsextdebug", | 962 | .name = "tlsextdebug", |
| 963 | .desc = "Hex dump of all TLS extensions received", | 963 | .desc = "Hex dump of all TLS extensions received", |
| 964 | .type = OPTION_FLAG, | 964 | .type = OPTION_FLAG, |
| 965 | .opt.flag = &s_server_config.tlsextdebug, | 965 | .opt.flag = &cfg.tlsextdebug, |
| 966 | }, | 966 | }, |
| 967 | #ifndef OPENSSL_NO_SRTP | 967 | #ifndef OPENSSL_NO_SRTP |
| 968 | { | 968 | { |
| @@ -970,7 +970,7 @@ static const struct option s_server_options[] = { | |||
| 970 | .argname = "profiles", | 970 | .argname = "profiles", |
| 971 | .desc = "Offer SRTP key management with a colon-separated profile list", | 971 | .desc = "Offer SRTP key management with a colon-separated profile list", |
| 972 | .type = OPTION_ARG, | 972 | .type = OPTION_ARG, |
| 973 | .opt.arg = &s_server_config.srtp_profiles, | 973 | .opt.arg = &cfg.srtp_profiles, |
| 974 | }, | 974 | }, |
| 975 | #endif | 975 | #endif |
| 976 | { | 976 | { |
| @@ -997,14 +997,14 @@ static const struct option s_server_options[] = { | |||
| 997 | .name = "WWW", | 997 | .name = "WWW", |
| 998 | .desc = "Respond to a 'GET /<path> HTTP/1.0' with file ./<path>", | 998 | .desc = "Respond to a 'GET /<path> HTTP/1.0' with file ./<path>", |
| 999 | .type = OPTION_VALUE, | 999 | .type = OPTION_VALUE, |
| 1000 | .opt.value = &s_server_config.www, | 1000 | .opt.value = &cfg.www, |
| 1001 | .value = 2, | 1001 | .value = 2, |
| 1002 | }, | 1002 | }, |
| 1003 | { | 1003 | { |
| 1004 | .name = "www", | 1004 | .name = "www", |
| 1005 | .desc = "Respond to a 'GET /' with a status page", | 1005 | .desc = "Respond to a 'GET /' with a status page", |
| 1006 | .type = OPTION_VALUE, | 1006 | .type = OPTION_VALUE, |
| 1007 | .opt.value = &s_server_config.www, | 1007 | .opt.value = &cfg.www, |
| 1008 | .value = 1, | 1008 | .value = 1, |
| 1009 | }, | 1009 | }, |
| 1010 | { | 1010 | { |
| @@ -1020,24 +1020,24 @@ static void | |||
| 1020 | s_server_init(void) | 1020 | s_server_init(void) |
| 1021 | { | 1021 | { |
| 1022 | accept_socket = -1; | 1022 | accept_socket = -1; |
| 1023 | s_server_config.cipher = NULL; | 1023 | cfg.cipher = NULL; |
| 1024 | s_server_config.server_verify = SSL_VERIFY_NONE; | 1024 | cfg.server_verify = SSL_VERIFY_NONE; |
| 1025 | s_server_config.dcert_file = NULL; | 1025 | cfg.dcert_file = NULL; |
| 1026 | s_server_config.dkey_file = NULL; | 1026 | cfg.dkey_file = NULL; |
| 1027 | s_server_config.cert_file = TEST_CERT; | 1027 | cfg.cert_file = TEST_CERT; |
| 1028 | s_server_config.key_file = NULL; | 1028 | cfg.key_file = NULL; |
| 1029 | s_server_config.cert_file2 = TEST_CERT2; | 1029 | cfg.cert_file2 = TEST_CERT2; |
| 1030 | s_server_config.key_file2 = NULL; | 1030 | cfg.key_file2 = NULL; |
| 1031 | ctx2 = NULL; | 1031 | ctx2 = NULL; |
| 1032 | s_server_config.nbio = 0; | 1032 | cfg.nbio = 0; |
| 1033 | s_server_config.nbio_test = 0; | 1033 | cfg.nbio_test = 0; |
| 1034 | ctx = NULL; | 1034 | ctx = NULL; |
| 1035 | s_server_config.www = 0; | 1035 | cfg.www = 0; |
| 1036 | 1036 | ||
| 1037 | bio_s_out = NULL; | 1037 | bio_s_out = NULL; |
| 1038 | s_server_config.debug = 0; | 1038 | cfg.debug = 0; |
| 1039 | s_server_config.msg = 0; | 1039 | cfg.msg = 0; |
| 1040 | s_server_config.quiet = 0; | 1040 | cfg.quiet = 0; |
| 1041 | } | 1041 | } |
| 1042 | 1042 | ||
| 1043 | static void | 1043 | static void |
| @@ -1086,21 +1086,21 @@ s_server_main(int argc, char *argv[]) | |||
| 1086 | exit(1); | 1086 | exit(1); |
| 1087 | } | 1087 | } |
| 1088 | 1088 | ||
| 1089 | memset(&s_server_config, 0, sizeof(s_server_config)); | 1089 | memset(&cfg, 0, sizeof(cfg)); |
| 1090 | s_server_config.keymatexportlen = 20; | 1090 | cfg.keymatexportlen = 20; |
| 1091 | s_server_config.meth = TLS_server_method(); | 1091 | cfg.meth = TLS_server_method(); |
| 1092 | s_server_config.naccept = -1; | 1092 | cfg.naccept = -1; |
| 1093 | s_server_config.port = PORT; | 1093 | cfg.port = PORT; |
| 1094 | s_server_config.cert_file = TEST_CERT; | 1094 | cfg.cert_file = TEST_CERT; |
| 1095 | s_server_config.cert_file2 = TEST_CERT2; | 1095 | cfg.cert_file2 = TEST_CERT2; |
| 1096 | s_server_config.cert_format = FORMAT_PEM; | 1096 | cfg.cert_format = FORMAT_PEM; |
| 1097 | s_server_config.dcert_format = FORMAT_PEM; | 1097 | cfg.dcert_format = FORMAT_PEM; |
| 1098 | s_server_config.dkey_format = FORMAT_PEM; | 1098 | cfg.dkey_format = FORMAT_PEM; |
| 1099 | s_server_config.key_format = FORMAT_PEM; | 1099 | cfg.key_format = FORMAT_PEM; |
| 1100 | s_server_config.server_verify = SSL_VERIFY_NONE; | 1100 | cfg.server_verify = SSL_VERIFY_NONE; |
| 1101 | s_server_config.socket_type = SOCK_STREAM; | 1101 | cfg.socket_type = SOCK_STREAM; |
| 1102 | s_server_config.tlscstatp.timeout = -1; | 1102 | cfg.tlscstatp.timeout = -1; |
| 1103 | s_server_config.tlsextcbp.extension_error = | 1103 | cfg.tlsextcbp.extension_error = |
| 1104 | SSL_TLSEXT_ERR_ALERT_WARNING; | 1104 | SSL_TLSEXT_ERR_ALERT_WARNING; |
| 1105 | 1105 | ||
| 1106 | local_argc = argc; | 1106 | local_argc = argc; |
| @@ -1111,47 +1111,47 @@ s_server_main(int argc, char *argv[]) | |||
| 1111 | verify_depth = 0; | 1111 | verify_depth = 0; |
| 1112 | 1112 | ||
| 1113 | if (options_parse(argc, argv, s_server_options, NULL, NULL) != 0) { | 1113 | if (options_parse(argc, argv, s_server_options, NULL, NULL) != 0) { |
| 1114 | if (s_server_config.errstr == NULL) | 1114 | if (cfg.errstr == NULL) |
| 1115 | sv_usage(); | 1115 | sv_usage(); |
| 1116 | goto end; | 1116 | goto end; |
| 1117 | } | 1117 | } |
| 1118 | 1118 | ||
| 1119 | if (!app_passwd(bio_err, s_server_config.passarg, | 1119 | if (!app_passwd(bio_err, cfg.passarg, |
| 1120 | s_server_config.dpassarg, &pass, &dpass)) { | 1120 | cfg.dpassarg, &pass, &dpass)) { |
| 1121 | BIO_printf(bio_err, "Error getting password\n"); | 1121 | BIO_printf(bio_err, "Error getting password\n"); |
| 1122 | goto end; | 1122 | goto end; |
| 1123 | } | 1123 | } |
| 1124 | if (s_server_config.key_file == NULL) | 1124 | if (cfg.key_file == NULL) |
| 1125 | s_server_config.key_file = s_server_config.cert_file; | 1125 | cfg.key_file = cfg.cert_file; |
| 1126 | if (s_server_config.key_file2 == NULL) | 1126 | if (cfg.key_file2 == NULL) |
| 1127 | s_server_config.key_file2 = s_server_config.cert_file2; | 1127 | cfg.key_file2 = cfg.cert_file2; |
| 1128 | 1128 | ||
| 1129 | if (s_server_config.nocert == 0) { | 1129 | if (cfg.nocert == 0) { |
| 1130 | s_key = load_key(bio_err, s_server_config.key_file, | 1130 | s_key = load_key(bio_err, cfg.key_file, |
| 1131 | s_server_config.key_format, 0, pass, | 1131 | cfg.key_format, 0, pass, |
| 1132 | "server certificate private key file"); | 1132 | "server certificate private key file"); |
| 1133 | if (!s_key) { | 1133 | if (!s_key) { |
| 1134 | ERR_print_errors(bio_err); | 1134 | ERR_print_errors(bio_err); |
| 1135 | goto end; | 1135 | goto end; |
| 1136 | } | 1136 | } |
| 1137 | s_cert = load_cert(bio_err, s_server_config.cert_file, | 1137 | s_cert = load_cert(bio_err, cfg.cert_file, |
| 1138 | s_server_config.cert_format, | 1138 | cfg.cert_format, |
| 1139 | NULL, "server certificate file"); | 1139 | NULL, "server certificate file"); |
| 1140 | 1140 | ||
| 1141 | if (!s_cert) { | 1141 | if (!s_cert) { |
| 1142 | ERR_print_errors(bio_err); | 1142 | ERR_print_errors(bio_err); |
| 1143 | goto end; | 1143 | goto end; |
| 1144 | } | 1144 | } |
| 1145 | if (s_server_config.tlsextcbp.servername) { | 1145 | if (cfg.tlsextcbp.servername) { |
| 1146 | s_key2 = load_key(bio_err, s_server_config.key_file2, | 1146 | s_key2 = load_key(bio_err, cfg.key_file2, |
| 1147 | s_server_config.key_format, 0, pass, | 1147 | cfg.key_format, 0, pass, |
| 1148 | "second server certificate private key file"); | 1148 | "second server certificate private key file"); |
| 1149 | if (!s_key2) { | 1149 | if (!s_key2) { |
| 1150 | ERR_print_errors(bio_err); | 1150 | ERR_print_errors(bio_err); |
| 1151 | goto end; | 1151 | goto end; |
| 1152 | } | 1152 | } |
| 1153 | s_cert2 = load_cert(bio_err, s_server_config.cert_file2, | 1153 | s_cert2 = load_cert(bio_err, cfg.cert_file2, |
| 1154 | s_server_config.cert_format, | 1154 | cfg.cert_format, |
| 1155 | NULL, "second server certificate file"); | 1155 | NULL, "second server certificate file"); |
| 1156 | 1156 | ||
| 1157 | if (!s_cert2) { | 1157 | if (!s_cert2) { |
| @@ -1161,29 +1161,29 @@ s_server_main(int argc, char *argv[]) | |||
| 1161 | } | 1161 | } |
| 1162 | } | 1162 | } |
| 1163 | alpn_ctx.data = NULL; | 1163 | alpn_ctx.data = NULL; |
| 1164 | if (s_server_config.alpn_in) { | 1164 | if (cfg.alpn_in) { |
| 1165 | unsigned short len; | 1165 | unsigned short len; |
| 1166 | alpn_ctx.data = next_protos_parse(&len, | 1166 | alpn_ctx.data = next_protos_parse(&len, |
| 1167 | s_server_config.alpn_in); | 1167 | cfg.alpn_in); |
| 1168 | if (alpn_ctx.data == NULL) | 1168 | if (alpn_ctx.data == NULL) |
| 1169 | goto end; | 1169 | goto end; |
| 1170 | alpn_ctx.len = len; | 1170 | alpn_ctx.len = len; |
| 1171 | } | 1171 | } |
| 1172 | 1172 | ||
| 1173 | if (s_server_config.dcert_file) { | 1173 | if (cfg.dcert_file) { |
| 1174 | 1174 | ||
| 1175 | if (s_server_config.dkey_file == NULL) | 1175 | if (cfg.dkey_file == NULL) |
| 1176 | s_server_config.dkey_file = s_server_config.dcert_file; | 1176 | cfg.dkey_file = cfg.dcert_file; |
| 1177 | 1177 | ||
| 1178 | s_dkey = load_key(bio_err, s_server_config.dkey_file, | 1178 | s_dkey = load_key(bio_err, cfg.dkey_file, |
| 1179 | s_server_config.dkey_format, | 1179 | cfg.dkey_format, |
| 1180 | 0, dpass, "second certificate private key file"); | 1180 | 0, dpass, "second certificate private key file"); |
| 1181 | if (!s_dkey) { | 1181 | if (!s_dkey) { |
| 1182 | ERR_print_errors(bio_err); | 1182 | ERR_print_errors(bio_err); |
| 1183 | goto end; | 1183 | goto end; |
| 1184 | } | 1184 | } |
| 1185 | s_dcert = load_cert(bio_err, s_server_config.dcert_file, | 1185 | s_dcert = load_cert(bio_err, cfg.dcert_file, |
| 1186 | s_server_config.dcert_format, | 1186 | cfg.dcert_format, |
| 1187 | NULL, "second server certificate file"); | 1187 | NULL, "second server certificate file"); |
| 1188 | 1188 | ||
| 1189 | if (!s_dcert) { | 1189 | if (!s_dcert) { |
| @@ -1192,23 +1192,23 @@ s_server_main(int argc, char *argv[]) | |||
| 1192 | } | 1192 | } |
| 1193 | } | 1193 | } |
| 1194 | if (bio_s_out == NULL) { | 1194 | if (bio_s_out == NULL) { |
| 1195 | if (s_server_config.quiet && !s_server_config.debug && | 1195 | if (cfg.quiet && !cfg.debug && |
| 1196 | !s_server_config.msg) { | 1196 | !cfg.msg) { |
| 1197 | bio_s_out = BIO_new(BIO_s_null()); | 1197 | bio_s_out = BIO_new(BIO_s_null()); |
| 1198 | } else { | 1198 | } else { |
| 1199 | if (bio_s_out == NULL) | 1199 | if (bio_s_out == NULL) |
| 1200 | bio_s_out = BIO_new_fp(stdout, BIO_NOCLOSE); | 1200 | bio_s_out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 1201 | } | 1201 | } |
| 1202 | } | 1202 | } |
| 1203 | if (s_server_config.nocert) { | 1203 | if (cfg.nocert) { |
| 1204 | s_server_config.cert_file = NULL; | 1204 | cfg.cert_file = NULL; |
| 1205 | s_server_config.key_file = NULL; | 1205 | cfg.key_file = NULL; |
| 1206 | s_server_config.dcert_file = NULL; | 1206 | cfg.dcert_file = NULL; |
| 1207 | s_server_config.dkey_file = NULL; | 1207 | cfg.dkey_file = NULL; |
| 1208 | s_server_config.cert_file2 = NULL; | 1208 | cfg.cert_file2 = NULL; |
| 1209 | s_server_config.key_file2 = NULL; | 1209 | cfg.key_file2 = NULL; |
| 1210 | } | 1210 | } |
| 1211 | ctx = SSL_CTX_new(s_server_config.meth); | 1211 | ctx = SSL_CTX_new(cfg.meth); |
| 1212 | if (ctx == NULL) { | 1212 | if (ctx == NULL) { |
| 1213 | ERR_print_errors(bio_err); | 1213 | ERR_print_errors(bio_err); |
| 1214 | goto end; | 1214 | goto end; |
| @@ -1216,16 +1216,16 @@ s_server_main(int argc, char *argv[]) | |||
| 1216 | 1216 | ||
| 1217 | SSL_CTX_clear_mode(ctx, SSL_MODE_AUTO_RETRY); | 1217 | SSL_CTX_clear_mode(ctx, SSL_MODE_AUTO_RETRY); |
| 1218 | 1218 | ||
| 1219 | if (!SSL_CTX_set_min_proto_version(ctx, s_server_config.min_version)) | 1219 | if (!SSL_CTX_set_min_proto_version(ctx, cfg.min_version)) |
| 1220 | goto end; | 1220 | goto end; |
| 1221 | if (!SSL_CTX_set_max_proto_version(ctx, s_server_config.max_version)) | 1221 | if (!SSL_CTX_set_max_proto_version(ctx, cfg.max_version)) |
| 1222 | goto end; | 1222 | goto end; |
| 1223 | 1223 | ||
| 1224 | if (s_server_config.session_id_prefix) { | 1224 | if (cfg.session_id_prefix) { |
| 1225 | if (strlen(s_server_config.session_id_prefix) >= 32) | 1225 | if (strlen(cfg.session_id_prefix) >= 32) |
| 1226 | BIO_printf(bio_err, | 1226 | BIO_printf(bio_err, |
| 1227 | "warning: id_prefix is too long, only one new session will be possible\n"); | 1227 | "warning: id_prefix is too long, only one new session will be possible\n"); |
| 1228 | else if (strlen(s_server_config.session_id_prefix) >= 16) | 1228 | else if (strlen(cfg.session_id_prefix) >= 16) |
| 1229 | BIO_printf(bio_err, | 1229 | BIO_printf(bio_err, |
| 1230 | "warning: id_prefix is too long if you use SSLv2\n"); | 1230 | "warning: id_prefix is too long if you use SSLv2\n"); |
| 1231 | if (!SSL_CTX_set_generate_session_id(ctx, generate_session_id)) { | 1231 | if (!SSL_CTX_set_generate_session_id(ctx, generate_session_id)) { |
| @@ -1234,58 +1234,58 @@ s_server_main(int argc, char *argv[]) | |||
| 1234 | goto end; | 1234 | goto end; |
| 1235 | } | 1235 | } |
| 1236 | BIO_printf(bio_err, "id_prefix '%s' set.\n", | 1236 | BIO_printf(bio_err, "id_prefix '%s' set.\n", |
| 1237 | s_server_config.session_id_prefix); | 1237 | cfg.session_id_prefix); |
| 1238 | } | 1238 | } |
| 1239 | SSL_CTX_set_quiet_shutdown(ctx, 1); | 1239 | SSL_CTX_set_quiet_shutdown(ctx, 1); |
| 1240 | if (s_server_config.bugs) | 1240 | if (cfg.bugs) |
| 1241 | SSL_CTX_set_options(ctx, SSL_OP_ALL); | 1241 | SSL_CTX_set_options(ctx, SSL_OP_ALL); |
| 1242 | SSL_CTX_set_options(ctx, s_server_config.off); | 1242 | SSL_CTX_set_options(ctx, cfg.off); |
| 1243 | 1243 | ||
| 1244 | if (s_server_config.state) | 1244 | if (cfg.state) |
| 1245 | SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback); | 1245 | SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback); |
| 1246 | if (s_server_config.no_cache) | 1246 | if (cfg.no_cache) |
| 1247 | SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); | 1247 | SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); |
| 1248 | else | 1248 | else |
| 1249 | SSL_CTX_sess_set_cache_size(ctx, 128); | 1249 | SSL_CTX_sess_set_cache_size(ctx, 128); |
| 1250 | 1250 | ||
| 1251 | #ifndef OPENSSL_NO_SRTP | 1251 | #ifndef OPENSSL_NO_SRTP |
| 1252 | if (s_server_config.srtp_profiles != NULL) | 1252 | if (cfg.srtp_profiles != NULL) |
| 1253 | SSL_CTX_set_tlsext_use_srtp(ctx, s_server_config.srtp_profiles); | 1253 | SSL_CTX_set_tlsext_use_srtp(ctx, cfg.srtp_profiles); |
| 1254 | #endif | 1254 | #endif |
| 1255 | 1255 | ||
| 1256 | if ((!SSL_CTX_load_verify_locations(ctx, s_server_config.CAfile, | 1256 | if ((!SSL_CTX_load_verify_locations(ctx, cfg.CAfile, |
| 1257 | s_server_config.CApath)) || | 1257 | cfg.CApath)) || |
| 1258 | (!SSL_CTX_set_default_verify_paths(ctx))) { | 1258 | (!SSL_CTX_set_default_verify_paths(ctx))) { |
| 1259 | /* BIO_printf(bio_err,"X509_load_verify_locations\n"); */ | 1259 | /* BIO_printf(bio_err,"X509_load_verify_locations\n"); */ |
| 1260 | ERR_print_errors(bio_err); | 1260 | ERR_print_errors(bio_err); |
| 1261 | /* goto end; */ | 1261 | /* goto end; */ |
| 1262 | } | 1262 | } |
| 1263 | if (s_server_config.vpm) | 1263 | if (cfg.vpm) |
| 1264 | SSL_CTX_set1_param(ctx, s_server_config.vpm); | 1264 | SSL_CTX_set1_param(ctx, cfg.vpm); |
| 1265 | 1265 | ||
| 1266 | if (s_cert2) { | 1266 | if (s_cert2) { |
| 1267 | ctx2 = SSL_CTX_new(s_server_config.meth); | 1267 | ctx2 = SSL_CTX_new(cfg.meth); |
| 1268 | if (ctx2 == NULL) { | 1268 | if (ctx2 == NULL) { |
| 1269 | ERR_print_errors(bio_err); | 1269 | ERR_print_errors(bio_err); |
| 1270 | goto end; | 1270 | goto end; |
| 1271 | } | 1271 | } |
| 1272 | 1272 | ||
| 1273 | if (!SSL_CTX_set_min_proto_version(ctx2, | 1273 | if (!SSL_CTX_set_min_proto_version(ctx2, |
| 1274 | s_server_config.min_version)) | 1274 | cfg.min_version)) |
| 1275 | goto end; | 1275 | goto end; |
| 1276 | if (!SSL_CTX_set_max_proto_version(ctx2, | 1276 | if (!SSL_CTX_set_max_proto_version(ctx2, |
| 1277 | s_server_config.max_version)) | 1277 | cfg.max_version)) |
| 1278 | goto end; | 1278 | goto end; |
| 1279 | SSL_CTX_clear_mode(ctx2, SSL_MODE_AUTO_RETRY); | 1279 | SSL_CTX_clear_mode(ctx2, SSL_MODE_AUTO_RETRY); |
| 1280 | } | 1280 | } |
| 1281 | if (ctx2) { | 1281 | if (ctx2) { |
| 1282 | BIO_printf(bio_s_out, "Setting secondary ctx parameters\n"); | 1282 | BIO_printf(bio_s_out, "Setting secondary ctx parameters\n"); |
| 1283 | 1283 | ||
| 1284 | if (s_server_config.session_id_prefix) { | 1284 | if (cfg.session_id_prefix) { |
| 1285 | if (strlen(s_server_config.session_id_prefix) >= 32) | 1285 | if (strlen(cfg.session_id_prefix) >= 32) |
| 1286 | BIO_printf(bio_err, | 1286 | BIO_printf(bio_err, |
| 1287 | "warning: id_prefix is too long, only one new session will be possible\n"); | 1287 | "warning: id_prefix is too long, only one new session will be possible\n"); |
| 1288 | else if (strlen(s_server_config.session_id_prefix) >= 16) | 1288 | else if (strlen(cfg.session_id_prefix) >= 16) |
| 1289 | BIO_printf(bio_err, | 1289 | BIO_printf(bio_err, |
| 1290 | "warning: id_prefix is too long if you use SSLv2\n"); | 1290 | "warning: id_prefix is too long if you use SSLv2\n"); |
| 1291 | if (!SSL_CTX_set_generate_session_id(ctx2, | 1291 | if (!SSL_CTX_set_generate_session_id(ctx2, |
| @@ -1296,48 +1296,48 @@ s_server_main(int argc, char *argv[]) | |||
| 1296 | goto end; | 1296 | goto end; |
| 1297 | } | 1297 | } |
| 1298 | BIO_printf(bio_err, "id_prefix '%s' set.\n", | 1298 | BIO_printf(bio_err, "id_prefix '%s' set.\n", |
| 1299 | s_server_config.session_id_prefix); | 1299 | cfg.session_id_prefix); |
| 1300 | } | 1300 | } |
| 1301 | SSL_CTX_set_quiet_shutdown(ctx2, 1); | 1301 | SSL_CTX_set_quiet_shutdown(ctx2, 1); |
| 1302 | if (s_server_config.bugs) | 1302 | if (cfg.bugs) |
| 1303 | SSL_CTX_set_options(ctx2, SSL_OP_ALL); | 1303 | SSL_CTX_set_options(ctx2, SSL_OP_ALL); |
| 1304 | SSL_CTX_set_options(ctx2, s_server_config.off); | 1304 | SSL_CTX_set_options(ctx2, cfg.off); |
| 1305 | 1305 | ||
| 1306 | if (s_server_config.state) | 1306 | if (cfg.state) |
| 1307 | SSL_CTX_set_info_callback(ctx2, apps_ssl_info_callback); | 1307 | SSL_CTX_set_info_callback(ctx2, apps_ssl_info_callback); |
| 1308 | 1308 | ||
| 1309 | if (s_server_config.no_cache) | 1309 | if (cfg.no_cache) |
| 1310 | SSL_CTX_set_session_cache_mode(ctx2, SSL_SESS_CACHE_OFF); | 1310 | SSL_CTX_set_session_cache_mode(ctx2, SSL_SESS_CACHE_OFF); |
| 1311 | else | 1311 | else |
| 1312 | SSL_CTX_sess_set_cache_size(ctx2, 128); | 1312 | SSL_CTX_sess_set_cache_size(ctx2, 128); |
| 1313 | 1313 | ||
| 1314 | if ((!SSL_CTX_load_verify_locations(ctx2, | 1314 | if ((!SSL_CTX_load_verify_locations(ctx2, |
| 1315 | s_server_config.CAfile, s_server_config.CApath)) || | 1315 | cfg.CAfile, cfg.CApath)) || |
| 1316 | (!SSL_CTX_set_default_verify_paths(ctx2))) { | 1316 | (!SSL_CTX_set_default_verify_paths(ctx2))) { |
| 1317 | ERR_print_errors(bio_err); | 1317 | ERR_print_errors(bio_err); |
| 1318 | } | 1318 | } |
| 1319 | if (s_server_config.vpm) | 1319 | if (cfg.vpm) |
| 1320 | SSL_CTX_set1_param(ctx2, s_server_config.vpm); | 1320 | SSL_CTX_set1_param(ctx2, cfg.vpm); |
| 1321 | } | 1321 | } |
| 1322 | if (alpn_ctx.data) | 1322 | if (alpn_ctx.data) |
| 1323 | SSL_CTX_set_alpn_select_cb(ctx, alpn_cb, &alpn_ctx); | 1323 | SSL_CTX_set_alpn_select_cb(ctx, alpn_cb, &alpn_ctx); |
| 1324 | 1324 | ||
| 1325 | if (s_server_config.groups_in != NULL) { | 1325 | if (cfg.groups_in != NULL) { |
| 1326 | if (SSL_CTX_set1_groups_list(ctx, s_server_config.groups_in) != 1) { | 1326 | if (SSL_CTX_set1_groups_list(ctx, cfg.groups_in) != 1) { |
| 1327 | BIO_printf(bio_err, "Failed to set groups '%s'\n", | 1327 | BIO_printf(bio_err, "Failed to set groups '%s'\n", |
| 1328 | s_server_config.groups_in); | 1328 | cfg.groups_in); |
| 1329 | goto end; | 1329 | goto end; |
| 1330 | } | 1330 | } |
| 1331 | } | 1331 | } |
| 1332 | 1332 | ||
| 1333 | #ifndef OPENSSL_NO_DH | 1333 | #ifndef OPENSSL_NO_DH |
| 1334 | if (!s_server_config.no_dhe) { | 1334 | if (!cfg.no_dhe) { |
| 1335 | DH *dh = NULL; | 1335 | DH *dh = NULL; |
| 1336 | 1336 | ||
| 1337 | if (s_server_config.dhfile) | 1337 | if (cfg.dhfile) |
| 1338 | dh = load_dh_param(s_server_config.dhfile); | 1338 | dh = load_dh_param(cfg.dhfile); |
| 1339 | else if (s_server_config.cert_file) | 1339 | else if (cfg.cert_file) |
| 1340 | dh = load_dh_param(s_server_config.cert_file); | 1340 | dh = load_dh_param(cfg.cert_file); |
| 1341 | 1341 | ||
| 1342 | if (dh != NULL) | 1342 | if (dh != NULL) |
| 1343 | BIO_printf(bio_s_out, "Setting temp DH parameters\n"); | 1343 | BIO_printf(bio_s_out, "Setting temp DH parameters\n"); |
| @@ -1356,12 +1356,12 @@ s_server_main(int argc, char *argv[]) | |||
| 1356 | } | 1356 | } |
| 1357 | 1357 | ||
| 1358 | if (ctx2) { | 1358 | if (ctx2) { |
| 1359 | if (!s_server_config.dhfile) { | 1359 | if (!cfg.dhfile) { |
| 1360 | DH *dh2 = NULL; | 1360 | DH *dh2 = NULL; |
| 1361 | 1361 | ||
| 1362 | if (s_server_config.cert_file2 != NULL) | 1362 | if (cfg.cert_file2 != NULL) |
| 1363 | dh2 = load_dh_param( | 1363 | dh2 = load_dh_param( |
| 1364 | s_server_config.cert_file2); | 1364 | cfg.cert_file2); |
| 1365 | if (dh2 != NULL) { | 1365 | if (dh2 != NULL) { |
| 1366 | BIO_printf(bio_s_out, | 1366 | BIO_printf(bio_s_out, |
| 1367 | "Setting temp DH parameters\n"); | 1367 | "Setting temp DH parameters\n"); |
| @@ -1385,18 +1385,18 @@ s_server_main(int argc, char *argv[]) | |||
| 1385 | } | 1385 | } |
| 1386 | #endif | 1386 | #endif |
| 1387 | 1387 | ||
| 1388 | if (!s_server_config.no_ecdhe && s_server_config.named_curve != NULL) { | 1388 | if (!cfg.no_ecdhe && cfg.named_curve != NULL) { |
| 1389 | EC_KEY *ecdh = NULL; | 1389 | EC_KEY *ecdh = NULL; |
| 1390 | int nid; | 1390 | int nid; |
| 1391 | 1391 | ||
| 1392 | if ((nid = OBJ_sn2nid(s_server_config.named_curve)) == 0) { | 1392 | if ((nid = OBJ_sn2nid(cfg.named_curve)) == 0) { |
| 1393 | BIO_printf(bio_err, "unknown curve name (%s)\n", | 1393 | BIO_printf(bio_err, "unknown curve name (%s)\n", |
| 1394 | s_server_config.named_curve); | 1394 | cfg.named_curve); |
| 1395 | goto end; | 1395 | goto end; |
| 1396 | } | 1396 | } |
| 1397 | if ((ecdh = EC_KEY_new_by_curve_name(nid)) == NULL) { | 1397 | if ((ecdh = EC_KEY_new_by_curve_name(nid)) == NULL) { |
| 1398 | BIO_printf(bio_err, "unable to create curve (%s)\n", | 1398 | BIO_printf(bio_err, "unable to create curve (%s)\n", |
| 1399 | s_server_config.named_curve); | 1399 | cfg.named_curve); |
| 1400 | goto end; | 1400 | goto end; |
| 1401 | } | 1401 | } |
| 1402 | BIO_printf(bio_s_out, "Setting temp ECDH parameters\n"); | 1402 | BIO_printf(bio_s_out, "Setting temp ECDH parameters\n"); |
| @@ -1417,20 +1417,20 @@ s_server_main(int argc, char *argv[]) | |||
| 1417 | goto end; | 1417 | goto end; |
| 1418 | } | 1418 | } |
| 1419 | 1419 | ||
| 1420 | if (s_server_config.cipher != NULL) { | 1420 | if (cfg.cipher != NULL) { |
| 1421 | if (!SSL_CTX_set_cipher_list(ctx, s_server_config.cipher)) { | 1421 | if (!SSL_CTX_set_cipher_list(ctx, cfg.cipher)) { |
| 1422 | BIO_printf(bio_err, "error setting cipher list\n"); | 1422 | BIO_printf(bio_err, "error setting cipher list\n"); |
| 1423 | ERR_print_errors(bio_err); | 1423 | ERR_print_errors(bio_err); |
| 1424 | goto end; | 1424 | goto end; |
| 1425 | } | 1425 | } |
| 1426 | if (ctx2 && !SSL_CTX_set_cipher_list(ctx2, | 1426 | if (ctx2 && !SSL_CTX_set_cipher_list(ctx2, |
| 1427 | s_server_config.cipher)) { | 1427 | cfg.cipher)) { |
| 1428 | BIO_printf(bio_err, "error setting cipher list\n"); | 1428 | BIO_printf(bio_err, "error setting cipher list\n"); |
| 1429 | ERR_print_errors(bio_err); | 1429 | ERR_print_errors(bio_err); |
| 1430 | goto end; | 1430 | goto end; |
| 1431 | } | 1431 | } |
| 1432 | } | 1432 | } |
| 1433 | SSL_CTX_set_verify(ctx, s_server_config.server_verify, verify_callback); | 1433 | SSL_CTX_set_verify(ctx, cfg.server_verify, verify_callback); |
| 1434 | SSL_CTX_set_session_id_context(ctx, | 1434 | SSL_CTX_set_session_id_context(ctx, |
| 1435 | (void *) &s_server_session_id_context, | 1435 | (void *) &s_server_session_id_context, |
| 1436 | sizeof s_server_session_id_context); | 1436 | sizeof s_server_session_id_context); |
| @@ -1440,38 +1440,38 @@ s_server_main(int argc, char *argv[]) | |||
| 1440 | SSL_CTX_set_cookie_verify_cb(ctx, verify_cookie_callback); | 1440 | SSL_CTX_set_cookie_verify_cb(ctx, verify_cookie_callback); |
| 1441 | 1441 | ||
| 1442 | if (ctx2) { | 1442 | if (ctx2) { |
| 1443 | SSL_CTX_set_verify(ctx2, s_server_config.server_verify, | 1443 | SSL_CTX_set_verify(ctx2, cfg.server_verify, |
| 1444 | verify_callback); | 1444 | verify_callback); |
| 1445 | SSL_CTX_set_session_id_context(ctx2, | 1445 | SSL_CTX_set_session_id_context(ctx2, |
| 1446 | (void *) &s_server_session_id_context, | 1446 | (void *) &s_server_session_id_context, |
| 1447 | sizeof s_server_session_id_context); | 1447 | sizeof s_server_session_id_context); |
| 1448 | 1448 | ||
| 1449 | s_server_config.tlsextcbp.biodebug = bio_s_out; | 1449 | cfg.tlsextcbp.biodebug = bio_s_out; |
| 1450 | SSL_CTX_set_tlsext_servername_callback(ctx2, ssl_servername_cb); | 1450 | SSL_CTX_set_tlsext_servername_callback(ctx2, ssl_servername_cb); |
| 1451 | SSL_CTX_set_tlsext_servername_arg(ctx2, | 1451 | SSL_CTX_set_tlsext_servername_arg(ctx2, |
| 1452 | &s_server_config.tlsextcbp); | 1452 | &cfg.tlsextcbp); |
| 1453 | SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); | 1453 | SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); |
| 1454 | SSL_CTX_set_tlsext_servername_arg(ctx, | 1454 | SSL_CTX_set_tlsext_servername_arg(ctx, |
| 1455 | &s_server_config.tlsextcbp); | 1455 | &cfg.tlsextcbp); |
| 1456 | } | 1456 | } |
| 1457 | 1457 | ||
| 1458 | if (s_server_config.CAfile != NULL) { | 1458 | if (cfg.CAfile != NULL) { |
| 1459 | SSL_CTX_set_client_CA_list(ctx, | 1459 | SSL_CTX_set_client_CA_list(ctx, |
| 1460 | SSL_load_client_CA_file(s_server_config.CAfile)); | 1460 | SSL_load_client_CA_file(cfg.CAfile)); |
| 1461 | if (ctx2) | 1461 | if (ctx2) |
| 1462 | SSL_CTX_set_client_CA_list(ctx2, | 1462 | SSL_CTX_set_client_CA_list(ctx2, |
| 1463 | SSL_load_client_CA_file(s_server_config.CAfile)); | 1463 | SSL_load_client_CA_file(cfg.CAfile)); |
| 1464 | } | 1464 | } |
| 1465 | BIO_printf(bio_s_out, "ACCEPT\n"); | 1465 | BIO_printf(bio_s_out, "ACCEPT\n"); |
| 1466 | (void) BIO_flush(bio_s_out); | 1466 | (void) BIO_flush(bio_s_out); |
| 1467 | if (s_server_config.www) | 1467 | if (cfg.www) |
| 1468 | do_server(s_server_config.port, s_server_config.socket_type, | 1468 | do_server(cfg.port, cfg.socket_type, |
| 1469 | &accept_socket, www_body, s_server_config.context, | 1469 | &accept_socket, www_body, cfg.context, |
| 1470 | s_server_config.naccept); | 1470 | cfg.naccept); |
| 1471 | else | 1471 | else |
| 1472 | do_server(s_server_config.port, s_server_config.socket_type, | 1472 | do_server(cfg.port, cfg.socket_type, |
| 1473 | &accept_socket, sv_body, s_server_config.context, | 1473 | &accept_socket, sv_body, cfg.context, |
| 1474 | s_server_config.naccept); | 1474 | cfg.naccept); |
| 1475 | print_stats(bio_s_out, ctx); | 1475 | print_stats(bio_s_out, ctx); |
| 1476 | ret = 0; | 1476 | ret = 0; |
| 1477 | end: | 1477 | end: |
| @@ -1482,10 +1482,10 @@ s_server_main(int argc, char *argv[]) | |||
| 1482 | EVP_PKEY_free(s_dkey); | 1482 | EVP_PKEY_free(s_dkey); |
| 1483 | free(pass); | 1483 | free(pass); |
| 1484 | free(dpass); | 1484 | free(dpass); |
| 1485 | X509_VERIFY_PARAM_free(s_server_config.vpm); | 1485 | X509_VERIFY_PARAM_free(cfg.vpm); |
| 1486 | free(s_server_config.tlscstatp.host); | 1486 | free(cfg.tlscstatp.host); |
| 1487 | free(s_server_config.tlscstatp.port); | 1487 | free(cfg.tlscstatp.port); |
| 1488 | free(s_server_config.tlscstatp.path); | 1488 | free(cfg.tlscstatp.path); |
| 1489 | SSL_CTX_free(ctx2); | 1489 | SSL_CTX_free(ctx2); |
| 1490 | X509_free(s_cert2); | 1490 | X509_free(s_cert2); |
| 1491 | EVP_PKEY_free(s_key2); | 1491 | EVP_PKEY_free(s_key2); |
| @@ -1543,8 +1543,8 @@ sv_body(int s, unsigned char *context) | |||
| 1543 | BIO_printf(bio_err, "out of memory\n"); | 1543 | BIO_printf(bio_err, "out of memory\n"); |
| 1544 | goto err; | 1544 | goto err; |
| 1545 | } | 1545 | } |
| 1546 | if (s_server_config.nbio) { | 1546 | if (cfg.nbio) { |
| 1547 | if (!s_server_config.quiet) | 1547 | if (!cfg.quiet) |
| 1548 | BIO_printf(bio_err, "turning on non blocking io\n"); | 1548 | BIO_printf(bio_err, "turning on non blocking io\n"); |
| 1549 | if (!BIO_socket_nbio(s, 1)) | 1549 | if (!BIO_socket_nbio(s, 1)) |
| 1550 | ERR_print_errors(bio_err); | 1550 | ERR_print_errors(bio_err); |
| @@ -1552,15 +1552,15 @@ sv_body(int s, unsigned char *context) | |||
| 1552 | 1552 | ||
| 1553 | if (con == NULL) { | 1553 | if (con == NULL) { |
| 1554 | con = SSL_new(ctx); | 1554 | con = SSL_new(ctx); |
| 1555 | if (s_server_config.tlsextdebug) { | 1555 | if (cfg.tlsextdebug) { |
| 1556 | SSL_set_tlsext_debug_callback(con, tlsext_cb); | 1556 | SSL_set_tlsext_debug_callback(con, tlsext_cb); |
| 1557 | SSL_set_tlsext_debug_arg(con, bio_s_out); | 1557 | SSL_set_tlsext_debug_arg(con, bio_s_out); |
| 1558 | } | 1558 | } |
| 1559 | if (s_server_config.tlsextstatus) { | 1559 | if (cfg.tlsextstatus) { |
| 1560 | SSL_CTX_set_tlsext_status_cb(ctx, cert_status_cb); | 1560 | SSL_CTX_set_tlsext_status_cb(ctx, cert_status_cb); |
| 1561 | s_server_config.tlscstatp.err = bio_err; | 1561 | cfg.tlscstatp.err = bio_err; |
| 1562 | SSL_CTX_set_tlsext_status_arg(ctx, | 1562 | SSL_CTX_set_tlsext_status_arg(ctx, |
| 1563 | &s_server_config.tlscstatp); | 1563 | &cfg.tlscstatp); |
| 1564 | } | 1564 | } |
| 1565 | if (context) | 1565 | if (context) |
| 1566 | SSL_set_session_id_context(con, context, | 1566 | SSL_set_session_id_context(con, context, |
| @@ -1571,7 +1571,7 @@ sv_body(int s, unsigned char *context) | |||
| 1571 | if (SSL_is_dtls(con)) { | 1571 | if (SSL_is_dtls(con)) { |
| 1572 | sbio = BIO_new_dgram(s, BIO_NOCLOSE); | 1572 | sbio = BIO_new_dgram(s, BIO_NOCLOSE); |
| 1573 | 1573 | ||
| 1574 | if (s_server_config.enable_timeouts) { | 1574 | if (cfg.enable_timeouts) { |
| 1575 | timeout.tv_sec = 0; | 1575 | timeout.tv_sec = 0; |
| 1576 | timeout.tv_usec = DGRAM_RCV_TIMEOUT; | 1576 | timeout.tv_usec = DGRAM_RCV_TIMEOUT; |
| 1577 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, | 1577 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, |
| @@ -1582,9 +1582,9 @@ sv_body(int s, unsigned char *context) | |||
| 1582 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, | 1582 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, |
| 1583 | &timeout); | 1583 | &timeout); |
| 1584 | } | 1584 | } |
| 1585 | if (s_server_config.socket_mtu > 28) { | 1585 | if (cfg.socket_mtu > 28) { |
| 1586 | SSL_set_options(con, SSL_OP_NO_QUERY_MTU); | 1586 | SSL_set_options(con, SSL_OP_NO_QUERY_MTU); |
| 1587 | SSL_set_mtu(con, s_server_config.socket_mtu - 28); | 1587 | SSL_set_mtu(con, cfg.socket_mtu - 28); |
| 1588 | } else | 1588 | } else |
| 1589 | /* want to do MTU discovery */ | 1589 | /* want to do MTU discovery */ |
| 1590 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); | 1590 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); |
| @@ -1594,7 +1594,7 @@ sv_body(int s, unsigned char *context) | |||
| 1594 | } else | 1594 | } else |
| 1595 | sbio = BIO_new_socket(s, BIO_NOCLOSE); | 1595 | sbio = BIO_new_socket(s, BIO_NOCLOSE); |
| 1596 | 1596 | ||
| 1597 | if (s_server_config.nbio_test) { | 1597 | if (cfg.nbio_test) { |
| 1598 | BIO *test; | 1598 | BIO *test; |
| 1599 | 1599 | ||
| 1600 | test = BIO_new(BIO_f_nbio_test()); | 1600 | test = BIO_new(BIO_f_nbio_test()); |
| @@ -1605,16 +1605,16 @@ sv_body(int s, unsigned char *context) | |||
| 1605 | SSL_set_accept_state(con); | 1605 | SSL_set_accept_state(con); |
| 1606 | /* SSL_set_fd(con,s); */ | 1606 | /* SSL_set_fd(con,s); */ |
| 1607 | 1607 | ||
| 1608 | if (s_server_config.debug) { | 1608 | if (cfg.debug) { |
| 1609 | SSL_set_debug(con, 1); | 1609 | SSL_set_debug(con, 1); |
| 1610 | BIO_set_callback(SSL_get_rbio(con), bio_dump_callback); | 1610 | BIO_set_callback(SSL_get_rbio(con), bio_dump_callback); |
| 1611 | BIO_set_callback_arg(SSL_get_rbio(con), (char *) bio_s_out); | 1611 | BIO_set_callback_arg(SSL_get_rbio(con), (char *) bio_s_out); |
| 1612 | } | 1612 | } |
| 1613 | if (s_server_config.msg) { | 1613 | if (cfg.msg) { |
| 1614 | SSL_set_msg_callback(con, msg_cb); | 1614 | SSL_set_msg_callback(con, msg_cb); |
| 1615 | SSL_set_msg_callback_arg(con, bio_s_out); | 1615 | SSL_set_msg_callback_arg(con, bio_s_out); |
| 1616 | } | 1616 | } |
| 1617 | if (s_server_config.tlsextdebug) { | 1617 | if (cfg.tlsextdebug) { |
| 1618 | SSL_set_tlsext_debug_callback(con, tlsext_cb); | 1618 | SSL_set_tlsext_debug_callback(con, tlsext_cb); |
| 1619 | SSL_set_tlsext_debug_arg(con, bio_s_out); | 1619 | SSL_set_tlsext_debug_arg(con, bio_s_out); |
| 1620 | } | 1620 | } |
| @@ -1660,7 +1660,7 @@ sv_body(int s, unsigned char *context) | |||
| 1660 | } | 1660 | } |
| 1661 | } | 1661 | } |
| 1662 | if (read_from_terminal) { | 1662 | if (read_from_terminal) { |
| 1663 | if (s_server_config.crlf) { | 1663 | if (cfg.crlf) { |
| 1664 | int j, lf_num; | 1664 | int j, lf_num; |
| 1665 | 1665 | ||
| 1666 | i = read(fileno(stdin), buf, bufsize / 2); | 1666 | i = read(fileno(stdin), buf, bufsize / 2); |
| @@ -1680,7 +1680,7 @@ sv_body(int s, unsigned char *context) | |||
| 1680 | assert(lf_num == 0); | 1680 | assert(lf_num == 0); |
| 1681 | } else | 1681 | } else |
| 1682 | i = read(fileno(stdin), buf, bufsize); | 1682 | i = read(fileno(stdin), buf, bufsize); |
| 1683 | if (!s_server_config.quiet) { | 1683 | if (!cfg.quiet) { |
| 1684 | if ((i <= 0) || (buf[0] == 'Q')) { | 1684 | if ((i <= 0) || (buf[0] == 'Q')) { |
| 1685 | BIO_printf(bio_s_out, "DONE\n"); | 1685 | BIO_printf(bio_s_out, "DONE\n"); |
| 1686 | shutdown(s, SHUT_RD); | 1686 | shutdown(s, SHUT_RD); |
| @@ -1910,23 +1910,23 @@ init_ssl_connection(SSL *con) | |||
| 1910 | BIO_printf(bio_s_out, "Reused session-id\n"); | 1910 | BIO_printf(bio_s_out, "Reused session-id\n"); |
| 1911 | BIO_printf(bio_s_out, "Secure Renegotiation IS%s supported\n", | 1911 | BIO_printf(bio_s_out, "Secure Renegotiation IS%s supported\n", |
| 1912 | SSL_get_secure_renegotiation_support(con) ? "" : " NOT"); | 1912 | SSL_get_secure_renegotiation_support(con) ? "" : " NOT"); |
| 1913 | if (s_server_config.keymatexportlabel != NULL) { | 1913 | if (cfg.keymatexportlabel != NULL) { |
| 1914 | BIO_printf(bio_s_out, "Keying material exporter:\n"); | 1914 | BIO_printf(bio_s_out, "Keying material exporter:\n"); |
| 1915 | BIO_printf(bio_s_out, " Label: '%s'\n", | 1915 | BIO_printf(bio_s_out, " Label: '%s'\n", |
| 1916 | s_server_config.keymatexportlabel); | 1916 | cfg.keymatexportlabel); |
| 1917 | BIO_printf(bio_s_out, " Length: %i bytes\n", | 1917 | BIO_printf(bio_s_out, " Length: %i bytes\n", |
| 1918 | s_server_config.keymatexportlen); | 1918 | cfg.keymatexportlen); |
| 1919 | exportedkeymat = malloc(s_server_config.keymatexportlen); | 1919 | exportedkeymat = malloc(cfg.keymatexportlen); |
| 1920 | if (exportedkeymat != NULL) { | 1920 | if (exportedkeymat != NULL) { |
| 1921 | if (!SSL_export_keying_material(con, exportedkeymat, | 1921 | if (!SSL_export_keying_material(con, exportedkeymat, |
| 1922 | s_server_config.keymatexportlen, | 1922 | cfg.keymatexportlen, |
| 1923 | s_server_config.keymatexportlabel, | 1923 | cfg.keymatexportlabel, |
| 1924 | strlen(s_server_config.keymatexportlabel), | 1924 | strlen(cfg.keymatexportlabel), |
| 1925 | NULL, 0, 0)) { | 1925 | NULL, 0, 0)) { |
| 1926 | BIO_printf(bio_s_out, " Error\n"); | 1926 | BIO_printf(bio_s_out, " Error\n"); |
| 1927 | } else { | 1927 | } else { |
| 1928 | BIO_printf(bio_s_out, " Keying material: "); | 1928 | BIO_printf(bio_s_out, " Keying material: "); |
| 1929 | for (i = 0; i < s_server_config.keymatexportlen; i++) | 1929 | for (i = 0; i < cfg.keymatexportlen; i++) |
| 1930 | BIO_printf(bio_s_out, "%02X", | 1930 | BIO_printf(bio_s_out, "%02X", |
| 1931 | exportedkeymat[i]); | 1931 | exportedkeymat[i]); |
| 1932 | BIO_printf(bio_s_out, "\n"); | 1932 | BIO_printf(bio_s_out, "\n"); |
| @@ -1971,8 +1971,8 @@ www_body(int s, unsigned char *context) | |||
| 1971 | if ((io == NULL) || (ssl_bio == NULL)) | 1971 | if ((io == NULL) || (ssl_bio == NULL)) |
| 1972 | goto err; | 1972 | goto err; |
| 1973 | 1973 | ||
| 1974 | if (s_server_config.nbio) { | 1974 | if (cfg.nbio) { |
| 1975 | if (!s_server_config.quiet) | 1975 | if (!cfg.quiet) |
| 1976 | BIO_printf(bio_err, "turning on non blocking io\n"); | 1976 | BIO_printf(bio_err, "turning on non blocking io\n"); |
| 1977 | if (!BIO_socket_nbio(s, 1)) | 1977 | if (!BIO_socket_nbio(s, 1)) |
| 1978 | ERR_print_errors(bio_err); | 1978 | ERR_print_errors(bio_err); |
| @@ -1984,7 +1984,7 @@ www_body(int s, unsigned char *context) | |||
| 1984 | 1984 | ||
| 1985 | if ((con = SSL_new(ctx)) == NULL) | 1985 | if ((con = SSL_new(ctx)) == NULL) |
| 1986 | goto err; | 1986 | goto err; |
| 1987 | if (s_server_config.tlsextdebug) { | 1987 | if (cfg.tlsextdebug) { |
| 1988 | SSL_set_tlsext_debug_callback(con, tlsext_cb); | 1988 | SSL_set_tlsext_debug_callback(con, tlsext_cb); |
| 1989 | SSL_set_tlsext_debug_arg(con, bio_s_out); | 1989 | SSL_set_tlsext_debug_arg(con, bio_s_out); |
| 1990 | } | 1990 | } |
| @@ -1993,7 +1993,7 @@ www_body(int s, unsigned char *context) | |||
| 1993 | strlen((char *) context)); | 1993 | strlen((char *) context)); |
| 1994 | 1994 | ||
| 1995 | sbio = BIO_new_socket(s, BIO_NOCLOSE); | 1995 | sbio = BIO_new_socket(s, BIO_NOCLOSE); |
| 1996 | if (s_server_config.nbio_test) { | 1996 | if (cfg.nbio_test) { |
| 1997 | BIO *test; | 1997 | BIO *test; |
| 1998 | 1998 | ||
| 1999 | test = BIO_new(BIO_f_nbio_test()); | 1999 | test = BIO_new(BIO_f_nbio_test()); |
| @@ -2006,12 +2006,12 @@ www_body(int s, unsigned char *context) | |||
| 2006 | BIO_set_ssl(ssl_bio, con, BIO_CLOSE); | 2006 | BIO_set_ssl(ssl_bio, con, BIO_CLOSE); |
| 2007 | BIO_push(io, ssl_bio); | 2007 | BIO_push(io, ssl_bio); |
| 2008 | 2008 | ||
| 2009 | if (s_server_config.debug) { | 2009 | if (cfg.debug) { |
| 2010 | SSL_set_debug(con, 1); | 2010 | SSL_set_debug(con, 1); |
| 2011 | BIO_set_callback(SSL_get_rbio(con), bio_dump_callback); | 2011 | BIO_set_callback(SSL_get_rbio(con), bio_dump_callback); |
| 2012 | BIO_set_callback_arg(SSL_get_rbio(con), (char *) bio_s_out); | 2012 | BIO_set_callback_arg(SSL_get_rbio(con), (char *) bio_s_out); |
| 2013 | } | 2013 | } |
| 2014 | if (s_server_config.msg) { | 2014 | if (cfg.msg) { |
| 2015 | SSL_set_msg_callback(con, msg_cb); | 2015 | SSL_set_msg_callback(con, msg_cb); |
| 2016 | SSL_set_msg_callback_arg(con, bio_s_out); | 2016 | SSL_set_msg_callback_arg(con, bio_s_out); |
| 2017 | } | 2017 | } |
| @@ -2019,11 +2019,11 @@ www_body(int s, unsigned char *context) | |||
| 2019 | i = BIO_gets(io, buf, bufsize - 1); | 2019 | i = BIO_gets(io, buf, bufsize - 1); |
| 2020 | if (i < 0) { /* error */ | 2020 | if (i < 0) { /* error */ |
| 2021 | if (!BIO_should_retry(io)) { | 2021 | if (!BIO_should_retry(io)) { |
| 2022 | if (!s_server_config.quiet) | 2022 | if (!cfg.quiet) |
| 2023 | ERR_print_errors(bio_err); | 2023 | ERR_print_errors(bio_err); |
| 2024 | goto err; | 2024 | goto err; |
| 2025 | } else { | 2025 | } else { |
| 2026 | if (s_server_config.debug) { | 2026 | if (cfg.debug) { |
| 2027 | BIO_printf(bio_s_out, "read R BLOCK\n"); | 2027 | BIO_printf(bio_s_out, "read R BLOCK\n"); |
| 2028 | sleep(1); | 2028 | sleep(1); |
| 2029 | } | 2029 | } |
| @@ -2034,9 +2034,9 @@ www_body(int s, unsigned char *context) | |||
| 2034 | goto end; | 2034 | goto end; |
| 2035 | } | 2035 | } |
| 2036 | /* else we have data */ | 2036 | /* else we have data */ |
| 2037 | if (((s_server_config.www == 1) && | 2037 | if (((cfg.www == 1) && |
| 2038 | (strncmp("GET ", buf, 4) == 0)) || | 2038 | (strncmp("GET ", buf, 4) == 0)) || |
| 2039 | ((s_server_config.www == 2) && | 2039 | ((cfg.www == 2) && |
| 2040 | (strncmp("GET /stats ", buf, 11) == 0))) { | 2040 | (strncmp("GET /stats ", buf, 11) == 0))) { |
| 2041 | char *p; | 2041 | char *p; |
| 2042 | X509 *peer; | 2042 | X509 *peer; |
| @@ -2117,8 +2117,8 @@ www_body(int s, unsigned char *context) | |||
| 2117 | "no client certificate available\n"); | 2117 | "no client certificate available\n"); |
| 2118 | BIO_puts(io, "</BODY></HTML>\r\n\r\n"); | 2118 | BIO_puts(io, "</BODY></HTML>\r\n\r\n"); |
| 2119 | break; | 2119 | break; |
| 2120 | } else if ((s_server_config.www == 2 || | 2120 | } else if ((cfg.www == 2 || |
| 2121 | s_server_config.www == 3) && | 2121 | cfg.www == 3) && |
| 2122 | (strncmp("GET /", buf, 5) == 0)) { | 2122 | (strncmp("GET /", buf, 5) == 0)) { |
| 2123 | BIO *file; | 2123 | BIO *file; |
| 2124 | char *p, *e; | 2124 | char *p, *e; |
| @@ -2183,10 +2183,10 @@ www_body(int s, unsigned char *context) | |||
| 2183 | ERR_print_errors(io); | 2183 | ERR_print_errors(io); |
| 2184 | break; | 2184 | break; |
| 2185 | } | 2185 | } |
| 2186 | if (!s_server_config.quiet) | 2186 | if (!cfg.quiet) |
| 2187 | BIO_printf(bio_err, "FILE:%s\n", p); | 2187 | BIO_printf(bio_err, "FILE:%s\n", p); |
| 2188 | 2188 | ||
| 2189 | if (s_server_config.www == 2) { | 2189 | if (cfg.www == 2) { |
| 2190 | i = strlen(p); | 2190 | i = strlen(p); |
| 2191 | if (((i > 5) && (strcmp(&(p[i - 5]), ".html") == 0)) || | 2191 | if (((i > 5) && (strcmp(&(p[i - 5]), ".html") == 0)) || |
| 2192 | ((i > 4) && (strcmp(&(p[i - 4]), ".php") == 0)) || | 2192 | ((i > 4) && (strcmp(&(p[i - 4]), ".php") == 0)) || |
| @@ -2276,9 +2276,9 @@ generate_session_id(const SSL *ssl, unsigned char *id, unsigned int *id_len) | |||
| 2276 | * 1 session ID (ie. the prefix!) so all future session | 2276 | * 1 session ID (ie. the prefix!) so all future session |
| 2277 | * negotiations will fail due to conflicts. | 2277 | * negotiations will fail due to conflicts. |
| 2278 | */ | 2278 | */ |
| 2279 | memcpy(id, s_server_config.session_id_prefix, | 2279 | memcpy(id, cfg.session_id_prefix, |
| 2280 | (strlen(s_server_config.session_id_prefix) < *id_len) ? | 2280 | (strlen(cfg.session_id_prefix) < *id_len) ? |
| 2281 | strlen(s_server_config.session_id_prefix) : *id_len); | 2281 | strlen(cfg.session_id_prefix) : *id_len); |
| 2282 | } | 2282 | } |
| 2283 | while (SSL_has_matching_session_id(ssl, id, *id_len) && | 2283 | while (SSL_has_matching_session_id(ssl, id, *id_len) && |
| 2284 | (++count < MAX_SESSION_ID_ATTEMPTS)); | 2284 | (++count < MAX_SESSION_ID_ATTEMPTS)); |
| @@ -2449,7 +2449,7 @@ alpn_cb(SSL *s, const unsigned char **out, unsigned char *outlen, | |||
| 2449 | { | 2449 | { |
| 2450 | tlsextalpnctx *alpn_ctx = arg; | 2450 | tlsextalpnctx *alpn_ctx = arg; |
| 2451 | 2451 | ||
| 2452 | if (!s_server_config.quiet) { | 2452 | if (!cfg.quiet) { |
| 2453 | /* We can assume that in is syntactically valid. */ | 2453 | /* We can assume that in is syntactically valid. */ |
| 2454 | unsigned i; | 2454 | unsigned i; |
| 2455 | 2455 | ||
| @@ -2468,7 +2468,7 @@ alpn_cb(SSL *s, const unsigned char **out, unsigned char *outlen, | |||
| 2468 | alpn_ctx->len, in, inlen) != OPENSSL_NPN_NEGOTIATED) | 2468 | alpn_ctx->len, in, inlen) != OPENSSL_NPN_NEGOTIATED) |
| 2469 | return (SSL_TLSEXT_ERR_NOACK); | 2469 | return (SSL_TLSEXT_ERR_NOACK); |
| 2470 | 2470 | ||
| 2471 | if (!s_server_config.quiet) { | 2471 | if (!cfg.quiet) { |
| 2472 | BIO_printf(bio_s_out, "ALPN protocols selected: "); | 2472 | BIO_printf(bio_s_out, "ALPN protocols selected: "); |
| 2473 | BIO_write(bio_s_out, *out, *outlen); | 2473 | BIO_write(bio_s_out, *out, *outlen); |
| 2474 | BIO_write(bio_s_out, "\n", 1); | 2474 | BIO_write(bio_s_out, "\n", 1); |
diff --git a/src/usr.bin/openssl/s_time.c b/src/usr.bin/openssl/s_time.c index d6f012fd41..7eed6d486e 100644 --- a/src/usr.bin/openssl/s_time.c +++ b/src/usr.bin/openssl/s_time.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s_time.c,v 1.37 2023/03/05 13:12:53 tb Exp $ */ | 1 | /* $OpenBSD: s_time.c,v 1.38 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -113,42 +113,42 @@ static struct { | |||
| 113 | int verify; | 113 | int verify; |
| 114 | int verify_depth; | 114 | int verify_depth; |
| 115 | char *www_path; | 115 | char *www_path; |
| 116 | } s_time_config; | 116 | } cfg; |
| 117 | 117 | ||
| 118 | static const struct option s_time_options[] = { | 118 | static const struct option s_time_options[] = { |
| 119 | { | 119 | { |
| 120 | .name = "bugs", | 120 | .name = "bugs", |
| 121 | .desc = "Enable workarounds for known SSL/TLS bugs", | 121 | .desc = "Enable workarounds for known SSL/TLS bugs", |
| 122 | .type = OPTION_FLAG, | 122 | .type = OPTION_FLAG, |
| 123 | .opt.flag = &s_time_config.bugs, | 123 | .opt.flag = &cfg.bugs, |
| 124 | }, | 124 | }, |
| 125 | { | 125 | { |
| 126 | .name = "CAfile", | 126 | .name = "CAfile", |
| 127 | .argname = "file", | 127 | .argname = "file", |
| 128 | .desc = "File containing trusted certificates in PEM format", | 128 | .desc = "File containing trusted certificates in PEM format", |
| 129 | .type = OPTION_ARG, | 129 | .type = OPTION_ARG, |
| 130 | .opt.arg = &s_time_config.CAfile, | 130 | .opt.arg = &cfg.CAfile, |
| 131 | }, | 131 | }, |
| 132 | { | 132 | { |
| 133 | .name = "CApath", | 133 | .name = "CApath", |
| 134 | .argname = "path", | 134 | .argname = "path", |
| 135 | .desc = "Directory containing trusted certificates", | 135 | .desc = "Directory containing trusted certificates", |
| 136 | .type = OPTION_ARG, | 136 | .type = OPTION_ARG, |
| 137 | .opt.arg = &s_time_config.CApath, | 137 | .opt.arg = &cfg.CApath, |
| 138 | }, | 138 | }, |
| 139 | { | 139 | { |
| 140 | .name = "cert", | 140 | .name = "cert", |
| 141 | .argname = "file", | 141 | .argname = "file", |
| 142 | .desc = "Client certificate to use, if one is requested", | 142 | .desc = "Client certificate to use, if one is requested", |
| 143 | .type = OPTION_ARG, | 143 | .type = OPTION_ARG, |
| 144 | .opt.arg = &s_time_config.certfile, | 144 | .opt.arg = &cfg.certfile, |
| 145 | }, | 145 | }, |
| 146 | { | 146 | { |
| 147 | .name = "cipher", | 147 | .name = "cipher", |
| 148 | .argname = "list", | 148 | .argname = "list", |
| 149 | .desc = "List of cipher suites to send to the server", | 149 | .desc = "List of cipher suites to send to the server", |
| 150 | .type = OPTION_ARG, | 150 | .type = OPTION_ARG, |
| 151 | .opt.arg = &s_time_config.cipher, | 151 | .opt.arg = &cfg.cipher, |
| 152 | }, | 152 | }, |
| 153 | { | 153 | { |
| 154 | .name = "connect", | 154 | .name = "connect", |
| @@ -156,39 +156,39 @@ static const struct option s_time_options[] = { | |||
| 156 | .desc = "Host and port to connect to (default " | 156 | .desc = "Host and port to connect to (default " |
| 157 | SSL_CONNECT_NAME ")", | 157 | SSL_CONNECT_NAME ")", |
| 158 | .type = OPTION_ARG, | 158 | .type = OPTION_ARG, |
| 159 | .opt.arg = &s_time_config.host, | 159 | .opt.arg = &cfg.host, |
| 160 | }, | 160 | }, |
| 161 | { | 161 | { |
| 162 | .name = "key", | 162 | .name = "key", |
| 163 | .argname = "file", | 163 | .argname = "file", |
| 164 | .desc = "Client private key to use, if one is required", | 164 | .desc = "Client private key to use, if one is required", |
| 165 | .type = OPTION_ARG, | 165 | .type = OPTION_ARG, |
| 166 | .opt.arg = &s_time_config.keyfile, | 166 | .opt.arg = &cfg.keyfile, |
| 167 | }, | 167 | }, |
| 168 | { | 168 | { |
| 169 | .name = "nbio", | 169 | .name = "nbio", |
| 170 | .desc = "Use non-blocking I/O", | 170 | .desc = "Use non-blocking I/O", |
| 171 | .type = OPTION_FLAG, | 171 | .type = OPTION_FLAG, |
| 172 | .opt.flag = &s_time_config.nbio, | 172 | .opt.flag = &cfg.nbio, |
| 173 | }, | 173 | }, |
| 174 | { | 174 | { |
| 175 | .name = "new", | 175 | .name = "new", |
| 176 | .desc = "Use a new session ID for each connection", | 176 | .desc = "Use a new session ID for each connection", |
| 177 | .type = OPTION_VALUE, | 177 | .type = OPTION_VALUE, |
| 178 | .opt.value = &s_time_config.perform, | 178 | .opt.value = &cfg.perform, |
| 179 | .value = 1, | 179 | .value = 1, |
| 180 | }, | 180 | }, |
| 181 | { | 181 | { |
| 182 | .name = "no_shutdown", | 182 | .name = "no_shutdown", |
| 183 | .desc = "Shut down the connection without notifying the server", | 183 | .desc = "Shut down the connection without notifying the server", |
| 184 | .type = OPTION_FLAG, | 184 | .type = OPTION_FLAG, |
| 185 | .opt.flag = &s_time_config.no_shutdown, | 185 | .opt.flag = &cfg.no_shutdown, |
| 186 | }, | 186 | }, |
| 187 | { | 187 | { |
| 188 | .name = "reuse", | 188 | .name = "reuse", |
| 189 | .desc = "Reuse the same session ID for each connection", | 189 | .desc = "Reuse the same session ID for each connection", |
| 190 | .type = OPTION_VALUE, | 190 | .type = OPTION_VALUE, |
| 191 | .opt.value = &s_time_config.perform, | 191 | .opt.value = &cfg.perform, |
| 192 | .value = 2, | 192 | .value = 2, |
| 193 | }, | 193 | }, |
| 194 | { | 194 | { |
| @@ -196,21 +196,21 @@ static const struct option s_time_options[] = { | |||
| 196 | .argname = "seconds", | 196 | .argname = "seconds", |
| 197 | .desc = "Duration to perform timing tests for (default 30)", | 197 | .desc = "Duration to perform timing tests for (default 30)", |
| 198 | .type = OPTION_ARG_TIME, | 198 | .type = OPTION_ARG_TIME, |
| 199 | .opt.tvalue = &s_time_config.maxtime, | 199 | .opt.tvalue = &cfg.maxtime, |
| 200 | }, | 200 | }, |
| 201 | { | 201 | { |
| 202 | .name = "verify", | 202 | .name = "verify", |
| 203 | .argname = "depth", | 203 | .argname = "depth", |
| 204 | .desc = "Enable peer certificate verification with given depth", | 204 | .desc = "Enable peer certificate verification with given depth", |
| 205 | .type = OPTION_ARG_INT, | 205 | .type = OPTION_ARG_INT, |
| 206 | .opt.value = &s_time_config.verify_depth, | 206 | .opt.value = &cfg.verify_depth, |
| 207 | }, | 207 | }, |
| 208 | { | 208 | { |
| 209 | .name = "www", | 209 | .name = "www", |
| 210 | .argname = "page", | 210 | .argname = "page", |
| 211 | .desc = "Page to GET from the server (default none)", | 211 | .desc = "Page to GET from the server (default none)", |
| 212 | .type = OPTION_ARG, | 212 | .type = OPTION_ARG, |
| 213 | .opt.arg = &s_time_config.www_path, | 213 | .opt.arg = &cfg.www_path, |
| 214 | }, | 214 | }, |
| 215 | { NULL }, | 215 | { NULL }, |
| 216 | }; | 216 | }; |
| @@ -245,27 +245,27 @@ s_time_main(int argc, char **argv) | |||
| 245 | 245 | ||
| 246 | verify_depth = 0; | 246 | verify_depth = 0; |
| 247 | 247 | ||
| 248 | memset(&s_time_config, 0, sizeof(s_time_config)); | 248 | memset(&cfg, 0, sizeof(cfg)); |
| 249 | 249 | ||
| 250 | s_time_config.host = SSL_CONNECT_NAME; | 250 | cfg.host = SSL_CONNECT_NAME; |
| 251 | s_time_config.maxtime = SECONDS; | 251 | cfg.maxtime = SECONDS; |
| 252 | s_time_config.perform = 3; | 252 | cfg.perform = 3; |
| 253 | s_time_config.verify = SSL_VERIFY_NONE; | 253 | cfg.verify = SSL_VERIFY_NONE; |
| 254 | s_time_config.verify_depth = -1; | 254 | cfg.verify_depth = -1; |
| 255 | 255 | ||
| 256 | if (options_parse(argc, argv, s_time_options, NULL, NULL) != 0) { | 256 | if (options_parse(argc, argv, s_time_options, NULL, NULL) != 0) { |
| 257 | s_time_usage(); | 257 | s_time_usage(); |
| 258 | goto end; | 258 | goto end; |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | if (s_time_config.verify_depth >= 0) { | 261 | if (cfg.verify_depth >= 0) { |
| 262 | s_time_config.verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; | 262 | cfg.verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; |
| 263 | verify_depth = s_time_config.verify_depth; | 263 | verify_depth = cfg.verify_depth; |
| 264 | BIO_printf(bio_err, "verify depth is %d\n", verify_depth); | 264 | BIO_printf(bio_err, "verify depth is %d\n", verify_depth); |
| 265 | } | 265 | } |
| 266 | 266 | ||
| 267 | if (s_time_config.www_path != NULL && | 267 | if (cfg.www_path != NULL && |
| 268 | strlen(s_time_config.www_path) > MYBUFSIZ - 100) { | 268 | strlen(cfg.www_path) > MYBUFSIZ - 100) { |
| 269 | BIO_printf(bio_err, "-www option too long\n"); | 269 | BIO_printf(bio_err, "-www option too long\n"); |
| 270 | goto end; | 270 | goto end; |
| 271 | } | 271 | } |
| @@ -275,25 +275,25 @@ s_time_main(int argc, char **argv) | |||
| 275 | 275 | ||
| 276 | SSL_CTX_set_quiet_shutdown(tm_ctx, 1); | 276 | SSL_CTX_set_quiet_shutdown(tm_ctx, 1); |
| 277 | 277 | ||
| 278 | if (s_time_config.bugs) | 278 | if (cfg.bugs) |
| 279 | SSL_CTX_set_options(tm_ctx, SSL_OP_ALL); | 279 | SSL_CTX_set_options(tm_ctx, SSL_OP_ALL); |
| 280 | 280 | ||
| 281 | if (s_time_config.cipher != NULL) { | 281 | if (cfg.cipher != NULL) { |
| 282 | if (!SSL_CTX_set_cipher_list(tm_ctx, s_time_config.cipher)) { | 282 | if (!SSL_CTX_set_cipher_list(tm_ctx, cfg.cipher)) { |
| 283 | BIO_printf(bio_err, "error setting cipher list\n"); | 283 | BIO_printf(bio_err, "error setting cipher list\n"); |
| 284 | ERR_print_errors(bio_err); | 284 | ERR_print_errors(bio_err); |
| 285 | goto end; | 285 | goto end; |
| 286 | } | 286 | } |
| 287 | } | 287 | } |
| 288 | 288 | ||
| 289 | SSL_CTX_set_verify(tm_ctx, s_time_config.verify, NULL); | 289 | SSL_CTX_set_verify(tm_ctx, cfg.verify, NULL); |
| 290 | 290 | ||
| 291 | if (!set_cert_stuff(tm_ctx, s_time_config.certfile, | 291 | if (!set_cert_stuff(tm_ctx, cfg.certfile, |
| 292 | s_time_config.keyfile)) | 292 | cfg.keyfile)) |
| 293 | goto end; | 293 | goto end; |
| 294 | 294 | ||
| 295 | if ((!SSL_CTX_load_verify_locations(tm_ctx, s_time_config.CAfile, | 295 | if ((!SSL_CTX_load_verify_locations(tm_ctx, cfg.CAfile, |
| 296 | s_time_config.CApath)) || | 296 | cfg.CApath)) || |
| 297 | (!SSL_CTX_set_default_verify_paths(tm_ctx))) { | 297 | (!SSL_CTX_set_default_verify_paths(tm_ctx))) { |
| 298 | /* | 298 | /* |
| 299 | * BIO_printf(bio_err,"error setting default verify | 299 | * BIO_printf(bio_err,"error setting default verify |
| @@ -304,9 +304,9 @@ s_time_main(int argc, char **argv) | |||
| 304 | } | 304 | } |
| 305 | 305 | ||
| 306 | /* Loop and time how long it takes to make connections */ | 306 | /* Loop and time how long it takes to make connections */ |
| 307 | if (s_time_config.perform & 1) { | 307 | if (cfg.perform & 1) { |
| 308 | printf("Collecting connection statistics for %lld seconds\n", | 308 | printf("Collecting connection statistics for %lld seconds\n", |
| 309 | (long long)s_time_config.maxtime); | 309 | (long long)cfg.maxtime); |
| 310 | if (benchmark(0)) | 310 | if (benchmark(0)) |
| 311 | goto end; | 311 | goto end; |
| 312 | } | 312 | } |
| @@ -314,7 +314,7 @@ s_time_main(int argc, char **argv) | |||
| 314 | * Now loop and time connections using the same session id over and | 314 | * Now loop and time connections using the same session id over and |
| 315 | * over | 315 | * over |
| 316 | */ | 316 | */ |
| 317 | if (s_time_config.perform & 2) { | 317 | if (cfg.perform & 2) { |
| 318 | printf("\n\nNow timing with session id reuse.\n"); | 318 | printf("\n\nNow timing with session id reuse.\n"); |
| 319 | if (benchmark(1)) | 319 | if (benchmark(1)) |
| 320 | goto end; | 320 | goto end; |
| @@ -348,7 +348,7 @@ run_test(SSL *scon) | |||
| 348 | 348 | ||
| 349 | if ((conn = BIO_new(BIO_s_connect())) == NULL) | 349 | if ((conn = BIO_new(BIO_s_connect())) == NULL) |
| 350 | return 0; | 350 | return 0; |
| 351 | BIO_set_conn_hostname(conn, s_time_config.host); | 351 | BIO_set_conn_hostname(conn, cfg.host); |
| 352 | SSL_set_connect_state(scon); | 352 | SSL_set_connect_state(scon); |
| 353 | SSL_set_bio(scon, conn, conn); | 353 | SSL_set_bio(scon, conn, conn); |
| 354 | for (;;) { | 354 | for (;;) { |
| @@ -372,9 +372,9 @@ run_test(SSL *scon) | |||
| 372 | ERR_print_errors(bio_err); | 372 | ERR_print_errors(bio_err); |
| 373 | return 0; | 373 | return 0; |
| 374 | } | 374 | } |
| 375 | if (s_time_config.www_path != NULL) { | 375 | if (cfg.www_path != NULL) { |
| 376 | retval = snprintf(buf, sizeof buf, | 376 | retval = snprintf(buf, sizeof buf, |
| 377 | "GET %s HTTP/1.0\r\n\r\n", s_time_config.www_path); | 377 | "GET %s HTTP/1.0\r\n\r\n", cfg.www_path); |
| 378 | if (retval < 0 || retval >= sizeof buf) { | 378 | if (retval < 0 || retval >= sizeof buf) { |
| 379 | fprintf(stderr, "URL too long\n"); | 379 | fprintf(stderr, "URL too long\n"); |
| 380 | return 0; | 380 | return 0; |
| @@ -384,7 +384,7 @@ run_test(SSL *scon) | |||
| 384 | while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) | 384 | while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) |
| 385 | bytes_read += i; | 385 | bytes_read += i; |
| 386 | } | 386 | } |
| 387 | if (s_time_config.no_shutdown) | 387 | if (cfg.no_shutdown) |
| 388 | SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | | 388 | SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | |
| 389 | SSL_RECEIVED_SHUTDOWN); | 389 | SSL_RECEIVED_SHUTDOWN); |
| 390 | else | 390 | else |
| @@ -436,7 +436,7 @@ benchmark(int reuse_session) | |||
| 436 | app_timer_user(TM_RESET); | 436 | app_timer_user(TM_RESET); |
| 437 | for (;;) { | 437 | for (;;) { |
| 438 | elapsed = app_timer_real(TM_GET); | 438 | elapsed = app_timer_real(TM_GET); |
| 439 | if (elapsed > s_time_config.maxtime) | 439 | if (elapsed > cfg.maxtime) |
| 440 | break; | 440 | break; |
| 441 | if (scon == NULL) { | 441 | if (scon == NULL) { |
| 442 | if ((scon = SSL_new(tm_ctx)) == NULL) | 442 | if ((scon = SSL_new(tm_ctx)) == NULL) |
diff --git a/src/usr.bin/openssl/sess_id.c b/src/usr.bin/openssl/sess_id.c index 4533cf15ca..c46da54244 100644 --- a/src/usr.bin/openssl/sess_id.c +++ b/src/usr.bin/openssl/sess_id.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: sess_id.c,v 1.11 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: sess_id.c,v 1.12 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -78,62 +78,62 @@ static struct { | |||
| 78 | char *outfile; | 78 | char *outfile; |
| 79 | int outformat; | 79 | int outformat; |
| 80 | int text; | 80 | int text; |
| 81 | } sess_id_config; | 81 | } cfg; |
| 82 | 82 | ||
| 83 | static const struct option sess_id_options[] = { | 83 | static const struct option sess_id_options[] = { |
| 84 | { | 84 | { |
| 85 | .name = "cert", | 85 | .name = "cert", |
| 86 | .desc = "Output certificate if present in session", | 86 | .desc = "Output certificate if present in session", |
| 87 | .type = OPTION_FLAG, | 87 | .type = OPTION_FLAG, |
| 88 | .opt.flag = &sess_id_config.cert, | 88 | .opt.flag = &cfg.cert, |
| 89 | }, | 89 | }, |
| 90 | { | 90 | { |
| 91 | .name = "context", | 91 | .name = "context", |
| 92 | .argname = "id", | 92 | .argname = "id", |
| 93 | .desc = "Set the session ID context for output", | 93 | .desc = "Set the session ID context for output", |
| 94 | .type = OPTION_ARG, | 94 | .type = OPTION_ARG, |
| 95 | .opt.arg = &sess_id_config.context, | 95 | .opt.arg = &cfg.context, |
| 96 | }, | 96 | }, |
| 97 | { | 97 | { |
| 98 | .name = "in", | 98 | .name = "in", |
| 99 | .argname = "file", | 99 | .argname = "file", |
| 100 | .desc = "Input file (default stdin)", | 100 | .desc = "Input file (default stdin)", |
| 101 | .type = OPTION_ARG, | 101 | .type = OPTION_ARG, |
| 102 | .opt.arg = &sess_id_config.infile, | 102 | .opt.arg = &cfg.infile, |
| 103 | }, | 103 | }, |
| 104 | { | 104 | { |
| 105 | .name = "inform", | 105 | .name = "inform", |
| 106 | .argname = "format", | 106 | .argname = "format", |
| 107 | .desc = "Input format (DER or PEM (default))", | 107 | .desc = "Input format (DER or PEM (default))", |
| 108 | .type = OPTION_ARG_FORMAT, | 108 | .type = OPTION_ARG_FORMAT, |
| 109 | .opt.value = &sess_id_config.informat, | 109 | .opt.value = &cfg.informat, |
| 110 | }, | 110 | }, |
| 111 | { | 111 | { |
| 112 | .name = "noout", | 112 | .name = "noout", |
| 113 | .desc = "Do not output the encoded session info", | 113 | .desc = "Do not output the encoded session info", |
| 114 | .type = OPTION_FLAG, | 114 | .type = OPTION_FLAG, |
| 115 | .opt.flag = &sess_id_config.noout, | 115 | .opt.flag = &cfg.noout, |
| 116 | }, | 116 | }, |
| 117 | { | 117 | { |
| 118 | .name = "out", | 118 | .name = "out", |
| 119 | .argname = "file", | 119 | .argname = "file", |
| 120 | .desc = "Output file (default stdout)", | 120 | .desc = "Output file (default stdout)", |
| 121 | .type = OPTION_ARG, | 121 | .type = OPTION_ARG, |
| 122 | .opt.arg = &sess_id_config.outfile, | 122 | .opt.arg = &cfg.outfile, |
| 123 | }, | 123 | }, |
| 124 | { | 124 | { |
| 125 | .name = "outform", | 125 | .name = "outform", |
| 126 | .argname = "format", | 126 | .argname = "format", |
| 127 | .desc = "Output format (DER or PEM (default))", | 127 | .desc = "Output format (DER or PEM (default))", |
| 128 | .type = OPTION_ARG_FORMAT, | 128 | .type = OPTION_ARG_FORMAT, |
| 129 | .opt.value = &sess_id_config.outformat, | 129 | .opt.value = &cfg.outformat, |
| 130 | }, | 130 | }, |
| 131 | { | 131 | { |
| 132 | .name = "text", | 132 | .name = "text", |
| 133 | .desc = "Print various public or private key components in" | 133 | .desc = "Print various public or private key components in" |
| 134 | " plain text", | 134 | " plain text", |
| 135 | .type = OPTION_FLAG, | 135 | .type = OPTION_FLAG, |
| 136 | .opt.flag = &sess_id_config.text, | 136 | .opt.flag = &cfg.text, |
| 137 | }, | 137 | }, |
| 138 | { NULL } | 138 | { NULL } |
| 139 | }; | 139 | }; |
| @@ -163,62 +163,62 @@ sess_id_main(int argc, char **argv) | |||
| 163 | exit(1); | 163 | exit(1); |
| 164 | } | 164 | } |
| 165 | 165 | ||
| 166 | memset(&sess_id_config, 0, sizeof(sess_id_config)); | 166 | memset(&cfg, 0, sizeof(cfg)); |
| 167 | 167 | ||
| 168 | sess_id_config.informat = FORMAT_PEM; | 168 | cfg.informat = FORMAT_PEM; |
| 169 | sess_id_config.outformat = FORMAT_PEM; | 169 | cfg.outformat = FORMAT_PEM; |
| 170 | 170 | ||
| 171 | if (options_parse(argc, argv, sess_id_options, NULL, NULL) != 0) { | 171 | if (options_parse(argc, argv, sess_id_options, NULL, NULL) != 0) { |
| 172 | sess_id_usage(); | 172 | sess_id_usage(); |
| 173 | return (1); | 173 | return (1); |
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | x = load_sess_id(sess_id_config.infile, sess_id_config.informat); | 176 | x = load_sess_id(cfg.infile, cfg.informat); |
| 177 | if (x == NULL) { | 177 | if (x == NULL) { |
| 178 | goto end; | 178 | goto end; |
| 179 | } | 179 | } |
| 180 | peer = SSL_SESSION_get0_peer(x); | 180 | peer = SSL_SESSION_get0_peer(x); |
| 181 | 181 | ||
| 182 | if (sess_id_config.context) { | 182 | if (cfg.context) { |
| 183 | size_t ctx_len = strlen(sess_id_config.context); | 183 | size_t ctx_len = strlen(cfg.context); |
| 184 | if (ctx_len > SSL_MAX_SID_CTX_LENGTH) { | 184 | if (ctx_len > SSL_MAX_SID_CTX_LENGTH) { |
| 185 | BIO_printf(bio_err, "Context too long\n"); | 185 | BIO_printf(bio_err, "Context too long\n"); |
| 186 | goto end; | 186 | goto end; |
| 187 | } | 187 | } |
| 188 | SSL_SESSION_set1_id_context(x, | 188 | SSL_SESSION_set1_id_context(x, |
| 189 | (unsigned char *)sess_id_config.context, ctx_len); | 189 | (unsigned char *)cfg.context, ctx_len); |
| 190 | } | 190 | } |
| 191 | 191 | ||
| 192 | if (!sess_id_config.noout || sess_id_config.text) { | 192 | if (!cfg.noout || cfg.text) { |
| 193 | out = BIO_new(BIO_s_file()); | 193 | out = BIO_new(BIO_s_file()); |
| 194 | if (out == NULL) { | 194 | if (out == NULL) { |
| 195 | ERR_print_errors(bio_err); | 195 | ERR_print_errors(bio_err); |
| 196 | goto end; | 196 | goto end; |
| 197 | } | 197 | } |
| 198 | if (sess_id_config.outfile == NULL) { | 198 | if (cfg.outfile == NULL) { |
| 199 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 199 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 200 | } else { | 200 | } else { |
| 201 | if (BIO_write_filename(out, sess_id_config.outfile) | 201 | if (BIO_write_filename(out, cfg.outfile) |
| 202 | <= 0) { | 202 | <= 0) { |
| 203 | perror(sess_id_config.outfile); | 203 | perror(cfg.outfile); |
| 204 | goto end; | 204 | goto end; |
| 205 | } | 205 | } |
| 206 | } | 206 | } |
| 207 | } | 207 | } |
| 208 | if (sess_id_config.text) { | 208 | if (cfg.text) { |
| 209 | SSL_SESSION_print(out, x); | 209 | SSL_SESSION_print(out, x); |
| 210 | 210 | ||
| 211 | if (sess_id_config.cert) { | 211 | if (cfg.cert) { |
| 212 | if (peer == NULL) | 212 | if (peer == NULL) |
| 213 | BIO_puts(out, "No certificate present\n"); | 213 | BIO_puts(out, "No certificate present\n"); |
| 214 | else | 214 | else |
| 215 | X509_print(out, peer); | 215 | X509_print(out, peer); |
| 216 | } | 216 | } |
| 217 | } | 217 | } |
| 218 | if (!sess_id_config.noout && !sess_id_config.cert) { | 218 | if (!cfg.noout && !cfg.cert) { |
| 219 | if (sess_id_config.outformat == FORMAT_ASN1) | 219 | if (cfg.outformat == FORMAT_ASN1) |
| 220 | i = i2d_SSL_SESSION_bio(out, x); | 220 | i = i2d_SSL_SESSION_bio(out, x); |
| 221 | else if (sess_id_config.outformat == FORMAT_PEM) | 221 | else if (cfg.outformat == FORMAT_PEM) |
| 222 | i = PEM_write_bio_SSL_SESSION(out, x); | 222 | i = PEM_write_bio_SSL_SESSION(out, x); |
| 223 | else { | 223 | else { |
| 224 | BIO_printf(bio_err, | 224 | BIO_printf(bio_err, |
| @@ -229,11 +229,11 @@ sess_id_main(int argc, char **argv) | |||
| 229 | BIO_printf(bio_err, "unable to write SSL_SESSION\n"); | 229 | BIO_printf(bio_err, "unable to write SSL_SESSION\n"); |
| 230 | goto end; | 230 | goto end; |
| 231 | } | 231 | } |
| 232 | } else if (!sess_id_config.noout && (peer != NULL)) { | 232 | } else if (!cfg.noout && (peer != NULL)) { |
| 233 | /* just print the certificate */ | 233 | /* just print the certificate */ |
| 234 | if (sess_id_config.outformat == FORMAT_ASN1) | 234 | if (cfg.outformat == FORMAT_ASN1) |
| 235 | i = (int) i2d_X509_bio(out, peer); | 235 | i = (int) i2d_X509_bio(out, peer); |
| 236 | else if (sess_id_config.outformat == FORMAT_PEM) | 236 | else if (cfg.outformat == FORMAT_PEM) |
| 237 | i = PEM_write_bio_X509(out, peer); | 237 | i = PEM_write_bio_X509(out, peer); |
| 238 | else { | 238 | else { |
| 239 | BIO_printf(bio_err, | 239 | BIO_printf(bio_err, |
diff --git a/src/usr.bin/openssl/smime.c b/src/usr.bin/openssl/smime.c index 37375c1600..e54c8d0b84 100644 --- a/src/usr.bin/openssl/smime.c +++ b/src/usr.bin/openssl/smime.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: smime.c,v 1.18 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: smime.c,v 1.19 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project. | 3 | * project. |
| 4 | */ | 4 | */ |
| @@ -107,7 +107,7 @@ static struct { | |||
| 107 | char *subject; | 107 | char *subject; |
| 108 | char *to; | 108 | char *to; |
| 109 | X509_VERIFY_PARAM *vpm; | 109 | X509_VERIFY_PARAM *vpm; |
| 110 | } smime_config; | 110 | } cfg; |
| 111 | 111 | ||
| 112 | static const EVP_CIPHER * | 112 | static const EVP_CIPHER * |
| 113 | get_cipher_by_name(char *name) | 113 | get_cipher_by_name(char *name) |
| @@ -156,8 +156,8 @@ smime_opt_cipher(int argc, char **argv, int *argsused) | |||
| 156 | if (*name++ != '-') | 156 | if (*name++ != '-') |
| 157 | return (1); | 157 | return (1); |
| 158 | 158 | ||
| 159 | if ((smime_config.cipher = get_cipher_by_name(name)) == NULL) | 159 | if ((cfg.cipher = get_cipher_by_name(name)) == NULL) |
| 160 | if ((smime_config.cipher = EVP_get_cipherbyname(name)) == NULL) | 160 | if ((cfg.cipher = EVP_get_cipherbyname(name)) == NULL) |
| 161 | return (1); | 161 | return (1); |
| 162 | 162 | ||
| 163 | *argsused = 1; | 163 | *argsused = 1; |
| @@ -167,41 +167,41 @@ smime_opt_cipher(int argc, char **argv, int *argsused) | |||
| 167 | static int | 167 | static int |
| 168 | smime_opt_inkey(char *arg) | 168 | smime_opt_inkey(char *arg) |
| 169 | { | 169 | { |
| 170 | if (smime_config.keyfile == NULL) { | 170 | if (cfg.keyfile == NULL) { |
| 171 | smime_config.keyfile = arg; | 171 | cfg.keyfile = arg; |
| 172 | return (0); | 172 | return (0); |
| 173 | } | 173 | } |
| 174 | 174 | ||
| 175 | if (smime_config.signerfile == NULL) { | 175 | if (cfg.signerfile == NULL) { |
| 176 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); | 176 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); |
| 177 | return (1); | 177 | return (1); |
| 178 | } | 178 | } |
| 179 | 179 | ||
| 180 | if (smime_config.sksigners == NULL) { | 180 | if (cfg.sksigners == NULL) { |
| 181 | if ((smime_config.sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | 181 | if ((cfg.sksigners = sk_OPENSSL_STRING_new_null()) == NULL) |
| 182 | return (1); | 182 | return (1); |
| 183 | } | 183 | } |
| 184 | if (!sk_OPENSSL_STRING_push(smime_config.sksigners, | 184 | if (!sk_OPENSSL_STRING_push(cfg.sksigners, |
| 185 | smime_config.signerfile)) | 185 | cfg.signerfile)) |
| 186 | return (1); | 186 | return (1); |
| 187 | 187 | ||
| 188 | smime_config.signerfile = NULL; | 188 | cfg.signerfile = NULL; |
| 189 | 189 | ||
| 190 | if (smime_config.skkeys == NULL) { | 190 | if (cfg.skkeys == NULL) { |
| 191 | if ((smime_config.skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | 191 | if ((cfg.skkeys = sk_OPENSSL_STRING_new_null()) == NULL) |
| 192 | return (1); | 192 | return (1); |
| 193 | } | 193 | } |
| 194 | if (!sk_OPENSSL_STRING_push(smime_config.skkeys, smime_config.keyfile)) | 194 | if (!sk_OPENSSL_STRING_push(cfg.skkeys, cfg.keyfile)) |
| 195 | return (1); | 195 | return (1); |
| 196 | 196 | ||
| 197 | smime_config.keyfile = arg; | 197 | cfg.keyfile = arg; |
| 198 | return (0); | 198 | return (0); |
| 199 | } | 199 | } |
| 200 | 200 | ||
| 201 | static int | 201 | static int |
| 202 | smime_opt_md(char *arg) | 202 | smime_opt_md(char *arg) |
| 203 | { | 203 | { |
| 204 | if ((smime_config.sign_md = EVP_get_digestbyname(arg)) == NULL) { | 204 | if ((cfg.sign_md = EVP_get_digestbyname(arg)) == NULL) { |
| 205 | BIO_printf(bio_err, "Unknown digest %s\n", arg); | 205 | BIO_printf(bio_err, "Unknown digest %s\n", arg); |
| 206 | return (1); | 206 | return (1); |
| 207 | } | 207 | } |
| @@ -211,32 +211,32 @@ smime_opt_md(char *arg) | |||
| 211 | static int | 211 | static int |
| 212 | smime_opt_signer(char *arg) | 212 | smime_opt_signer(char *arg) |
| 213 | { | 213 | { |
| 214 | if (smime_config.signerfile == NULL) { | 214 | if (cfg.signerfile == NULL) { |
| 215 | smime_config.signerfile = arg; | 215 | cfg.signerfile = arg; |
| 216 | return (0); | 216 | return (0); |
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | if (smime_config.sksigners == NULL) { | 219 | if (cfg.sksigners == NULL) { |
| 220 | if ((smime_config.sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | 220 | if ((cfg.sksigners = sk_OPENSSL_STRING_new_null()) == NULL) |
| 221 | return (1); | 221 | return (1); |
| 222 | } | 222 | } |
| 223 | if (!sk_OPENSSL_STRING_push(smime_config.sksigners, | 223 | if (!sk_OPENSSL_STRING_push(cfg.sksigners, |
| 224 | smime_config.signerfile)) | 224 | cfg.signerfile)) |
| 225 | return (1); | 225 | return (1); |
| 226 | 226 | ||
| 227 | if (smime_config.keyfile == NULL) | 227 | if (cfg.keyfile == NULL) |
| 228 | smime_config.keyfile = smime_config.signerfile; | 228 | cfg.keyfile = cfg.signerfile; |
| 229 | 229 | ||
| 230 | if (smime_config.skkeys == NULL) { | 230 | if (cfg.skkeys == NULL) { |
| 231 | if ((smime_config.skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | 231 | if ((cfg.skkeys = sk_OPENSSL_STRING_new_null()) == NULL) |
| 232 | return (1); | 232 | return (1); |
| 233 | } | 233 | } |
| 234 | if (!sk_OPENSSL_STRING_push(smime_config.skkeys, smime_config.keyfile)) | 234 | if (!sk_OPENSSL_STRING_push(cfg.skkeys, cfg.keyfile)) |
| 235 | return (1); | 235 | return (1); |
| 236 | 236 | ||
| 237 | smime_config.keyfile = NULL; | 237 | cfg.keyfile = NULL; |
| 238 | 238 | ||
| 239 | smime_config.signerfile = arg; | 239 | cfg.signerfile = arg; |
| 240 | return (0); | 240 | return (0); |
| 241 | } | 241 | } |
| 242 | 242 | ||
| @@ -246,7 +246,7 @@ smime_opt_verify_param(int argc, char **argv, int *argsused) | |||
| 246 | int oargc = argc; | 246 | int oargc = argc; |
| 247 | int badarg = 0; | 247 | int badarg = 0; |
| 248 | 248 | ||
| 249 | if (!args_verify(&argv, &argc, &badarg, bio_err, &smime_config.vpm)) | 249 | if (!args_verify(&argv, &argc, &badarg, bio_err, &cfg.vpm)) |
| 250 | return (1); | 250 | return (1); |
| 251 | if (badarg) | 251 | if (badarg) |
| 252 | return (1); | 252 | return (1); |
| @@ -336,20 +336,20 @@ static const struct option smime_options[] = { | |||
| 336 | .argname = "file", | 336 | .argname = "file", |
| 337 | .desc = "Certificate Authority file", | 337 | .desc = "Certificate Authority file", |
| 338 | .type = OPTION_ARG, | 338 | .type = OPTION_ARG, |
| 339 | .opt.arg = &smime_config.CAfile, | 339 | .opt.arg = &cfg.CAfile, |
| 340 | }, | 340 | }, |
| 341 | { | 341 | { |
| 342 | .name = "CApath", | 342 | .name = "CApath", |
| 343 | .argname = "path", | 343 | .argname = "path", |
| 344 | .desc = "Certificate Authority path", | 344 | .desc = "Certificate Authority path", |
| 345 | .type = OPTION_ARG, | 345 | .type = OPTION_ARG, |
| 346 | .opt.arg = &smime_config.CApath, | 346 | .opt.arg = &cfg.CApath, |
| 347 | }, | 347 | }, |
| 348 | { | 348 | { |
| 349 | .name = "binary", | 349 | .name = "binary", |
| 350 | .desc = "Do not translate message to text", | 350 | .desc = "Do not translate message to text", |
| 351 | .type = OPTION_VALUE_OR, | 351 | .type = OPTION_VALUE_OR, |
| 352 | .opt.value = &smime_config.flags, | 352 | .opt.value = &cfg.flags, |
| 353 | .value = PKCS7_BINARY, | 353 | .value = PKCS7_BINARY, |
| 354 | }, | 354 | }, |
| 355 | { | 355 | { |
| @@ -357,34 +357,34 @@ static const struct option smime_options[] = { | |||
| 357 | .argname = "file", | 357 | .argname = "file", |
| 358 | .desc = "Other certificates file", | 358 | .desc = "Other certificates file", |
| 359 | .type = OPTION_ARG, | 359 | .type = OPTION_ARG, |
| 360 | .opt.arg = &smime_config.certfile, | 360 | .opt.arg = &cfg.certfile, |
| 361 | }, | 361 | }, |
| 362 | { | 362 | { |
| 363 | .name = "content", | 363 | .name = "content", |
| 364 | .argname = "file", | 364 | .argname = "file", |
| 365 | .desc = "Supply or override content for detached signature", | 365 | .desc = "Supply or override content for detached signature", |
| 366 | .type = OPTION_ARG, | 366 | .type = OPTION_ARG, |
| 367 | .opt.arg = &smime_config.contfile, | 367 | .opt.arg = &cfg.contfile, |
| 368 | }, | 368 | }, |
| 369 | { | 369 | { |
| 370 | .name = "crlfeol", | 370 | .name = "crlfeol", |
| 371 | .desc = "Use CRLF as EOL termination instead of CR only", | 371 | .desc = "Use CRLF as EOL termination instead of CR only", |
| 372 | .type = OPTION_VALUE_OR, | 372 | .type = OPTION_VALUE_OR, |
| 373 | .opt.value = &smime_config.flags, | 373 | .opt.value = &cfg.flags, |
| 374 | .value = PKCS7_CRLFEOL, | 374 | .value = PKCS7_CRLFEOL, |
| 375 | }, | 375 | }, |
| 376 | { | 376 | { |
| 377 | .name = "decrypt", | 377 | .name = "decrypt", |
| 378 | .desc = "Decrypt encrypted message", | 378 | .desc = "Decrypt encrypted message", |
| 379 | .type = OPTION_VALUE, | 379 | .type = OPTION_VALUE, |
| 380 | .opt.value = &smime_config.operation, | 380 | .opt.value = &cfg.operation, |
| 381 | .value = SMIME_DECRYPT, | 381 | .value = SMIME_DECRYPT, |
| 382 | }, | 382 | }, |
| 383 | { | 383 | { |
| 384 | .name = "encrypt", | 384 | .name = "encrypt", |
| 385 | .desc = "Encrypt message", | 385 | .desc = "Encrypt message", |
| 386 | .type = OPTION_VALUE, | 386 | .type = OPTION_VALUE, |
| 387 | .opt.value = &smime_config.operation, | 387 | .opt.value = &cfg.operation, |
| 388 | .value = SMIME_ENCRYPT, | 388 | .value = SMIME_ENCRYPT, |
| 389 | }, | 389 | }, |
| 390 | { | 390 | { |
| @@ -392,20 +392,20 @@ static const struct option smime_options[] = { | |||
| 392 | .argname = "addr", | 392 | .argname = "addr", |
| 393 | .desc = "From address", | 393 | .desc = "From address", |
| 394 | .type = OPTION_ARG, | 394 | .type = OPTION_ARG, |
| 395 | .opt.arg = &smime_config.from, | 395 | .opt.arg = &cfg.from, |
| 396 | }, | 396 | }, |
| 397 | { | 397 | { |
| 398 | .name = "in", | 398 | .name = "in", |
| 399 | .argname = "file", | 399 | .argname = "file", |
| 400 | .desc = "Input file", | 400 | .desc = "Input file", |
| 401 | .type = OPTION_ARG, | 401 | .type = OPTION_ARG, |
| 402 | .opt.arg = &smime_config.infile, | 402 | .opt.arg = &cfg.infile, |
| 403 | }, | 403 | }, |
| 404 | { | 404 | { |
| 405 | .name = "indef", | 405 | .name = "indef", |
| 406 | .desc = "Same as -stream", | 406 | .desc = "Same as -stream", |
| 407 | .type = OPTION_VALUE, | 407 | .type = OPTION_VALUE, |
| 408 | .opt.value = &smime_config.indef, | 408 | .opt.value = &cfg.indef, |
| 409 | .value = 1, | 409 | .value = 1, |
| 410 | }, | 410 | }, |
| 411 | { | 411 | { |
| @@ -413,7 +413,7 @@ static const struct option smime_options[] = { | |||
| 413 | .argname = "fmt", | 413 | .argname = "fmt", |
| 414 | .desc = "Input format (DER, PEM or SMIME (default))", | 414 | .desc = "Input format (DER, PEM or SMIME (default))", |
| 415 | .type = OPTION_ARG_FORMAT, | 415 | .type = OPTION_ARG_FORMAT, |
| 416 | .opt.value = &smime_config.informat, | 416 | .opt.value = &cfg.informat, |
| 417 | }, | 417 | }, |
| 418 | { | 418 | { |
| 419 | .name = "inkey", | 419 | .name = "inkey", |
| @@ -427,7 +427,7 @@ static const struct option smime_options[] = { | |||
| 427 | .argname = "fmt", | 427 | .argname = "fmt", |
| 428 | .desc = "Input key format (DER or PEM (default))", | 428 | .desc = "Input key format (DER or PEM (default))", |
| 429 | .type = OPTION_ARG_FORMAT, | 429 | .type = OPTION_ARG_FORMAT, |
| 430 | .opt.value = &smime_config.keyform, | 430 | .opt.value = &cfg.keyform, |
| 431 | }, | 431 | }, |
| 432 | { | 432 | { |
| 433 | .name = "md", | 433 | .name = "md", |
| @@ -440,70 +440,70 @@ static const struct option smime_options[] = { | |||
| 440 | .name = "noattr", | 440 | .name = "noattr", |
| 441 | .desc = "Do not include any signed attributes", | 441 | .desc = "Do not include any signed attributes", |
| 442 | .type = OPTION_VALUE_OR, | 442 | .type = OPTION_VALUE_OR, |
| 443 | .opt.value = &smime_config.flags, | 443 | .opt.value = &cfg.flags, |
| 444 | .value = PKCS7_NOATTR, | 444 | .value = PKCS7_NOATTR, |
| 445 | }, | 445 | }, |
| 446 | { | 446 | { |
| 447 | .name = "nocerts", | 447 | .name = "nocerts", |
| 448 | .desc = "Do not include signer's certificate when signing", | 448 | .desc = "Do not include signer's certificate when signing", |
| 449 | .type = OPTION_VALUE_OR, | 449 | .type = OPTION_VALUE_OR, |
| 450 | .opt.value = &smime_config.flags, | 450 | .opt.value = &cfg.flags, |
| 451 | .value = PKCS7_NOCERTS, | 451 | .value = PKCS7_NOCERTS, |
| 452 | }, | 452 | }, |
| 453 | { | 453 | { |
| 454 | .name = "nochain", | 454 | .name = "nochain", |
| 455 | .desc = "Do not chain verification of signer's certificates", | 455 | .desc = "Do not chain verification of signer's certificates", |
| 456 | .type = OPTION_VALUE_OR, | 456 | .type = OPTION_VALUE_OR, |
| 457 | .opt.value = &smime_config.flags, | 457 | .opt.value = &cfg.flags, |
| 458 | .value = PKCS7_NOCHAIN, | 458 | .value = PKCS7_NOCHAIN, |
| 459 | }, | 459 | }, |
| 460 | { | 460 | { |
| 461 | .name = "nodetach", | 461 | .name = "nodetach", |
| 462 | .desc = "Use opaque signing", | 462 | .desc = "Use opaque signing", |
| 463 | .type = OPTION_VALUE_AND, | 463 | .type = OPTION_VALUE_AND, |
| 464 | .opt.value = &smime_config.flags, | 464 | .opt.value = &cfg.flags, |
| 465 | .value = ~PKCS7_DETACHED, | 465 | .value = ~PKCS7_DETACHED, |
| 466 | }, | 466 | }, |
| 467 | { | 467 | { |
| 468 | .name = "noindef", | 468 | .name = "noindef", |
| 469 | .desc = "Disable streaming I/O", | 469 | .desc = "Disable streaming I/O", |
| 470 | .type = OPTION_VALUE, | 470 | .type = OPTION_VALUE, |
| 471 | .opt.value = &smime_config.indef, | 471 | .opt.value = &cfg.indef, |
| 472 | .value = 0, | 472 | .value = 0, |
| 473 | }, | 473 | }, |
| 474 | { | 474 | { |
| 475 | .name = "nointern", | 475 | .name = "nointern", |
| 476 | .desc = "Do not search certificates in message for signer", | 476 | .desc = "Do not search certificates in message for signer", |
| 477 | .type = OPTION_VALUE_OR, | 477 | .type = OPTION_VALUE_OR, |
| 478 | .opt.value = &smime_config.flags, | 478 | .opt.value = &cfg.flags, |
| 479 | .value = PKCS7_NOINTERN, | 479 | .value = PKCS7_NOINTERN, |
| 480 | }, | 480 | }, |
| 481 | { | 481 | { |
| 482 | .name = "nooldmime", | 482 | .name = "nooldmime", |
| 483 | .desc = "Output old S/MIME content type", | 483 | .desc = "Output old S/MIME content type", |
| 484 | .type = OPTION_VALUE_OR, | 484 | .type = OPTION_VALUE_OR, |
| 485 | .opt.value = &smime_config.flags, | 485 | .opt.value = &cfg.flags, |
| 486 | .value = PKCS7_NOOLDMIMETYPE, | 486 | .value = PKCS7_NOOLDMIMETYPE, |
| 487 | }, | 487 | }, |
| 488 | { | 488 | { |
| 489 | .name = "nosigs", | 489 | .name = "nosigs", |
| 490 | .desc = "Do not verify message signature", | 490 | .desc = "Do not verify message signature", |
| 491 | .type = OPTION_VALUE_OR, | 491 | .type = OPTION_VALUE_OR, |
| 492 | .opt.value = &smime_config.flags, | 492 | .opt.value = &cfg.flags, |
| 493 | .value = PKCS7_NOSIGS, | 493 | .value = PKCS7_NOSIGS, |
| 494 | }, | 494 | }, |
| 495 | { | 495 | { |
| 496 | .name = "nosmimecap", | 496 | .name = "nosmimecap", |
| 497 | .desc = "Omit the SMIMECapabilities attribute", | 497 | .desc = "Omit the SMIMECapabilities attribute", |
| 498 | .type = OPTION_VALUE_OR, | 498 | .type = OPTION_VALUE_OR, |
| 499 | .opt.value = &smime_config.flags, | 499 | .opt.value = &cfg.flags, |
| 500 | .value = PKCS7_NOSMIMECAP, | 500 | .value = PKCS7_NOSMIMECAP, |
| 501 | }, | 501 | }, |
| 502 | { | 502 | { |
| 503 | .name = "noverify", | 503 | .name = "noverify", |
| 504 | .desc = "Do not verify signer's certificate", | 504 | .desc = "Do not verify signer's certificate", |
| 505 | .type = OPTION_VALUE_OR, | 505 | .type = OPTION_VALUE_OR, |
| 506 | .opt.value = &smime_config.flags, | 506 | .opt.value = &cfg.flags, |
| 507 | .value = PKCS7_NOVERIFY, | 507 | .value = PKCS7_NOVERIFY, |
| 508 | }, | 508 | }, |
| 509 | { | 509 | { |
| @@ -511,27 +511,27 @@ static const struct option smime_options[] = { | |||
| 511 | .argname = "file", | 511 | .argname = "file", |
| 512 | .desc = "Output file", | 512 | .desc = "Output file", |
| 513 | .type = OPTION_ARG, | 513 | .type = OPTION_ARG, |
| 514 | .opt.arg = &smime_config.outfile, | 514 | .opt.arg = &cfg.outfile, |
| 515 | }, | 515 | }, |
| 516 | { | 516 | { |
| 517 | .name = "outform", | 517 | .name = "outform", |
| 518 | .argname = "fmt", | 518 | .argname = "fmt", |
| 519 | .desc = "Output format (DER, PEM or SMIME (default))", | 519 | .desc = "Output format (DER, PEM or SMIME (default))", |
| 520 | .type = OPTION_ARG_FORMAT, | 520 | .type = OPTION_ARG_FORMAT, |
| 521 | .opt.value = &smime_config.outformat, | 521 | .opt.value = &cfg.outformat, |
| 522 | }, | 522 | }, |
| 523 | { | 523 | { |
| 524 | .name = "passin", | 524 | .name = "passin", |
| 525 | .argname = "src", | 525 | .argname = "src", |
| 526 | .desc = "Private key password source", | 526 | .desc = "Private key password source", |
| 527 | .type = OPTION_ARG, | 527 | .type = OPTION_ARG, |
| 528 | .opt.arg = &smime_config.passargin, | 528 | .opt.arg = &cfg.passargin, |
| 529 | }, | 529 | }, |
| 530 | { | 530 | { |
| 531 | .name = "pk7out", | 531 | .name = "pk7out", |
| 532 | .desc = "Output PKCS#7 structure", | 532 | .desc = "Output PKCS#7 structure", |
| 533 | .type = OPTION_VALUE, | 533 | .type = OPTION_VALUE, |
| 534 | .opt.value = &smime_config.operation, | 534 | .opt.value = &cfg.operation, |
| 535 | .value = SMIME_PK7OUT, | 535 | .value = SMIME_PK7OUT, |
| 536 | }, | 536 | }, |
| 537 | { | 537 | { |
| @@ -539,20 +539,20 @@ static const struct option smime_options[] = { | |||
| 539 | .argname = "file", | 539 | .argname = "file", |
| 540 | .desc = "Recipient certificate file for decryption", | 540 | .desc = "Recipient certificate file for decryption", |
| 541 | .type = OPTION_ARG, | 541 | .type = OPTION_ARG, |
| 542 | .opt.arg = &smime_config.recipfile, | 542 | .opt.arg = &cfg.recipfile, |
| 543 | }, | 543 | }, |
| 544 | { | 544 | { |
| 545 | .name = "resign", | 545 | .name = "resign", |
| 546 | .desc = "Resign a signed message", | 546 | .desc = "Resign a signed message", |
| 547 | .type = OPTION_VALUE, | 547 | .type = OPTION_VALUE, |
| 548 | .opt.value = &smime_config.operation, | 548 | .opt.value = &cfg.operation, |
| 549 | .value = SMIME_RESIGN, | 549 | .value = SMIME_RESIGN, |
| 550 | }, | 550 | }, |
| 551 | { | 551 | { |
| 552 | .name = "sign", | 552 | .name = "sign", |
| 553 | .desc = "Sign message", | 553 | .desc = "Sign message", |
| 554 | .type = OPTION_VALUE, | 554 | .type = OPTION_VALUE, |
| 555 | .opt.value = &smime_config.operation, | 555 | .opt.value = &cfg.operation, |
| 556 | .value = SMIME_SIGN, | 556 | .value = SMIME_SIGN, |
| 557 | }, | 557 | }, |
| 558 | { | 558 | { |
| @@ -566,7 +566,7 @@ static const struct option smime_options[] = { | |||
| 566 | .name = "stream", | 566 | .name = "stream", |
| 567 | .desc = "Enable streaming I/O", | 567 | .desc = "Enable streaming I/O", |
| 568 | .type = OPTION_VALUE, | 568 | .type = OPTION_VALUE, |
| 569 | .opt.value = &smime_config.indef, | 569 | .opt.value = &cfg.indef, |
| 570 | .value = 1, | 570 | .value = 1, |
| 571 | }, | 571 | }, |
| 572 | { | 572 | { |
| @@ -574,13 +574,13 @@ static const struct option smime_options[] = { | |||
| 574 | .argname = "s", | 574 | .argname = "s", |
| 575 | .desc = "Subject", | 575 | .desc = "Subject", |
| 576 | .type = OPTION_ARG, | 576 | .type = OPTION_ARG, |
| 577 | .opt.arg = &smime_config.subject, | 577 | .opt.arg = &cfg.subject, |
| 578 | }, | 578 | }, |
| 579 | { | 579 | { |
| 580 | .name = "text", | 580 | .name = "text", |
| 581 | .desc = "Include or delete text MIME headers", | 581 | .desc = "Include or delete text MIME headers", |
| 582 | .type = OPTION_VALUE_OR, | 582 | .type = OPTION_VALUE_OR, |
| 583 | .opt.value = &smime_config.flags, | 583 | .opt.value = &cfg.flags, |
| 584 | .value = PKCS7_TEXT, | 584 | .value = PKCS7_TEXT, |
| 585 | }, | 585 | }, |
| 586 | { | 586 | { |
| @@ -588,13 +588,13 @@ static const struct option smime_options[] = { | |||
| 588 | .argname = "addr", | 588 | .argname = "addr", |
| 589 | .desc = "To address", | 589 | .desc = "To address", |
| 590 | .type = OPTION_ARG, | 590 | .type = OPTION_ARG, |
| 591 | .opt.arg = &smime_config.to, | 591 | .opt.arg = &cfg.to, |
| 592 | }, | 592 | }, |
| 593 | { | 593 | { |
| 594 | .name = "verify", | 594 | .name = "verify", |
| 595 | .desc = "Verify signed message", | 595 | .desc = "Verify signed message", |
| 596 | .type = OPTION_VALUE, | 596 | .type = OPTION_VALUE, |
| 597 | .opt.value = &smime_config.operation, | 597 | .opt.value = &cfg.operation, |
| 598 | .value = SMIME_VERIFY, | 598 | .value = SMIME_VERIFY, |
| 599 | }, | 599 | }, |
| 600 | { | 600 | { |
| @@ -727,70 +727,70 @@ smime_main(int argc, char **argv) | |||
| 727 | exit(1); | 727 | exit(1); |
| 728 | } | 728 | } |
| 729 | 729 | ||
| 730 | memset(&smime_config, 0, sizeof(smime_config)); | 730 | memset(&cfg, 0, sizeof(cfg)); |
| 731 | smime_config.flags = PKCS7_DETACHED; | 731 | cfg.flags = PKCS7_DETACHED; |
| 732 | smime_config.informat = FORMAT_SMIME; | 732 | cfg.informat = FORMAT_SMIME; |
| 733 | smime_config.outformat = FORMAT_SMIME; | 733 | cfg.outformat = FORMAT_SMIME; |
| 734 | smime_config.keyform = FORMAT_PEM; | 734 | cfg.keyform = FORMAT_PEM; |
| 735 | if (options_parse(argc, argv, smime_options, NULL, &argsused) != 0) { | 735 | if (options_parse(argc, argv, smime_options, NULL, &argsused) != 0) { |
| 736 | goto argerr; | 736 | goto argerr; |
| 737 | } | 737 | } |
| 738 | args = argv + argsused; | 738 | args = argv + argsused; |
| 739 | ret = 1; | 739 | ret = 1; |
| 740 | 740 | ||
| 741 | if (!(smime_config.operation & SMIME_SIGNERS) && | 741 | if (!(cfg.operation & SMIME_SIGNERS) && |
| 742 | (smime_config.skkeys != NULL || smime_config.sksigners != NULL)) { | 742 | (cfg.skkeys != NULL || cfg.sksigners != NULL)) { |
| 743 | BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); | 743 | BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); |
| 744 | goto argerr; | 744 | goto argerr; |
| 745 | } | 745 | } |
| 746 | if (smime_config.operation & SMIME_SIGNERS) { | 746 | if (cfg.operation & SMIME_SIGNERS) { |
| 747 | /* Check to see if any final signer needs to be appended */ | 747 | /* Check to see if any final signer needs to be appended */ |
| 748 | if (smime_config.keyfile != NULL && | 748 | if (cfg.keyfile != NULL && |
| 749 | smime_config.signerfile == NULL) { | 749 | cfg.signerfile == NULL) { |
| 750 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); | 750 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); |
| 751 | goto argerr; | 751 | goto argerr; |
| 752 | } | 752 | } |
| 753 | if (smime_config.signerfile != NULL) { | 753 | if (cfg.signerfile != NULL) { |
| 754 | if (smime_config.sksigners == NULL) { | 754 | if (cfg.sksigners == NULL) { |
| 755 | if ((smime_config.sksigners = | 755 | if ((cfg.sksigners = |
| 756 | sk_OPENSSL_STRING_new_null()) == NULL) | 756 | sk_OPENSSL_STRING_new_null()) == NULL) |
| 757 | goto end; | 757 | goto end; |
| 758 | } | 758 | } |
| 759 | if (!sk_OPENSSL_STRING_push(smime_config.sksigners, | 759 | if (!sk_OPENSSL_STRING_push(cfg.sksigners, |
| 760 | smime_config.signerfile)) | 760 | cfg.signerfile)) |
| 761 | goto end; | 761 | goto end; |
| 762 | if (smime_config.skkeys == NULL) { | 762 | if (cfg.skkeys == NULL) { |
| 763 | if ((smime_config.skkeys = | 763 | if ((cfg.skkeys = |
| 764 | sk_OPENSSL_STRING_new_null()) == NULL) | 764 | sk_OPENSSL_STRING_new_null()) == NULL) |
| 765 | goto end; | 765 | goto end; |
| 766 | } | 766 | } |
| 767 | if (smime_config.keyfile == NULL) | 767 | if (cfg.keyfile == NULL) |
| 768 | smime_config.keyfile = smime_config.signerfile; | 768 | cfg.keyfile = cfg.signerfile; |
| 769 | if (!sk_OPENSSL_STRING_push(smime_config.skkeys, | 769 | if (!sk_OPENSSL_STRING_push(cfg.skkeys, |
| 770 | smime_config.keyfile)) | 770 | cfg.keyfile)) |
| 771 | goto end; | 771 | goto end; |
| 772 | } | 772 | } |
| 773 | if (smime_config.sksigners == NULL) { | 773 | if (cfg.sksigners == NULL) { |
| 774 | BIO_printf(bio_err, | 774 | BIO_printf(bio_err, |
| 775 | "No signer certificate specified\n"); | 775 | "No signer certificate specified\n"); |
| 776 | badarg = 1; | 776 | badarg = 1; |
| 777 | } | 777 | } |
| 778 | smime_config.signerfile = NULL; | 778 | cfg.signerfile = NULL; |
| 779 | smime_config.keyfile = NULL; | 779 | cfg.keyfile = NULL; |
| 780 | } else if (smime_config.operation == SMIME_DECRYPT) { | 780 | } else if (cfg.operation == SMIME_DECRYPT) { |
| 781 | if (smime_config.recipfile == NULL && | 781 | if (cfg.recipfile == NULL && |
| 782 | smime_config.keyfile == NULL) { | 782 | cfg.keyfile == NULL) { |
| 783 | BIO_printf(bio_err, | 783 | BIO_printf(bio_err, |
| 784 | "No recipient certificate or key specified\n"); | 784 | "No recipient certificate or key specified\n"); |
| 785 | badarg = 1; | 785 | badarg = 1; |
| 786 | } | 786 | } |
| 787 | } else if (smime_config.operation == SMIME_ENCRYPT) { | 787 | } else if (cfg.operation == SMIME_ENCRYPT) { |
| 788 | if (*args == NULL) { | 788 | if (*args == NULL) { |
| 789 | BIO_printf(bio_err, | 789 | BIO_printf(bio_err, |
| 790 | "No recipient(s) certificate(s) specified\n"); | 790 | "No recipient(s) certificate(s) specified\n"); |
| 791 | badarg = 1; | 791 | badarg = 1; |
| 792 | } | 792 | } |
| 793 | } else if (!smime_config.operation) { | 793 | } else if (!cfg.operation) { |
| 794 | badarg = 1; | 794 | badarg = 1; |
| 795 | } | 795 | } |
| 796 | 796 | ||
| @@ -800,35 +800,35 @@ smime_main(int argc, char **argv) | |||
| 800 | goto end; | 800 | goto end; |
| 801 | } | 801 | } |
| 802 | 802 | ||
| 803 | if (!app_passwd(bio_err, smime_config.passargin, NULL, &passin, NULL)) { | 803 | if (!app_passwd(bio_err, cfg.passargin, NULL, &passin, NULL)) { |
| 804 | BIO_printf(bio_err, "Error getting password\n"); | 804 | BIO_printf(bio_err, "Error getting password\n"); |
| 805 | goto end; | 805 | goto end; |
| 806 | } | 806 | } |
| 807 | ret = 2; | 807 | ret = 2; |
| 808 | 808 | ||
| 809 | if (!(smime_config.operation & SMIME_SIGNERS)) | 809 | if (!(cfg.operation & SMIME_SIGNERS)) |
| 810 | smime_config.flags &= ~PKCS7_DETACHED; | 810 | cfg.flags &= ~PKCS7_DETACHED; |
| 811 | 811 | ||
| 812 | if (smime_config.operation & SMIME_OP) { | 812 | if (cfg.operation & SMIME_OP) { |
| 813 | if (smime_config.outformat == FORMAT_ASN1) | 813 | if (cfg.outformat == FORMAT_ASN1) |
| 814 | outmode = "wb"; | 814 | outmode = "wb"; |
| 815 | } else { | 815 | } else { |
| 816 | if (smime_config.flags & PKCS7_BINARY) | 816 | if (cfg.flags & PKCS7_BINARY) |
| 817 | outmode = "wb"; | 817 | outmode = "wb"; |
| 818 | } | 818 | } |
| 819 | 819 | ||
| 820 | if (smime_config.operation & SMIME_IP) { | 820 | if (cfg.operation & SMIME_IP) { |
| 821 | if (smime_config.informat == FORMAT_ASN1) | 821 | if (cfg.informat == FORMAT_ASN1) |
| 822 | inmode = "rb"; | 822 | inmode = "rb"; |
| 823 | } else { | 823 | } else { |
| 824 | if (smime_config.flags & PKCS7_BINARY) | 824 | if (cfg.flags & PKCS7_BINARY) |
| 825 | inmode = "rb"; | 825 | inmode = "rb"; |
| 826 | } | 826 | } |
| 827 | 827 | ||
| 828 | if (smime_config.operation == SMIME_ENCRYPT) { | 828 | if (cfg.operation == SMIME_ENCRYPT) { |
| 829 | if (smime_config.cipher == NULL) { | 829 | if (cfg.cipher == NULL) { |
| 830 | #ifndef OPENSSL_NO_RC2 | 830 | #ifndef OPENSSL_NO_RC2 |
| 831 | smime_config.cipher = EVP_rc2_40_cbc(); | 831 | cfg.cipher = EVP_rc2_40_cbc(); |
| 832 | #else | 832 | #else |
| 833 | BIO_printf(bio_err, "No cipher selected\n"); | 833 | BIO_printf(bio_err, "No cipher selected\n"); |
| 834 | goto end; | 834 | goto end; |
| @@ -847,41 +847,41 @@ smime_main(int argc, char **argv) | |||
| 847 | args++; | 847 | args++; |
| 848 | } | 848 | } |
| 849 | } | 849 | } |
| 850 | if (smime_config.certfile != NULL) { | 850 | if (cfg.certfile != NULL) { |
| 851 | if ((other = load_certs(bio_err, smime_config.certfile, | 851 | if ((other = load_certs(bio_err, cfg.certfile, |
| 852 | FORMAT_PEM, NULL, "certificate file")) == NULL) { | 852 | FORMAT_PEM, NULL, "certificate file")) == NULL) { |
| 853 | ERR_print_errors(bio_err); | 853 | ERR_print_errors(bio_err); |
| 854 | goto end; | 854 | goto end; |
| 855 | } | 855 | } |
| 856 | } | 856 | } |
| 857 | if (smime_config.recipfile != NULL && | 857 | if (cfg.recipfile != NULL && |
| 858 | (smime_config.operation == SMIME_DECRYPT)) { | 858 | (cfg.operation == SMIME_DECRYPT)) { |
| 859 | if ((recip = load_cert(bio_err, smime_config.recipfile, | 859 | if ((recip = load_cert(bio_err, cfg.recipfile, |
| 860 | FORMAT_PEM, NULL, "recipient certificate file")) == NULL) { | 860 | FORMAT_PEM, NULL, "recipient certificate file")) == NULL) { |
| 861 | ERR_print_errors(bio_err); | 861 | ERR_print_errors(bio_err); |
| 862 | goto end; | 862 | goto end; |
| 863 | } | 863 | } |
| 864 | } | 864 | } |
| 865 | if (smime_config.operation == SMIME_DECRYPT) { | 865 | if (cfg.operation == SMIME_DECRYPT) { |
| 866 | if (smime_config.keyfile == NULL) | 866 | if (cfg.keyfile == NULL) |
| 867 | smime_config.keyfile = smime_config.recipfile; | 867 | cfg.keyfile = cfg.recipfile; |
| 868 | } else if (smime_config.operation == SMIME_SIGN) { | 868 | } else if (cfg.operation == SMIME_SIGN) { |
| 869 | if (smime_config.keyfile == NULL) | 869 | if (cfg.keyfile == NULL) |
| 870 | smime_config.keyfile = smime_config.signerfile; | 870 | cfg.keyfile = cfg.signerfile; |
| 871 | } else { | 871 | } else { |
| 872 | smime_config.keyfile = NULL; | 872 | cfg.keyfile = NULL; |
| 873 | } | 873 | } |
| 874 | 874 | ||
| 875 | if (smime_config.keyfile != NULL) { | 875 | if (cfg.keyfile != NULL) { |
| 876 | key = load_key(bio_err, smime_config.keyfile, | 876 | key = load_key(bio_err, cfg.keyfile, |
| 877 | smime_config.keyform, 0, passin, "signing key file"); | 877 | cfg.keyform, 0, passin, "signing key file"); |
| 878 | if (key == NULL) | 878 | if (key == NULL) |
| 879 | goto end; | 879 | goto end; |
| 880 | } | 880 | } |
| 881 | if (smime_config.infile != NULL) { | 881 | if (cfg.infile != NULL) { |
| 882 | if ((in = BIO_new_file(smime_config.infile, inmode)) == NULL) { | 882 | if ((in = BIO_new_file(cfg.infile, inmode)) == NULL) { |
| 883 | BIO_printf(bio_err, | 883 | BIO_printf(bio_err, |
| 884 | "Can't open input file %s\n", smime_config.infile); | 884 | "Can't open input file %s\n", cfg.infile); |
| 885 | goto end; | 885 | goto end; |
| 886 | } | 886 | } |
| 887 | } else { | 887 | } else { |
| @@ -889,12 +889,12 @@ smime_main(int argc, char **argv) | |||
| 889 | goto end; | 889 | goto end; |
| 890 | } | 890 | } |
| 891 | 891 | ||
| 892 | if (smime_config.operation & SMIME_IP) { | 892 | if (cfg.operation & SMIME_IP) { |
| 893 | if (smime_config.informat == FORMAT_SMIME) | 893 | if (cfg.informat == FORMAT_SMIME) |
| 894 | p7 = SMIME_read_PKCS7(in, &indata); | 894 | p7 = SMIME_read_PKCS7(in, &indata); |
| 895 | else if (smime_config.informat == FORMAT_PEM) | 895 | else if (cfg.informat == FORMAT_PEM) |
| 896 | p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); | 896 | p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); |
| 897 | else if (smime_config.informat == FORMAT_ASN1) | 897 | else if (cfg.informat == FORMAT_ASN1) |
| 898 | p7 = d2i_PKCS7_bio(in, NULL); | 898 | p7 = d2i_PKCS7_bio(in, NULL); |
| 899 | else { | 899 | else { |
| 900 | BIO_printf(bio_err, | 900 | BIO_printf(bio_err, |
| @@ -906,22 +906,22 @@ smime_main(int argc, char **argv) | |||
| 906 | BIO_printf(bio_err, "Error reading S/MIME message\n"); | 906 | BIO_printf(bio_err, "Error reading S/MIME message\n"); |
| 907 | goto end; | 907 | goto end; |
| 908 | } | 908 | } |
| 909 | if (smime_config.contfile != NULL) { | 909 | if (cfg.contfile != NULL) { |
| 910 | BIO_free(indata); | 910 | BIO_free(indata); |
| 911 | if ((indata = BIO_new_file(smime_config.contfile, | 911 | if ((indata = BIO_new_file(cfg.contfile, |
| 912 | "rb")) == NULL) { | 912 | "rb")) == NULL) { |
| 913 | BIO_printf(bio_err, | 913 | BIO_printf(bio_err, |
| 914 | "Can't read content file %s\n", | 914 | "Can't read content file %s\n", |
| 915 | smime_config.contfile); | 915 | cfg.contfile); |
| 916 | goto end; | 916 | goto end; |
| 917 | } | 917 | } |
| 918 | } | 918 | } |
| 919 | } | 919 | } |
| 920 | if (smime_config.outfile != NULL) { | 920 | if (cfg.outfile != NULL) { |
| 921 | if ((out = BIO_new_file(smime_config.outfile, outmode)) == NULL) { | 921 | if ((out = BIO_new_file(cfg.outfile, outmode)) == NULL) { |
| 922 | BIO_printf(bio_err, | 922 | BIO_printf(bio_err, |
| 923 | "Can't open output file %s\n", | 923 | "Can't open output file %s\n", |
| 924 | smime_config.outfile); | 924 | cfg.outfile); |
| 925 | goto end; | 925 | goto end; |
| 926 | } | 926 | } |
| 927 | } else { | 927 | } else { |
| @@ -929,60 +929,60 @@ smime_main(int argc, char **argv) | |||
| 929 | goto end; | 929 | goto end; |
| 930 | } | 930 | } |
| 931 | 931 | ||
| 932 | if (smime_config.operation == SMIME_VERIFY) { | 932 | if (cfg.operation == SMIME_VERIFY) { |
| 933 | if ((store = setup_verify(bio_err, smime_config.CAfile, | 933 | if ((store = setup_verify(bio_err, cfg.CAfile, |
| 934 | smime_config.CApath)) == NULL) | 934 | cfg.CApath)) == NULL) |
| 935 | goto end; | 935 | goto end; |
| 936 | X509_STORE_set_verify_cb(store, smime_cb); | 936 | X509_STORE_set_verify_cb(store, smime_cb); |
| 937 | if (smime_config.vpm != NULL) { | 937 | if (cfg.vpm != NULL) { |
| 938 | if (!X509_STORE_set1_param(store, smime_config.vpm)) | 938 | if (!X509_STORE_set1_param(store, cfg.vpm)) |
| 939 | goto end; | 939 | goto end; |
| 940 | } | 940 | } |
| 941 | } | 941 | } |
| 942 | ret = 3; | 942 | ret = 3; |
| 943 | 943 | ||
| 944 | if (smime_config.operation == SMIME_ENCRYPT) { | 944 | if (cfg.operation == SMIME_ENCRYPT) { |
| 945 | if (smime_config.indef) | 945 | if (cfg.indef) |
| 946 | smime_config.flags |= PKCS7_STREAM; | 946 | cfg.flags |= PKCS7_STREAM; |
| 947 | p7 = PKCS7_encrypt(encerts, in, smime_config.cipher, | 947 | p7 = PKCS7_encrypt(encerts, in, cfg.cipher, |
| 948 | smime_config.flags); | 948 | cfg.flags); |
| 949 | } else if (smime_config.operation & SMIME_SIGNERS) { | 949 | } else if (cfg.operation & SMIME_SIGNERS) { |
| 950 | int i; | 950 | int i; |
| 951 | /* | 951 | /* |
| 952 | * If detached data content we only enable streaming if | 952 | * If detached data content we only enable streaming if |
| 953 | * S/MIME output format. | 953 | * S/MIME output format. |
| 954 | */ | 954 | */ |
| 955 | if (smime_config.operation == SMIME_SIGN) { | 955 | if (cfg.operation == SMIME_SIGN) { |
| 956 | if (smime_config.flags & PKCS7_DETACHED) { | 956 | if (cfg.flags & PKCS7_DETACHED) { |
| 957 | if (smime_config.outformat == FORMAT_SMIME) | 957 | if (cfg.outformat == FORMAT_SMIME) |
| 958 | smime_config.flags |= PKCS7_STREAM; | 958 | cfg.flags |= PKCS7_STREAM; |
| 959 | } else if (smime_config.indef) { | 959 | } else if (cfg.indef) { |
| 960 | smime_config.flags |= PKCS7_STREAM; | 960 | cfg.flags |= PKCS7_STREAM; |
| 961 | } | 961 | } |
| 962 | smime_config.flags |= PKCS7_PARTIAL; | 962 | cfg.flags |= PKCS7_PARTIAL; |
| 963 | p7 = PKCS7_sign(NULL, NULL, other, in, | 963 | p7 = PKCS7_sign(NULL, NULL, other, in, |
| 964 | smime_config.flags); | 964 | cfg.flags); |
| 965 | if (p7 == NULL) | 965 | if (p7 == NULL) |
| 966 | goto end; | 966 | goto end; |
| 967 | } else { | 967 | } else { |
| 968 | smime_config.flags |= PKCS7_REUSE_DIGEST; | 968 | cfg.flags |= PKCS7_REUSE_DIGEST; |
| 969 | } | 969 | } |
| 970 | for (i = 0; i < sk_OPENSSL_STRING_num(smime_config.sksigners); i++) { | 970 | for (i = 0; i < sk_OPENSSL_STRING_num(cfg.sksigners); i++) { |
| 971 | smime_config.signerfile = | 971 | cfg.signerfile = |
| 972 | sk_OPENSSL_STRING_value(smime_config.sksigners, i); | 972 | sk_OPENSSL_STRING_value(cfg.sksigners, i); |
| 973 | smime_config.keyfile = | 973 | cfg.keyfile = |
| 974 | sk_OPENSSL_STRING_value(smime_config.skkeys, i); | 974 | sk_OPENSSL_STRING_value(cfg.skkeys, i); |
| 975 | signer = load_cert(bio_err, smime_config.signerfile, | 975 | signer = load_cert(bio_err, cfg.signerfile, |
| 976 | FORMAT_PEM, NULL, "signer certificate"); | 976 | FORMAT_PEM, NULL, "signer certificate"); |
| 977 | if (signer == NULL) | 977 | if (signer == NULL) |
| 978 | goto end; | 978 | goto end; |
| 979 | key = load_key(bio_err, smime_config.keyfile, | 979 | key = load_key(bio_err, cfg.keyfile, |
| 980 | smime_config.keyform, 0, passin, | 980 | cfg.keyform, 0, passin, |
| 981 | "signing key file"); | 981 | "signing key file"); |
| 982 | if (key == NULL) | 982 | if (key == NULL) |
| 983 | goto end; | 983 | goto end; |
| 984 | if (PKCS7_sign_add_signer(p7, signer, key, | 984 | if (PKCS7_sign_add_signer(p7, signer, key, |
| 985 | smime_config.sign_md, smime_config.flags) == NULL) | 985 | cfg.sign_md, cfg.flags) == NULL) |
| 986 | goto end; | 986 | goto end; |
| 987 | X509_free(signer); | 987 | X509_free(signer); |
| 988 | signer = NULL; | 988 | signer = NULL; |
| @@ -990,9 +990,9 @@ smime_main(int argc, char **argv) | |||
| 990 | key = NULL; | 990 | key = NULL; |
| 991 | } | 991 | } |
| 992 | /* If not streaming or resigning finalize structure */ | 992 | /* If not streaming or resigning finalize structure */ |
| 993 | if ((smime_config.operation == SMIME_SIGN) && | 993 | if ((cfg.operation == SMIME_SIGN) && |
| 994 | !(smime_config.flags & PKCS7_STREAM)) { | 994 | !(cfg.flags & PKCS7_STREAM)) { |
| 995 | if (!PKCS7_final(p7, in, smime_config.flags)) | 995 | if (!PKCS7_final(p7, in, cfg.flags)) |
| 996 | goto end; | 996 | goto end; |
| 997 | } | 997 | } |
| 998 | } | 998 | } |
| @@ -1002,58 +1002,58 @@ smime_main(int argc, char **argv) | |||
| 1002 | } | 1002 | } |
| 1003 | ret = 4; | 1003 | ret = 4; |
| 1004 | 1004 | ||
| 1005 | if (smime_config.operation == SMIME_DECRYPT) { | 1005 | if (cfg.operation == SMIME_DECRYPT) { |
| 1006 | if (!PKCS7_decrypt(p7, key, recip, out, smime_config.flags)) { | 1006 | if (!PKCS7_decrypt(p7, key, recip, out, cfg.flags)) { |
| 1007 | BIO_printf(bio_err, | 1007 | BIO_printf(bio_err, |
| 1008 | "Error decrypting PKCS#7 structure\n"); | 1008 | "Error decrypting PKCS#7 structure\n"); |
| 1009 | goto end; | 1009 | goto end; |
| 1010 | } | 1010 | } |
| 1011 | } else if (smime_config.operation == SMIME_VERIFY) { | 1011 | } else if (cfg.operation == SMIME_VERIFY) { |
| 1012 | STACK_OF(X509) *signers; | 1012 | STACK_OF(X509) *signers; |
| 1013 | if (PKCS7_verify(p7, other, store, indata, out, | 1013 | if (PKCS7_verify(p7, other, store, indata, out, |
| 1014 | smime_config.flags)) { | 1014 | cfg.flags)) { |
| 1015 | BIO_printf(bio_err, "Verification successful\n"); | 1015 | BIO_printf(bio_err, "Verification successful\n"); |
| 1016 | } else { | 1016 | } else { |
| 1017 | BIO_printf(bio_err, "Verification failure\n"); | 1017 | BIO_printf(bio_err, "Verification failure\n"); |
| 1018 | goto end; | 1018 | goto end; |
| 1019 | } | 1019 | } |
| 1020 | if ((signers = PKCS7_get0_signers(p7, other, | 1020 | if ((signers = PKCS7_get0_signers(p7, other, |
| 1021 | smime_config.flags)) == NULL) | 1021 | cfg.flags)) == NULL) |
| 1022 | goto end; | 1022 | goto end; |
| 1023 | if (!save_certs(smime_config.signerfile, signers)) { | 1023 | if (!save_certs(cfg.signerfile, signers)) { |
| 1024 | BIO_printf(bio_err, "Error writing signers to %s\n", | 1024 | BIO_printf(bio_err, "Error writing signers to %s\n", |
| 1025 | smime_config.signerfile); | 1025 | cfg.signerfile); |
| 1026 | sk_X509_free(signers); | 1026 | sk_X509_free(signers); |
| 1027 | ret = 5; | 1027 | ret = 5; |
| 1028 | goto end; | 1028 | goto end; |
| 1029 | } | 1029 | } |
| 1030 | sk_X509_free(signers); | 1030 | sk_X509_free(signers); |
| 1031 | } else if (smime_config.operation == SMIME_PK7OUT) { | 1031 | } else if (cfg.operation == SMIME_PK7OUT) { |
| 1032 | PEM_write_bio_PKCS7(out, p7); | 1032 | PEM_write_bio_PKCS7(out, p7); |
| 1033 | } else { | 1033 | } else { |
| 1034 | if (smime_config.to != NULL) | 1034 | if (cfg.to != NULL) |
| 1035 | BIO_printf(out, "To: %s\n", smime_config.to); | 1035 | BIO_printf(out, "To: %s\n", cfg.to); |
| 1036 | if (smime_config.from != NULL) | 1036 | if (cfg.from != NULL) |
| 1037 | BIO_printf(out, "From: %s\n", smime_config.from); | 1037 | BIO_printf(out, "From: %s\n", cfg.from); |
| 1038 | if (smime_config.subject != NULL) | 1038 | if (cfg.subject != NULL) |
| 1039 | BIO_printf(out, "Subject: %s\n", smime_config.subject); | 1039 | BIO_printf(out, "Subject: %s\n", cfg.subject); |
| 1040 | if (smime_config.outformat == FORMAT_SMIME) { | 1040 | if (cfg.outformat == FORMAT_SMIME) { |
| 1041 | if (smime_config.operation == SMIME_RESIGN) { | 1041 | if (cfg.operation == SMIME_RESIGN) { |
| 1042 | if (!SMIME_write_PKCS7(out, p7, indata, | 1042 | if (!SMIME_write_PKCS7(out, p7, indata, |
| 1043 | smime_config.flags)) | 1043 | cfg.flags)) |
| 1044 | goto end; | 1044 | goto end; |
| 1045 | } else { | 1045 | } else { |
| 1046 | if (!SMIME_write_PKCS7(out, p7, in, | 1046 | if (!SMIME_write_PKCS7(out, p7, in, |
| 1047 | smime_config.flags)) | 1047 | cfg.flags)) |
| 1048 | goto end; | 1048 | goto end; |
| 1049 | } | 1049 | } |
| 1050 | } else if (smime_config.outformat == FORMAT_PEM) { | 1050 | } else if (cfg.outformat == FORMAT_PEM) { |
| 1051 | if (!PEM_write_bio_PKCS7_stream(out, p7, in, | 1051 | if (!PEM_write_bio_PKCS7_stream(out, p7, in, |
| 1052 | smime_config.flags)) | 1052 | cfg.flags)) |
| 1053 | goto end; | 1053 | goto end; |
| 1054 | } else if (smime_config.outformat == FORMAT_ASN1) { | 1054 | } else if (cfg.outformat == FORMAT_ASN1) { |
| 1055 | if (!i2d_PKCS7_bio_stream(out, p7, in, | 1055 | if (!i2d_PKCS7_bio_stream(out, p7, in, |
| 1056 | smime_config.flags)) | 1056 | cfg.flags)) |
| 1057 | goto end; | 1057 | goto end; |
| 1058 | } else { | 1058 | } else { |
| 1059 | BIO_printf(bio_err, | 1059 | BIO_printf(bio_err, |
| @@ -1069,9 +1069,9 @@ smime_main(int argc, char **argv) | |||
| 1069 | ERR_print_errors(bio_err); | 1069 | ERR_print_errors(bio_err); |
| 1070 | sk_X509_pop_free(encerts, X509_free); | 1070 | sk_X509_pop_free(encerts, X509_free); |
| 1071 | sk_X509_pop_free(other, X509_free); | 1071 | sk_X509_pop_free(other, X509_free); |
| 1072 | X509_VERIFY_PARAM_free(smime_config.vpm); | 1072 | X509_VERIFY_PARAM_free(cfg.vpm); |
| 1073 | sk_OPENSSL_STRING_free(smime_config.sksigners); | 1073 | sk_OPENSSL_STRING_free(cfg.sksigners); |
| 1074 | sk_OPENSSL_STRING_free(smime_config.skkeys); | 1074 | sk_OPENSSL_STRING_free(cfg.skkeys); |
| 1075 | X509_STORE_free(store); | 1075 | X509_STORE_free(store); |
| 1076 | X509_free(cert); | 1076 | X509_free(cert); |
| 1077 | X509_free(recip); | 1077 | X509_free(recip); |
diff --git a/src/usr.bin/openssl/spkac.c b/src/usr.bin/openssl/spkac.c index 3a45d5d4bc..12d530e3cf 100644 --- a/src/usr.bin/openssl/spkac.c +++ b/src/usr.bin/openssl/spkac.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: spkac.c,v 1.12 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: spkac.c,v 1.13 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 1999. Based on an original idea by Massimiliano Pala | 3 | * project 1999. Based on an original idea by Massimiliano Pala |
| 4 | * (madwolf@openca.org). | 4 | * (madwolf@openca.org). |
| @@ -84,7 +84,7 @@ static struct { | |||
| 84 | char *spkac; | 84 | char *spkac; |
| 85 | char *spksect; | 85 | char *spksect; |
| 86 | int verify; | 86 | int verify; |
| 87 | } spkac_config; | 87 | } cfg; |
| 88 | 88 | ||
| 89 | static const struct option spkac_options[] = { | 89 | static const struct option spkac_options[] = { |
| 90 | { | 90 | { |
| @@ -92,54 +92,54 @@ static const struct option spkac_options[] = { | |||
| 92 | .argname = "string", | 92 | .argname = "string", |
| 93 | .desc = "Specify challenge string if SPKAC is generated", | 93 | .desc = "Specify challenge string if SPKAC is generated", |
| 94 | .type = OPTION_ARG, | 94 | .type = OPTION_ARG, |
| 95 | .opt.arg = &spkac_config.challenge, | 95 | .opt.arg = &cfg.challenge, |
| 96 | }, | 96 | }, |
| 97 | { | 97 | { |
| 98 | .name = "in", | 98 | .name = "in", |
| 99 | .argname = "file", | 99 | .argname = "file", |
| 100 | .desc = "Input file (default stdin)", | 100 | .desc = "Input file (default stdin)", |
| 101 | .type = OPTION_ARG, | 101 | .type = OPTION_ARG, |
| 102 | .opt.arg = &spkac_config.infile, | 102 | .opt.arg = &cfg.infile, |
| 103 | }, | 103 | }, |
| 104 | { | 104 | { |
| 105 | .name = "key", | 105 | .name = "key", |
| 106 | .argname = "file", | 106 | .argname = "file", |
| 107 | .desc = "Create SPKAC using private key file", | 107 | .desc = "Create SPKAC using private key file", |
| 108 | .type = OPTION_ARG, | 108 | .type = OPTION_ARG, |
| 109 | .opt.arg = &spkac_config.keyfile, | 109 | .opt.arg = &cfg.keyfile, |
| 110 | }, | 110 | }, |
| 111 | { | 111 | { |
| 112 | .name = "noout", | 112 | .name = "noout", |
| 113 | .desc = "Do not print text version of SPKAC", | 113 | .desc = "Do not print text version of SPKAC", |
| 114 | .type = OPTION_FLAG, | 114 | .type = OPTION_FLAG, |
| 115 | .opt.flag = &spkac_config.noout, | 115 | .opt.flag = &cfg.noout, |
| 116 | }, | 116 | }, |
| 117 | { | 117 | { |
| 118 | .name = "out", | 118 | .name = "out", |
| 119 | .argname = "file", | 119 | .argname = "file", |
| 120 | .desc = "Output file (default stdout)", | 120 | .desc = "Output file (default stdout)", |
| 121 | .type = OPTION_ARG, | 121 | .type = OPTION_ARG, |
| 122 | .opt.arg = &spkac_config.outfile, | 122 | .opt.arg = &cfg.outfile, |
| 123 | }, | 123 | }, |
| 124 | { | 124 | { |
| 125 | .name = "passin", | 125 | .name = "passin", |
| 126 | .argname = "src", | 126 | .argname = "src", |
| 127 | .desc = "Input file passphrase source", | 127 | .desc = "Input file passphrase source", |
| 128 | .type = OPTION_ARG, | 128 | .type = OPTION_ARG, |
| 129 | .opt.arg = &spkac_config.passargin, | 129 | .opt.arg = &cfg.passargin, |
| 130 | }, | 130 | }, |
| 131 | { | 131 | { |
| 132 | .name = "pubkey", | 132 | .name = "pubkey", |
| 133 | .desc = "Output public key of an SPKAC (not used if creating)", | 133 | .desc = "Output public key of an SPKAC (not used if creating)", |
| 134 | .type = OPTION_FLAG, | 134 | .type = OPTION_FLAG, |
| 135 | .opt.flag = &spkac_config.pubkey, | 135 | .opt.flag = &cfg.pubkey, |
| 136 | }, | 136 | }, |
| 137 | { | 137 | { |
| 138 | .name = "spkac", | 138 | .name = "spkac", |
| 139 | .argname = "name", | 139 | .argname = "name", |
| 140 | .desc = "SPKAC name (default \"SPKAC\")", | 140 | .desc = "SPKAC name (default \"SPKAC\")", |
| 141 | .type = OPTION_ARG, | 141 | .type = OPTION_ARG, |
| 142 | .opt.arg = &spkac_config.spkac, | 142 | .opt.arg = &cfg.spkac, |
| 143 | }, | 143 | }, |
| 144 | { | 144 | { |
| 145 | .name = "spksect", | 145 | .name = "spksect", |
| @@ -147,13 +147,13 @@ static const struct option spkac_options[] = { | |||
| 147 | .desc = "Name of the section containing SPKAC (default" | 147 | .desc = "Name of the section containing SPKAC (default" |
| 148 | " \"default\")", | 148 | " \"default\")", |
| 149 | .type = OPTION_ARG, | 149 | .type = OPTION_ARG, |
| 150 | .opt.arg = &spkac_config.spksect, | 150 | .opt.arg = &cfg.spksect, |
| 151 | }, | 151 | }, |
| 152 | { | 152 | { |
| 153 | .name = "verify", | 153 | .name = "verify", |
| 154 | .desc = "Verify digital signature on supplied SPKAC", | 154 | .desc = "Verify digital signature on supplied SPKAC", |
| 155 | .type = OPTION_FLAG, | 155 | .type = OPTION_FLAG, |
| 156 | .opt.flag = &spkac_config.verify, | 156 | .opt.flag = &cfg.verify, |
| 157 | }, | 157 | }, |
| 158 | { NULL } | 158 | { NULL } |
| 159 | }; | 159 | }; |
| @@ -186,32 +186,32 @@ spkac_main(int argc, char **argv) | |||
| 186 | exit(1); | 186 | exit(1); |
| 187 | } | 187 | } |
| 188 | 188 | ||
| 189 | memset(&spkac_config, 0, sizeof(spkac_config)); | 189 | memset(&cfg, 0, sizeof(cfg)); |
| 190 | spkac_config.spkac = "SPKAC"; | 190 | cfg.spkac = "SPKAC"; |
| 191 | spkac_config.spksect = "default"; | 191 | cfg.spksect = "default"; |
| 192 | 192 | ||
| 193 | if (options_parse(argc, argv, spkac_options, NULL, NULL) != 0) { | 193 | if (options_parse(argc, argv, spkac_options, NULL, NULL) != 0) { |
| 194 | spkac_usage(); | 194 | spkac_usage(); |
| 195 | return (1); | 195 | return (1); |
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | if (!app_passwd(bio_err, spkac_config.passargin, NULL, &passin, NULL)) { | 198 | if (!app_passwd(bio_err, cfg.passargin, NULL, &passin, NULL)) { |
| 199 | BIO_printf(bio_err, "Error getting password\n"); | 199 | BIO_printf(bio_err, "Error getting password\n"); |
| 200 | goto end; | 200 | goto end; |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | if (spkac_config.keyfile) { | 203 | if (cfg.keyfile) { |
| 204 | pkey = load_key(bio_err, | 204 | pkey = load_key(bio_err, |
| 205 | strcmp(spkac_config.keyfile, "-") ? spkac_config.keyfile | 205 | strcmp(cfg.keyfile, "-") ? cfg.keyfile |
| 206 | : NULL, FORMAT_PEM, 1, passin, "private key"); | 206 | : NULL, FORMAT_PEM, 1, passin, "private key"); |
| 207 | if (!pkey) { | 207 | if (!pkey) { |
| 208 | goto end; | 208 | goto end; |
| 209 | } | 209 | } |
| 210 | spki = NETSCAPE_SPKI_new(); | 210 | spki = NETSCAPE_SPKI_new(); |
| 211 | if (spkac_config.challenge) | 211 | if (cfg.challenge) |
| 212 | ASN1_STRING_set(spki->spkac->challenge, | 212 | ASN1_STRING_set(spki->spkac->challenge, |
| 213 | spkac_config.challenge, | 213 | cfg.challenge, |
| 214 | (int) strlen(spkac_config.challenge)); | 214 | (int) strlen(cfg.challenge)); |
| 215 | NETSCAPE_SPKI_set_pubkey(spki, pkey); | 215 | NETSCAPE_SPKI_set_pubkey(spki, pkey); |
| 216 | NETSCAPE_SPKI_sign(spki, pkey, EVP_md5()); | 216 | NETSCAPE_SPKI_sign(spki, pkey, EVP_md5()); |
| 217 | spkstr = NETSCAPE_SPKI_b64_encode(spki); | 217 | spkstr = NETSCAPE_SPKI_b64_encode(spki); |
| @@ -221,8 +221,8 @@ spkac_main(int argc, char **argv) | |||
| 221 | goto end; | 221 | goto end; |
| 222 | } | 222 | } |
| 223 | 223 | ||
| 224 | if (spkac_config.outfile) | 224 | if (cfg.outfile) |
| 225 | out = BIO_new_file(spkac_config.outfile, "w"); | 225 | out = BIO_new_file(cfg.outfile, "w"); |
| 226 | else | 226 | else |
| 227 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 227 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 228 | 228 | ||
| @@ -236,8 +236,8 @@ spkac_main(int argc, char **argv) | |||
| 236 | free(spkstr); | 236 | free(spkstr); |
| 237 | goto end; | 237 | goto end; |
| 238 | } | 238 | } |
| 239 | if (spkac_config.infile) | 239 | if (cfg.infile) |
| 240 | in = BIO_new_file(spkac_config.infile, "r"); | 240 | in = BIO_new_file(cfg.infile, "r"); |
| 241 | else | 241 | else |
| 242 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 242 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 243 | 243 | ||
| @@ -254,12 +254,12 @@ spkac_main(int argc, char **argv) | |||
| 254 | ERR_print_errors(bio_err); | 254 | ERR_print_errors(bio_err); |
| 255 | goto end; | 255 | goto end; |
| 256 | } | 256 | } |
| 257 | spkstr = NCONF_get_string(conf, spkac_config.spksect, | 257 | spkstr = NCONF_get_string(conf, cfg.spksect, |
| 258 | spkac_config.spkac); | 258 | cfg.spkac); |
| 259 | 259 | ||
| 260 | if (!spkstr) { | 260 | if (!spkstr) { |
| 261 | BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", | 261 | BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", |
| 262 | spkac_config.spkac); | 262 | cfg.spkac); |
| 263 | ERR_print_errors(bio_err); | 263 | ERR_print_errors(bio_err); |
| 264 | goto end; | 264 | goto end; |
| 265 | } | 265 | } |
| @@ -270,8 +270,8 @@ spkac_main(int argc, char **argv) | |||
| 270 | ERR_print_errors(bio_err); | 270 | ERR_print_errors(bio_err); |
| 271 | goto end; | 271 | goto end; |
| 272 | } | 272 | } |
| 273 | if (spkac_config.outfile) | 273 | if (cfg.outfile) |
| 274 | out = BIO_new_file(spkac_config.outfile, "w"); | 274 | out = BIO_new_file(cfg.outfile, "w"); |
| 275 | else { | 275 | else { |
| 276 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 276 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 277 | } | 277 | } |
| @@ -281,10 +281,10 @@ spkac_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 (!spkac_config.noout) | 284 | if (!cfg.noout) |
| 285 | NETSCAPE_SPKI_print(out, spki); | 285 | NETSCAPE_SPKI_print(out, spki); |
| 286 | pkey = NETSCAPE_SPKI_get_pubkey(spki); | 286 | pkey = NETSCAPE_SPKI_get_pubkey(spki); |
| 287 | if (spkac_config.verify) { | 287 | if (cfg.verify) { |
| 288 | i = NETSCAPE_SPKI_verify(spki, pkey); | 288 | i = NETSCAPE_SPKI_verify(spki, pkey); |
| 289 | if (i > 0) | 289 | if (i > 0) |
| 290 | BIO_printf(bio_err, "Signature OK\n"); | 290 | BIO_printf(bio_err, "Signature OK\n"); |
| @@ -294,7 +294,7 @@ spkac_main(int argc, char **argv) | |||
| 294 | goto end; | 294 | goto end; |
| 295 | } | 295 | } |
| 296 | } | 296 | } |
| 297 | if (spkac_config.pubkey) | 297 | if (cfg.pubkey) |
| 298 | PEM_write_bio_PUBKEY(out, pkey); | 298 | PEM_write_bio_PUBKEY(out, pkey); |
| 299 | 299 | ||
| 300 | ret = 0; | 300 | ret = 0; |
diff --git a/src/usr.bin/openssl/ts.c b/src/usr.bin/openssl/ts.c index 05387de130..84008183e7 100644 --- a/src/usr.bin/openssl/ts.c +++ b/src/usr.bin/openssl/ts.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ts.c,v 1.25 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: ts.c,v 1.26 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL | 2 | /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL |
| 3 | * project 2002. | 3 | * project 2002. |
| 4 | */ | 4 | */ |
| @@ -138,7 +138,7 @@ static struct { | |||
| 138 | int token_in; | 138 | int token_in; |
| 139 | int token_out; | 139 | int token_out; |
| 140 | char *untrusted; | 140 | char *untrusted; |
| 141 | } ts_config; | 141 | } cfg; |
| 142 | 142 | ||
| 143 | static int | 143 | static int |
| 144 | ts_opt_md(int argc, char **argv, int *argsused) | 144 | ts_opt_md(int argc, char **argv, int *argsused) |
| @@ -148,7 +148,7 @@ ts_opt_md(int argc, char **argv, int *argsused) | |||
| 148 | if (*name++ != '-') | 148 | if (*name++ != '-') |
| 149 | return (1); | 149 | return (1); |
| 150 | 150 | ||
| 151 | if ((ts_config.md = EVP_get_digestbyname(name)) == NULL) | 151 | if ((cfg.md = EVP_get_digestbyname(name)) == NULL) |
| 152 | return (1); | 152 | return (1); |
| 153 | 153 | ||
| 154 | *argsused = 1; | 154 | *argsused = 1; |
| @@ -158,27 +158,27 @@ ts_opt_md(int argc, char **argv, int *argsused) | |||
| 158 | static int | 158 | static int |
| 159 | ts_opt_query(void) | 159 | ts_opt_query(void) |
| 160 | { | 160 | { |
| 161 | if (ts_config.mode != CMD_NONE) | 161 | if (cfg.mode != CMD_NONE) |
| 162 | return (1); | 162 | return (1); |
| 163 | ts_config.mode = CMD_QUERY; | 163 | cfg.mode = CMD_QUERY; |
| 164 | return (0); | 164 | return (0); |
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | static int | 167 | static int |
| 168 | ts_opt_reply(void) | 168 | ts_opt_reply(void) |
| 169 | { | 169 | { |
| 170 | if (ts_config.mode != CMD_NONE) | 170 | if (cfg.mode != CMD_NONE) |
| 171 | return (1); | 171 | return (1); |
| 172 | ts_config.mode = CMD_REPLY; | 172 | cfg.mode = CMD_REPLY; |
| 173 | return (0); | 173 | return (0); |
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | static int | 176 | static int |
| 177 | ts_opt_verify(void) | 177 | ts_opt_verify(void) |
| 178 | { | 178 | { |
| 179 | if (ts_config.mode != CMD_NONE) | 179 | if (cfg.mode != CMD_NONE) |
| 180 | return (1); | 180 | return (1); |
| 181 | ts_config.mode = CMD_VERIFY; | 181 | cfg.mode = CMD_VERIFY; |
| 182 | return (0); | 182 | return (0); |
| 183 | } | 183 | } |
| 184 | 184 | ||
| @@ -188,89 +188,89 @@ static const struct option ts_options[] = { | |||
| 188 | .argname = "file", | 188 | .argname = "file", |
| 189 | .desc = "Certificate Authority file", | 189 | .desc = "Certificate Authority file", |
| 190 | .type = OPTION_ARG, | 190 | .type = OPTION_ARG, |
| 191 | .opt.arg = &ts_config.ca_file, | 191 | .opt.arg = &cfg.ca_file, |
| 192 | }, | 192 | }, |
| 193 | { | 193 | { |
| 194 | .name = "CApath", | 194 | .name = "CApath", |
| 195 | .argname = "path", | 195 | .argname = "path", |
| 196 | .desc = "Certificate Authority path", | 196 | .desc = "Certificate Authority path", |
| 197 | .type = OPTION_ARG, | 197 | .type = OPTION_ARG, |
| 198 | .opt.arg = &ts_config.ca_path, | 198 | .opt.arg = &cfg.ca_path, |
| 199 | }, | 199 | }, |
| 200 | { | 200 | { |
| 201 | .name = "cert", | 201 | .name = "cert", |
| 202 | .desc = "Include signing certificate in the response", | 202 | .desc = "Include signing certificate in the response", |
| 203 | .type = OPTION_FLAG, | 203 | .type = OPTION_FLAG, |
| 204 | .opt.flag = &ts_config.cert, | 204 | .opt.flag = &cfg.cert, |
| 205 | }, | 205 | }, |
| 206 | { | 206 | { |
| 207 | .name = "chain", | 207 | .name = "chain", |
| 208 | .argname = "file", | 208 | .argname = "file", |
| 209 | .desc = "PEM certificates that will be included in the response", | 209 | .desc = "PEM certificates that will be included in the response", |
| 210 | .type = OPTION_ARG, | 210 | .type = OPTION_ARG, |
| 211 | .opt.arg = &ts_config.chain, | 211 | .opt.arg = &cfg.chain, |
| 212 | }, | 212 | }, |
| 213 | { | 213 | { |
| 214 | .name = "config", | 214 | .name = "config", |
| 215 | .argname = "file", | 215 | .argname = "file", |
| 216 | .desc = "Specify an alternative configuration file", | 216 | .desc = "Specify an alternative configuration file", |
| 217 | .type = OPTION_ARG, | 217 | .type = OPTION_ARG, |
| 218 | .opt.arg = &ts_config.configfile, | 218 | .opt.arg = &cfg.configfile, |
| 219 | }, | 219 | }, |
| 220 | { | 220 | { |
| 221 | .name = "data", | 221 | .name = "data", |
| 222 | .argname = "file", | 222 | .argname = "file", |
| 223 | .desc = "Data file for which the time stamp request needs to be created", | 223 | .desc = "Data file for which the time stamp request needs to be created", |
| 224 | .type = OPTION_ARG, | 224 | .type = OPTION_ARG, |
| 225 | .opt.arg = &ts_config.data, | 225 | .opt.arg = &cfg.data, |
| 226 | }, | 226 | }, |
| 227 | { | 227 | { |
| 228 | .name = "digest", | 228 | .name = "digest", |
| 229 | .argname = "arg", | 229 | .argname = "arg", |
| 230 | .desc = "Specify the message imprint explicitly without the data file", | 230 | .desc = "Specify the message imprint explicitly without the data file", |
| 231 | .type = OPTION_ARG, | 231 | .type = OPTION_ARG, |
| 232 | .opt.arg = &ts_config.digest, | 232 | .opt.arg = &cfg.digest, |
| 233 | }, | 233 | }, |
| 234 | { | 234 | { |
| 235 | .name = "in", | 235 | .name = "in", |
| 236 | .argname = "file", | 236 | .argname = "file", |
| 237 | .desc = "Input file", | 237 | .desc = "Input file", |
| 238 | .type = OPTION_ARG, | 238 | .type = OPTION_ARG, |
| 239 | .opt.arg = &ts_config.in, | 239 | .opt.arg = &cfg.in, |
| 240 | }, | 240 | }, |
| 241 | { | 241 | { |
| 242 | .name = "inkey", | 242 | .name = "inkey", |
| 243 | .argname = "file", | 243 | .argname = "file", |
| 244 | .desc = "Input key file", | 244 | .desc = "Input key file", |
| 245 | .type = OPTION_ARG, | 245 | .type = OPTION_ARG, |
| 246 | .opt.arg = &ts_config.inkey, | 246 | .opt.arg = &cfg.inkey, |
| 247 | }, | 247 | }, |
| 248 | { | 248 | { |
| 249 | .name = "no_nonce", | 249 | .name = "no_nonce", |
| 250 | .desc = "Specify no nonce in the request", | 250 | .desc = "Specify no nonce in the request", |
| 251 | .type = OPTION_FLAG, | 251 | .type = OPTION_FLAG, |
| 252 | .opt.flag = &ts_config.no_nonce, | 252 | .opt.flag = &cfg.no_nonce, |
| 253 | }, | 253 | }, |
| 254 | { | 254 | { |
| 255 | .name = "out", | 255 | .name = "out", |
| 256 | .argname = "file", | 256 | .argname = "file", |
| 257 | .desc = "Output file", | 257 | .desc = "Output file", |
| 258 | .type = OPTION_ARG, | 258 | .type = OPTION_ARG, |
| 259 | .opt.arg = &ts_config.out, | 259 | .opt.arg = &cfg.out, |
| 260 | }, | 260 | }, |
| 261 | { | 261 | { |
| 262 | .name = "passin", | 262 | .name = "passin", |
| 263 | .argname = "src", | 263 | .argname = "src", |
| 264 | .desc = "Private key password source", | 264 | .desc = "Private key password source", |
| 265 | .type = OPTION_ARG, | 265 | .type = OPTION_ARG, |
| 266 | .opt.arg = &ts_config.passin, | 266 | .opt.arg = &cfg.passin, |
| 267 | }, | 267 | }, |
| 268 | { | 268 | { |
| 269 | .name = "policy", | 269 | .name = "policy", |
| 270 | .argname = "object_id", | 270 | .argname = "object_id", |
| 271 | .desc = "Policy for the TSA to use when creating the time stamp token", | 271 | .desc = "Policy for the TSA to use when creating the time stamp token", |
| 272 | .type = OPTION_ARG, | 272 | .type = OPTION_ARG, |
| 273 | .opt.arg = &ts_config.policy, | 273 | .opt.arg = &cfg.policy, |
| 274 | }, | 274 | }, |
| 275 | { | 275 | { |
| 276 | .name = "query", | 276 | .name = "query", |
| @@ -283,7 +283,7 @@ static const struct option ts_options[] = { | |||
| 283 | .argname = "file", | 283 | .argname = "file", |
| 284 | .desc = "File containing a DER-encoded time stamp request", | 284 | .desc = "File containing a DER-encoded time stamp request", |
| 285 | .type = OPTION_ARG, | 285 | .type = OPTION_ARG, |
| 286 | .opt.arg = &ts_config.queryfile, | 286 | .opt.arg = &cfg.queryfile, |
| 287 | }, | 287 | }, |
| 288 | { | 288 | { |
| 289 | .name = "reply", | 289 | .name = "reply", |
| @@ -296,39 +296,39 @@ static const struct option ts_options[] = { | |||
| 296 | .argname = "arg", | 296 | .argname = "arg", |
| 297 | .desc = "TSA section containing the settings for response generation", | 297 | .desc = "TSA section containing the settings for response generation", |
| 298 | .type = OPTION_ARG, | 298 | .type = OPTION_ARG, |
| 299 | .opt.arg = &ts_config.section, | 299 | .opt.arg = &cfg.section, |
| 300 | }, | 300 | }, |
| 301 | { | 301 | { |
| 302 | .name = "signer", | 302 | .name = "signer", |
| 303 | .argname = "file", | 303 | .argname = "file", |
| 304 | .desc = "Signer certificate file", | 304 | .desc = "Signer certificate file", |
| 305 | .type = OPTION_ARG, | 305 | .type = OPTION_ARG, |
| 306 | .opt.arg = &ts_config.signer, | 306 | .opt.arg = &cfg.signer, |
| 307 | }, | 307 | }, |
| 308 | { | 308 | { |
| 309 | .name = "text", | 309 | .name = "text", |
| 310 | .desc = "Output in human-readable text format", | 310 | .desc = "Output in human-readable text format", |
| 311 | .type = OPTION_FLAG, | 311 | .type = OPTION_FLAG, |
| 312 | .opt.flag = &ts_config.text, | 312 | .opt.flag = &cfg.text, |
| 313 | }, | 313 | }, |
| 314 | { | 314 | { |
| 315 | .name = "token_in", | 315 | .name = "token_in", |
| 316 | .desc = "Input is a DER-encoded time stamp token", | 316 | .desc = "Input is a DER-encoded time stamp token", |
| 317 | .type = OPTION_FLAG, | 317 | .type = OPTION_FLAG, |
| 318 | .opt.flag = &ts_config.token_in, | 318 | .opt.flag = &cfg.token_in, |
| 319 | }, | 319 | }, |
| 320 | { | 320 | { |
| 321 | .name = "token_out", | 321 | .name = "token_out", |
| 322 | .desc = "Output is a DER-encoded time stamp token", | 322 | .desc = "Output is a DER-encoded time stamp token", |
| 323 | .type = OPTION_FLAG, | 323 | .type = OPTION_FLAG, |
| 324 | .opt.flag = &ts_config.token_out, | 324 | .opt.flag = &cfg.token_out, |
| 325 | }, | 325 | }, |
| 326 | { | 326 | { |
| 327 | .name = "untrusted", | 327 | .name = "untrusted", |
| 328 | .argname = "file", | 328 | .argname = "file", |
| 329 | .desc = "File containing untrusted certificates", | 329 | .desc = "File containing untrusted certificates", |
| 330 | .type = OPTION_ARG, | 330 | .type = OPTION_ARG, |
| 331 | .opt.arg = &ts_config.untrusted, | 331 | .opt.arg = &cfg.untrusted, |
| 332 | }, | 332 | }, |
| 333 | { | 333 | { |
| 334 | .name = "verify", | 334 | .name = "verify", |
| @@ -382,15 +382,15 @@ ts_main(int argc, char **argv) | |||
| 382 | exit(1); | 382 | exit(1); |
| 383 | } | 383 | } |
| 384 | 384 | ||
| 385 | memset(&ts_config, 0, sizeof(ts_config)); | 385 | memset(&cfg, 0, sizeof(cfg)); |
| 386 | ts_config.mode = CMD_NONE; | 386 | cfg.mode = CMD_NONE; |
| 387 | 387 | ||
| 388 | if (options_parse(argc, argv, ts_options, NULL, NULL) != 0) | 388 | if (options_parse(argc, argv, ts_options, NULL, NULL) != 0) |
| 389 | goto usage; | 389 | goto usage; |
| 390 | 390 | ||
| 391 | /* Get the password if required. */ | 391 | /* Get the password if required. */ |
| 392 | if (ts_config.mode == CMD_REPLY && ts_config.passin != NULL && | 392 | if (cfg.mode == CMD_REPLY && cfg.passin != NULL && |
| 393 | !app_passwd(bio_err, ts_config.passin, NULL, &password, NULL)) { | 393 | !app_passwd(bio_err, cfg.passin, NULL, &password, NULL)) { |
| 394 | BIO_printf(bio_err, "Error getting password.\n"); | 394 | BIO_printf(bio_err, "Error getting password.\n"); |
| 395 | goto cleanup; | 395 | goto cleanup; |
| 396 | } | 396 | } |
| @@ -398,7 +398,7 @@ ts_main(int argc, char **argv) | |||
| 398 | * Check consistency of parameters and execute the appropriate | 398 | * Check consistency of parameters and execute the appropriate |
| 399 | * function. | 399 | * function. |
| 400 | */ | 400 | */ |
| 401 | switch (ts_config.mode) { | 401 | switch (cfg.mode) { |
| 402 | case CMD_NONE: | 402 | case CMD_NONE: |
| 403 | goto usage; | 403 | goto usage; |
| 404 | case CMD_QUERY: | 404 | case CMD_QUERY: |
| @@ -406,50 +406,50 @@ ts_main(int argc, char **argv) | |||
| 406 | * Data file and message imprint cannot be specified at the | 406 | * Data file and message imprint cannot be specified at the |
| 407 | * same time. | 407 | * same time. |
| 408 | */ | 408 | */ |
| 409 | ret = ts_config.data != NULL && ts_config.digest != NULL; | 409 | ret = cfg.data != NULL && cfg.digest != NULL; |
| 410 | if (ret) | 410 | if (ret) |
| 411 | goto usage; | 411 | goto usage; |
| 412 | /* Load the config file for possible policy OIDs. */ | 412 | /* Load the config file for possible policy OIDs. */ |
| 413 | conf = load_config_file(ts_config.configfile); | 413 | conf = load_config_file(cfg.configfile); |
| 414 | ret = !query_command(ts_config.data, ts_config.digest, | 414 | ret = !query_command(cfg.data, cfg.digest, |
| 415 | ts_config.md, ts_config.policy, ts_config.no_nonce, | 415 | cfg.md, cfg.policy, cfg.no_nonce, |
| 416 | ts_config.cert, ts_config.in, ts_config.out, | 416 | cfg.cert, cfg.in, cfg.out, |
| 417 | ts_config.text); | 417 | cfg.text); |
| 418 | break; | 418 | break; |
| 419 | case CMD_REPLY: | 419 | case CMD_REPLY: |
| 420 | conf = load_config_file(ts_config.configfile); | 420 | conf = load_config_file(cfg.configfile); |
| 421 | if (ts_config.in == NULL) { | 421 | if (cfg.in == NULL) { |
| 422 | ret = !(ts_config.queryfile != NULL && conf != NULL && | 422 | ret = !(cfg.queryfile != NULL && conf != NULL && |
| 423 | !ts_config.token_in); | 423 | !cfg.token_in); |
| 424 | if (ret) | 424 | if (ret) |
| 425 | goto usage; | 425 | goto usage; |
| 426 | } else { | 426 | } else { |
| 427 | /* 'in' and 'queryfile' are exclusive. */ | 427 | /* 'in' and 'queryfile' are exclusive. */ |
| 428 | ret = !(ts_config.queryfile == NULL); | 428 | ret = !(cfg.queryfile == NULL); |
| 429 | if (ret) | 429 | if (ret) |
| 430 | goto usage; | 430 | goto usage; |
| 431 | } | 431 | } |
| 432 | 432 | ||
| 433 | ret = !reply_command(conf, ts_config.section, | 433 | ret = !reply_command(conf, cfg.section, |
| 434 | ts_config.queryfile, password, ts_config.inkey, | 434 | cfg.queryfile, password, cfg.inkey, |
| 435 | ts_config.signer, ts_config.chain, ts_config.policy, | 435 | cfg.signer, cfg.chain, cfg.policy, |
| 436 | ts_config.in, ts_config.token_in, ts_config.out, | 436 | cfg.in, cfg.token_in, cfg.out, |
| 437 | ts_config.token_out, ts_config.text); | 437 | cfg.token_out, cfg.text); |
| 438 | break; | 438 | break; |
| 439 | case CMD_VERIFY: | 439 | case CMD_VERIFY: |
| 440 | ret = !(((ts_config.queryfile != NULL && ts_config.data == NULL && | 440 | ret = !(((cfg.queryfile != NULL && cfg.data == NULL && |
| 441 | ts_config.digest == NULL) || | 441 | cfg.digest == NULL) || |
| 442 | (ts_config.queryfile == NULL && ts_config.data != NULL && | 442 | (cfg.queryfile == NULL && cfg.data != NULL && |
| 443 | ts_config.digest == NULL) || | 443 | cfg.digest == NULL) || |
| 444 | (ts_config.queryfile == NULL && ts_config.data == NULL && | 444 | (cfg.queryfile == NULL && cfg.data == NULL && |
| 445 | ts_config.digest != NULL)) && | 445 | cfg.digest != NULL)) && |
| 446 | ts_config.in != NULL); | 446 | cfg.in != NULL); |
| 447 | if (ret) | 447 | if (ret) |
| 448 | goto usage; | 448 | goto usage; |
| 449 | 449 | ||
| 450 | ret = !verify_command(ts_config.data, ts_config.digest, | 450 | ret = !verify_command(cfg.data, cfg.digest, |
| 451 | ts_config.queryfile, ts_config.in, ts_config.token_in, | 451 | cfg.queryfile, cfg.in, cfg.token_in, |
| 452 | ts_config.ca_path, ts_config.ca_file, ts_config.untrusted); | 452 | cfg.ca_path, cfg.ca_file, cfg.untrusted); |
| 453 | } | 453 | } |
| 454 | 454 | ||
| 455 | goto cleanup; | 455 | goto cleanup; |
diff --git a/src/usr.bin/openssl/verify.c b/src/usr.bin/openssl/verify.c index b42dd2f243..b412623991 100644 --- a/src/usr.bin/openssl/verify.c +++ b/src/usr.bin/openssl/verify.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: verify.c,v 1.15 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: verify.c,v 1.16 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -81,7 +81,7 @@ static struct { | |||
| 81 | char *untfile; | 81 | char *untfile; |
| 82 | int verbose; | 82 | int verbose; |
| 83 | X509_VERIFY_PARAM *vpm; | 83 | X509_VERIFY_PARAM *vpm; |
| 84 | } verify_config; | 84 | } cfg; |
| 85 | 85 | ||
| 86 | static int | 86 | static int |
| 87 | verify_opt_args(int argc, char **argv, int *argsused) | 87 | verify_opt_args(int argc, char **argv, int *argsused) |
| @@ -89,7 +89,7 @@ verify_opt_args(int argc, char **argv, int *argsused) | |||
| 89 | int oargc = argc; | 89 | int oargc = argc; |
| 90 | int badarg = 0; | 90 | int badarg = 0; |
| 91 | 91 | ||
| 92 | if (!args_verify(&argv, &argc, &badarg, bio_err, &verify_config.vpm)) | 92 | if (!args_verify(&argv, &argc, &badarg, bio_err, &cfg.vpm)) |
| 93 | return (1); | 93 | return (1); |
| 94 | if (badarg) | 94 | if (badarg) |
| 95 | return (1); | 95 | return (1); |
| @@ -105,41 +105,41 @@ static const struct option verify_options[] = { | |||
| 105 | .argname = "file", | 105 | .argname = "file", |
| 106 | .desc = "Certificate Authority file", | 106 | .desc = "Certificate Authority file", |
| 107 | .type = OPTION_ARG, | 107 | .type = OPTION_ARG, |
| 108 | .opt.arg = &verify_config.CAfile, | 108 | .opt.arg = &cfg.CAfile, |
| 109 | }, | 109 | }, |
| 110 | { | 110 | { |
| 111 | .name = "CApath", | 111 | .name = "CApath", |
| 112 | .argname = "path", | 112 | .argname = "path", |
| 113 | .desc = "Certificate Authority path", | 113 | .desc = "Certificate Authority path", |
| 114 | .type = OPTION_ARG, | 114 | .type = OPTION_ARG, |
| 115 | .opt.arg = &verify_config.CApath, | 115 | .opt.arg = &cfg.CApath, |
| 116 | }, | 116 | }, |
| 117 | { | 117 | { |
| 118 | .name = "CRLfile", | 118 | .name = "CRLfile", |
| 119 | .argname = "file", | 119 | .argname = "file", |
| 120 | .desc = "Certificate Revocation List file", | 120 | .desc = "Certificate Revocation List file", |
| 121 | .type = OPTION_ARG, | 121 | .type = OPTION_ARG, |
| 122 | .opt.arg = &verify_config.crlfile, | 122 | .opt.arg = &cfg.crlfile, |
| 123 | }, | 123 | }, |
| 124 | { | 124 | { |
| 125 | .name = "trusted", | 125 | .name = "trusted", |
| 126 | .argname = "file", | 126 | .argname = "file", |
| 127 | .desc = "Trusted certificates file", | 127 | .desc = "Trusted certificates file", |
| 128 | .type = OPTION_ARG, | 128 | .type = OPTION_ARG, |
| 129 | .opt.arg = &verify_config.trustfile, | 129 | .opt.arg = &cfg.trustfile, |
| 130 | }, | 130 | }, |
| 131 | { | 131 | { |
| 132 | .name = "untrusted", | 132 | .name = "untrusted", |
| 133 | .argname = "file", | 133 | .argname = "file", |
| 134 | .desc = "Untrusted certificates file", | 134 | .desc = "Untrusted certificates file", |
| 135 | .type = OPTION_ARG, | 135 | .type = OPTION_ARG, |
| 136 | .opt.arg = &verify_config.untfile, | 136 | .opt.arg = &cfg.untfile, |
| 137 | }, | 137 | }, |
| 138 | { | 138 | { |
| 139 | .name = "verbose", | 139 | .name = "verbose", |
| 140 | .desc = "Verbose", | 140 | .desc = "Verbose", |
| 141 | .type = OPTION_FLAG, | 141 | .type = OPTION_FLAG, |
| 142 | .opt.flag = &verify_config.verbose, | 142 | .opt.flag = &cfg.verbose, |
| 143 | }, | 143 | }, |
| 144 | { | 144 | { |
| 145 | .name = NULL, | 145 | .name = NULL, |
| @@ -273,7 +273,7 @@ verify_main(int argc, char **argv) | |||
| 273 | exit(1); | 273 | exit(1); |
| 274 | } | 274 | } |
| 275 | 275 | ||
| 276 | memset(&verify_config, 0, sizeof(verify_config)); | 276 | memset(&cfg, 0, sizeof(cfg)); |
| 277 | 277 | ||
| 278 | if (options_parse(argc, argv, verify_options, NULL, &argsused) != 0) { | 278 | if (options_parse(argc, argv, verify_options, NULL, &argsused) != 0) { |
| 279 | verify_usage(); | 279 | verify_usage(); |
| @@ -288,17 +288,17 @@ verify_main(int argc, char **argv) | |||
| 288 | goto end; | 288 | goto end; |
| 289 | X509_STORE_set_verify_cb(cert_ctx, cb); | 289 | X509_STORE_set_verify_cb(cert_ctx, cb); |
| 290 | 290 | ||
| 291 | if (verify_config.vpm) | 291 | if (cfg.vpm) |
| 292 | X509_STORE_set1_param(cert_ctx, verify_config.vpm); | 292 | X509_STORE_set1_param(cert_ctx, cfg.vpm); |
| 293 | 293 | ||
| 294 | lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file()); | 294 | lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file()); |
| 295 | if (lookup == NULL) | 295 | if (lookup == NULL) |
| 296 | abort(); /* XXX */ | 296 | abort(); /* XXX */ |
| 297 | if (verify_config.CAfile) { | 297 | if (cfg.CAfile) { |
| 298 | if (!X509_LOOKUP_load_file(lookup, verify_config.CAfile, | 298 | if (!X509_LOOKUP_load_file(lookup, cfg.CAfile, |
| 299 | X509_FILETYPE_PEM)) { | 299 | X509_FILETYPE_PEM)) { |
| 300 | BIO_printf(bio_err, "Error loading file %s\n", | 300 | BIO_printf(bio_err, "Error loading file %s\n", |
| 301 | verify_config.CAfile); | 301 | cfg.CAfile); |
| 302 | ERR_print_errors(bio_err); | 302 | ERR_print_errors(bio_err); |
| 303 | goto end; | 303 | goto end; |
| 304 | } | 304 | } |
| @@ -308,11 +308,11 @@ verify_main(int argc, char **argv) | |||
| 308 | lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_hash_dir()); | 308 | lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_hash_dir()); |
| 309 | if (lookup == NULL) | 309 | if (lookup == NULL) |
| 310 | abort(); /* XXX */ | 310 | abort(); /* XXX */ |
| 311 | if (verify_config.CApath) { | 311 | if (cfg.CApath) { |
| 312 | if (!X509_LOOKUP_add_dir(lookup, verify_config.CApath, | 312 | if (!X509_LOOKUP_add_dir(lookup, cfg.CApath, |
| 313 | X509_FILETYPE_PEM)) { | 313 | X509_FILETYPE_PEM)) { |
| 314 | BIO_printf(bio_err, "Error loading directory %s\n", | 314 | BIO_printf(bio_err, "Error loading directory %s\n", |
| 315 | verify_config.CApath); | 315 | cfg.CApath); |
| 316 | ERR_print_errors(bio_err); | 316 | ERR_print_errors(bio_err); |
| 317 | goto end; | 317 | goto end; |
| 318 | } | 318 | } |
| @@ -321,20 +321,20 @@ verify_main(int argc, char **argv) | |||
| 321 | 321 | ||
| 322 | ERR_clear_error(); | 322 | ERR_clear_error(); |
| 323 | 323 | ||
| 324 | if (verify_config.untfile) { | 324 | if (cfg.untfile) { |
| 325 | untrusted = load_certs(bio_err, verify_config.untfile, | 325 | untrusted = load_certs(bio_err, cfg.untfile, |
| 326 | FORMAT_PEM, NULL, "untrusted certificates"); | 326 | FORMAT_PEM, NULL, "untrusted certificates"); |
| 327 | if (!untrusted) | 327 | if (!untrusted) |
| 328 | goto end; | 328 | goto end; |
| 329 | } | 329 | } |
| 330 | if (verify_config.trustfile) { | 330 | if (cfg.trustfile) { |
| 331 | trusted = load_certs(bio_err, verify_config.trustfile, | 331 | trusted = load_certs(bio_err, cfg.trustfile, |
| 332 | FORMAT_PEM, NULL, "trusted certificates"); | 332 | FORMAT_PEM, NULL, "trusted certificates"); |
| 333 | if (!trusted) | 333 | if (!trusted) |
| 334 | goto end; | 334 | goto end; |
| 335 | } | 335 | } |
| 336 | if (verify_config.crlfile) { | 336 | if (cfg.crlfile) { |
| 337 | crls = load_crls(bio_err, verify_config.crlfile, FORMAT_PEM, | 337 | crls = load_crls(bio_err, cfg.crlfile, FORMAT_PEM, |
| 338 | NULL, "other CRLs"); | 338 | NULL, "other CRLs"); |
| 339 | if (!crls) | 339 | if (!crls) |
| 340 | goto end; | 340 | goto end; |
| @@ -352,8 +352,8 @@ verify_main(int argc, char **argv) | |||
| 352 | } | 352 | } |
| 353 | 353 | ||
| 354 | end: | 354 | end: |
| 355 | if (verify_config.vpm) | 355 | if (cfg.vpm) |
| 356 | X509_VERIFY_PARAM_free(verify_config.vpm); | 356 | X509_VERIFY_PARAM_free(cfg.vpm); |
| 357 | if (cert_ctx != NULL) | 357 | if (cert_ctx != NULL) |
| 358 | X509_STORE_free(cert_ctx); | 358 | X509_STORE_free(cert_ctx); |
| 359 | sk_X509_pop_free(untrusted, X509_free); | 359 | sk_X509_pop_free(untrusted, X509_free); |
| @@ -454,7 +454,7 @@ cb(int ok, X509_STORE_CTX *ctx) | |||
| 454 | } | 454 | } |
| 455 | if (cert_error == X509_V_OK && ok == 2) | 455 | if (cert_error == X509_V_OK && ok == 2) |
| 456 | policies_print(NULL, ctx); | 456 | policies_print(NULL, ctx); |
| 457 | if (!verify_config.verbose) | 457 | if (!cfg.verbose) |
| 458 | ERR_clear_error(); | 458 | ERR_clear_error(); |
| 459 | return (ok); | 459 | return (ok); |
| 460 | } | 460 | } |
diff --git a/src/usr.bin/openssl/version.c b/src/usr.bin/openssl/version.c index 038774ad0c..6ff1860ead 100644 --- a/src/usr.bin/openssl/version.c +++ b/src/usr.bin/openssl/version.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: version.c,v 1.10 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: version.c,v 1.11 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -142,17 +142,17 @@ static struct { | |||
| 142 | int options; | 142 | int options; |
| 143 | int platform; | 143 | int platform; |
| 144 | int version; | 144 | int version; |
| 145 | } version_config; | 145 | } cfg; |
| 146 | 146 | ||
| 147 | static int | 147 | static int |
| 148 | version_all_opts(void) | 148 | version_all_opts(void) |
| 149 | { | 149 | { |
| 150 | version_config.cflags = 1; | 150 | cfg.cflags = 1; |
| 151 | version_config.date = 1; | 151 | cfg.date = 1; |
| 152 | version_config.dir= 1; | 152 | cfg.dir= 1; |
| 153 | version_config.options = 1; | 153 | cfg.options = 1; |
| 154 | version_config.platform = 1; | 154 | cfg.platform = 1; |
| 155 | version_config.version = 1; | 155 | cfg.version = 1; |
| 156 | 156 | ||
| 157 | return (0); | 157 | return (0); |
| 158 | } | 158 | } |
| @@ -168,37 +168,37 @@ static const struct option version_options[] = { | |||
| 168 | .name = "b", | 168 | .name = "b", |
| 169 | .desc = "Date the current version of OpenSSL was built", | 169 | .desc = "Date the current version of OpenSSL was built", |
| 170 | .type = OPTION_FLAG, | 170 | .type = OPTION_FLAG, |
| 171 | .opt.flag = &version_config.date, | 171 | .opt.flag = &cfg.date, |
| 172 | }, | 172 | }, |
| 173 | { | 173 | { |
| 174 | .name = "d", | 174 | .name = "d", |
| 175 | .desc = "OPENSSLDIR value", | 175 | .desc = "OPENSSLDIR value", |
| 176 | .type = OPTION_FLAG, | 176 | .type = OPTION_FLAG, |
| 177 | .opt.flag = &version_config.dir, | 177 | .opt.flag = &cfg.dir, |
| 178 | }, | 178 | }, |
| 179 | { | 179 | { |
| 180 | .name = "f", | 180 | .name = "f", |
| 181 | .desc = "Compilation flags", | 181 | .desc = "Compilation flags", |
| 182 | .type = OPTION_FLAG, | 182 | .type = OPTION_FLAG, |
| 183 | .opt.flag = &version_config.cflags, | 183 | .opt.flag = &cfg.cflags, |
| 184 | }, | 184 | }, |
| 185 | { | 185 | { |
| 186 | .name = "o", | 186 | .name = "o", |
| 187 | .desc = "Option information", | 187 | .desc = "Option information", |
| 188 | .type = OPTION_FLAG, | 188 | .type = OPTION_FLAG, |
| 189 | .opt.flag = &version_config.options, | 189 | .opt.flag = &cfg.options, |
| 190 | }, | 190 | }, |
| 191 | { | 191 | { |
| 192 | .name = "p", | 192 | .name = "p", |
| 193 | .desc = "Platform settings", | 193 | .desc = "Platform settings", |
| 194 | .type = OPTION_FLAG, | 194 | .type = OPTION_FLAG, |
| 195 | .opt.flag = &version_config.platform, | 195 | .opt.flag = &cfg.platform, |
| 196 | }, | 196 | }, |
| 197 | { | 197 | { |
| 198 | .name = "v", | 198 | .name = "v", |
| 199 | .desc = "Current OpenSSL version", | 199 | .desc = "Current OpenSSL version", |
| 200 | .type = OPTION_FLAG, | 200 | .type = OPTION_FLAG, |
| 201 | .opt.flag = &version_config.version, | 201 | .opt.flag = &cfg.version, |
| 202 | }, | 202 | }, |
| 203 | {NULL}, | 203 | {NULL}, |
| 204 | }; | 204 | }; |
| @@ -218,7 +218,7 @@ version_main(int argc, char **argv) | |||
| 218 | exit(1); | 218 | exit(1); |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | memset(&version_config, 0, sizeof(version_config)); | 221 | memset(&cfg, 0, sizeof(cfg)); |
| 222 | 222 | ||
| 223 | if (options_parse(argc, argv, version_options, NULL, NULL) != 0) { | 223 | if (options_parse(argc, argv, version_options, NULL, NULL) != 0) { |
| 224 | version_usage(); | 224 | version_usage(); |
| @@ -226,9 +226,9 @@ version_main(int argc, char **argv) | |||
| 226 | } | 226 | } |
| 227 | 227 | ||
| 228 | if (argc == 1) | 228 | if (argc == 1) |
| 229 | version_config.version = 1; | 229 | cfg.version = 1; |
| 230 | 230 | ||
| 231 | if (version_config.version) { | 231 | if (cfg.version) { |
| 232 | if (SSLeay() == SSLEAY_VERSION_NUMBER) { | 232 | if (SSLeay() == SSLEAY_VERSION_NUMBER) { |
| 233 | printf("%s\n", SSLeay_version(SSLEAY_VERSION)); | 233 | printf("%s\n", SSLeay_version(SSLEAY_VERSION)); |
| 234 | } else { | 234 | } else { |
| @@ -237,11 +237,11 @@ version_main(int argc, char **argv) | |||
| 237 | SSLeay_version(SSLEAY_VERSION)); | 237 | SSLeay_version(SSLEAY_VERSION)); |
| 238 | } | 238 | } |
| 239 | } | 239 | } |
| 240 | if (version_config.date) | 240 | if (cfg.date) |
| 241 | printf("%s\n", SSLeay_version(SSLEAY_BUILT_ON)); | 241 | printf("%s\n", SSLeay_version(SSLEAY_BUILT_ON)); |
| 242 | if (version_config.platform) | 242 | if (cfg.platform) |
| 243 | printf("%s\n", SSLeay_version(SSLEAY_PLATFORM)); | 243 | printf("%s\n", SSLeay_version(SSLEAY_PLATFORM)); |
| 244 | if (version_config.options) { | 244 | if (cfg.options) { |
| 245 | printf("options: "); | 245 | printf("options: "); |
| 246 | printf("%s ", BN_options()); | 246 | printf("%s ", BN_options()); |
| 247 | #ifndef OPENSSL_NO_RC4 | 247 | #ifndef OPENSSL_NO_RC4 |
| @@ -258,9 +258,9 @@ version_main(int argc, char **argv) | |||
| 258 | #endif | 258 | #endif |
| 259 | printf("\n"); | 259 | printf("\n"); |
| 260 | } | 260 | } |
| 261 | if (version_config.cflags) | 261 | if (cfg.cflags) |
| 262 | printf("%s\n", SSLeay_version(SSLEAY_CFLAGS)); | 262 | printf("%s\n", SSLeay_version(SSLEAY_CFLAGS)); |
| 263 | if (version_config.dir) | 263 | if (cfg.dir) |
| 264 | printf("%s\n", SSLeay_version(SSLEAY_DIR)); | 264 | printf("%s\n", SSLeay_version(SSLEAY_DIR)); |
| 265 | 265 | ||
| 266 | return (0); | 266 | return (0); |
diff --git a/src/usr.bin/openssl/x509.c b/src/usr.bin/openssl/x509.c index e1c69c6798..66cad3ab2c 100644 --- a/src/usr.bin/openssl/x509.c +++ b/src/usr.bin/openssl/x509.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x509.c,v 1.30 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: x509.c,v 1.31 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -152,58 +152,58 @@ static struct { | |||
| 152 | STACK_OF(ASN1_OBJECT) *trust; | 152 | STACK_OF(ASN1_OBJECT) *trust; |
| 153 | int trustout; | 153 | int trustout; |
| 154 | int x509req; | 154 | int x509req; |
| 155 | } x509_config; | 155 | } cfg; |
| 156 | 156 | ||
| 157 | static int | 157 | static int |
| 158 | x509_opt_addreject(char *arg) | 158 | x509_opt_addreject(char *arg) |
| 159 | { | 159 | { |
| 160 | if ((x509_config.objtmp = OBJ_txt2obj(arg, 0)) == NULL) { | 160 | if ((cfg.objtmp = OBJ_txt2obj(arg, 0)) == NULL) { |
| 161 | BIO_printf(bio_err, "Invalid reject object value %s\n", arg); | 161 | BIO_printf(bio_err, "Invalid reject object value %s\n", arg); |
| 162 | return (1); | 162 | return (1); |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | if (x509_config.reject == NULL && | 165 | if (cfg.reject == NULL && |
| 166 | (x509_config.reject = sk_ASN1_OBJECT_new_null()) == NULL) | 166 | (cfg.reject = sk_ASN1_OBJECT_new_null()) == NULL) |
| 167 | return (1); | 167 | return (1); |
| 168 | 168 | ||
| 169 | if (!sk_ASN1_OBJECT_push(x509_config.reject, x509_config.objtmp)) | 169 | if (!sk_ASN1_OBJECT_push(cfg.reject, cfg.objtmp)) |
| 170 | return (1); | 170 | return (1); |
| 171 | 171 | ||
| 172 | x509_config.trustout = 1; | 172 | cfg.trustout = 1; |
| 173 | return (0); | 173 | return (0); |
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | static int | 176 | static int |
| 177 | x509_opt_addtrust(char *arg) | 177 | x509_opt_addtrust(char *arg) |
| 178 | { | 178 | { |
| 179 | if ((x509_config.objtmp = OBJ_txt2obj(arg, 0)) == NULL) { | 179 | if ((cfg.objtmp = OBJ_txt2obj(arg, 0)) == NULL) { |
| 180 | BIO_printf(bio_err, "Invalid trust object value %s\n", arg); | 180 | BIO_printf(bio_err, "Invalid trust object value %s\n", arg); |
| 181 | return (1); | 181 | return (1); |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | if (x509_config.trust == NULL && | 184 | if (cfg.trust == NULL && |
| 185 | (x509_config.trust = sk_ASN1_OBJECT_new_null()) == NULL) | 185 | (cfg.trust = sk_ASN1_OBJECT_new_null()) == NULL) |
| 186 | return (1); | 186 | return (1); |
| 187 | 187 | ||
| 188 | if (!sk_ASN1_OBJECT_push(x509_config.trust, x509_config.objtmp)) | 188 | if (!sk_ASN1_OBJECT_push(cfg.trust, cfg.objtmp)) |
| 189 | return (1); | 189 | return (1); |
| 190 | 190 | ||
| 191 | x509_config.trustout = 1; | 191 | cfg.trustout = 1; |
| 192 | return (0); | 192 | return (0); |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | static int | 195 | static int |
| 196 | x509_opt_ca(char *arg) | 196 | x509_opt_ca(char *arg) |
| 197 | { | 197 | { |
| 198 | x509_config.CAfile = arg; | 198 | cfg.CAfile = arg; |
| 199 | x509_config.CA_flag = ++x509_config.num; | 199 | cfg.CA_flag = ++cfg.num; |
| 200 | return (0); | 200 | return (0); |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | static int | 203 | static int |
| 204 | x509_opt_certopt(char *arg) | 204 | x509_opt_certopt(char *arg) |
| 205 | { | 205 | { |
| 206 | if (!set_cert_ex(&x509_config.certflag, arg)) | 206 | if (!set_cert_ex(&cfg.certflag, arg)) |
| 207 | return (1); | 207 | return (1); |
| 208 | 208 | ||
| 209 | return (0); | 209 | return (0); |
| @@ -214,20 +214,20 @@ x509_opt_checkend(char *arg) | |||
| 214 | { | 214 | { |
| 215 | const char *errstr; | 215 | const char *errstr; |
| 216 | 216 | ||
| 217 | x509_config.checkoffset = strtonum(arg, 0, INT_MAX, &errstr); | 217 | cfg.checkoffset = strtonum(arg, 0, INT_MAX, &errstr); |
| 218 | if (errstr != NULL) { | 218 | if (errstr != NULL) { |
| 219 | BIO_printf(bio_err, "checkend unusable: %s\n", errstr); | 219 | BIO_printf(bio_err, "checkend unusable: %s\n", errstr); |
| 220 | return (1); | 220 | return (1); |
| 221 | } | 221 | } |
| 222 | x509_config.checkend = 1; | 222 | cfg.checkend = 1; |
| 223 | return (0); | 223 | return (0); |
| 224 | } | 224 | } |
| 225 | 225 | ||
| 226 | static int | 226 | static int |
| 227 | x509_opt_dates(void) | 227 | x509_opt_dates(void) |
| 228 | { | 228 | { |
| 229 | x509_config.startdate = ++x509_config.num; | 229 | cfg.startdate = ++cfg.num; |
| 230 | x509_config.enddate = ++x509_config.num; | 230 | cfg.enddate = ++cfg.num; |
| 231 | return (0); | 231 | return (0); |
| 232 | } | 232 | } |
| 233 | 233 | ||
| @@ -236,7 +236,7 @@ x509_opt_days(char *arg) | |||
| 236 | { | 236 | { |
| 237 | const char *errstr; | 237 | const char *errstr; |
| 238 | 238 | ||
| 239 | x509_config.days = strtonum(arg, 1, INT_MAX, &errstr); | 239 | cfg.days = strtonum(arg, 1, INT_MAX, &errstr); |
| 240 | if (errstr != NULL) { | 240 | if (errstr != NULL) { |
| 241 | BIO_printf(bio_err, "bad number of days: %s\n", errstr); | 241 | BIO_printf(bio_err, "bad number of days: %s\n", errstr); |
| 242 | return (1); | 242 | return (1); |
| @@ -252,11 +252,11 @@ x509_opt_digest(int argc, char **argv, int *argsused) | |||
| 252 | if (*name++ != '-') | 252 | if (*name++ != '-') |
| 253 | return (1); | 253 | return (1); |
| 254 | 254 | ||
| 255 | if ((x509_config.md_alg = EVP_get_digestbyname(name)) != NULL) { | 255 | if ((cfg.md_alg = EVP_get_digestbyname(name)) != NULL) { |
| 256 | x509_config.digest = x509_config.md_alg; | 256 | cfg.digest = cfg.md_alg; |
| 257 | } else { | 257 | } else { |
| 258 | BIO_printf(bio_err, "unknown option %s\n", *argv); | 258 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 259 | x509_config.badops = 1; | 259 | cfg.badops = 1; |
| 260 | return (1); | 260 | return (1); |
| 261 | } | 261 | } |
| 262 | 262 | ||
| @@ -267,7 +267,7 @@ x509_opt_digest(int argc, char **argv, int *argsused) | |||
| 267 | static int | 267 | static int |
| 268 | x509_opt_nameopt(char *arg) | 268 | x509_opt_nameopt(char *arg) |
| 269 | { | 269 | { |
| 270 | if (!set_name_ex(&x509_config.nmflag, arg)) | 270 | if (!set_name_ex(&cfg.nmflag, arg)) |
| 271 | return (1); | 271 | return (1); |
| 272 | 272 | ||
| 273 | return (0); | 273 | return (0); |
| @@ -276,8 +276,8 @@ x509_opt_nameopt(char *arg) | |||
| 276 | static int | 276 | static int |
| 277 | x509_opt_set_serial(char *arg) | 277 | x509_opt_set_serial(char *arg) |
| 278 | { | 278 | { |
| 279 | ASN1_INTEGER_free(x509_config.sno); | 279 | ASN1_INTEGER_free(cfg.sno); |
| 280 | if ((x509_config.sno = s2i_ASN1_INTEGER(NULL, arg)) == NULL) | 280 | if ((cfg.sno = s2i_ASN1_INTEGER(NULL, arg)) == NULL) |
| 281 | return (1); | 281 | return (1); |
| 282 | 282 | ||
| 283 | return (0); | 283 | return (0); |
| @@ -286,27 +286,27 @@ x509_opt_set_serial(char *arg) | |||
| 286 | static int | 286 | static int |
| 287 | x509_opt_setalias(char *arg) | 287 | x509_opt_setalias(char *arg) |
| 288 | { | 288 | { |
| 289 | x509_config.alias = arg; | 289 | cfg.alias = arg; |
| 290 | x509_config.trustout = 1; | 290 | cfg.trustout = 1; |
| 291 | return (0); | 291 | return (0); |
| 292 | } | 292 | } |
| 293 | 293 | ||
| 294 | static int | 294 | static int |
| 295 | x509_opt_signkey(char *arg) | 295 | x509_opt_signkey(char *arg) |
| 296 | { | 296 | { |
| 297 | x509_config.keyfile = arg; | 297 | cfg.keyfile = arg; |
| 298 | x509_config.sign_flag = ++x509_config.num; | 298 | cfg.sign_flag = ++cfg.num; |
| 299 | return (0); | 299 | return (0); |
| 300 | } | 300 | } |
| 301 | 301 | ||
| 302 | static int | 302 | static int |
| 303 | x509_opt_sigopt(char *arg) | 303 | x509_opt_sigopt(char *arg) |
| 304 | { | 304 | { |
| 305 | if (x509_config.sigopts == NULL && | 305 | if (cfg.sigopts == NULL && |
| 306 | (x509_config.sigopts = sk_OPENSSL_STRING_new_null()) == NULL) | 306 | (cfg.sigopts = sk_OPENSSL_STRING_new_null()) == NULL) |
| 307 | return (1); | 307 | return (1); |
| 308 | 308 | ||
| 309 | if (!sk_OPENSSL_STRING_push(x509_config.sigopts, arg)) | 309 | if (!sk_OPENSSL_STRING_push(cfg.sigopts, arg)) |
| 310 | return (1); | 310 | return (1); |
| 311 | 311 | ||
| 312 | return (0); | 312 | return (0); |
| @@ -317,8 +317,8 @@ static const struct option x509_options[] = { | |||
| 317 | .name = "C", | 317 | .name = "C", |
| 318 | .desc = "Convert the certificate into C code", | 318 | .desc = "Convert the certificate into C code", |
| 319 | .type = OPTION_ORDER, | 319 | .type = OPTION_ORDER, |
| 320 | .opt.order = &x509_config.C, | 320 | .opt.order = &cfg.C, |
| 321 | .order = &x509_config.num, | 321 | .order = &cfg.num, |
| 322 | }, | 322 | }, |
| 323 | { | 323 | { |
| 324 | .name = "addreject", | 324 | .name = "addreject", |
| @@ -338,8 +338,8 @@ static const struct option x509_options[] = { | |||
| 338 | .name = "alias", | 338 | .name = "alias", |
| 339 | .desc = "Output certificate alias", | 339 | .desc = "Output certificate alias", |
| 340 | .type = OPTION_ORDER, | 340 | .type = OPTION_ORDER, |
| 341 | .opt.order = &x509_config.aliasout, | 341 | .opt.order = &cfg.aliasout, |
| 342 | .order = &x509_config.num, | 342 | .order = &cfg.num, |
| 343 | }, | 343 | }, |
| 344 | { | 344 | { |
| 345 | .name = "CA", | 345 | .name = "CA", |
| @@ -352,15 +352,15 @@ static const struct option x509_options[] = { | |||
| 352 | .name = "CAcreateserial", | 352 | .name = "CAcreateserial", |
| 353 | .desc = "Create serial number file if it does not exist", | 353 | .desc = "Create serial number file if it does not exist", |
| 354 | .type = OPTION_ORDER, | 354 | .type = OPTION_ORDER, |
| 355 | .opt.order = &x509_config.CA_createserial, | 355 | .opt.order = &cfg.CA_createserial, |
| 356 | .order = &x509_config.num, | 356 | .order = &cfg.num, |
| 357 | }, | 357 | }, |
| 358 | { | 358 | { |
| 359 | .name = "CAform", | 359 | .name = "CAform", |
| 360 | .argname = "fmt", | 360 | .argname = "fmt", |
| 361 | .desc = "CA format - default PEM", | 361 | .desc = "CA format - default PEM", |
| 362 | .type = OPTION_ARG_FORMAT, | 362 | .type = OPTION_ARG_FORMAT, |
| 363 | .opt.value = &x509_config.CAformat, | 363 | .opt.value = &cfg.CAformat, |
| 364 | }, | 364 | }, |
| 365 | { | 365 | { |
| 366 | .name = "CAkey", | 366 | .name = "CAkey", |
| @@ -368,21 +368,21 @@ static const struct option x509_options[] = { | |||
| 368 | .desc = "CA key in PEM format unless -CAkeyform is specified\n" | 368 | .desc = "CA key in PEM format unless -CAkeyform is specified\n" |
| 369 | "if omitted, the key is assumed to be in the CA file", | 369 | "if omitted, the key is assumed to be in the CA file", |
| 370 | .type = OPTION_ARG, | 370 | .type = OPTION_ARG, |
| 371 | .opt.arg = &x509_config.CAkeyfile, | 371 | .opt.arg = &cfg.CAkeyfile, |
| 372 | }, | 372 | }, |
| 373 | { | 373 | { |
| 374 | .name = "CAkeyform", | 374 | .name = "CAkeyform", |
| 375 | .argname = "fmt", | 375 | .argname = "fmt", |
| 376 | .desc = "CA key format - default PEM", | 376 | .desc = "CA key format - default PEM", |
| 377 | .type = OPTION_ARG_FORMAT, | 377 | .type = OPTION_ARG_FORMAT, |
| 378 | .opt.value = &x509_config.CAkeyformat, | 378 | .opt.value = &cfg.CAkeyformat, |
| 379 | }, | 379 | }, |
| 380 | { | 380 | { |
| 381 | .name = "CAserial", | 381 | .name = "CAserial", |
| 382 | .argname = "file", | 382 | .argname = "file", |
| 383 | .desc = "Serial file", | 383 | .desc = "Serial file", |
| 384 | .type = OPTION_ARG, | 384 | .type = OPTION_ARG, |
| 385 | .opt.arg = &x509_config.CAserial, | 385 | .opt.arg = &cfg.CAserial, |
| 386 | }, | 386 | }, |
| 387 | { | 387 | { |
| 388 | .name = "certopt", | 388 | .name = "certopt", |
| @@ -403,21 +403,21 @@ static const struct option x509_options[] = { | |||
| 403 | .name = "clrext", | 403 | .name = "clrext", |
| 404 | .desc = "Clear all extensions", | 404 | .desc = "Clear all extensions", |
| 405 | .type = OPTION_FLAG, | 405 | .type = OPTION_FLAG, |
| 406 | .opt.flag = &x509_config.clrext, | 406 | .opt.flag = &cfg.clrext, |
| 407 | }, | 407 | }, |
| 408 | { | 408 | { |
| 409 | .name = "clrreject", | 409 | .name = "clrreject", |
| 410 | .desc = "Clear all rejected purposes", | 410 | .desc = "Clear all rejected purposes", |
| 411 | .type = OPTION_ORDER, | 411 | .type = OPTION_ORDER, |
| 412 | .opt.order = &x509_config.clrreject, | 412 | .opt.order = &cfg.clrreject, |
| 413 | .order = &x509_config.num, | 413 | .order = &cfg.num, |
| 414 | }, | 414 | }, |
| 415 | { | 415 | { |
| 416 | .name = "clrtrust", | 416 | .name = "clrtrust", |
| 417 | .desc = "Clear all trusted purposes", | 417 | .desc = "Clear all trusted purposes", |
| 418 | .type = OPTION_ORDER, | 418 | .type = OPTION_ORDER, |
| 419 | .opt.order = &x509_config.clrtrust, | 419 | .opt.order = &cfg.clrtrust, |
| 420 | .order = &x509_config.num, | 420 | .order = &cfg.num, |
| 421 | }, | 421 | }, |
| 422 | { | 422 | { |
| 423 | .name = "dates", | 423 | .name = "dates", |
| @@ -436,79 +436,79 @@ static const struct option x509_options[] = { | |||
| 436 | .name = "email", | 436 | .name = "email", |
| 437 | .desc = "Print email address(es)", | 437 | .desc = "Print email address(es)", |
| 438 | .type = OPTION_ORDER, | 438 | .type = OPTION_ORDER, |
| 439 | .opt.order = &x509_config.email, | 439 | .opt.order = &cfg.email, |
| 440 | .order = &x509_config.num, | 440 | .order = &cfg.num, |
| 441 | }, | 441 | }, |
| 442 | { | 442 | { |
| 443 | .name = "enddate", | 443 | .name = "enddate", |
| 444 | .desc = "Print notAfter field", | 444 | .desc = "Print notAfter field", |
| 445 | .type = OPTION_ORDER, | 445 | .type = OPTION_ORDER, |
| 446 | .opt.order = &x509_config.enddate, | 446 | .opt.order = &cfg.enddate, |
| 447 | .order = &x509_config.num, | 447 | .order = &cfg.num, |
| 448 | }, | 448 | }, |
| 449 | { | 449 | { |
| 450 | .name = "extensions", | 450 | .name = "extensions", |
| 451 | .argname = "section", | 451 | .argname = "section", |
| 452 | .desc = "Section from config file with X509V3 extensions to add", | 452 | .desc = "Section from config file with X509V3 extensions to add", |
| 453 | .type = OPTION_ARG, | 453 | .type = OPTION_ARG, |
| 454 | .opt.arg = &x509_config.extsect, | 454 | .opt.arg = &cfg.extsect, |
| 455 | }, | 455 | }, |
| 456 | { | 456 | { |
| 457 | .name = "extfile", | 457 | .name = "extfile", |
| 458 | .argname = "file", | 458 | .argname = "file", |
| 459 | .desc = "Configuration file with X509V3 extensions to add", | 459 | .desc = "Configuration file with X509V3 extensions to add", |
| 460 | .type = OPTION_ARG, | 460 | .type = OPTION_ARG, |
| 461 | .opt.arg = &x509_config.extfile, | 461 | .opt.arg = &cfg.extfile, |
| 462 | }, | 462 | }, |
| 463 | { | 463 | { |
| 464 | .name = "fingerprint", | 464 | .name = "fingerprint", |
| 465 | .desc = "Print the certificate fingerprint", | 465 | .desc = "Print the certificate fingerprint", |
| 466 | .type = OPTION_ORDER, | 466 | .type = OPTION_ORDER, |
| 467 | .opt.order = &x509_config.fingerprint, | 467 | .opt.order = &cfg.fingerprint, |
| 468 | .order = &x509_config.num, | 468 | .order = &cfg.num, |
| 469 | }, | 469 | }, |
| 470 | { | 470 | { |
| 471 | .name = "hash", | 471 | .name = "hash", |
| 472 | .desc = "Synonym for -subject_hash", | 472 | .desc = "Synonym for -subject_hash", |
| 473 | .type = OPTION_ORDER, | 473 | .type = OPTION_ORDER, |
| 474 | .opt.order = &x509_config.subject_hash, | 474 | .opt.order = &cfg.subject_hash, |
| 475 | .order = &x509_config.num, | 475 | .order = &cfg.num, |
| 476 | }, | 476 | }, |
| 477 | { | 477 | { |
| 478 | .name = "in", | 478 | .name = "in", |
| 479 | .argname = "file", | 479 | .argname = "file", |
| 480 | .desc = "Input file - default stdin", | 480 | .desc = "Input file - default stdin", |
| 481 | .type = OPTION_ARG, | 481 | .type = OPTION_ARG, |
| 482 | .opt.arg = &x509_config.infile, | 482 | .opt.arg = &cfg.infile, |
| 483 | }, | 483 | }, |
| 484 | { | 484 | { |
| 485 | .name = "inform", | 485 | .name = "inform", |
| 486 | .argname = "fmt", | 486 | .argname = "fmt", |
| 487 | .desc = "Input format - default PEM (one of DER, NET or PEM)", | 487 | .desc = "Input format - default PEM (one of DER, NET or PEM)", |
| 488 | .type = OPTION_ARG_FORMAT, | 488 | .type = OPTION_ARG_FORMAT, |
| 489 | .opt.value = &x509_config.informat, | 489 | .opt.value = &cfg.informat, |
| 490 | }, | 490 | }, |
| 491 | { | 491 | { |
| 492 | .name = "issuer", | 492 | .name = "issuer", |
| 493 | .desc = "Print issuer name", | 493 | .desc = "Print issuer name", |
| 494 | .type = OPTION_ORDER, | 494 | .type = OPTION_ORDER, |
| 495 | .opt.order = &x509_config.issuer, | 495 | .opt.order = &cfg.issuer, |
| 496 | .order = &x509_config.num, | 496 | .order = &cfg.num, |
| 497 | }, | 497 | }, |
| 498 | { | 498 | { |
| 499 | .name = "issuer_hash", | 499 | .name = "issuer_hash", |
| 500 | .desc = "Print issuer hash value", | 500 | .desc = "Print issuer hash value", |
| 501 | .type = OPTION_ORDER, | 501 | .type = OPTION_ORDER, |
| 502 | .opt.order = &x509_config.issuer_hash, | 502 | .opt.order = &cfg.issuer_hash, |
| 503 | .order = &x509_config.num, | 503 | .order = &cfg.num, |
| 504 | }, | 504 | }, |
| 505 | #ifndef OPENSSL_NO_MD5 | 505 | #ifndef OPENSSL_NO_MD5 |
| 506 | { | 506 | { |
| 507 | .name = "issuer_hash_old", | 507 | .name = "issuer_hash_old", |
| 508 | .desc = "Print old-style (MD5) issuer hash value", | 508 | .desc = "Print old-style (MD5) issuer hash value", |
| 509 | .type = OPTION_ORDER, | 509 | .type = OPTION_ORDER, |
| 510 | .opt.order = &x509_config.issuer_hash_old, | 510 | .opt.order = &cfg.issuer_hash_old, |
| 511 | .order = &x509_config.num, | 511 | .order = &cfg.num, |
| 512 | }, | 512 | }, |
| 513 | #endif | 513 | #endif |
| 514 | { | 514 | { |
| @@ -516,14 +516,14 @@ static const struct option x509_options[] = { | |||
| 516 | .argname = "fmt", | 516 | .argname = "fmt", |
| 517 | .desc = "Private key format - default PEM", | 517 | .desc = "Private key format - default PEM", |
| 518 | .type = OPTION_ARG_FORMAT, | 518 | .type = OPTION_ARG_FORMAT, |
| 519 | .opt.value = &x509_config.keyformat, | 519 | .opt.value = &cfg.keyformat, |
| 520 | }, | 520 | }, |
| 521 | { | 521 | { |
| 522 | .name = "modulus", | 522 | .name = "modulus", |
| 523 | .desc = "Print the RSA key modulus", | 523 | .desc = "Print the RSA key modulus", |
| 524 | .type = OPTION_ORDER, | 524 | .type = OPTION_ORDER, |
| 525 | .opt.order = &x509_config.modulus, | 525 | .opt.order = &cfg.modulus, |
| 526 | .order = &x509_config.num, | 526 | .order = &cfg.num, |
| 527 | }, | 527 | }, |
| 528 | { | 528 | { |
| 529 | .name = "nameopt", | 529 | .name = "nameopt", |
| @@ -536,77 +536,77 @@ static const struct option x509_options[] = { | |||
| 536 | .name = "next_serial", | 536 | .name = "next_serial", |
| 537 | .desc = "Print the next serial number", | 537 | .desc = "Print the next serial number", |
| 538 | .type = OPTION_ORDER, | 538 | .type = OPTION_ORDER, |
| 539 | .opt.order = &x509_config.next_serial, | 539 | .opt.order = &cfg.next_serial, |
| 540 | .order = &x509_config.num, | 540 | .order = &cfg.num, |
| 541 | }, | 541 | }, |
| 542 | { | 542 | { |
| 543 | .name = "noout", | 543 | .name = "noout", |
| 544 | .desc = "No certificate output", | 544 | .desc = "No certificate output", |
| 545 | .type = OPTION_ORDER, | 545 | .type = OPTION_ORDER, |
| 546 | .opt.order = &x509_config.noout, | 546 | .opt.order = &cfg.noout, |
| 547 | .order = &x509_config.num, | 547 | .order = &cfg.num, |
| 548 | }, | 548 | }, |
| 549 | { | 549 | { |
| 550 | .name = "ocsp_uri", | 550 | .name = "ocsp_uri", |
| 551 | .desc = "Print OCSP Responder URL(s)", | 551 | .desc = "Print OCSP Responder URL(s)", |
| 552 | .type = OPTION_ORDER, | 552 | .type = OPTION_ORDER, |
| 553 | .opt.order = &x509_config.ocsp_uri, | 553 | .opt.order = &cfg.ocsp_uri, |
| 554 | .order = &x509_config.num, | 554 | .order = &cfg.num, |
| 555 | }, | 555 | }, |
| 556 | { | 556 | { |
| 557 | .name = "ocspid", | 557 | .name = "ocspid", |
| 558 | .desc = "Print OCSP hash values for the subject name and public key", | 558 | .desc = "Print OCSP hash values for the subject name and public key", |
| 559 | .type = OPTION_ORDER, | 559 | .type = OPTION_ORDER, |
| 560 | .opt.order = &x509_config.ocspid, | 560 | .opt.order = &cfg.ocspid, |
| 561 | .order = &x509_config.num, | 561 | .order = &cfg.num, |
| 562 | }, | 562 | }, |
| 563 | { | 563 | { |
| 564 | .name = "out", | 564 | .name = "out", |
| 565 | .argname = "file", | 565 | .argname = "file", |
| 566 | .desc = "Output file - default stdout", | 566 | .desc = "Output file - default stdout", |
| 567 | .type = OPTION_ARG, | 567 | .type = OPTION_ARG, |
| 568 | .opt.arg = &x509_config.outfile, | 568 | .opt.arg = &cfg.outfile, |
| 569 | }, | 569 | }, |
| 570 | { | 570 | { |
| 571 | .name = "outform", | 571 | .name = "outform", |
| 572 | .argname = "fmt", | 572 | .argname = "fmt", |
| 573 | .desc = "Output format - default PEM (one of DER, NET or PEM)", | 573 | .desc = "Output format - default PEM (one of DER, NET or PEM)", |
| 574 | .type = OPTION_ARG_FORMAT, | 574 | .type = OPTION_ARG_FORMAT, |
| 575 | .opt.value = &x509_config.outformat, | 575 | .opt.value = &cfg.outformat, |
| 576 | }, | 576 | }, |
| 577 | { | 577 | { |
| 578 | .name = "passin", | 578 | .name = "passin", |
| 579 | .argname = "src", | 579 | .argname = "src", |
| 580 | .desc = "Private key password source", | 580 | .desc = "Private key password source", |
| 581 | .type = OPTION_ARG, | 581 | .type = OPTION_ARG, |
| 582 | .opt.arg = &x509_config.passargin, | 582 | .opt.arg = &cfg.passargin, |
| 583 | }, | 583 | }, |
| 584 | { | 584 | { |
| 585 | .name = "pubkey", | 585 | .name = "pubkey", |
| 586 | .desc = "Output the public key", | 586 | .desc = "Output the public key", |
| 587 | .type = OPTION_ORDER, | 587 | .type = OPTION_ORDER, |
| 588 | .opt.order = &x509_config.pubkey, | 588 | .opt.order = &cfg.pubkey, |
| 589 | .order = &x509_config.num, | 589 | .order = &cfg.num, |
| 590 | }, | 590 | }, |
| 591 | { | 591 | { |
| 592 | .name = "purpose", | 592 | .name = "purpose", |
| 593 | .desc = "Print out certificate purposes", | 593 | .desc = "Print out certificate purposes", |
| 594 | .type = OPTION_ORDER, | 594 | .type = OPTION_ORDER, |
| 595 | .opt.order = &x509_config.pprint, | 595 | .opt.order = &cfg.pprint, |
| 596 | .order = &x509_config.num, | 596 | .order = &cfg.num, |
| 597 | }, | 597 | }, |
| 598 | { | 598 | { |
| 599 | .name = "req", | 599 | .name = "req", |
| 600 | .desc = "Input is a certificate request, sign and output", | 600 | .desc = "Input is a certificate request, sign and output", |
| 601 | .type = OPTION_FLAG, | 601 | .type = OPTION_FLAG, |
| 602 | .opt.flag = &x509_config.reqfile, | 602 | .opt.flag = &cfg.reqfile, |
| 603 | }, | 603 | }, |
| 604 | { | 604 | { |
| 605 | .name = "serial", | 605 | .name = "serial", |
| 606 | .desc = "Print serial number value", | 606 | .desc = "Print serial number value", |
| 607 | .type = OPTION_ORDER, | 607 | .type = OPTION_ORDER, |
| 608 | .opt.order = &x509_config.serial, | 608 | .opt.order = &cfg.serial, |
| 609 | .order = &x509_config.num, | 609 | .order = &cfg.num, |
| 610 | }, | 610 | }, |
| 611 | { | 611 | { |
| 612 | .name = "set_serial", | 612 | .name = "set_serial", |
| @@ -640,51 +640,51 @@ static const struct option x509_options[] = { | |||
| 640 | .name = "startdate", | 640 | .name = "startdate", |
| 641 | .desc = "Print notBefore field", | 641 | .desc = "Print notBefore field", |
| 642 | .type = OPTION_ORDER, | 642 | .type = OPTION_ORDER, |
| 643 | .opt.order = &x509_config.startdate, | 643 | .opt.order = &cfg.startdate, |
| 644 | .order = &x509_config.num, | 644 | .order = &cfg.num, |
| 645 | }, | 645 | }, |
| 646 | { | 646 | { |
| 647 | .name = "subject", | 647 | .name = "subject", |
| 648 | .desc = "Print subject name", | 648 | .desc = "Print subject name", |
| 649 | .type = OPTION_ORDER, | 649 | .type = OPTION_ORDER, |
| 650 | .opt.order = &x509_config.subject, | 650 | .opt.order = &cfg.subject, |
| 651 | .order = &x509_config.num, | 651 | .order = &cfg.num, |
| 652 | }, | 652 | }, |
| 653 | { | 653 | { |
| 654 | .name = "subject_hash", | 654 | .name = "subject_hash", |
| 655 | .desc = "Print subject hash value", | 655 | .desc = "Print subject hash value", |
| 656 | .type = OPTION_ORDER, | 656 | .type = OPTION_ORDER, |
| 657 | .opt.order = &x509_config.subject_hash, | 657 | .opt.order = &cfg.subject_hash, |
| 658 | .order = &x509_config.num, | 658 | .order = &cfg.num, |
| 659 | }, | 659 | }, |
| 660 | #ifndef OPENSSL_NO_MD5 | 660 | #ifndef OPENSSL_NO_MD5 |
| 661 | { | 661 | { |
| 662 | .name = "subject_hash_old", | 662 | .name = "subject_hash_old", |
| 663 | .desc = "Print old-style (MD5) subject hash value", | 663 | .desc = "Print old-style (MD5) subject hash value", |
| 664 | .type = OPTION_ORDER, | 664 | .type = OPTION_ORDER, |
| 665 | .opt.order = &x509_config.subject_hash_old, | 665 | .opt.order = &cfg.subject_hash_old, |
| 666 | .order = &x509_config.num, | 666 | .order = &cfg.num, |
| 667 | }, | 667 | }, |
| 668 | #endif | 668 | #endif |
| 669 | { | 669 | { |
| 670 | .name = "text", | 670 | .name = "text", |
| 671 | .desc = "Print the certificate in text form", | 671 | .desc = "Print the certificate in text form", |
| 672 | .type = OPTION_ORDER, | 672 | .type = OPTION_ORDER, |
| 673 | .opt.order = &x509_config.text, | 673 | .opt.order = &cfg.text, |
| 674 | .order = &x509_config.num, | 674 | .order = &cfg.num, |
| 675 | }, | 675 | }, |
| 676 | { | 676 | { |
| 677 | .name = "trustout", | 677 | .name = "trustout", |
| 678 | .desc = "Output a trusted certificate", | 678 | .desc = "Output a trusted certificate", |
| 679 | .type = OPTION_FLAG, | 679 | .type = OPTION_FLAG, |
| 680 | .opt.flag = &x509_config.trustout, | 680 | .opt.flag = &cfg.trustout, |
| 681 | }, | 681 | }, |
| 682 | { | 682 | { |
| 683 | .name = "x509toreq", | 683 | .name = "x509toreq", |
| 684 | .desc = "Output a certification request object", | 684 | .desc = "Output a certification request object", |
| 685 | .type = OPTION_ORDER, | 685 | .type = OPTION_ORDER, |
| 686 | .opt.order = &x509_config.x509req, | 686 | .opt.order = &cfg.x509req, |
| 687 | .order = &x509_config.num, | 687 | .order = &cfg.num, |
| 688 | }, | 688 | }, |
| 689 | { | 689 | { |
| 690 | .name = NULL, | 690 | .name = NULL, |
| @@ -740,13 +740,13 @@ x509_main(int argc, char **argv) | |||
| 740 | exit(1); | 740 | exit(1); |
| 741 | } | 741 | } |
| 742 | 742 | ||
| 743 | memset(&x509_config, 0, sizeof(x509_config)); | 743 | memset(&cfg, 0, sizeof(cfg)); |
| 744 | x509_config.days = DEF_DAYS; | 744 | cfg.days = DEF_DAYS; |
| 745 | x509_config.informat = FORMAT_PEM; | 745 | cfg.informat = FORMAT_PEM; |
| 746 | x509_config.outformat = FORMAT_PEM; | 746 | cfg.outformat = FORMAT_PEM; |
| 747 | x509_config.keyformat = FORMAT_PEM; | 747 | cfg.keyformat = FORMAT_PEM; |
| 748 | x509_config.CAformat = FORMAT_PEM; | 748 | cfg.CAformat = FORMAT_PEM; |
| 749 | x509_config.CAkeyformat = FORMAT_PEM; | 749 | cfg.CAkeyformat = FORMAT_PEM; |
| 750 | 750 | ||
| 751 | STDout = BIO_new_fp(stdout, BIO_NOCLOSE); | 751 | STDout = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 752 | 752 | ||
| @@ -758,13 +758,13 @@ x509_main(int argc, char **argv) | |||
| 758 | if (options_parse(argc, argv, x509_options, NULL, NULL) != 0) | 758 | if (options_parse(argc, argv, x509_options, NULL, NULL) != 0) |
| 759 | goto bad; | 759 | goto bad; |
| 760 | 760 | ||
| 761 | if (x509_config.badops) { | 761 | if (cfg.badops) { |
| 762 | bad: | 762 | bad: |
| 763 | x509_usage(); | 763 | x509_usage(); |
| 764 | goto end; | 764 | goto end; |
| 765 | } | 765 | } |
| 766 | 766 | ||
| 767 | if (!app_passwd(bio_err, x509_config.passargin, NULL, &passin, NULL)) { | 767 | if (!app_passwd(bio_err, cfg.passargin, NULL, &passin, NULL)) { |
| 768 | BIO_printf(bio_err, "Error getting password\n"); | 768 | BIO_printf(bio_err, "Error getting password\n"); |
| 769 | goto end; | 769 | goto end; |
| 770 | } | 770 | } |
| @@ -772,53 +772,53 @@ x509_main(int argc, char **argv) | |||
| 772 | ERR_print_errors(bio_err); | 772 | ERR_print_errors(bio_err); |
| 773 | goto end; | 773 | goto end; |
| 774 | } | 774 | } |
| 775 | if ((x509_config.CAkeyfile == NULL) && (x509_config.CA_flag) && | 775 | if ((cfg.CAkeyfile == NULL) && (cfg.CA_flag) && |
| 776 | (x509_config.CAformat == FORMAT_PEM)) { | 776 | (cfg.CAformat == FORMAT_PEM)) { |
| 777 | x509_config.CAkeyfile = x509_config.CAfile; | 777 | cfg.CAkeyfile = cfg.CAfile; |
| 778 | } else if ((x509_config.CA_flag) && (x509_config.CAkeyfile == NULL)) { | 778 | } else if ((cfg.CA_flag) && (cfg.CAkeyfile == NULL)) { |
| 779 | BIO_printf(bio_err, | 779 | BIO_printf(bio_err, |
| 780 | "need to specify a CAkey if using the CA command\n"); | 780 | "need to specify a CAkey if using the CA command\n"); |
| 781 | goto end; | 781 | goto end; |
| 782 | } | 782 | } |
| 783 | if (x509_config.extfile != NULL) { | 783 | if (cfg.extfile != NULL) { |
| 784 | long errorline = -1; | 784 | long errorline = -1; |
| 785 | X509V3_CTX ctx2; | 785 | X509V3_CTX ctx2; |
| 786 | extconf = NCONF_new(NULL); | 786 | extconf = NCONF_new(NULL); |
| 787 | if (!NCONF_load(extconf, x509_config.extfile, &errorline)) { | 787 | if (!NCONF_load(extconf, cfg.extfile, &errorline)) { |
| 788 | if (errorline <= 0) | 788 | if (errorline <= 0) |
| 789 | BIO_printf(bio_err, | 789 | BIO_printf(bio_err, |
| 790 | "error loading the config file '%s'\n", | 790 | "error loading the config file '%s'\n", |
| 791 | x509_config.extfile); | 791 | cfg.extfile); |
| 792 | else | 792 | else |
| 793 | BIO_printf(bio_err, | 793 | BIO_printf(bio_err, |
| 794 | "error on line %ld of config file '%s'\n", | 794 | "error on line %ld of config file '%s'\n", |
| 795 | errorline, x509_config.extfile); | 795 | errorline, cfg.extfile); |
| 796 | goto end; | 796 | goto end; |
| 797 | } | 797 | } |
| 798 | if (x509_config.extsect == NULL) { | 798 | if (cfg.extsect == NULL) { |
| 799 | x509_config.extsect = NCONF_get_string(extconf, | 799 | cfg.extsect = NCONF_get_string(extconf, |
| 800 | "default", "extensions"); | 800 | "default", "extensions"); |
| 801 | if (x509_config.extsect == NULL) { | 801 | if (cfg.extsect == NULL) { |
| 802 | ERR_clear_error(); | 802 | ERR_clear_error(); |
| 803 | x509_config.extsect = "default"; | 803 | cfg.extsect = "default"; |
| 804 | } | 804 | } |
| 805 | } | 805 | } |
| 806 | X509V3_set_ctx_test(&ctx2); | 806 | X509V3_set_ctx_test(&ctx2); |
| 807 | X509V3_set_nconf(&ctx2, extconf); | 807 | X509V3_set_nconf(&ctx2, extconf); |
| 808 | if (!X509V3_EXT_add_nconf(extconf, &ctx2, x509_config.extsect, | 808 | if (!X509V3_EXT_add_nconf(extconf, &ctx2, cfg.extsect, |
| 809 | NULL)) { | 809 | NULL)) { |
| 810 | BIO_printf(bio_err, | 810 | BIO_printf(bio_err, |
| 811 | "Error Loading extension section %s\n", | 811 | "Error Loading extension section %s\n", |
| 812 | x509_config.extsect); | 812 | cfg.extsect); |
| 813 | ERR_print_errors(bio_err); | 813 | ERR_print_errors(bio_err); |
| 814 | goto end; | 814 | goto end; |
| 815 | } | 815 | } |
| 816 | } | 816 | } |
| 817 | if (x509_config.reqfile) { | 817 | if (cfg.reqfile) { |
| 818 | EVP_PKEY *pkey; | 818 | EVP_PKEY *pkey; |
| 819 | BIO *in; | 819 | BIO *in; |
| 820 | 820 | ||
| 821 | if (!x509_config.sign_flag && !x509_config.CA_flag) { | 821 | if (!cfg.sign_flag && !cfg.CA_flag) { |
| 822 | BIO_printf(bio_err, | 822 | BIO_printf(bio_err, |
| 823 | "We need a private key to sign with\n"); | 823 | "We need a private key to sign with\n"); |
| 824 | goto end; | 824 | goto end; |
| @@ -828,11 +828,11 @@ x509_main(int argc, char **argv) | |||
| 828 | ERR_print_errors(bio_err); | 828 | ERR_print_errors(bio_err); |
| 829 | goto end; | 829 | goto end; |
| 830 | } | 830 | } |
| 831 | if (x509_config.infile == NULL) | 831 | if (cfg.infile == NULL) |
| 832 | BIO_set_fp(in, stdin, BIO_NOCLOSE | BIO_FP_TEXT); | 832 | BIO_set_fp(in, stdin, BIO_NOCLOSE | BIO_FP_TEXT); |
| 833 | else { | 833 | else { |
| 834 | if (BIO_read_filename(in, x509_config.infile) <= 0) { | 834 | if (BIO_read_filename(in, cfg.infile) <= 0) { |
| 835 | perror(x509_config.infile); | 835 | perror(cfg.infile); |
| 836 | BIO_free(in); | 836 | BIO_free(in); |
| 837 | goto end; | 837 | goto end; |
| 838 | } | 838 | } |
| @@ -862,21 +862,21 @@ x509_main(int argc, char **argv) | |||
| 862 | BIO_printf(bio_err, "Signature ok\n"); | 862 | BIO_printf(bio_err, "Signature ok\n"); |
| 863 | 863 | ||
| 864 | print_name(bio_err, "subject=", X509_REQ_get_subject_name(req), | 864 | print_name(bio_err, "subject=", X509_REQ_get_subject_name(req), |
| 865 | x509_config.nmflag); | 865 | cfg.nmflag); |
| 866 | 866 | ||
| 867 | if ((x = X509_new()) == NULL) | 867 | if ((x = X509_new()) == NULL) |
| 868 | goto end; | 868 | goto end; |
| 869 | 869 | ||
| 870 | if (x509_config.sno == NULL) { | 870 | if (cfg.sno == NULL) { |
| 871 | x509_config.sno = ASN1_INTEGER_new(); | 871 | cfg.sno = ASN1_INTEGER_new(); |
| 872 | if (x509_config.sno == NULL || | 872 | if (cfg.sno == NULL || |
| 873 | !rand_serial(NULL, x509_config.sno)) | 873 | !rand_serial(NULL, cfg.sno)) |
| 874 | goto end; | 874 | goto end; |
| 875 | if (!X509_set_serialNumber(x, x509_config.sno)) | 875 | if (!X509_set_serialNumber(x, cfg.sno)) |
| 876 | goto end; | 876 | goto end; |
| 877 | ASN1_INTEGER_free(x509_config.sno); | 877 | ASN1_INTEGER_free(cfg.sno); |
| 878 | x509_config.sno = NULL; | 878 | cfg.sno = NULL; |
| 879 | } else if (!X509_set_serialNumber(x, x509_config.sno)) | 879 | } else if (!X509_set_serialNumber(x, cfg.sno)) |
| 880 | goto end; | 880 | goto end; |
| 881 | 881 | ||
| 882 | if (!X509_set_issuer_name(x, X509_REQ_get_subject_name(req))) | 882 | if (!X509_set_issuer_name(x, X509_REQ_get_subject_name(req))) |
| @@ -886,7 +886,7 @@ x509_main(int argc, char **argv) | |||
| 886 | 886 | ||
| 887 | if (X509_gmtime_adj(X509_get_notBefore(x), 0) == NULL) | 887 | if (X509_gmtime_adj(X509_get_notBefore(x), 0) == NULL) |
| 888 | goto end; | 888 | goto end; |
| 889 | if (X509_time_adj_ex(X509_get_notAfter(x), x509_config.days, 0, | 889 | if (X509_time_adj_ex(X509_get_notAfter(x), cfg.days, 0, |
| 890 | NULL) == NULL) | 890 | NULL) == NULL) |
| 891 | goto end; | 891 | goto end; |
| 892 | 892 | ||
| @@ -897,19 +897,19 @@ x509_main(int argc, char **argv) | |||
| 897 | goto end; | 897 | goto end; |
| 898 | } | 898 | } |
| 899 | } else { | 899 | } else { |
| 900 | x = load_cert(bio_err, x509_config.infile, x509_config.informat, | 900 | x = load_cert(bio_err, cfg.infile, cfg.informat, |
| 901 | NULL, "Certificate"); | 901 | NULL, "Certificate"); |
| 902 | } | 902 | } |
| 903 | if (x == NULL) | 903 | if (x == NULL) |
| 904 | goto end; | 904 | goto end; |
| 905 | 905 | ||
| 906 | if (x509_config.CA_flag) { | 906 | if (cfg.CA_flag) { |
| 907 | xca = load_cert(bio_err, x509_config.CAfile, | 907 | xca = load_cert(bio_err, cfg.CAfile, |
| 908 | x509_config.CAformat, NULL, "CA Certificate"); | 908 | cfg.CAformat, NULL, "CA Certificate"); |
| 909 | if (xca == NULL) | 909 | if (xca == NULL) |
| 910 | goto end; | 910 | goto end; |
| 911 | } | 911 | } |
| 912 | if (!x509_config.noout || x509_config.text || x509_config.next_serial) { | 912 | if (!cfg.noout || cfg.text || cfg.next_serial) { |
| 913 | OBJ_create("2.99999.3", "SET.ex3", "SET x509v3 extension 3"); | 913 | OBJ_create("2.99999.3", "SET.ex3", "SET x509v3 extension 3"); |
| 914 | 914 | ||
| 915 | out = BIO_new(BIO_s_file()); | 915 | out = BIO_new(BIO_s_file()); |
| @@ -917,57 +917,57 @@ x509_main(int argc, char **argv) | |||
| 917 | ERR_print_errors(bio_err); | 917 | ERR_print_errors(bio_err); |
| 918 | goto end; | 918 | goto end; |
| 919 | } | 919 | } |
| 920 | if (x509_config.outfile == NULL) { | 920 | if (cfg.outfile == NULL) { |
| 921 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 921 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 922 | } else { | 922 | } else { |
| 923 | if (BIO_write_filename(out, x509_config.outfile) <= 0) { | 923 | if (BIO_write_filename(out, cfg.outfile) <= 0) { |
| 924 | perror(x509_config.outfile); | 924 | perror(cfg.outfile); |
| 925 | goto end; | 925 | goto end; |
| 926 | } | 926 | } |
| 927 | } | 927 | } |
| 928 | } | 928 | } |
| 929 | if (x509_config.alias != NULL) { | 929 | if (cfg.alias != NULL) { |
| 930 | if (!X509_alias_set1(x, (unsigned char *)x509_config.alias, -1)) | 930 | if (!X509_alias_set1(x, (unsigned char *)cfg.alias, -1)) |
| 931 | goto end; | 931 | goto end; |
| 932 | } | 932 | } |
| 933 | 933 | ||
| 934 | if (x509_config.clrtrust) | 934 | if (cfg.clrtrust) |
| 935 | X509_trust_clear(x); | 935 | X509_trust_clear(x); |
| 936 | if (x509_config.clrreject) | 936 | if (cfg.clrreject) |
| 937 | X509_reject_clear(x); | 937 | X509_reject_clear(x); |
| 938 | 938 | ||
| 939 | if (x509_config.trust != NULL) { | 939 | if (cfg.trust != NULL) { |
| 940 | for (i = 0; i < sk_ASN1_OBJECT_num(x509_config.trust); i++) { | 940 | for (i = 0; i < sk_ASN1_OBJECT_num(cfg.trust); i++) { |
| 941 | x509_config.objtmp = sk_ASN1_OBJECT_value( | 941 | cfg.objtmp = sk_ASN1_OBJECT_value( |
| 942 | x509_config.trust, i); | 942 | cfg.trust, i); |
| 943 | if (!X509_add1_trust_object(x, x509_config.objtmp)) | 943 | if (!X509_add1_trust_object(x, cfg.objtmp)) |
| 944 | goto end; | 944 | goto end; |
| 945 | } | 945 | } |
| 946 | } | 946 | } |
| 947 | if (x509_config.reject != NULL) { | 947 | if (cfg.reject != NULL) { |
| 948 | for (i = 0; i < sk_ASN1_OBJECT_num(x509_config.reject); i++) { | 948 | for (i = 0; i < sk_ASN1_OBJECT_num(cfg.reject); i++) { |
| 949 | x509_config.objtmp = sk_ASN1_OBJECT_value( | 949 | cfg.objtmp = sk_ASN1_OBJECT_value( |
| 950 | x509_config.reject, i); | 950 | cfg.reject, i); |
| 951 | if (!X509_add1_reject_object(x, x509_config.objtmp)) | 951 | if (!X509_add1_reject_object(x, cfg.objtmp)) |
| 952 | goto end; | 952 | goto end; |
| 953 | } | 953 | } |
| 954 | } | 954 | } |
| 955 | if (x509_config.num) { | 955 | if (cfg.num) { |
| 956 | for (i = 1; i <= x509_config.num; i++) { | 956 | for (i = 1; i <= cfg.num; i++) { |
| 957 | if (x509_config.issuer == i) { | 957 | if (cfg.issuer == i) { |
| 958 | print_name(STDout, "issuer= ", | 958 | print_name(STDout, "issuer= ", |
| 959 | X509_get_issuer_name(x), | 959 | X509_get_issuer_name(x), |
| 960 | x509_config.nmflag); | 960 | cfg.nmflag); |
| 961 | } else if (x509_config.subject == i) { | 961 | } else if (cfg.subject == i) { |
| 962 | print_name(STDout, "subject= ", | 962 | print_name(STDout, "subject= ", |
| 963 | X509_get_subject_name(x), | 963 | X509_get_subject_name(x), |
| 964 | x509_config.nmflag); | 964 | cfg.nmflag); |
| 965 | } else if (x509_config.serial == i) { | 965 | } else if (cfg.serial == i) { |
| 966 | BIO_printf(STDout, "serial="); | 966 | BIO_printf(STDout, "serial="); |
| 967 | i2a_ASN1_INTEGER(STDout, | 967 | i2a_ASN1_INTEGER(STDout, |
| 968 | X509_get_serialNumber(x)); | 968 | X509_get_serialNumber(x)); |
| 969 | BIO_printf(STDout, "\n"); | 969 | BIO_printf(STDout, "\n"); |
| 970 | } else if (x509_config.next_serial == i) { | 970 | } else if (cfg.next_serial == i) { |
| 971 | BIGNUM *bnser; | 971 | BIGNUM *bnser; |
| 972 | ASN1_INTEGER *ser; | 972 | ASN1_INTEGER *ser; |
| 973 | ser = X509_get_serialNumber(x); | 973 | ser = X509_get_serialNumber(x); |
| @@ -989,11 +989,11 @@ x509_main(int argc, char **argv) | |||
| 989 | i2a_ASN1_INTEGER(out, ser); | 989 | i2a_ASN1_INTEGER(out, ser); |
| 990 | ASN1_INTEGER_free(ser); | 990 | ASN1_INTEGER_free(ser); |
| 991 | BIO_puts(out, "\n"); | 991 | BIO_puts(out, "\n"); |
| 992 | } else if ((x509_config.email == i) || | 992 | } else if ((cfg.email == i) || |
| 993 | (x509_config.ocsp_uri == i)) { | 993 | (cfg.ocsp_uri == i)) { |
| 994 | int j; | 994 | int j; |
| 995 | STACK_OF(OPENSSL_STRING) *emlst; | 995 | STACK_OF(OPENSSL_STRING) *emlst; |
| 996 | if (x509_config.email == i) | 996 | if (cfg.email == i) |
| 997 | emlst = X509_get1_email(x); | 997 | emlst = X509_get1_email(x); |
| 998 | else | 998 | else |
| 999 | emlst = X509_get1_ocsp(x); | 999 | emlst = X509_get1_ocsp(x); |
| @@ -1001,7 +1001,7 @@ x509_main(int argc, char **argv) | |||
| 1001 | BIO_printf(STDout, "%s\n", | 1001 | BIO_printf(STDout, "%s\n", |
| 1002 | sk_OPENSSL_STRING_value(emlst, j)); | 1002 | sk_OPENSSL_STRING_value(emlst, j)); |
| 1003 | X509_email_free(emlst); | 1003 | X509_email_free(emlst); |
| 1004 | } else if (x509_config.aliasout == i) { | 1004 | } else if (cfg.aliasout == i) { |
| 1005 | unsigned char *albuf; | 1005 | unsigned char *albuf; |
| 1006 | int buflen; | 1006 | int buflen; |
| 1007 | albuf = X509_alias_get0(x, &buflen); | 1007 | albuf = X509_alias_get0(x, &buflen); |
| @@ -1010,27 +1010,27 @@ x509_main(int argc, char **argv) | |||
| 1010 | buflen, albuf); | 1010 | buflen, albuf); |
| 1011 | else | 1011 | else |
| 1012 | BIO_puts(STDout, "<No Alias>\n"); | 1012 | BIO_puts(STDout, "<No Alias>\n"); |
| 1013 | } else if (x509_config.subject_hash == i) { | 1013 | } else if (cfg.subject_hash == i) { |
| 1014 | BIO_printf(STDout, "%08lx\n", | 1014 | BIO_printf(STDout, "%08lx\n", |
| 1015 | X509_subject_name_hash(x)); | 1015 | X509_subject_name_hash(x)); |
| 1016 | } | 1016 | } |
| 1017 | #ifndef OPENSSL_NO_MD5 | 1017 | #ifndef OPENSSL_NO_MD5 |
| 1018 | else if (x509_config.subject_hash_old == i) { | 1018 | else if (cfg.subject_hash_old == i) { |
| 1019 | BIO_printf(STDout, "%08lx\n", | 1019 | BIO_printf(STDout, "%08lx\n", |
| 1020 | X509_subject_name_hash_old(x)); | 1020 | X509_subject_name_hash_old(x)); |
| 1021 | } | 1021 | } |
| 1022 | #endif | 1022 | #endif |
| 1023 | else if (x509_config.issuer_hash == i) { | 1023 | else if (cfg.issuer_hash == i) { |
| 1024 | BIO_printf(STDout, "%08lx\n", | 1024 | BIO_printf(STDout, "%08lx\n", |
| 1025 | X509_issuer_name_hash(x)); | 1025 | X509_issuer_name_hash(x)); |
| 1026 | } | 1026 | } |
| 1027 | #ifndef OPENSSL_NO_MD5 | 1027 | #ifndef OPENSSL_NO_MD5 |
| 1028 | else if (x509_config.issuer_hash_old == i) { | 1028 | else if (cfg.issuer_hash_old == i) { |
| 1029 | BIO_printf(STDout, "%08lx\n", | 1029 | BIO_printf(STDout, "%08lx\n", |
| 1030 | X509_issuer_name_hash_old(x)); | 1030 | X509_issuer_name_hash_old(x)); |
| 1031 | } | 1031 | } |
| 1032 | #endif | 1032 | #endif |
| 1033 | else if (x509_config.pprint == i) { | 1033 | else if (cfg.pprint == i) { |
| 1034 | X509_PURPOSE *ptmp; | 1034 | X509_PURPOSE *ptmp; |
| 1035 | int j; | 1035 | int j; |
| 1036 | BIO_printf(STDout, "Certificate purposes:\n"); | 1036 | BIO_printf(STDout, "Certificate purposes:\n"); |
| @@ -1038,7 +1038,7 @@ x509_main(int argc, char **argv) | |||
| 1038 | ptmp = X509_PURPOSE_get0(j); | 1038 | ptmp = X509_PURPOSE_get0(j); |
| 1039 | purpose_print(STDout, x, ptmp); | 1039 | purpose_print(STDout, x, ptmp); |
| 1040 | } | 1040 | } |
| 1041 | } else if (x509_config.modulus == i) { | 1041 | } else if (cfg.modulus == i) { |
| 1042 | EVP_PKEY *pkey; | 1042 | EVP_PKEY *pkey; |
| 1043 | 1043 | ||
| 1044 | pkey = X509_get0_pubkey(x); | 1044 | pkey = X509_get0_pubkey(x); |
| @@ -1066,7 +1066,7 @@ x509_main(int argc, char **argv) | |||
| 1066 | BIO_printf(STDout, | 1066 | BIO_printf(STDout, |
| 1067 | "Wrong Algorithm type"); | 1067 | "Wrong Algorithm type"); |
| 1068 | BIO_printf(STDout, "\n"); | 1068 | BIO_printf(STDout, "\n"); |
| 1069 | } else if (x509_config.pubkey == i) { | 1069 | } else if (cfg.pubkey == i) { |
| 1070 | EVP_PKEY *pkey; | 1070 | EVP_PKEY *pkey; |
| 1071 | 1071 | ||
| 1072 | pkey = X509_get0_pubkey(x); | 1072 | pkey = X509_get0_pubkey(x); |
| @@ -1077,7 +1077,7 @@ x509_main(int argc, char **argv) | |||
| 1077 | goto end; | 1077 | goto end; |
| 1078 | } | 1078 | } |
| 1079 | PEM_write_bio_PUBKEY(STDout, pkey); | 1079 | PEM_write_bio_PUBKEY(STDout, pkey); |
| 1080 | } else if (x509_config.C == i) { | 1080 | } else if (cfg.C == i) { |
| 1081 | unsigned char *d; | 1081 | unsigned char *d; |
| 1082 | char *m; | 1082 | char *m; |
| 1083 | int y, z; | 1083 | int y, z; |
| @@ -1156,11 +1156,11 @@ x509_main(int argc, char **argv) | |||
| 1156 | BIO_printf(STDout, "};\n"); | 1156 | BIO_printf(STDout, "};\n"); |
| 1157 | 1157 | ||
| 1158 | free(m); | 1158 | free(m); |
| 1159 | } else if (x509_config.text == i) { | 1159 | } else if (cfg.text == i) { |
| 1160 | if(!X509_print_ex(STDout, x, x509_config.nmflag, | 1160 | if(!X509_print_ex(STDout, x, cfg.nmflag, |
| 1161 | x509_config.certflag)) | 1161 | cfg.certflag)) |
| 1162 | goto end; | 1162 | goto end; |
| 1163 | } else if (x509_config.startdate == i) { | 1163 | } else if (cfg.startdate == i) { |
| 1164 | ASN1_TIME *nB = X509_get_notBefore(x); | 1164 | ASN1_TIME *nB = X509_get_notBefore(x); |
| 1165 | BIO_puts(STDout, "notBefore="); | 1165 | BIO_puts(STDout, "notBefore="); |
| 1166 | if (ASN1_time_parse(nB->data, nB->length, NULL, | 1166 | if (ASN1_time_parse(nB->data, nB->length, NULL, |
| @@ -1170,7 +1170,7 @@ x509_main(int argc, char **argv) | |||
| 1170 | else | 1170 | else |
| 1171 | ASN1_TIME_print(STDout, nB); | 1171 | ASN1_TIME_print(STDout, nB); |
| 1172 | BIO_puts(STDout, "\n"); | 1172 | BIO_puts(STDout, "\n"); |
| 1173 | } else if (x509_config.enddate == i) { | 1173 | } else if (cfg.enddate == i) { |
| 1174 | ASN1_TIME *nA = X509_get_notAfter(x); | 1174 | ASN1_TIME *nA = X509_get_notAfter(x); |
| 1175 | BIO_puts(STDout, "notAfter="); | 1175 | BIO_puts(STDout, "notAfter="); |
| 1176 | if (ASN1_time_parse(nA->data, nA->length, NULL, | 1176 | if (ASN1_time_parse(nA->data, nA->length, NULL, |
| @@ -1180,11 +1180,11 @@ x509_main(int argc, char **argv) | |||
| 1180 | else | 1180 | else |
| 1181 | ASN1_TIME_print(STDout, nA); | 1181 | ASN1_TIME_print(STDout, nA); |
| 1182 | BIO_puts(STDout, "\n"); | 1182 | BIO_puts(STDout, "\n"); |
| 1183 | } else if (x509_config.fingerprint == i) { | 1183 | } else if (cfg.fingerprint == i) { |
| 1184 | int j; | 1184 | int j; |
| 1185 | unsigned int n; | 1185 | unsigned int n; |
| 1186 | unsigned char md[EVP_MAX_MD_SIZE]; | 1186 | unsigned char md[EVP_MAX_MD_SIZE]; |
| 1187 | const EVP_MD *fdig = x509_config.digest; | 1187 | const EVP_MD *fdig = cfg.digest; |
| 1188 | 1188 | ||
| 1189 | if (fdig == NULL) | 1189 | if (fdig == NULL) |
| 1190 | fdig = EVP_sha256(); | 1190 | fdig = EVP_sha256(); |
| @@ -1201,52 +1201,52 @@ x509_main(int argc, char **argv) | |||
| 1201 | } | 1201 | } |
| 1202 | 1202 | ||
| 1203 | /* should be in the library */ | 1203 | /* should be in the library */ |
| 1204 | } else if ((x509_config.sign_flag == i) && | 1204 | } else if ((cfg.sign_flag == i) && |
| 1205 | (x509_config.x509req == 0)) { | 1205 | (cfg.x509req == 0)) { |
| 1206 | BIO_printf(bio_err, "Getting Private key\n"); | 1206 | BIO_printf(bio_err, "Getting Private key\n"); |
| 1207 | if (Upkey == NULL) { | 1207 | if (Upkey == NULL) { |
| 1208 | Upkey = load_key(bio_err, | 1208 | Upkey = load_key(bio_err, |
| 1209 | x509_config.keyfile, | 1209 | cfg.keyfile, |
| 1210 | x509_config.keyformat, 0, passin, | 1210 | cfg.keyformat, 0, passin, |
| 1211 | "Private key"); | 1211 | "Private key"); |
| 1212 | if (Upkey == NULL) | 1212 | if (Upkey == NULL) |
| 1213 | goto end; | 1213 | goto end; |
| 1214 | } | 1214 | } |
| 1215 | if (!sign(x, Upkey, x509_config.days, | 1215 | if (!sign(x, Upkey, cfg.days, |
| 1216 | x509_config.clrext, x509_config.digest, | 1216 | cfg.clrext, cfg.digest, |
| 1217 | extconf, x509_config.extsect)) | 1217 | extconf, cfg.extsect)) |
| 1218 | goto end; | 1218 | goto end; |
| 1219 | } else if (x509_config.CA_flag == i) { | 1219 | } else if (cfg.CA_flag == i) { |
| 1220 | BIO_printf(bio_err, "Getting CA Private Key\n"); | 1220 | BIO_printf(bio_err, "Getting CA Private Key\n"); |
| 1221 | if (x509_config.CAkeyfile != NULL) { | 1221 | if (cfg.CAkeyfile != NULL) { |
| 1222 | CApkey = load_key(bio_err, | 1222 | CApkey = load_key(bio_err, |
| 1223 | x509_config.CAkeyfile, | 1223 | cfg.CAkeyfile, |
| 1224 | x509_config.CAkeyformat, 0, passin, | 1224 | cfg.CAkeyformat, 0, passin, |
| 1225 | "CA Private Key"); | 1225 | "CA Private Key"); |
| 1226 | if (CApkey == NULL) | 1226 | if (CApkey == NULL) |
| 1227 | goto end; | 1227 | goto end; |
| 1228 | } | 1228 | } |
| 1229 | if (!x509_certify(ctx, x509_config.CAfile, | 1229 | if (!x509_certify(ctx, cfg.CAfile, |
| 1230 | x509_config.digest, x, xca, CApkey, | 1230 | cfg.digest, x, xca, CApkey, |
| 1231 | x509_config.sigopts, x509_config.CAserial, | 1231 | cfg.sigopts, cfg.CAserial, |
| 1232 | x509_config.CA_createserial, | 1232 | cfg.CA_createserial, |
| 1233 | x509_config.days, x509_config.clrext, | 1233 | cfg.days, cfg.clrext, |
| 1234 | extconf, x509_config.extsect, | 1234 | extconf, cfg.extsect, |
| 1235 | x509_config.sno)) | 1235 | cfg.sno)) |
| 1236 | goto end; | 1236 | goto end; |
| 1237 | } else if (x509_config.x509req == i) { | 1237 | } else if (cfg.x509req == i) { |
| 1238 | EVP_PKEY *pk; | 1238 | EVP_PKEY *pk; |
| 1239 | 1239 | ||
| 1240 | BIO_printf(bio_err, | 1240 | BIO_printf(bio_err, |
| 1241 | "Getting request Private Key\n"); | 1241 | "Getting request Private Key\n"); |
| 1242 | if (x509_config.keyfile == NULL) { | 1242 | if (cfg.keyfile == NULL) { |
| 1243 | BIO_printf(bio_err, | 1243 | BIO_printf(bio_err, |
| 1244 | "no request key file specified\n"); | 1244 | "no request key file specified\n"); |
| 1245 | goto end; | 1245 | goto end; |
| 1246 | } else { | 1246 | } else { |
| 1247 | pk = load_key(bio_err, | 1247 | pk = load_key(bio_err, |
| 1248 | x509_config.keyfile, | 1248 | cfg.keyfile, |
| 1249 | x509_config.keyformat, 0, passin, | 1249 | cfg.keyformat, 0, passin, |
| 1250 | "request key"); | 1250 | "request key"); |
| 1251 | if (pk == NULL) | 1251 | if (pk == NULL) |
| 1252 | goto end; | 1252 | goto end; |
| @@ -1255,27 +1255,27 @@ x509_main(int argc, char **argv) | |||
| 1255 | BIO_printf(bio_err, | 1255 | BIO_printf(bio_err, |
| 1256 | "Generating certificate request\n"); | 1256 | "Generating certificate request\n"); |
| 1257 | 1257 | ||
| 1258 | rq = X509_to_X509_REQ(x, pk, x509_config.digest); | 1258 | rq = X509_to_X509_REQ(x, pk, cfg.digest); |
| 1259 | EVP_PKEY_free(pk); | 1259 | EVP_PKEY_free(pk); |
| 1260 | if (rq == NULL) { | 1260 | if (rq == NULL) { |
| 1261 | ERR_print_errors(bio_err); | 1261 | ERR_print_errors(bio_err); |
| 1262 | goto end; | 1262 | goto end; |
| 1263 | } | 1263 | } |
| 1264 | if (!x509_config.noout) { | 1264 | if (!cfg.noout) { |
| 1265 | if (!X509_REQ_print(out, rq)) | 1265 | if (!X509_REQ_print(out, rq)) |
| 1266 | goto end; | 1266 | goto end; |
| 1267 | if (!PEM_write_bio_X509_REQ(out, rq)) | 1267 | if (!PEM_write_bio_X509_REQ(out, rq)) |
| 1268 | goto end; | 1268 | goto end; |
| 1269 | } | 1269 | } |
| 1270 | x509_config.noout = 1; | 1270 | cfg.noout = 1; |
| 1271 | } else if (x509_config.ocspid == i) { | 1271 | } else if (cfg.ocspid == i) { |
| 1272 | if (!X509_ocspid_print(out, x)) | 1272 | if (!X509_ocspid_print(out, x)) |
| 1273 | goto end; | 1273 | goto end; |
| 1274 | } | 1274 | } |
| 1275 | } | 1275 | } |
| 1276 | } | 1276 | } |
| 1277 | if (x509_config.checkend) { | 1277 | if (cfg.checkend) { |
| 1278 | time_t tcheck = time(NULL) + x509_config.checkoffset; | 1278 | time_t tcheck = time(NULL) + cfg.checkoffset; |
| 1279 | int timecheck = X509_cmp_time(X509_get_notAfter(x), &tcheck); | 1279 | int timecheck = X509_cmp_time(X509_get_notAfter(x), &tcheck); |
| 1280 | if (timecheck == 0) { | 1280 | if (timecheck == 0) { |
| 1281 | BIO_printf(out, "Certificate expiry time is invalid\n"); | 1281 | BIO_printf(out, "Certificate expiry time is invalid\n"); |
| @@ -1289,14 +1289,14 @@ x509_main(int argc, char **argv) | |||
| 1289 | } | 1289 | } |
| 1290 | goto end; | 1290 | goto end; |
| 1291 | } | 1291 | } |
| 1292 | if (x509_config.noout) { | 1292 | if (cfg.noout) { |
| 1293 | ret = 0; | 1293 | ret = 0; |
| 1294 | goto end; | 1294 | goto end; |
| 1295 | } | 1295 | } |
| 1296 | if (x509_config.outformat == FORMAT_ASN1) | 1296 | if (cfg.outformat == FORMAT_ASN1) |
| 1297 | i = i2d_X509_bio(out, x); | 1297 | i = i2d_X509_bio(out, x); |
| 1298 | else if (x509_config.outformat == FORMAT_PEM) { | 1298 | else if (cfg.outformat == FORMAT_PEM) { |
| 1299 | if (x509_config.trustout) | 1299 | if (cfg.trustout) |
| 1300 | i = PEM_write_bio_X509_AUX(out, x); | 1300 | i = PEM_write_bio_X509_AUX(out, x); |
| 1301 | else | 1301 | else |
| 1302 | i = PEM_write_bio_X509(out, x); | 1302 | i = PEM_write_bio_X509(out, x); |
| @@ -1323,11 +1323,11 @@ x509_main(int argc, char **argv) | |||
| 1323 | X509_free(xca); | 1323 | X509_free(xca); |
| 1324 | EVP_PKEY_free(Upkey); | 1324 | EVP_PKEY_free(Upkey); |
| 1325 | EVP_PKEY_free(CApkey); | 1325 | EVP_PKEY_free(CApkey); |
| 1326 | sk_OPENSSL_STRING_free(x509_config.sigopts); | 1326 | sk_OPENSSL_STRING_free(cfg.sigopts); |
| 1327 | X509_REQ_free(rq); | 1327 | X509_REQ_free(rq); |
| 1328 | ASN1_INTEGER_free(x509_config.sno); | 1328 | ASN1_INTEGER_free(cfg.sno); |
| 1329 | sk_ASN1_OBJECT_pop_free(x509_config.trust, ASN1_OBJECT_free); | 1329 | sk_ASN1_OBJECT_pop_free(cfg.trust, ASN1_OBJECT_free); |
| 1330 | sk_ASN1_OBJECT_pop_free(x509_config.reject, ASN1_OBJECT_free); | 1330 | sk_ASN1_OBJECT_pop_free(cfg.reject, ASN1_OBJECT_free); |
| 1331 | free(passin); | 1331 | free(passin); |
| 1332 | 1332 | ||
| 1333 | return (ret); | 1333 | return (ret); |
| @@ -1412,7 +1412,7 @@ x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest, X509 *x, | |||
| 1412 | */ | 1412 | */ |
| 1413 | X509_STORE_CTX_set_cert(xsc, x); | 1413 | X509_STORE_CTX_set_cert(xsc, x); |
| 1414 | X509_STORE_CTX_set_flags(xsc, X509_V_FLAG_CHECK_SS_SIGNATURE); | 1414 | X509_STORE_CTX_set_flags(xsc, X509_V_FLAG_CHECK_SS_SIGNATURE); |
| 1415 | if (!x509_config.reqfile && X509_verify_cert(xsc) <= 0) | 1415 | if (!cfg.reqfile && X509_verify_cert(xsc) <= 0) |
| 1416 | goto end; | 1416 | goto end; |
| 1417 | 1417 | ||
| 1418 | if (!X509_check_private_key(xca, pkey)) { | 1418 | if (!X509_check_private_key(xca, pkey)) { |
