X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=apps%2Fenc.c;h=94c8255a7764af95a4bd49535f49fed728c11b3f;hp=b7e4a95f9c870ede9a6a451d7d6b1fb2755d7e8d;hb=341de5f1997d21b60cee69be656f1ae709bccdac;hpb=846e33c729311169d9c988ceba29484b3783f244 diff --git a/apps/enc.c b/apps/enc.c index b7e4a95f9c..94c8255a77 100644 --- a/apps/enc.c +++ b/apps/enc.c @@ -34,14 +34,16 @@ static void show_ciphers(const OBJ_NAME *name, void *bio_); typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, + OPT_LIST, OPT_E, OPT_IN, OPT_OUT, OPT_PASS, OPT_ENGINE, OPT_D, OPT_P, OPT_V, OPT_NOPAD, OPT_SALT, OPT_NOSALT, OPT_DEBUG, OPT_UPPER_P, OPT_UPPER_A, OPT_A, OPT_Z, OPT_BUFSIZE, OPT_K, OPT_KFILE, OPT_UPPER_K, OPT_NONE, OPT_UPPER_S, OPT_IV, OPT_MD, OPT_CIPHER } OPTION_CHOICE; -OPTIONS enc_options[] = { +const OPTIONS enc_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, + {"ciphers", OPT_LIST, '-', "List ciphers"}, {"in", OPT_IN, '<', "Input file"}, {"out", OPT_OUT, '>', "Output file"}, {"pass", OPT_PASS, 's', "Passphrase source"}, @@ -80,6 +82,7 @@ int enc_main(int argc, char **argv) { static char buf[128]; static const char magic[] = "Salted__"; + ENGINE *e = NULL; BIO *in = NULL, *out = NULL, *b64 = NULL, *benc = NULL, *rbio = NULL, *wbio = NULL; EVP_CIPHER_CTX *ctx = NULL; @@ -129,10 +132,13 @@ int enc_main(int argc, char **argv) case OPT_HELP: opt_help(enc_options); ret = 0; - BIO_printf(bio_err, "Cipher Types\n"); + goto end; + case OPT_LIST: + BIO_printf(bio_out, "Supported ciphers:\n"); OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, - show_ciphers, bio_err); - BIO_printf(bio_err, "\n"); + show_ciphers, bio_out); + BIO_printf(bio_out, "\n"); + ret = 0; goto end; case OPT_E: enc = 1; @@ -147,7 +153,7 @@ int enc_main(int argc, char **argv) passarg = opt_arg(); break; case OPT_ENGINE: - (void)setup_engine(opt_arg(), 0); + e = setup_engine(opt_arg(), 0); break; case OPT_D: enc = 0; @@ -378,6 +384,8 @@ int enc_main(int argc, char **argv) * output BIO. If decrypting read salt from input BIO. */ unsigned char *sptr; + size_t str_len = strlen(str); + if (nosalt) sptr = NULL; else { @@ -417,7 +425,7 @@ int enc_main(int argc, char **argv) if (!EVP_BytesToKey(cipher, dgst, sptr, (unsigned char *)str, - strlen(str), 1, key, iv)) { + str_len, 1, key, iv)) { BIO_printf(bio_err, "EVP_BytesToKey failed\n"); goto end; } @@ -428,7 +436,7 @@ int enc_main(int argc, char **argv) if (str == strbuf) OPENSSL_cleanse(str, SIZE); else - OPENSSL_cleanse(str, strlen(str)); + OPENSSL_cleanse(str, str_len); } if (hiv != NULL) { int siz = EVP_CIPHER_iv_length(cipher); @@ -546,6 +554,7 @@ int enc_main(int argc, char **argv) #ifdef ZLIB BIO_free(bzl); #endif + release_engine(e); OPENSSL_free(pass); return (ret); }