updated makefiles
[gnutls.git] / doc / examples / ex-client-srp.c
blob77840758e9adea35ce6c02ed4539b41da253a2eb
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>
12 /* Those functions are defined in other examples.
14 extern void check_alert (gnutls_session_t session, int ret);
15 extern int tcp_connect (void);
16 extern void tcp_close (int sd);
18 #define MAX_BUF 1024
19 #define USERNAME "user"
20 #define PASSWORD "pass"
21 #define CAFILE "/etc/ssl/certs/ca-certificates.crt"
22 #define MSG "GET / HTTP/1.0\r\n\r\n"
24 int
25 main (void)
27 int ret;
28 int sd, ii;
29 gnutls_session_t session;
30 char buffer[MAX_BUF + 1];
31 gnutls_srp_client_credentials_t srp_cred;
32 gnutls_certificate_credentials_t cert_cred;
34 gnutls_global_init ();
36 gnutls_srp_allocate_client_credentials (&srp_cred);
37 gnutls_certificate_allocate_credentials (&cert_cred);
39 gnutls_certificate_set_x509_trust_file (cert_cred, CAFILE,
40 GNUTLS_X509_FMT_PEM);
41 gnutls_srp_set_client_credentials (srp_cred, USERNAME, PASSWORD);
43 /* connects to server
45 sd = tcp_connect ();
47 /* Initialize TLS session
49 gnutls_init (&session, GNUTLS_CLIENT);
52 /* Set the priorities.
54 gnutls_priority_set_direct (session, "NORMAL:+SRP:+SRP-RSA:+SRP-DSS", NULL);
56 /* put the SRP credentials to the current session
58 gnutls_credentials_set (session, GNUTLS_CRD_SRP, srp_cred);
59 gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, cert_cred);
61 gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) sd);
63 /* Perform the TLS handshake
67 ret = gnutls_handshake (session);
69 while (ret < 0 && gnutls_error_is_fatal (ret) == 0);
71 if (ret < 0)
73 fprintf (stderr, "*** Handshake failed\n");
74 gnutls_perror (ret);
75 goto end;
77 else
79 printf ("- Handshake was completed\n");
82 gnutls_record_send (session, MSG, strlen (MSG));
84 ret = gnutls_record_recv (session, buffer, MAX_BUF);
85 if (gnutls_error_is_fatal (ret) != 0 || ret == 0)
87 if (ret == 0)
89 printf ("- Peer has closed the GnuTLS connection\n");
90 goto end;
92 else
94 fprintf (stderr, "*** Error: %s\n", gnutls_strerror (ret));
95 goto end;
98 else
99 check_alert (session, ret);
101 if (ret > 0)
103 printf ("- Received %d bytes: ", ret);
104 for (ii = 0; ii < ret; ii++)
106 fputc (buffer[ii], stdout);
108 fputs ("\n", stdout);
110 gnutls_bye (session, GNUTLS_SHUT_RDWR);
112 end:
114 tcp_close (sd);
116 gnutls_deinit (session);
118 gnutls_srp_free_client_credentials (srp_cred);
119 gnutls_certificate_free_credentials (cert_cred);
121 gnutls_global_deinit ();
123 return 0;