29 #define DISABLE_DEBUGLOG
35 #include "syncio_tls_p.h"
38 #include <gwenhywfar/misc.h>
39 #include <gwenhywfar/debug.h>
40 #include <gwenhywfar/gui.h>
41 #include <gwenhywfar/gui.h>
42 #include <gwenhywfar/pathmanager.h>
43 #include <gwenhywfar/directory.h>
44 #include <gwenhywfar/gwenhywfar.h>
45 #include <gwenhywfar/text.h>
52 #include <gnutls/gnutls.h>
53 #include <gnutls/x509.h>
87 xio=(GWEN_SYNCIO_TLS*) p;
88 free(xio->localCertFile);
89 free(xio->localKeyFile);
90 free(xio->localTrustFile);
91 free(xio->dhParamFile);
106 oldF=xio->checkCertFn;
114 GWEN_SYNCIO_TLS *xio;
127 GWEN_SYNCIO_TLS *xio;
133 if (xio->checkCertFn) {
135 return xio->checkCertFn(sio, cert);
147 GWEN_SYNCIO_TLS *xio;
153 return xio->localCertFile;
159 GWEN_SYNCIO_TLS *xio;
165 free(xio->localCertFile);
166 if (s) xio->localCertFile=strdup(s);
167 else xio->localCertFile=
NULL;
173 GWEN_SYNCIO_TLS *xio;
179 return xio->localKeyFile;
185 GWEN_SYNCIO_TLS *xio;
191 free(xio->localKeyFile);
192 if (s) xio->localKeyFile=strdup(s);
193 else xio->localKeyFile=
NULL;
199 GWEN_SYNCIO_TLS *xio;
205 return xio->localTrustFile;
211 GWEN_SYNCIO_TLS *xio;
217 free(xio->localTrustFile);
218 if (s) xio->localTrustFile=strdup(s);
219 else xio->localTrustFile=
NULL;
225 GWEN_SYNCIO_TLS *xio;
231 return xio->dhParamFile;
237 GWEN_SYNCIO_TLS *xio;
243 free(xio->dhParamFile);
244 if (s) xio->dhParamFile=strdup(s);
245 else xio->dhParamFile=
NULL;
251 GWEN_SYNCIO_TLS *xio;
257 return xio->hostName;
263 GWEN_SYNCIO_TLS *xio;
270 if (s) xio->hostName=strdup(s);
271 else xio->hostName=
NULL;
277 GWEN_SYNCIO_TLS *xio;
283 return xio->peerCertDescr;
319 #if GWEN_TLS_USE_SYSTEM_CERTIFICATES
321 static int GWEN_SyncIo_Tls_AddCaCertFolder(
GWEN_SYNCIO *sio,
const char *folder) {
322 GWEN_SYNCIO_TLS *xio;
324 int successfullTustFileCount=0;
330 if (folder && *folder) {
337 "Error reading list of certificate files (%d) in folder [%s]",
349 rv=gnutls_certificate_set_x509_trust_file(xio->credentials,
351 GNUTLS_X509_FMT_PEM);
354 "gnutls_certificate_set_x509_trust_file(%s): %d (%s)",
355 s, rv, gnutls_strerror(rv));
359 successfullTustFileCount++;
369 if (successfullTustFileCount==0) {
373 return successfullTustFileCount;
381 GWEN_SYNCIO_TLS *xio;
384 const char *custom_ciphers;
385 const char *errPos=
NULL;
397 rv=gnutls_init(&xio->session, GNUTLS_SERVER);
401 rv=gnutls_init(&xio->session, GNUTLS_CLIENT);
409 custom_ciphers=getenv(
"GWEN_TLS_CIPHER_PRIORITIES");
411 if (custom_ciphers && *custom_ciphers) {
413 rv=gnutls_priority_set_direct(xio->session, custom_ciphers, &errPos);
414 if (rv!=GNUTLS_E_SUCCESS) {
416 custom_ciphers, gnutls_strerror(rv), rv, errPos?errPos:
"");
417 gnutls_deinit(xio->session);
423 rv=gnutls_set_default_priority(xio->session);
424 if (rv!=GNUTLS_E_SUCCESS) {
426 gnutls_deinit(xio->session);
432 gnutls_handshake_set_max_packet_length(xio->session, 64*1024);
435 if ((lflags & GWEN_SYNCIO_FLAGS_PASSIVE) &&
437 gnutls_certificate_server_set_request(xio->session, GNUTLS_CERT_REQUIRE);
440 rv=gnutls_certificate_allocate_credentials(&xio->credentials);
443 gnutls_deinit(xio->session);
448 if (xio->localCertFile && xio->localKeyFile) {
449 rv=gnutls_certificate_set_x509_key_file(xio->credentials,
452 GNUTLS_X509_FMT_PEM);
456 gnutls_certificate_free_credentials(xio->credentials);
457 gnutls_deinit(xio->session);
465 #if GWEN_TLS_USE_SYSTEM_CERTIFICATES
477 if (trustFileSet==0) {
489 "Using default ca-bundle from [%s]",
492 rv=gnutls_certificate_set_x509_trust_file(xio->credentials,
494 GNUTLS_X509_FMT_PEM);
497 "gnutls_certificate_set_x509_trust_file(%s): %d (%s)",
513 if (trustFileSet==0) {
516 rv=GWEN_SyncIo_Tls_AddCaCertFolder(sio,
"/usr/share/ca-certificates");
529 if (trustFileSet==0) {
537 if (trustFileSet==0) {
544 if (xio->localTrustFile) {
545 rv=gnutls_certificate_set_x509_trust_file(xio->credentials,
547 GNUTLS_X509_FMT_PEM);
550 "gnutls_certificate_set_x509_trust_file(%s): %d (%s)",
551 (xio->localTrustFile)?(xio->localTrustFile):
"-none-",
552 rv, gnutls_strerror(rv));
553 gnutls_certificate_free_credentials(xio->credentials);
554 gnutls_deinit(xio->session);
559 "Added %d trusted certs", rv);
564 if (xio->dhParamFile) {
572 gnutls_certificate_free_credentials(xio->credentials);
573 gnutls_deinit(xio->session);
578 gnutls_dh_params_t dh_params=
NULL;
580 rv=gnutls_dh_params_init(&dh_params);
584 gnutls_certificate_free_credentials(xio->credentials);
585 gnutls_deinit(xio->session);
592 rv=gnutls_dh_params_import_pkcs3(dh_params, &d, GNUTLS_X509_FMT_PEM);
596 gnutls_certificate_free_credentials(xio->credentials);
597 gnutls_deinit(xio->session);
602 gnutls_certificate_set_dh_params(xio->credentials, dh_params);
607 rv=gnutls_credentials_set(xio->session, GNUTLS_CRD_CERTIFICATE, xio->credentials);
610 gnutls_certificate_free_credentials(xio->credentials);
611 gnutls_deinit(xio->session);
616 gnutls_transport_set_ptr(xio->session, (gnutls_transport_ptr_t)sio);
619 #if GNUTLS_VERSION_NUMBER < 0x020c00
626 gnutls_transport_set_lowat(xio->session, 0);
637 GWEN_SYNCIO_TLS *xio;
644 gnutls_certificate_free_credentials(xio->credentials);
645 gnutls_deinit(xio->session);
653 GWEN_SYNCIO_TLS *xio;
654 const gnutls_datum_t *cert_list;
655 unsigned int cert_list_size;
673 if (xio->peerCertDescr) {
675 xio->peerCertDescr=
NULL;
677 xio->peerCertFlags=0;
690 gnutls_certificate_set_verify_flags(xio->credentials,
691 GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
693 rv=gnutls_certificate_verify_peers2(xio->session, &status);
700 if (gnutls_certificate_type_get(xio->session)!=GNUTLS_CRT_X509) {
707 if (status & GNUTLS_CERT_SIGNER_NOT_FOUND) {
710 I18N(
"Signer not found"));
714 if (status & GNUTLS_CERT_INVALID) {
717 I18N(
"Certificate is not trusted"));
721 if (status & GNUTLS_CERT_REVOKED) {
724 I18N(
"Certificate has been revoked"));
728 cert_list=gnutls_certificate_get_peers(xio->session, &cert_list_size);
729 if (cert_list==
NULL || cert_list_size==0) {
734 for (i=0; i<cert_list_size; i++) {
735 gnutls_x509_crt_t cert;
738 rv=gnutls_x509_crt_init(&cert);
744 rv=gnutls_x509_crt_import(cert, &cert_list[0], GNUTLS_X509_FMT_DER);
747 gnutls_x509_crt_deinit(cert);
752 gnutls_datum_t n= {
NULL, 0};
753 gnutls_datum_t e= {
NULL, 0};
756 rv=gnutls_x509_crt_get_pk_rsa_raw(cert, &n, &e);
768 if (n.data && n.size) {
775 if (e.data && e.size) {
791 rv=gnutls_x509_crt_get_fingerprint(cert, GNUTLS_DIG_MD5, buffer1, &size);
795 gnutls_x509_crt_deinit(cert);
803 size, dbuf, 2,
':', 0)) {
805 "Could not convert fingerprint to hex");
814 size=
sizeof(buffer1);
815 rv=gnutls_x509_crt_get_fingerprint(cert, GNUTLS_DIG_SHA1, buffer1, &size);
819 gnutls_x509_crt_deinit(cert);
827 size, dbuf, 2,
':', 0)) {
829 "Could not convert fingerprint to hex");
838 size=
sizeof(buffer1);
839 rv=gnutls_x509_crt_get_fingerprint(cert, GNUTLS_DIG_SHA512, buffer1, &size);
843 gnutls_x509_crt_deinit(cert);
851 size, dbuf, 2,
':', 0)) {
853 "Could not convert fingerprint to hex");
864 if (!gnutls_x509_crt_check_hostname(cert, xio->hostName)) {
866 "Certificate was not issued for this host");
868 I18N(
"Certificate was not issued for this host"));
877 "Hostname is not set, unable to verify the sender");
879 I18N(
"No hostname to verify the sender!"));
885 t=gnutls_x509_crt_get_activation_time(cert);
906 t=gnutls_x509_crt_get_expiration_time(cert);
928 size=
sizeof(buffer1)-1;
929 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_COMMON_NAME, 0, 0, buffer1, &size);
932 if (xio->hostName && strcasecmp(xio->hostName, buffer1)!=0) {
938 size=
sizeof(buffer1)-1;
939 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_ORGANIZATION_NAME, 0, 0, buffer1, &size);
943 size=
sizeof(buffer1)-1;
944 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_ORGANIZATIONAL_UNIT_NAME, 0, 0, buffer1, &size);
948 size=
sizeof(buffer1)-1;
949 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_LOCALITY_NAME, 0, 0, buffer1, &size);
953 size=
sizeof(buffer1)-1;
954 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_STATE_OR_PROVINCE_NAME, 0, 0, buffer1, &size);
958 size=
sizeof(buffer1)-1;
959 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_COUNTRY_NAME, 0, 0, buffer1, &size);
964 gnutls_x509_crt_deinit(cert);
1044 xio->peerCertDescr=certDescr;
1045 xio->peerCertFlags=errFlags;
1054 GWEN_SYNCIO_TLS *xio;
1070 #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO
1071 gnutls_transport_set_errno(xio->session, errno);
1076 #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO
1077 gnutls_transport_set_errno(xio->session, 0);
1090 GWEN_SYNCIO_TLS *xio;
1106 #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO
1107 gnutls_transport_set_errno(xio->session, errno);
1112 #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO
1113 gnutls_transport_set_errno(xio->session, 0);
1123 GWEN_SYNCIO_TLS *xio;
1125 gnutls_kx_algorithm_t kx;
1137 s=gnutls_protocol_get_name(gnutls_protocol_get_version(xio->session));
1149 kx=gnutls_kx_get(xio->session);
1150 s=gnutls_kx_get_name(kx);
1161 s=gnutls_cipher_get_name(gnutls_cipher_get(xio->session));
1172 s=gnutls_mac_get_name(gnutls_mac_get(xio->session));
1188 switch(gnutls_cipher_get(xio->session)) {
1189 case GNUTLS_CIPHER_ARCFOUR_128:
1190 case GNUTLS_CIPHER_3DES_CBC:
1191 case GNUTLS_CIPHER_AES_128_CBC:
1192 case GNUTLS_CIPHER_ARCFOUR_40:
1193 case GNUTLS_CIPHER_CAMELLIA_128_CBC:
1196 case GNUTLS_CIPHER_AES_256_CBC:
1197 case GNUTLS_CIPHER_CAMELLIA_256_CBC:
1198 case GNUTLS_CIPHER_RC2_40_CBC:
1199 case GNUTLS_CIPHER_DES_CBC:
1200 #ifdef GNUTLS_CIPHER_AES_192_CBC
1201 case GNUTLS_CIPHER_AES_192_CBC:
1211 GWEN_SYNCIO_TLS *xio;
1246 rv=gnutls_handshake(xio->session);
1248 while (rv==GNUTLS_E_AGAIN || rv==GNUTLS_E_INTERRUPTED);
1252 rv, gnutls_strerror(rv), gnutls_error_is_fatal(rv)?
"fatal":
"non-fatal");
1253 if (rv==GNUTLS_E_UNEXPECTED_PACKET_LENGTH) {
1256 I18N(
"A TLS handshake error occurred. "
1257 "If you are using AqBanking you should "
1258 "consider enabling the option "
1259 "\"force SSLv3\" in the user settings "
1265 I18N(
"TLS Handshake Error: %d (%s)"),
1267 gnutls_strerror(rv));
1318 GWEN_SYNCIO_TLS *xio;
1337 rv=gnutls_bye(xio->session, GNUTLS_SHUT_RDWR);
1339 while (rv==GNUTLS_E_AGAIN || rv==GNUTLS_E_INTERRUPTED);
1345 I18N(
"Error on gnutls_bye: %d (%s)"),
1347 gnutls_strerror(rv));
1365 GWEN_SYNCIO_TLS *xio;
1384 rv=gnutls_record_recv(xio->session, buffer, size);
1386 while (rv==GNUTLS_E_AGAIN || rv==GNUTLS_E_INTERRUPTED);
1393 I18N(
"Error on gnutls_record_recv: %d (%s)"),
1395 gnutls_strerror(rv));
1400 #ifdef GNUTLS_E_PREMATURE_TERMINATION
1401 if (rv==GNUTLS_E_PREMATURE_TERMINATION) {
1415 #ifdef GWEN_TLS_DEBUG
1426 const uint8_t *buffer,
1428 GWEN_SYNCIO_TLS *xio;
1436 #ifdef GWEN_TLS_DEBUG
1452 rv=gnutls_record_send(xio->session, buffer, size);
1454 while (rv==GNUTLS_E_AGAIN || rv==GNUTLS_E_INTERRUPTED);
1460 I18N(
"Error on gnutls_record_send: %d (%s)"),
1462 gnutls_strerror(rv));
void GWEN_SslCertDescr_SetStateOrProvinceName(GWEN_SSLCERTDESCR *st, const char *d)
void GWEN_SyncIo_Tls_UndoPrepare(GWEN_SYNCIO *sio)
struct GWEN_TIME GWEN_TIME
int GWEN_Gui_ProgressLog(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
struct GWEN_SSLCERTDESCR GWEN_SSLCERTDESCR
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
ssize_t GWEN_SyncIo_Tls_Push(gnutls_transport_ptr_t p, const void *buf, size_t len)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio)
#define GWEN_SSL_CERT_FLAGS_INVALID
void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert)
void GWEN_SyncIo_SubFlags(GWEN_SYNCIO *sio, uint32_t fl)
#define GWEN_SYNCIO_TLS_FLAGS_ALLOW_V1_CA_CRT
struct GWEN_DB_NODE GWEN_DB_NODE
int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
void GWEN_SyncIo_Tls_SetLocalTrustFile(GWEN_SYNCIO *sio, const char *s)
int GWEN_SyncIo_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size)
void GWEN_Text_DumpString(const char *s, unsigned int l, unsigned int insert)
#define DBG_NOTICE(dbg_logger, format, args...)
void GWEN_SyncIo_Tls_SetDhParamFile(GWEN_SYNCIO *sio, const char *s)
GWEN_SYNCIO_WRITE_FN GWEN_SyncIo_SetWriteFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_WRITE_FN fn)
const char * GWEN_SyncIo_Tls_GetRemoteHostName(const GWEN_SYNCIO *sio)
#define GWEN_FREE_OBJECT(varname)
void GWEN_SslCertDescr_SetOrganizationName(GWEN_SSLCERTDESCR *st, const char *d)
GWEN_SYNCIO_CONNECT_FN GWEN_SyncIo_SetConnectFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_CONNECT_FN fn)
#define DBG_VERBOUS(dbg_logger, format, args...)
#define GWEN_SSL_CERT_FLAGS_EXPIRED
uint32_t GWEN_SyncIo_GetFlags(const GWEN_SYNCIO *sio)
const char * GWEN_SyncIo_Tls_GetDhParamFile(const GWEN_SYNCIO *sio)
void GWEN_SslCertDescr_SetPubKeyModulus(GWEN_SSLCERTDESCR *st, const char *d)
int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf)
const char * GWEN_SyncIo_Tls_GetLocalKeyFile(const GWEN_SYNCIO *sio)
#define DBG_WARN(dbg_logger, format, args...)
int GWEN_SyncIo_Tls_Internal_CheckCert(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert)
void GWEN_SyncIo_SetStatus(GWEN_SYNCIO *sio, GWEN_SYNCIO_STATUS st)
#define GWEN_SYNCIO_TLS_FLAGS_SECURE
const char * GWEN_SyncIo_Tls_GetLocalCertFile(const GWEN_SYNCIO *sio)
GWENHYWFAR_API int GWEN_Directory_GetMatchingFilesRecursively(const char *folder, GWEN_STRINGLIST *sl, const char *mask)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
GWEN_SYNCIO * GWEN_SyncIo_GetBaseIo(const GWEN_SYNCIO *sio)
void GWENHYWFAR_CB GWEN_SyncIo_Tls_FreeData(void *bp, void *p)
char * GWEN_Buffer_GetPosPointer(const GWEN_BUFFER *bf)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i)
#define GWEN_SSL_CERT_FLAGS_OK
#define GWEN_ERROR_NOT_CONNECTED
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
void GWEN_SslCertDescr_SetLocalityName(GWEN_SSLCERTDESCR *st, const char *d)
#define GWEN_SSL_CERT_FLAGS_SYSTEM
#define GWEN_SYNCIO_TLS_FLAGS_NEED_PEER_CERT
#define GWEN_NEW_OBJECT(typ, varname)
void GWEN_SslCertDescr_SetFingerPrintSha512(GWEN_SSLCERTDESCR *st, const char *d)
void GWEN_SslCertDescr_SetIsError(GWEN_SSLCERTDESCR *st, int d)
struct GWEN_SYNCIO GWEN_SYNCIO
void GWEN_SslCertDescr_SetPubKeyExponent(GWEN_SSLCERTDESCR *st, const char *d)
GWEN_SYNCIO * GWEN_SyncIo_Tls_new(GWEN_SYNCIO *baseIo)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
int GWEN_SyncIo_Tls_Prepare(GWEN_SYNCIO *sio)
int GWEN_Gui_ProgressLog2(uint32_t id, GWEN_LOGGER_LEVEL level, const char *fmt,...)
int GWEN_SyncIo_Tls_CheckCert(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert)
#define GWEN_ERROR_SSL_PREMATURE_CLOSE
void GWEN_SslCertDescr_SetCountryName(GWEN_SSLCERTDESCR *st, const char *d)
GWENHYWFAR_API int GWEN_Directory_FindFileInPaths(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf)
GWEN_SSLCERTDESCR * GWEN_SyncIo_Tls_GetPeerCertDescr(const GWEN_SYNCIO *sio)
#define GWEN_SYNCIO_TLS_FLAGS_IGN_PREMATURE_CLOSE
#define GWEN_ERROR_SSL_SECURITY
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
#define GWEN_ERROR_GENERIC
void GWEN_SyncIo_Tls_SetRemoteHostName(GWEN_SYNCIO *sio, const char *s)
#define GWEN_SYNCIO_FLAGS_PASSIVE
#define GWEN_SYNCIO_TLS_FLAGS_REQUEST_CERT
void GWEN_SyncIo_Tls_SetLocalKeyFile(GWEN_SYNCIO *sio, const char *s)
void GWEN_SslCertDescr_SetOrganizationalUnitName(GWEN_SSLCERTDESCR *st, const char *d)
GWEN_SYNCIO_STATUS GWEN_SyncIo_GetStatus(const GWEN_SYNCIO *sio)
int GWENHYWFAR_CB GWEN_SyncIo_Tls_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size)
int GWEN_SyncIo_Tls_GetPeerCert(GWEN_SYNCIO *sio)
ssize_t GWEN_SyncIo_Tls_Pull(gnutls_transport_ptr_t p, void *buf, size_t len)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWENHYWFAR_API void GWEN_Time_free(GWEN_TIME *t)
int GWENHYWFAR_CB GWEN_SyncIo_Tls_Disconnect(GWEN_SYNCIO *sio)
void GWEN_SyncIo_AddFlags(GWEN_SYNCIO *sio, uint32_t fl)
#define GWEN_SYNCIO_TLS_FLAGS_ADD_TRUSTED_CAS
#define GWEN_SSL_CERT_FLAGS_SIGNER_NOT_FOUND
#define GWEN_SSL_CERT_FLAGS_BAD_HOSTNAME
#define DBG_ERROR(dbg_logger, format, args...)
void GWEN_SyncIo_Tls_SetLocalCertFile(GWEN_SYNCIO *sio, const char *s)
#define GWEN_SSL_CERT_FLAGS_REVOKED
#define GWEN_SYNCIO_TLS_TYPE
int GWEN_SslCertDescr_toDb(const GWEN_SSLCERTDESCR *st, GWEN_DB_NODE *db)
int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio)
void GWEN_SslCertDescr_SetNotAfter(GWEN_SSLCERTDESCR *st, const GWEN_TIME *d)
GWEN_SYNCIO * GWEN_SyncIo_new(const char *typeName, GWEN_SYNCIO *baseIo)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
void GWEN_SyncIo_Tls_ShowCipherInfo(GWEN_SYNCIO *sio)
int GWENHYWFAR_CB(* GWEN_SIO_TLS_CHECKCERT_FN)(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert)
GWEN_SYNCIO_DISCONNECT_FN GWEN_SyncIo_SetDisconnectFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_DISCONNECT_FN fn)
#define DBG_INFO(dbg_logger, format, args...)
GWEN_SIO_TLS_CHECKCERT_FN GWEN_SyncIo_Tls_SetCheckCertFn(GWEN_SYNCIO *sio, GWEN_SIO_TLS_CHECKCERT_FN f)
GWENHYWFAR_API int GWEN_Directory_GetPath(const char *path, unsigned int flags)
void GWEN_SslCertDescr_SetStatusText(GWEN_SSLCERTDESCR *st, const char *d)
int GWEN_SyncIo_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
int GWENHYWFAR_CB GWEN_SyncIo_Tls_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size)
void GWEN_SslCertDescr_SetNotBefore(GWEN_SSLCERTDESCR *st, const GWEN_TIME *d)
#define GWEN_INHERIT(bt, t)
GWEN_SYNCIO_READ_FN GWEN_SyncIo_SetReadFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_READ_FN fn)
#define GWEN_ERROR_NO_DATA
GWENHYWFAR_API GWEN_TIME * GWEN_Time_fromSeconds(uint32_t s)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
int GWENHYWFAR_CB GWEN_SyncIo_Tls_Connect(GWEN_SYNCIO *sio)
int GWEN_Gui_CheckCert(const GWEN_SSLCERTDESCR *cd, GWEN_SYNCIO *sio, uint32_t guiid)
GWEN_STRINGLIST * GWEN_StringList_new(void)
void GWEN_SslCertDescr_SetFingerPrint(GWEN_SSLCERTDESCR *st, const char *d)
#define GWEN_PATH_FLAGS_NAMEMUSTEXIST
void GWEN_SslCertDescr_free(GWEN_SSLCERTDESCR *st)
int GWEN_Text_ToHexBuffer(const char *src, unsigned l, GWEN_BUFFER *buf, unsigned int groupsize, char delimiter, int skipLeadingZeroes)
GWEN_SSLCERTDESCR * GWEN_SslCertDescr_new(void)
#define GWEN_SSL_CERT_FLAGS_BAD_DATA
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
int GWEN_SyncIo_Tls__readFile(const char *fname, GWEN_BUFFER *buf)
#define GWEN_INHERIT_GETDATA(bt, t, element)
void GWEN_SslCertDescr_SetCommonName(GWEN_SSLCERTDESCR *st, const char *d)
#define GWEN_SSL_CERT_FLAGS_NOT_ACTIVE
const char * GWEN_SyncIo_Tls_GetLocalTrustFile(const GWEN_SYNCIO *sio)
void GWEN_SslCertDescr_SetFingerPrintSha1(GWEN_SSLCERTDESCR *st, const char *d)
void GWEN_SslCertDescr_SetStatusFlags(GWEN_SSLCERTDESCR *st, uint32_t d)