Sync with TP.
[gnutls.git] / doc / examples / ex-client-srp.c
blob6a8dd68a73228157174353602bfc0a924842c804
1 /* This example code is placed in the public domain. */
3 #ifdef HAVE_CONFIG_H
4 # include <config.h>
5 #endif
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <gnutls/gnutls.h>
11 #include <gnutls/extra.h>
13 /* Those functions are defined in other examples.
15 extern void check_alert (gnutls_session_t session, int ret);
16 extern int tcp_connect (void);
17 extern void tcp_close (int sd);
19 #define MAX_BUF 1024
20 #define USERNAME "user"
21 #define PASSWORD "pass"
22 #define CAFILE "ca.pem"
23 #define MSG "GET / HTTP/1.0\r\n\r\n"
25 int
26 main (void)
28 int ret;
29 int sd, ii;
30 gnutls_session_t session;
31 char buffer[MAX_BUF + 1];
32 gnutls_srp_client_credentials_t srp_cred;
33 gnutls_certificate_credentials_t cert_cred;
35 gnutls_global_init ();
37 /* now enable the gnutls-extra library which contains the
38 * SRP stuff.
40 gnutls_global_init_extra ();
42 gnutls_srp_allocate_client_credentials (&srp_cred);
43 gnutls_certificate_allocate_credentials (&cert_cred);
45 gnutls_certificate_set_x509_trust_file (cert_cred, CAFILE,
46 GNUTLS_X509_FMT_PEM);
47 gnutls_srp_set_client_credentials (srp_cred, USERNAME, PASSWORD);
49 /* connects to server
51 sd = tcp_connect ();
53 /* Initialize TLS session
55 gnutls_init (&session, GNUTLS_CLIENT);
58 /* Set the priorities.
60 gnutls_priority_set_direct (session, "NORMAL:+SRP:+SRP-RSA:+SRP-DSS", NULL);
62 /* put the SRP credentials to the current session
64 gnutls_credentials_set (session, GNUTLS_CRD_SRP, srp_cred);
65 gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, cert_cred);
67 gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) sd);
69 /* Perform the TLS handshake
71 ret = gnutls_handshake (session);
73 if (ret < 0)
75 fprintf (stderr, "*** Handshake failed\n");
76 gnutls_perror (ret);
77 goto end;
79 else
81 printf ("- Handshake was completed\n");
84 gnutls_record_send (session, MSG, strlen (MSG));
86 ret = gnutls_record_recv (session, buffer, MAX_BUF);
87 if (gnutls_error_is_fatal (ret) == 1 || ret == 0)
89 if (ret == 0)
91 printf ("- Peer has closed the GNUTLS connection\n");
92 goto end;
94 else
96 fprintf (stderr, "*** Error: %s\n", gnutls_strerror (ret));
97 goto end;
100 else
101 check_alert (session, ret);
103 if (ret > 0)
105 printf ("- Received %d bytes: ", ret);
106 for (ii = 0; ii < ret; ii++)
108 fputc (buffer[ii], stdout);
110 fputs ("\n", stdout);
112 gnutls_bye (session, GNUTLS_SHUT_RDWR);
114 end:
116 tcp_close (sd);
118 gnutls_deinit (session);
120 gnutls_srp_free_client_credentials (srp_cred);
121 gnutls_certificate_free_credentials (cert_cred);
123 gnutls_global_deinit ();
125 return 0;