diff options
author | Simon Josefsson <simon@josefsson.org> | 2004-08-05 08:49:02 +0000 |
---|---|---|
committer | Simon Josefsson <simon@josefsson.org> | 2004-08-05 08:49:02 +0000 |
commit | 90fdaf2adeb573d3ece06e6f2cc1a6fca6860ed3 (patch) | |
tree | 7f53706b20fda228632d39dcec6084fd7fbb4cb3 /doc/examples/ex-client-srp.c | |
parent | 3b7f80d51869c231f56f725f5a060bb640f12fed (diff) | |
download | gnutls-90fdaf2adeb573d3ece06e6f2cc1a6fca6860ed3.tar.gz |
Remove old manual.
Diffstat (limited to 'doc/examples/ex-client-srp.c')
-rw-r--r-- | doc/examples/ex-client-srp.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/doc/examples/ex-client-srp.c b/doc/examples/ex-client-srp.c new file mode 100644 index 0000000000..ff164c7897 --- /dev/null +++ b/doc/examples/ex-client-srp.c @@ -0,0 +1,115 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <gnutls/gnutls.h> +#include <gnutls/extra.h> + +/* Those functions are defined in other examples. + */ +extern void check_alert(gnutls_session_t session, int ret); +extern int tcp_connect( void); +extern void tcp_close( int sd); + +#define MAX_BUF 1024 +#define USERNAME "user" +#define PASSWORD "pass" +#define CAFILE "ca.pem" +#define SA struct sockaddr +#define MSG "GET / HTTP/1.0\r\n\r\n" + +const int kx_priority[] = { GNUTLS_KX_SRP, GNUTLS_KX_SRP_DSS, + GNUTLS_KX_SRP_RSA, 0 }; + +int main() +{ + int ret; + int sd, ii; + gnutls_session_t session; + char buffer[MAX_BUF + 1]; + gnutls_srp_client_credentials_t srp_cred; + gnutls_certificate_client_credentials_t cert_cred; + + gnutls_global_init(); + + /* now enable the gnutls-extra library which contains the + * SRP stuff. + */ + gnutls_global_init_extra(); + + gnutls_srp_allocate_client_credentials(&srp_cred); + gnutls_certificate_allocate_client_credentials(&cert_cred); + + gnutls_certificate_set_x509_trust_file(cert_cred, CAFILE, GNUTLS_X509_FMT_PEM); + gnutls_srp_set_client_credentials(srp_cred, USERNAME, PASSWORD); + + /* connects to server + */ + sd = tcp_connect(); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + + /* Set the priorities. + */ + gnutls_set_default_priority(session); + gnutls_kx_set_priority(session, kx_priority); + + + /* put the SRP credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_SRP, srp_cred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, cert_cred); + + gnutls_transport_set_ptr( session, (gnutls_transport_ptr_t)sd); + + /* Perform the TLS handshake + */ + ret = gnutls_handshake( session); + + if (ret < 0) { + fprintf(stderr, "*** Handshake failed\n"); + gnutls_perror(ret); + goto end; + } else { + printf("- Handshake was completed\n"); + } + + gnutls_record_send( session, MSG, strlen(MSG)); + + ret = gnutls_record_recv( session, buffer, MAX_BUF); + if (gnutls_error_is_fatal(ret) == 1 || ret == 0) { + if (ret == 0) { + printf("- Peer has closed the GNUTLS connection\n"); + goto end; + } else { + fprintf(stderr, "*** Error: %s\n", gnutls_strerror(ret)); + goto end; + } + } else + check_alert( session, ret); + + if (ret > 0) { + printf("- Received %d bytes: ", ret); + for (ii = 0; ii < ret; ii++) { + fputc(buffer[ii], stdout); + } + fputs("\n", stdout); + } + gnutls_bye( session, 0); + + end: + + tcp_close( sd); + + gnutls_deinit(session); + + gnutls_srp_free_client_credentials(srp_cred); + gnutls_certificate_free_credentials(cert_cred); + + gnutls_global_deinit(); + + return 0; +} + |