diff options
author | Richard Levitte <levitte@openssl.org> | 2015-09-06 17:12:39 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2015-09-06 17:12:39 +0200 |
commit | 5f62e044d3bd4f84378ce354898e8e21583ef169 (patch) | |
tree | 405e0ebfc4dfa960ce2027722f987f08e138cc34 /apps | |
parent | 8af6082e16a02b4bad63de99fd3e6bc3501ee2b8 (diff) |
Fix enc so it properly treats BASE64 as text
To set both the incoming and outgoing data when 'encrypting' or
'decrypting' to FORMAT_BASE64 wasn't quite the right thing to do.
Reviewed-by: Tim Hudson <tjh@openssl.org>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/enc.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/apps/enc.c b/apps/enc.c index fc7e14c65c..5ffb1f030c 100644 --- a/apps/enc.c +++ b/apps/enc.c @@ -138,7 +138,8 @@ int enc_main(int argc, char **argv) char mbuf[sizeof magic - 1]; OPTION_CHOICE o; int bsize = BSIZE, verbose = 0, debug = 0, olb64 = 0, nosalt = 0; - int enc = 1, printkey = 0, i, k, format = FORMAT_BINARY; + int enc = 1, printkey = 0, i, k; + int base64 = 0, informat = FORMAT_BINARY, outformat = FORMAT_BINARY; int ret = 1, inl, nopad = 0, non_fips_allow = 0; unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; unsigned char *buff = NULL, salt[PKCS5_SALT_LEN]; @@ -151,7 +152,7 @@ int enc_main(int argc, char **argv) /* first check the program name */ prog = opt_progname(argv[0]); if (strcmp(prog, "base64") == 0) - format = FORMAT_BASE64; + base64 = 1; #ifdef ZLIB else if (strcmp(prog, "zlib") == 0) do_zlib = 1; @@ -223,7 +224,7 @@ int enc_main(int argc, char **argv) olb64 = 1; break; case OPT_A: - format = FORMAT_BASE64; + base64 = 1; break; case OPT_Z: #ifdef ZLIB @@ -311,11 +312,18 @@ int enc_main(int argc, char **argv) dgst = EVP_md5(); /* It must be large enough for a base64 encoded line */ - if (format == FORMAT_BASE64 && bsize < 80) + if (base64 && bsize < 80) bsize = 80; if (verbose) BIO_printf(bio_err, "bufsize=%d\n", bsize); + if (base64) { + if (enc) + outformat = FORMAT_BASE64; + else + informat = FORMAT_BASE64; + } + strbuf = app_malloc(SIZE, "strbuf"); buff = app_malloc(EVP_ENCODE_LENGTH(bsize), "evp buffer"); @@ -328,9 +336,9 @@ int enc_main(int argc, char **argv) if (infile == NULL) { unbuffer(stdin); - in = dup_bio_in(format); + in = dup_bio_in(informat); } else - in = bio_open_default(infile, 'r', format); + in = bio_open_default(infile, 'r', informat); if (in == NULL) goto end; @@ -366,7 +374,7 @@ int enc_main(int argc, char **argv) } } - out = bio_open_default(outfile, 'w', format); + out = bio_open_default(outfile, 'w', outformat); if (out == NULL) goto end; @@ -384,7 +392,7 @@ int enc_main(int argc, char **argv) } #endif - if (format == FORMAT_BASE64) { + if (base64) { if ((b64 = BIO_new(BIO_f_base64())) == NULL) goto end; if (debug) { |