On Fri, Jan 9, 2009 at 10:20 AM, Steve Chaplin
<steve.chap...@coppereye.com> wrote:
> Hi all,
>
> I have an application that essentially performs the same purpose
> as apps/enc.c and have a couple of questions. I have spent a few
> days checking out enc.c and others plus googling and have checked
> the mailing list archive, I also have the O'Reilly books.
>
> 1. I am calling EVP_get_cipherbyname() with a name supplied by my
> user. Now the user naturally wants to know the available names. I
> found this post in the mail archive;
> http://marc.info/?l=openssl-users&m=107873956817083&w=2
> where a similar questioner was directed to show_ciphers() and
> OBJ_NAME_do_all_sorted() etc, in enc.c. Is this really the recommended
> way to do this? Does this OBJ_ stuff form part of the published
> API and, if so, is it documented. If this is the case, it sounds like I will
> need my own version of show_ciphers() to store the results rather than
> display them. Would this be the right way to go?

OBJ_NAME_* is part of the API (and resides in crypto/objects/ ); alas,
it lacks a pod/manpage document at the moment.

You may use it, but may I point you at the more modern 'wrapper'
functions EVP_CIPHER_do_all*(), EVP_MD_do_all*(), etc. which take care
of defining the proper type for picking the proper sort of crypto
element (cipher, hash, etc.) according to the OBJ_NAME_TYPE_* #defines
in <openssl/objects.h>?

A usage sample of those can be found in apps/openssl.c: see the
list_md() and list_cipher() function snippets below:

----------------------------------------
static void list_cipher_fn(const EVP_CIPHER *c,
                        const char *from, const char *to, void *arg)
        {
        if (c)
                BIO_printf(arg, "%s\n", EVP_CIPHER_name(c));
        else
                {
                if (!from)
                        from = "<undefined>";
                if (!to)
                        to = "<undefined>";
                BIO_printf(arg, "%s => %s\n", from, to);
                }
        }

static void list_cipher(BIO *out)
        {
        EVP_CIPHER_do_all_sorted(list_cipher_fn, out);
        }

static void list_md_fn(const EVP_MD *m,
                        const char *from, const char *to, void *arg)
        {
        if (m)
                BIO_printf(arg, "%s\n", EVP_MD_name(m));
        else
                {
                if (!from)
                        from = "<undefined>";
                if (!to)
                        to = "<undefined>";
                BIO_printf(arg, "%s => %s\n", from, to);
                }
        }

static void list_md(BIO *out)
        {
        EVP_MD_do_all_sorted(list_md_fn, out);
        }
----------------------------------------


>
> 2. I have initialised my app with OpenSSL_add_allciphers(), but
> many of the ciphers that "openssl enc..." can do, I get a NULL back from
> EVP_get_cipherbyname() when I try and use them. For example, aes-256-cbc
> works in my app but des-ede3-cfb doesn't. I can't see what else enc.c is
> doing to bring in these extra ciphers. Of course, if I
> had the answer to 1, I could dump out my available cipher list which might
> help.

I take it you meant     
        OpenSSL_add_all_algorithms();
though you may call
  OpenSSL_add_all_ciphers();
and
  OpenSSL_add_all_digests();
for (almost) identical functionality.

One reason why some ciphers won't show up is related to the
configuration of the OpenSSL lib on compilation: depending on your
./config arguments (or the ones used by the one who produced the
OpenSSL lib for you, e.g. in case of an off the shelf Linux distro)
some ciphers, digests and/or other pieces may have been disabled
(removed) at compile time: as they won't exist in the code, they will
not show up in the cipher/digest/... list.

But that would be far easier to diagnose indeed, when you list the
ciphers as you suggested yourself.




-- 
Met vriendelijke groeten / Best regards,

Ger Hobbelt

--------------------------------------------------
web:    http://www.hobbelt.com/
        http://www.hebbut.net/
mail:   g...@hobbelt.com
mobile: +31-6-11 120 978
--------------------------------------------------
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to