Blame doc/examples/ex-session-info.c

Packit aea12f
/* This example code is placed in the public domain. */
Packit aea12f
Packit aea12f
#ifdef HAVE_CONFIG_H
Packit aea12f
#include <config.h>
Packit aea12f
#endif
Packit aea12f
Packit aea12f
#include <stdio.h>
Packit aea12f
#include <stdlib.h>
Packit aea12f
#include <gnutls/gnutls.h>
Packit aea12f
#include <gnutls/x509.h>
Packit aea12f
Packit aea12f
#include "examples.h"
Packit aea12f
Packit aea12f
/* This function will print some details of the
Packit aea12f
 * given session.
Packit aea12f
 */
Packit aea12f
int print_info(gnutls_session_t session)
Packit aea12f
{
Packit aea12f
        gnutls_credentials_type_t cred;
Packit aea12f
        gnutls_kx_algorithm_t kx;
Packit aea12f
        int dhe, ecdh, group;
Packit aea12f
        char *desc;
Packit aea12f
Packit aea12f
        /* get a description of the session connection, protocol,
Packit aea12f
         * cipher/key exchange */
Packit aea12f
        desc = gnutls_session_get_desc(session);
Packit aea12f
        if (desc != NULL) {
Packit aea12f
                printf("- Session: %s\n", desc);
Packit aea12f
        }
Packit aea12f
Packit aea12f
        dhe = ecdh = 0;
Packit aea12f
Packit aea12f
        kx = gnutls_kx_get(session);
Packit aea12f
Packit aea12f
        /* Check the authentication type used and switch
Packit aea12f
         * to the appropriate.
Packit aea12f
         */
Packit aea12f
        cred = gnutls_auth_get_type(session);
Packit aea12f
        switch (cred) {
Packit aea12f
#ifdef ENABLE_SRP
Packit aea12f
        case GNUTLS_CRD_SRP:
Packit aea12f
                printf("- SRP session with username %s\n",
Packit aea12f
                       gnutls_srp_server_get_username(session));
Packit aea12f
                break;
Packit aea12f
#endif
Packit aea12f
Packit aea12f
        case GNUTLS_CRD_PSK:
Packit aea12f
                /* This returns NULL in server side.
Packit aea12f
                 */
Packit aea12f
                if (gnutls_psk_client_get_hint(session) != NULL)
Packit aea12f
                        printf("- PSK authentication. PSK hint '%s'\n",
Packit aea12f
                               gnutls_psk_client_get_hint(session));
Packit aea12f
                /* This returns NULL in client side.
Packit aea12f
                 */
Packit aea12f
                if (gnutls_psk_server_get_username(session) != NULL)
Packit aea12f
                        printf("- PSK authentication. Connected as '%s'\n",
Packit aea12f
                               gnutls_psk_server_get_username(session));
Packit aea12f
Packit aea12f
                if (kx == GNUTLS_KX_ECDHE_PSK)
Packit aea12f
                        ecdh = 1;
Packit aea12f
                else if (kx == GNUTLS_KX_DHE_PSK)
Packit aea12f
                        dhe = 1;
Packit aea12f
                break;
Packit aea12f
Packit aea12f
        case GNUTLS_CRD_ANON:  /* anonymous authentication */
Packit aea12f
Packit aea12f
                printf("- Anonymous authentication.\n");
Packit aea12f
                if (kx == GNUTLS_KX_ANON_ECDH)
Packit aea12f
                        ecdh = 1;
Packit aea12f
                else if (kx == GNUTLS_KX_ANON_DH)
Packit aea12f
                        dhe = 1;
Packit aea12f
                break;
Packit aea12f
Packit aea12f
        case GNUTLS_CRD_CERTIFICATE:   /* certificate authentication */
Packit aea12f
Packit aea12f
                /* Check if we have been using ephemeral Diffie-Hellman.
Packit aea12f
                 */
Packit aea12f
                if (kx == GNUTLS_KX_DHE_RSA || kx == GNUTLS_KX_DHE_DSS)
Packit aea12f
                        dhe = 1;
Packit aea12f
                else if (kx == GNUTLS_KX_ECDHE_RSA
Packit aea12f
                         || kx == GNUTLS_KX_ECDHE_ECDSA)
Packit aea12f
                        ecdh = 1;
Packit aea12f
Packit aea12f
                /* if the certificate list is available, then
Packit aea12f
                 * print some information about it.
Packit aea12f
                 */
Packit aea12f
                print_x509_certificate_info(session);
Packit aea12f
                break;
Packit aea12f
	default:
Packit aea12f
		break;
Packit aea12f
        }                       /* switch */
Packit aea12f
Packit aea12f
        /* read the negotiated group - if any */
Packit aea12f
        group = gnutls_group_get(session);
Packit aea12f
        if (group != 0) {
Packit aea12f
                printf("- Negotiated group %s\n",
Packit aea12f
                       gnutls_group_get_name(group));
Packit aea12f
        } else {
Packit aea12f
                if (ecdh != 0)
Packit aea12f
                        printf("- Ephemeral ECDH using curve %s\n",
Packit aea12f
	                       gnutls_ecc_curve_get_name(gnutls_ecc_curve_get
Packit aea12f
                                                         (session)));
Packit aea12f
                else if (dhe != 0)
Packit aea12f
                        printf("- Ephemeral DH using prime of %d bits\n",
Packit aea12f
                               gnutls_dh_get_prime_bits(session));
Packit aea12f
        }
Packit aea12f
Packit aea12f
        return 0;
Packit aea12f
}