diff options
Diffstat (limited to '')
| -rw-r--r-- | src/usr.bin/openssl/enc.c | 232 |
1 files changed, 116 insertions, 116 deletions
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 | } |
