On Mon, Dec 06, 2010 at 04:25:53PM +0100, Aris Adamantiadis wrote:

> This is a good question. The data exists but there is no accessors for it.
>
> I don't have so much time right now, so a patch would be welcome of
> course :) This would not be very complicated to implement.

Got it working, not too painful indeed. I tried to stick to the
dominant style.

IN libssh.h, I added one line:

   LIBSSH_API char *ssh_get_encryption_algo(ssh_session session);


IN client.c after ssh_get_issue_banner(), but it could go
anywhere there, I added following function. I went overboard with
all the NULL checks because I had a silly error, the checks could
be summarized in a single statement. Also, we could also return
the 'in_cipher->name', and maybe I'll add that (it could be
different, right?).

   /**
    * @brief Get info on currently used encryption algo
    *
    * Get info on currently used encryption algo
    *
    * @param session       The SSH session to use.
    *
    * @return A pointer to a string with the info (do NOT free it!)
    */

   const char *ssh_get_encryption_algo(ssh_session session) {
     if (session == NULL) {
       return "no session";
     }
     if (session->current_crypto == NULL) {
       return "no current_crypto";
     }
     if (session->current_crypto->out_cipher == NULL) {
       return "no out_cipher";
     }
     if (session->current_crypto->out_cipher->name == NULL) {
       return "no out_cipher->name";
     }
     return session->current_crypto->out_cipher->name;
   }

And that gave me the current encryption algo ("aes256-ctr" on
all hosts I've tried so far). I haven't yet bothered with the
authentication stuff (I'm less curious about that). I might
have trouble finding a host that returns something else!

I won't provide this as a patch because I just don't understand
the source management stuff well enough, but it's simple enough
that you could just include it as part of your work at some
point.

Cheers,
Pierre


Reply via email to