X-Git-Url: https://git.openssl.org/?a=blobdiff_plain;f=apps%2Fenc.c;h=157cb943b6c78b9739608fbf0acec08767eaabf0;hb=2d8e9dbd2c62f29f777dd3002a39419d45a891dd;hp=94c8255a7764af95a4bd49535f49fed728c11b3f;hpb=341de5f1997d21b60cee69be656f1ae709bccdac;p=openssl.git diff --git a/apps/enc.c b/apps/enc.c index 94c8255a77..157cb943b6 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; @@ -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,7 +291,6 @@ 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 in = bio_open_default(infile, 'r', informat); @@ -540,8 +547,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,20 +566,27 @@ 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)) return; - BIO_printf(bio, "-%-25s", name->name); - if (++n == 3) { - BIO_printf(bio, "\n"); - n = 0; + /* Filter out ciphers that we cannot use */ + cipher = EVP_get_cipherbyname(name->name); + if (cipher == NULL || + (EVP_CIPHER_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) != 0 || + EVP_CIPHER_mode(cipher) == EVP_CIPH_XTS_MODE) + return; + + 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)