5 #include <gnutls/gnutlsxx.h>
9 _gnutls_transport_set_lowat (gnutls_session_t session, int num);
15 inline static int RETWRAP_NET (int ret)
17 if (gnutls_error_is_fatal (ret))
18 throw (exception (ret));
23 inline static int RETWRAP (int ret)
26 throw (exception (ret));
30 session::session (gnutls_connection_end_t end)
32 RETWRAP (gnutls_init (&s, end));
40 int session::bye (gnutls_close_request_t how)
42 return RETWRAP_NET (gnutls_bye (s, how));
45 int session::handshake ()
47 return RETWRAP_NET (gnutls_handshake (s));
50 server_session::server_session ():session (GNUTLS_SERVER)
54 server_session::~server_session ()
58 int server_session::rehandshake ()
60 return RETWRAP_NET (gnutls_rehandshake (s));
63 gnutls_alert_description_t session::get_alert () const
65 return gnutls_alert_get (s);
68 int session::send_alert (gnutls_alert_level_t level,
69 gnutls_alert_description_t desc)
71 return RETWRAP_NET (gnutls_alert_send (s, level, desc));
74 int session::send_appropriate_alert (int err)
76 return RETWRAP_NET (gnutls_alert_send_appropriate (s, err));
79 gnutls_cipher_algorithm_t session::get_cipher () const
81 return gnutls_cipher_get (s);
84 gnutls_kx_algorithm_t session::get_kx () const
86 return gnutls_kx_get (s);
89 gnutls_mac_algorithm_t session::get_mac () const
91 return gnutls_mac_get (s);
94 gnutls_compression_method_t session::get_compression () const
96 return gnutls_compression_get (s);
99 gnutls_certificate_type_t session::get_certificate_type () const
101 return gnutls_certificate_type_get (s);
104 void session::set_private_extensions (bool allow)
106 gnutls_handshake_set_private_extensions (s, (int) allow);
109 gnutls_handshake_description_t session::get_handshake_last_out () const
111 return gnutls_handshake_get_last_out (s);
114 gnutls_handshake_description_t session::get_handshake_last_in () const
116 return gnutls_handshake_get_last_in (s);
119 ssize_t session::send (const void *data, size_t sizeofdata)
121 return RETWRAP_NET (gnutls_record_send (s, data, sizeofdata));
124 ssize_t session::recv (void *data, size_t sizeofdata)
126 return RETWRAP_NET (gnutls_record_recv (s, data, sizeofdata));
129 bool session::get_record_direction () const
131 return gnutls_record_get_direction (s);
134 // maximum packet size
135 size_t session::get_max_size () const
137 return gnutls_record_get_max_size (s);
140 void session::set_max_size (size_t size)
142 RETWRAP (gnutls_record_set_max_size (s, size));
145 size_t session::check_pending () const
147 return gnutls_record_check_pending (s);
151 void session::prf (size_t label_size, const char *label,
152 int server_random_first,
153 size_t extra_size, const char *extra,
154 size_t outsize, char *out)
156 RETWRAP (gnutls_prf (s, label_size, label, server_random_first,
157 extra_size, extra, outsize, out));
160 void session::prf_raw (size_t label_size, const char *label,
161 size_t seed_size, const char *seed,
162 size_t outsize, char *out)
164 RETWRAP (gnutls_prf_raw
165 (s, label_size, label, seed_size, seed, outsize, out));
169 void session::set_cipher_priority (const int *list)
171 RETWRAP (GNUTLS_E_UNIMPLEMENTED_FEATURE);
174 void session::set_mac_priority (const int *list)
176 RETWRAP (GNUTLS_E_UNIMPLEMENTED_FEATURE);
179 void session::set_compression_priority (const int *list)
181 RETWRAP (GNUTLS_E_UNIMPLEMENTED_FEATURE);
184 void session::set_kx_priority (const int *list)
186 RETWRAP (GNUTLS_E_UNIMPLEMENTED_FEATURE);
189 void session::set_protocol_priority (const int *list)
191 RETWRAP (GNUTLS_E_UNIMPLEMENTED_FEATURE);
194 void session::set_certificate_type_priority (const int *list)
196 RETWRAP (GNUTLS_E_UNIMPLEMENTED_FEATURE);
200 /* if you just want some defaults, use the following.
202 void session::set_priority (const char *prio, const char **err_pos)
204 RETWRAP (gnutls_priority_set_direct (s, prio, err_pos));
207 void session::set_priority (gnutls_priority_t p)
209 RETWRAP (gnutls_priority_set (s, p));
212 gnutls_protocol_t session::get_protocol_version () const
214 return gnutls_protocol_get_version (s);
217 void session::set_data (const void *session_data, size_t session_data_size)
219 RETWRAP (gnutls_session_set_data (s, session_data, session_data_size));
222 void session::get_data (void *session_data, size_t * session_data_size) const
224 RETWRAP (gnutls_session_get_data (s, session_data, session_data_size));
227 void session::get_data (gnutls_session_t session, gnutls_datum_t & data) const
229 RETWRAP (gnutls_session_get_data2 (s, &data));
233 void session::get_id (void *session_id, size_t * session_id_size) const
235 RETWRAP (gnutls_session_get_id (s, session_id, session_id_size));
238 bool session::is_resumed () const
240 int ret = gnutls_session_is_resumed (s);
245 bool session::get_peers_certificate (std::vector < gnutls_datum_t >
248 const gnutls_datum_t *certs;
249 unsigned int certs_size;
251 certs = gnutls_certificate_get_peers (s, &certs_size);
256 for (unsigned int i = 0; i < certs_size; i++)
257 out_certs.push_back (certs[i]);
262 bool session::get_peers_certificate (const gnutls_datum_t ** certs,
263 unsigned int *certs_size) const
265 *certs = gnutls_certificate_get_peers (s, certs_size);
272 void session::get_our_certificate (gnutls_datum_t & cert) const
274 const gnutls_datum_t *d;
276 d = gnutls_certificate_get_ours (s);
278 throw (exception (GNUTLS_E_INVALID_REQUEST));
282 time_t session::get_peers_certificate_activation_time () const
284 return gnutls_certificate_activation_time_peers (s);
287 time_t session::get_peers_certificate_expiration_time () const
289 return gnutls_certificate_expiration_time_peers (s);
291 void session::verify_peers_certificate (unsigned int &status) const
293 RETWRAP (gnutls_certificate_verify_peers2 (s, &status));
297 client_session::client_session ():session (GNUTLS_CLIENT)
301 client_session::~client_session ()
306 void client_session::set_server_name (gnutls_server_name_type_t type,
307 const void *name, size_t name_length)
309 RETWRAP (gnutls_server_name_set (s, type, name, name_length));
312 bool client_session::get_request_status ()
314 return RETWRAP (gnutls_certificate_client_get_request_status (s));
318 void server_session::get_server_name (void *data, size_t * data_length,
320 unsigned int indx) const
322 RETWRAP (gnutls_server_name_get (s, data, data_length, type, indx));
326 static int store_function (void *_db, gnutls_datum_t key,
331 DB *db = static_cast < DB * >(_db);
333 if (db->store (key, data) == false)
344 const static gnutls_datum_t null_datum = { NULL, 0 };
346 static gnutls_datum_t retrieve_function (void *_db, gnutls_datum_t key)
352 DB *db = static_cast < DB * >(_db);
354 if (db->retrieve (key, data) == false)
366 static int remove_function (void *_db, gnutls_datum_t key)
370 DB *db = static_cast < DB * >(_db);
372 if (db->remove (key) == false)
383 void server_session::set_db (const DB & db)
385 gnutls_db_set_ptr (s, const_cast < DB * >(&db));
386 gnutls_db_set_store_function (s, store_function);
387 gnutls_db_set_retrieve_function (s, retrieve_function);
388 gnutls_db_set_remove_function (s, remove_function);
391 void server_session::set_db_cache_expiration (unsigned int seconds)
393 gnutls_db_set_cache_expiration (s, seconds);
396 void server_session::db_remove () const
398 gnutls_db_remove_session (s);
401 bool server_session::db_check_entry (gnutls_datum_t & session_data) const
403 int ret = gnutls_db_check_entry (s, session_data);
410 void session::set_max_handshake_packet_length (size_t max)
412 gnutls_handshake_set_max_packet_length (s, max);
415 void session::clear_credentials ()
417 gnutls_credentials_clear (s);
420 void session::set_credentials (credentials & cred)
422 RETWRAP (gnutls_credentials_set (s, cred.get_type (), cred.ptr ()));
425 const char *server_session::get_srp_username () const
428 return gnutls_srp_server_get_username (s);
434 const char *server_session::get_psk_username () const
436 return gnutls_psk_server_get_username (s);
440 void session::set_transport_ptr (gnutls_transport_ptr_t ptr)
442 gnutls_transport_set_ptr (s, ptr);
445 void session::set_transport_ptr (gnutls_transport_ptr_t recv_ptr,
446 gnutls_transport_ptr_t send_ptr)
448 gnutls_transport_set_ptr2 (s, recv_ptr, send_ptr);
452 gnutls_transport_ptr_t session::get_transport_ptr () const
454 return gnutls_transport_get_ptr (s);
457 void session::get_transport_ptr (gnutls_transport_ptr_t & recv_ptr,
458 gnutls_transport_ptr_t & send_ptr) const
460 gnutls_transport_get_ptr2 (s, &recv_ptr, &send_ptr);
463 void session::set_transport_lowat (size_t num)
465 _gnutls_transport_set_lowat(s, num);
468 void session::set_transport_push_function (gnutls_push_func push_func)
470 gnutls_transport_set_push_function (s, push_func);
473 void session::set_transport_pull_function (gnutls_pull_func pull_func)
475 gnutls_transport_set_pull_function (s, pull_func);
478 void session::set_user_ptr (void *ptr)
480 gnutls_session_set_ptr (s, ptr);
483 void *session::get_user_ptr () const
485 return gnutls_session_get_ptr (s);
488 void session::send_openpgp_cert (gnutls_openpgp_crt_status_t status)
490 #ifdef ENABLE_OPENPGP
491 gnutls_openpgp_send_cert (s, status);
495 void session::set_dh_prime_bits (unsigned int bits)
497 gnutls_dh_set_prime_bits (s, bits);
500 unsigned int session::get_dh_secret_bits () const
502 return RETWRAP (gnutls_dh_get_secret_bits (s));
505 unsigned int session::get_dh_peers_public_bits () const
507 return RETWRAP (gnutls_dh_get_peers_public_bits (s));
510 unsigned int session::get_dh_prime_bits () const
512 return RETWRAP (gnutls_dh_get_prime_bits (s));
515 void session::get_dh_group (gnutls_datum_t & gen,
516 gnutls_datum_t & prime) const
518 RETWRAP (gnutls_dh_get_group (s, &gen, &prime));
521 void session::get_dh_pubkey (gnutls_datum_t & raw_key) const
523 RETWRAP (gnutls_dh_get_pubkey (s, &raw_key));
526 void session::get_rsa_export_pubkey (gnutls_datum_t & exponent,
527 gnutls_datum_t & modulus) const
529 RETWRAP (gnutls_rsa_export_get_pubkey (s, &exponent, &modulus));
532 unsigned int session::get_rsa_export_modulus_bits () const
534 return RETWRAP (gnutls_rsa_export_get_modulus_bits (s));
537 void server_session::
538 set_certificate_request (gnutls_certificate_request_t req)
540 gnutls_certificate_server_set_request (s, req);
543 gnutls_credentials_type_t session::get_auth_type () const
545 return gnutls_auth_get_type (s);
548 gnutls_credentials_type_t session::get_server_auth_type () const
550 return gnutls_auth_server_get_type (s);
553 gnutls_credentials_type_t session::get_client_auth_type () const
555 return gnutls_auth_client_get_type (s);
559 certificate_credentials::~certificate_credentials ()
561 gnutls_certificate_free_credentials (cred);
564 certificate_credentials::certificate_credentials ():credentials
565 (GNUTLS_CRD_CERTIFICATE)
567 RETWRAP (gnutls_certificate_allocate_credentials (&cred));
571 void certificate_server_credentials::
572 set_params_function (gnutls_params_function * func)
574 gnutls_certificate_set_params_function (cred, func);
577 anon_server_credentials::anon_server_credentials ():credentials
580 RETWRAP (gnutls_anon_allocate_server_credentials (&cred));
584 anon_server_credentials::~anon_server_credentials ()
586 gnutls_anon_free_server_credentials (cred);
589 void anon_server_credentials::set_dh_params (const dh_params & params)
591 gnutls_anon_set_server_dh_params (cred, params.get_params_t ());
594 void anon_server_credentials::set_params_function (gnutls_params_function *
597 gnutls_anon_set_server_params_function (cred, func);
600 anon_client_credentials::anon_client_credentials ():credentials
603 RETWRAP (gnutls_anon_allocate_client_credentials (&cred));
607 anon_client_credentials::~anon_client_credentials ()
609 gnutls_anon_free_client_credentials (cred);
612 void certificate_credentials::free_keys ()
614 gnutls_certificate_free_keys (cred);
617 void certificate_credentials::free_cas ()
619 gnutls_certificate_free_cas (cred);
622 void certificate_credentials::free_ca_names ()
624 gnutls_certificate_free_ca_names (cred);
627 void certificate_credentials::free_crls ()
629 gnutls_certificate_free_crls (cred);
633 void certificate_credentials::set_dh_params (const dh_params & params)
635 gnutls_certificate_set_dh_params (cred, params.get_params_t ());
638 void certificate_credentials::
639 set_rsa_export_params (const rsa_params & params)
641 gnutls_certificate_set_rsa_export_params (cred, params.get_params_t ());
644 void certificate_credentials::set_verify_flags (unsigned int flags)
646 gnutls_certificate_set_verify_flags (cred, flags);
649 void certificate_credentials::set_verify_limits (unsigned int max_bits,
650 unsigned int max_depth)
652 gnutls_certificate_set_verify_limits (cred, max_bits, max_depth);
655 void certificate_credentials::set_x509_trust_file (const char *cafile,
656 gnutls_x509_crt_fmt_t
659 RETWRAP (gnutls_certificate_set_x509_trust_file (cred, cafile, type));
662 void certificate_credentials::set_x509_trust (const gnutls_datum_t & CA,
663 gnutls_x509_crt_fmt_t type)
665 RETWRAP (gnutls_certificate_set_x509_trust_mem (cred, &CA, type));
669 void certificate_credentials::set_x509_crl_file (const char *crlfile,
670 gnutls_x509_crt_fmt_t type)
672 RETWRAP (gnutls_certificate_set_x509_crl_file (cred, crlfile, type));
675 void certificate_credentials::set_x509_crl (const gnutls_datum_t & CRL,
676 gnutls_x509_crt_fmt_t type)
678 RETWRAP (gnutls_certificate_set_x509_crl_mem (cred, &CRL, type));
681 void certificate_credentials::set_x509_key_file (const char *certfile,
683 gnutls_x509_crt_fmt_t type)
685 RETWRAP (gnutls_certificate_set_x509_key_file
686 (cred, certfile, keyfile, type));
689 void certificate_credentials::set_x509_key (const gnutls_datum_t & CERT,
690 const gnutls_datum_t & KEY,
691 gnutls_x509_crt_fmt_t type)
693 RETWRAP (gnutls_certificate_set_x509_key_mem (cred, &CERT, &KEY, type));
696 void certificate_credentials::
697 set_simple_pkcs12_file (const char *pkcs12file,
698 gnutls_x509_crt_fmt_t type, const char *password)
700 RETWRAP (gnutls_certificate_set_x509_simple_pkcs12_file
701 (cred, pkcs12file, type, password));
704 void certificate_credentials::set_x509_key (gnutls_x509_crt_t * cert_list,
706 gnutls_x509_privkey_t key)
708 RETWRAP (gnutls_certificate_set_x509_key
709 (cred, cert_list, cert_list_size, key));
712 void certificate_credentials::set_x509_trust (gnutls_x509_crt_t * ca_list,
715 RETWRAP (gnutls_certificate_set_x509_trust (cred, ca_list, ca_list_size));
718 void certificate_credentials::set_x509_crl (gnutls_x509_crl_t * crl_list,
721 RETWRAP (gnutls_certificate_set_x509_crl (cred, crl_list, crl_list_size));
724 void certificate_credentials::
725 set_retrieve_function (gnutls_certificate_retrieve_function * func)
727 gnutls_certificate_set_retrieve_function (cred, func);
734 srp_server_credentials::srp_server_credentials ():credentials
737 RETWRAP (gnutls_srp_allocate_server_credentials (&cred));
741 srp_server_credentials::~srp_server_credentials ()
743 gnutls_srp_free_server_credentials (cred);
746 srp_client_credentials::srp_client_credentials ():credentials
749 RETWRAP (gnutls_srp_allocate_client_credentials (&cred));
753 srp_client_credentials::~srp_client_credentials ()
755 gnutls_srp_free_client_credentials (cred);
758 void srp_client_credentials::set_credentials (const char *username,
759 const char *password)
761 RETWRAP (gnutls_srp_set_client_credentials (cred, username, password));
764 void srp_server_credentials::
765 set_credentials_file (const char *password_file,
766 const char *password_conf_file)
768 RETWRAP (gnutls_srp_set_server_credentials_file
769 (cred, password_file, password_conf_file));
772 void srp_server_credentials::
773 set_credentials_function (gnutls_srp_server_credentials_function * func)
775 gnutls_srp_set_server_credentials_function (cred, func);
778 void srp_client_credentials::
779 set_credentials_function (gnutls_srp_client_credentials_function * func)
781 gnutls_srp_set_client_credentials_function (cred, func);
784 #endif /* ENABLE_SRP */
788 psk_server_credentials::psk_server_credentials ():credentials
791 RETWRAP (gnutls_psk_allocate_server_credentials (&cred));
795 psk_server_credentials::~psk_server_credentials ()
797 gnutls_psk_free_server_credentials (cred);
800 void psk_server_credentials::
801 set_credentials_file (const char *password_file)
803 RETWRAP (gnutls_psk_set_server_credentials_file (cred, password_file));
806 void psk_server_credentials::
807 set_credentials_function (gnutls_psk_server_credentials_function * func)
809 gnutls_psk_set_server_credentials_function (cred, func);
812 void psk_server_credentials::set_dh_params (const dh_params & params)
814 gnutls_psk_set_server_dh_params (cred, params.get_params_t ());
817 void psk_server_credentials::set_params_function (gnutls_params_function *
820 gnutls_psk_set_server_params_function (cred, func);
823 psk_client_credentials::psk_client_credentials ():credentials
826 RETWRAP (gnutls_psk_allocate_client_credentials (&cred));
830 psk_client_credentials::~psk_client_credentials ()
832 gnutls_psk_free_client_credentials (cred);
835 void psk_client_credentials::set_credentials (const char *username,
836 const gnutls_datum_t & key,
837 gnutls_psk_key_flags flags)
839 RETWRAP (gnutls_psk_set_client_credentials (cred, username, &key, flags));
842 void psk_client_credentials::
843 set_credentials_function (gnutls_psk_client_credentials_function * func)
845 gnutls_psk_set_client_credentials_function (cred, func);
848 credentials::credentials (gnutls_credentials_type_t t):type (t),
853 gnutls_credentials_type_t credentials::get_type () const
858 void *credentials::ptr () const
863 void credentials::set_ptr (void *ptr)
868 exception::exception (int x)
873 int exception::get_code ()
878 const char *exception::what () const throw ()
880 return gnutls_strerror (retcode);
883 dh_params::dh_params ()
885 RETWRAP (gnutls_dh_params_init (¶ms));
888 dh_params::~dh_params ()
890 gnutls_dh_params_deinit (params);
893 void dh_params::import_raw (const gnutls_datum_t & prime,
894 const gnutls_datum_t & generator)
896 RETWRAP (gnutls_dh_params_import_raw (params, &prime, &generator));
899 void dh_params::import_pkcs3 (const gnutls_datum_t & pkcs3_params,
900 gnutls_x509_crt_fmt_t format)
902 RETWRAP (gnutls_dh_params_import_pkcs3 (params, &pkcs3_params, format));
905 void dh_params::generate (unsigned int bits)
907 RETWRAP (gnutls_dh_params_generate2 (params, bits));
910 void dh_params::export_pkcs3 (gnutls_x509_crt_fmt_t format,
911 unsigned char *params_data,
912 size_t * params_data_size)
914 RETWRAP (gnutls_dh_params_export_pkcs3
915 (params, format, params_data, params_data_size));
918 void dh_params::export_raw (gnutls_datum_t & prime,
919 gnutls_datum_t & generator)
921 RETWRAP (gnutls_dh_params_export_raw (params, &prime, &generator, NULL));
924 gnutls_dh_params_t dh_params::get_params_t () const
929 dh_params & dh_params::operator= (const dh_params & src)
931 dh_params *dst = new dh_params;
934 ret = gnutls_dh_params_cpy (dst->params, src.params);
947 rsa_params::rsa_params ()
949 RETWRAP (gnutls_rsa_params_init (¶ms));
952 rsa_params::~rsa_params ()
954 gnutls_rsa_params_deinit (params);
957 void rsa_params::import_pkcs1 (const gnutls_datum_t & pkcs1_params,
958 gnutls_x509_crt_fmt_t format)
960 RETWRAP (gnutls_rsa_params_import_pkcs1 (params, &pkcs1_params, format));
963 void rsa_params::generate (unsigned int bits)
965 RETWRAP (gnutls_rsa_params_generate2 (params, bits));
968 void rsa_params::export_pkcs1 (gnutls_x509_crt_fmt_t format,
969 unsigned char *params_data,
970 size_t * params_data_size)
972 RETWRAP (gnutls_rsa_params_export_pkcs1
973 (params, format, params_data, params_data_size));
976 gnutls_rsa_params_t rsa_params::get_params_t () const
981 rsa_params & rsa_params::operator= (const rsa_params & src)
983 rsa_params *dst = new rsa_params;
986 ret = gnutls_rsa_params_cpy (dst->params, src.params);
997 void rsa_params::import_raw (const gnutls_datum_t & m,
998 const gnutls_datum_t & e,
999 const gnutls_datum_t & d,
1000 const gnutls_datum_t & p,
1001 const gnutls_datum_t & q,
1002 const gnutls_datum_t & u)
1005 RETWRAP (gnutls_rsa_params_import_raw (params, &m, &e, &d, &p, &q, &u));
1009 void rsa_params::export_raw (gnutls_datum_t & m, gnutls_datum_t & e,
1010 gnutls_datum_t & d, gnutls_datum_t & p,
1011 gnutls_datum_t & q, gnutls_datum_t & u)
1013 RETWRAP (gnutls_rsa_params_export_raw
1014 (params, &m, &e, &d, &p, &q, &u, NULL));
1017 } // namespace gnutls