diff options
Diffstat (limited to '')
| -rw-r--r-- | src/usr.bin/openssl/ts.c | 120 |
1 files changed, 60 insertions, 60 deletions
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; |
