X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=apps%2Fenc.c;h=1ff1d6bf9104562f240e2c769892dc73c13b7427;hp=1b4ec0bc61d1d399dd2bf08713c9db35f8d40a97;hb=2234212c3dde887e0b7fa08277d035cd132e2cce;hpb=777f1708a88f85569304caeca197c96ef912b236 diff --git a/apps/enc.c b/apps/enc.c index 1b4ec0bc61..1ff1d6bf91 100644 --- a/apps/enc.c +++ b/apps/enc.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -32,6 +32,11 @@ static int set_hex(char *in, unsigned char *out, int size); static void show_ciphers(const OBJ_NAME *name, void *bio_); +struct doall_enc_ciphers { + BIO *bio; + int n; +}; + typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_LIST, @@ -100,6 +105,7 @@ int enc_main(int argc, char **argv) unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; unsigned char *buff = NULL, salt[PKCS5_SALT_LEN]; long n; + struct doall_enc_ciphers dec; #ifdef ZLIB int do_zlib = 0; BIO *bzl = NULL; @@ -107,13 +113,13 @@ int enc_main(int argc, char **argv) /* first check the program name */ prog = opt_progname(argv[0]); - if (strcmp(prog, "base64") == 0) + if (strcmp(prog, "base64") == 0) { base64 = 1; #ifdef ZLIB - else if (strcmp(prog, "zlib") == 0) + } else if (strcmp(prog, "zlib") == 0) { do_zlib = 1; #endif - else { + } else { cipher = EVP_get_cipherbyname(prog); if (cipher == NULL && strcmp(prog, "enc") != 0) { BIO_printf(bio_err, "%s is not a known cipher\n", prog); @@ -135,8 +141,10 @@ int enc_main(int argc, char **argv) goto end; case OPT_LIST: BIO_printf(bio_out, "Supported ciphers:\n"); + dec.bio = bio_out; + dec.n = 0; OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, - show_ciphers, bio_out); + show_ciphers, &dec); BIO_printf(bio_out, "\n"); ret = 0; goto end; @@ -283,14 +291,14 @@ int enc_main(int argc, char **argv) buff = app_malloc(EVP_ENCODE_LENGTH(bsize), "evp buffer"); if (infile == NULL) { - unbuffer(stdin); in = dup_bio_in(informat); - } else + } else { in = bio_open_default(infile, 'r', informat); + } if (in == NULL) goto end; - if (!str && passarg) { + if (str == NULL && passarg != NULL) { if (!app_passwd(passarg, NULL, &pass, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; @@ -386,17 +394,18 @@ int enc_main(int argc, char **argv) unsigned char *sptr; size_t str_len = strlen(str); - if (nosalt) + if (nosalt) { sptr = NULL; - else { + } else { if (enc) { if (hsalt) { if (!set_hex(hsalt, salt, sizeof salt)) { BIO_printf(bio_err, "invalid hex salt value\n"); goto end; } - } else if (RAND_bytes(salt, sizeof salt) <= 0) + } else if (RAND_bytes(salt, sizeof salt) <= 0) { goto end; + } /* * If -P option then don't bother writing */ @@ -540,8 +549,8 @@ int enc_main(int argc, char **argv) ret = 0; if (verbose) { - BIO_printf(bio_err, "bytes read :%8"PRIu64"\n", BIO_number_read(in)); - BIO_printf(bio_err, "bytes written:%8"PRIu64"\n", BIO_number_written(out)); + BIO_printf(bio_err, "bytes read :%8ju\n", BIO_number_read(in)); + BIO_printf(bio_err, "bytes written:%8ju\n", BIO_number_written(out)); } end: ERR_print_errors(bio_err); @@ -559,10 +568,9 @@ int enc_main(int argc, char **argv) return (ret); } -static void show_ciphers(const OBJ_NAME *name, void *bio_) +static void show_ciphers(const OBJ_NAME *name, void *arg) { - BIO *bio = bio_; - static int n; + struct doall_enc_ciphers *dec = (struct doall_enc_ciphers *)arg; const EVP_CIPHER *cipher; if (!islower((unsigned char)*name->name)) @@ -575,12 +583,12 @@ static void show_ciphers(const OBJ_NAME *name, void *bio_) EVP_CIPHER_mode(cipher) == EVP_CIPH_XTS_MODE) return; - BIO_printf(bio, "-%-25s", name->name); - if (++n == 3) { - BIO_printf(bio, "\n"); - n = 0; + BIO_printf(dec->bio, "-%-25s", name->name); + if (++dec->n == 3) { + BIO_printf(dec->bio, "\n"); + dec->n = 0; } else - BIO_printf(bio, " "); + BIO_printf(dec->bio, " "); } static int set_hex(char *in, unsigned char *out, int size)