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> 63 "/etc/ssl/certs/ca-certificates.crt",
64 "/etc/ssl/ca-bundle.pem",
99 xio=(GWEN_SYNCIO_TLS *) p;
100 free(xio->localCertFile);
101 free(xio->localKeyFile);
102 free(xio->localTrustFile);
103 free(xio->dhParamFile);
112 GWEN_SYNCIO_TLS *xio;
119 oldF=xio->checkCertFn;
130 GWEN_SYNCIO_TLS *xio;
144 GWEN_SYNCIO_TLS *xio;
150 if (xio->checkCertFn) {
152 return xio->checkCertFn(sio, cert);
165 GWEN_SYNCIO_TLS *xio;
171 return xio->localCertFile;
178 GWEN_SYNCIO_TLS *xio;
184 free(xio->localCertFile);
186 xio->localCertFile=strdup(s);
188 xio->localCertFile=
NULL;
195 GWEN_SYNCIO_TLS *xio;
201 return xio->localKeyFile;
208 GWEN_SYNCIO_TLS *xio;
214 free(xio->localKeyFile);
216 xio->localKeyFile=strdup(s);
218 xio->localKeyFile=
NULL;
225 GWEN_SYNCIO_TLS *xio;
231 return xio->localTrustFile;
238 GWEN_SYNCIO_TLS *xio;
244 free(xio->localTrustFile);
246 xio->localTrustFile=strdup(s);
248 xio->localTrustFile=
NULL;
255 GWEN_SYNCIO_TLS *xio;
261 return xio->dhParamFile;
268 GWEN_SYNCIO_TLS *xio;
274 free(xio->dhParamFile);
276 xio->dhParamFile=strdup(s);
278 xio->dhParamFile=
NULL;
285 GWEN_SYNCIO_TLS *xio;
291 return xio->hostName;
298 GWEN_SYNCIO_TLS *xio;
306 xio->hostName=strdup(s);
315 GWEN_SYNCIO_TLS *xio;
321 return xio->peerCertDescr;
358 #if GWEN_TLS_USE_SYSTEM_CERTIFICATES 360 static int GWEN_SyncIo_Tls_AddCaCertFolder(
GWEN_SYNCIO *sio,
const char *folder)
362 GWEN_SYNCIO_TLS *xio;
364 int successfullTustFileCount=0;
370 if (folder && *folder) {
377 "Error reading list of certificate files (%d) in folder [%s]",
389 rv=gnutls_certificate_set_x509_trust_file(xio->credentials,
391 GNUTLS_X509_FMT_PEM);
394 "gnutls_certificate_set_x509_trust_file(%s): %d (%s)",
395 s, rv, gnutls_strerror(rv));
399 successfullTustFileCount++;
409 if (successfullTustFileCount==0) {
413 return successfullTustFileCount;
422 GWEN_SYNCIO_TLS *xio;
425 const char *custom_ciphers;
426 const char *errPos=
NULL;
438 rv=gnutls_init(&xio->session, GNUTLS_SERVER);
442 rv=gnutls_init(&xio->session, GNUTLS_CLIENT);
450 custom_ciphers=getenv(
"GWEN_TLS_CIPHER_PRIORITIES");
452 if (custom_ciphers && *custom_ciphers) {
454 rv=gnutls_priority_set_direct(xio->session, custom_ciphers, &errPos);
455 if (rv!=GNUTLS_E_SUCCESS) {
457 custom_ciphers, gnutls_strerror(rv), rv, errPos?errPos:
"");
458 gnutls_deinit(xio->session);
464 rv=gnutls_set_default_priority(xio->session);
465 if (rv!=GNUTLS_E_SUCCESS) {
467 gnutls_deinit(xio->session);
473 gnutls_handshake_set_max_packet_length(xio->session, 64*1024);
476 if ((lflags & GWEN_SYNCIO_FLAGS_PASSIVE) &&
478 gnutls_certificate_server_set_request(xio->session, GNUTLS_CERT_REQUIRE);
481 rv=gnutls_certificate_allocate_credentials(&xio->credentials);
484 gnutls_deinit(xio->session);
489 if (xio->localCertFile && xio->localKeyFile) {
490 rv=gnutls_certificate_set_x509_key_file(xio->credentials,
493 GNUTLS_X509_FMT_PEM);
497 gnutls_certificate_free_credentials(xio->credentials);
498 gnutls_deinit(xio->session);
506 #if GWEN_TLS_USE_SYSTEM_CERTIFICATES 517 if (trustFileSet==0) {
519 rv=gnutls_certificate_set_x509_system_trust(xio->credentials);
531 if (trustFileSet==0) {
533 const char *defaultFile =
"ca-bundle.crt";
541 if (strcat_s(defaultPath,
sizeof(defaultPath),
"\\share\\gwenhywfar")) {
554 "Using default ca-bundle from [%s]",
557 rv=gnutls_certificate_set_x509_trust_file(xio->credentials,
559 GNUTLS_X509_FMT_PEM);
562 "gnutls_certificate_set_x509_trust_file(%s): %d (%s)",
578 if (trustFileSet==0) {
580 const char *sCertFile=
NULL;
583 sCertFile=SYNCIO_TLS_SYSTEM_CERTFILES[i];
592 if (sCertFile && *sCertFile) {
593 rv=gnutls_certificate_set_x509_trust_file(xio->credentials, sCertFile, GNUTLS_X509_FMT_PEM);
595 DBG_WARN(
GWEN_LOGDOMAIN,
"gnutls_certificate_set_x509_trust_file(%s): %d (%s)", sCertFile, rv, gnutls_strerror(rv));
608 if (trustFileSet==0) {
611 rv=GWEN_SyncIo_Tls_AddCaCertFolder(sio,
"/usr/share/ca-certificates");
624 if (trustFileSet==0) {
632 if (trustFileSet==0) {
639 if (xio->localTrustFile) {
640 rv=gnutls_certificate_set_x509_trust_file(xio->credentials,
642 GNUTLS_X509_FMT_PEM);
645 "gnutls_certificate_set_x509_trust_file(%s): %d (%s)",
646 (xio->localTrustFile)?(xio->localTrustFile):
"-none-",
647 rv, gnutls_strerror(rv));
648 gnutls_certificate_free_credentials(xio->credentials);
649 gnutls_deinit(xio->session);
654 "Added %d trusted certs", rv);
659 if (xio->dhParamFile) {
667 gnutls_certificate_free_credentials(xio->credentials);
668 gnutls_deinit(xio->session);
673 gnutls_dh_params_t dh_params=
NULL;
675 rv=gnutls_dh_params_init(&dh_params);
679 gnutls_certificate_free_credentials(xio->credentials);
680 gnutls_deinit(xio->session);
687 rv=gnutls_dh_params_import_pkcs3(dh_params, &d, GNUTLS_X509_FMT_PEM);
691 gnutls_certificate_free_credentials(xio->credentials);
692 gnutls_deinit(xio->session);
697 gnutls_certificate_set_dh_params(xio->credentials, dh_params);
702 rv=gnutls_credentials_set(xio->session, GNUTLS_CRD_CERTIFICATE, xio->credentials);
705 gnutls_certificate_free_credentials(xio->credentials);
706 gnutls_deinit(xio->session);
711 gnutls_transport_set_ptr(xio->session, (gnutls_transport_ptr_t)sio);
714 #if GNUTLS_VERSION_NUMBER < 0x020c00 721 gnutls_transport_set_lowat(xio->session, 0);
733 GWEN_SYNCIO_TLS *xio;
740 gnutls_certificate_free_credentials(xio->credentials);
741 gnutls_deinit(xio->session);
750 GWEN_SYNCIO_TLS *xio;
751 const gnutls_datum_t *cert_list;
752 unsigned int cert_list_size;
770 if (xio->peerCertDescr) {
772 xio->peerCertDescr=
NULL;
774 xio->peerCertFlags=0;
787 gnutls_certificate_set_verify_flags(xio->credentials,
788 GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
790 rv=gnutls_certificate_verify_peers2(xio->session, &status);
797 if (gnutls_certificate_type_get(xio->session)!=GNUTLS_CRT_X509) {
804 if (status & GNUTLS_CERT_SIGNER_NOT_FOUND) {
807 I18N(
"Signer not found"));
811 if (status & GNUTLS_CERT_INVALID) {
814 I18N(
"Certificate is not trusted"));
818 if (status & GNUTLS_CERT_REVOKED) {
821 I18N(
"Certificate has been revoked"));
825 cert_list=gnutls_certificate_get_peers(xio->session, &cert_list_size);
826 if (cert_list==
NULL || cert_list_size==0) {
831 for (i=0; i<cert_list_size; i++) {
832 gnutls_x509_crt_t cert;
835 rv=gnutls_x509_crt_init(&cert);
841 rv=gnutls_x509_crt_import(cert, &cert_list[0], GNUTLS_X509_FMT_DER);
844 gnutls_x509_crt_deinit(cert);
849 gnutls_datum_t n= {
NULL, 0};
850 gnutls_datum_t e= {
NULL, 0};
853 rv=gnutls_x509_crt_get_pk_rsa_raw(cert, &n, &e);
865 if (n.data && n.size) {
872 if (e.data && e.size) {
888 rv=gnutls_x509_crt_get_fingerprint(cert, GNUTLS_DIG_MD5, buffer1, &size);
892 gnutls_x509_crt_deinit(cert);
900 size, dbuf, 2,
':', 0)) {
902 "Could not convert fingerprint to hex");
911 size=
sizeof(buffer1);
912 rv=gnutls_x509_crt_get_fingerprint(cert, GNUTLS_DIG_SHA1, buffer1, &size);
916 gnutls_x509_crt_deinit(cert);
924 size, dbuf, 2,
':', 0)) {
926 "Could not convert fingerprint to hex");
935 size=
sizeof(buffer1);
936 rv=gnutls_x509_crt_get_fingerprint(cert, GNUTLS_DIG_SHA512, buffer1, &size);
940 gnutls_x509_crt_deinit(cert);
948 size, dbuf, 2,
':', 0)) {
950 "Could not convert fingerprint to hex");
961 if (!gnutls_x509_crt_check_hostname(cert, xio->hostName)) {
963 "Certificate was not issued for this host");
965 I18N(
"Certificate was not issued for this host"));
974 "Hostname is not set, unable to verify the sender");
976 I18N(
"No hostname to verify the sender!"));
982 t=gnutls_x509_crt_get_activation_time(cert);
1003 t=gnutls_x509_crt_get_expiration_time(cert);
1025 size=
sizeof(buffer1)-1;
1026 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_COMMON_NAME, 0, 0, buffer1, &size);
1029 if (xio->hostName && strcasecmp(xio->hostName, buffer1)!=0) {
1035 size=
sizeof(buffer1)-1;
1036 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_ORGANIZATION_NAME, 0, 0, buffer1, &size);
1040 size=
sizeof(buffer1)-1;
1041 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_ORGANIZATIONAL_UNIT_NAME, 0, 0, buffer1, &size);
1045 size=
sizeof(buffer1)-1;
1046 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_LOCALITY_NAME, 0, 0, buffer1, &size);
1050 size=
sizeof(buffer1)-1;
1051 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_STATE_OR_PROVINCE_NAME, 0, 0, buffer1, &size);
1055 size=
sizeof(buffer1)-1;
1056 rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_COUNTRY_NAME, 0, 0, buffer1, &size);
1061 gnutls_x509_crt_deinit(cert);
1141 xio->peerCertDescr=certDescr;
1142 xio->peerCertFlags=errFlags;
1152 GWEN_SYNCIO_TLS *xio;
1168 #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO 1169 gnutls_transport_set_errno(xio->session, errno);
1174 #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO 1175 gnutls_transport_set_errno(xio->session, 0);
1189 GWEN_SYNCIO_TLS *xio;
1205 #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO 1206 gnutls_transport_set_errno(xio->session, errno);
1211 #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO 1212 gnutls_transport_set_errno(xio->session, 0);
1223 GWEN_SYNCIO_TLS *xio;
1225 gnutls_kx_algorithm_t kx;
1237 s=gnutls_protocol_get_name(gnutls_protocol_get_version(xio->session));
1249 kx=gnutls_kx_get(xio->session);
1250 s=gnutls_kx_get_name(kx);
1261 s=gnutls_cipher_get_name(gnutls_cipher_get(xio->session));
1272 s=gnutls_mac_get_name(gnutls_mac_get(xio->session));
1288 switch (gnutls_cipher_get(xio->session)) {
1289 case GNUTLS_CIPHER_ARCFOUR_128:
1290 case GNUTLS_CIPHER_3DES_CBC:
1291 case GNUTLS_CIPHER_AES_128_CBC:
1292 case GNUTLS_CIPHER_ARCFOUR_40:
1293 case GNUTLS_CIPHER_CAMELLIA_128_CBC:
1296 case GNUTLS_CIPHER_AES_256_CBC:
1297 case GNUTLS_CIPHER_CAMELLIA_256_CBC:
1298 case GNUTLS_CIPHER_RC2_40_CBC:
1299 case GNUTLS_CIPHER_DES_CBC:
1300 #ifdef GNUTLS_CIPHER_AES_192_CBC 1301 case GNUTLS_CIPHER_AES_192_CBC:
1312 GWEN_SYNCIO_TLS *xio;
1347 rv=gnutls_handshake(xio->session);
1349 while (rv==GNUTLS_E_AGAIN || rv==GNUTLS_E_INTERRUPTED);
1353 rv, gnutls_strerror(rv), gnutls_error_is_fatal(rv)?
"fatal":
"non-fatal");
1354 if (rv==GNUTLS_E_UNEXPECTED_PACKET_LENGTH) {
1357 I18N(
"A TLS handshake error occurred. " 1358 "If you are using AqBanking you should " 1359 "consider enabling the option " 1360 "\"force SSLv3\" in the user settings " 1366 I18N(
"TLS Handshake Error: %d (%s)"),
1368 gnutls_strerror(rv));
1420 GWEN_SYNCIO_TLS *xio;
1439 rv=gnutls_bye(xio->session, GNUTLS_SHUT_RDWR);
1441 while (rv==GNUTLS_E_AGAIN || rv==GNUTLS_E_INTERRUPTED);
1447 I18N(
"Error on gnutls_bye: %d (%s)"),
1449 gnutls_strerror(rv));
1468 GWEN_SYNCIO_TLS *xio;
1487 rv=gnutls_record_recv(xio->session, buffer, size);
1489 while (rv==GNUTLS_E_AGAIN || rv==GNUTLS_E_INTERRUPTED);
1496 I18N(
"Error on gnutls_record_recv: %d (%s)"),
1498 gnutls_strerror(rv));
1503 #ifdef GNUTLS_E_PREMATURE_TERMINATION 1504 if (rv==GNUTLS_E_PREMATURE_TERMINATION) {
1518 #ifdef GWEN_TLS_DEBUG 1529 const uint8_t *buffer,
1532 GWEN_SYNCIO_TLS *xio;
1540 #ifdef GWEN_TLS_DEBUG 1556 rv=gnutls_record_send(xio->session, buffer, size);
1558 while (rv==GNUTLS_E_AGAIN || rv==GNUTLS_E_INTERRUPTED);
1564 I18N(
"Error on gnutls_record_send: %d (%s)"),
1566 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)
GWENHYWFAR_CB int GWEN_SyncIo_Tls_Internal_CheckCert(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
GWENHYWFAR_API int GWEN_Directory_GetPrefixDirectory(char *buffer, unsigned int size)
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)
const char * SYNCIO_TLS_SYSTEM_CERTFILES[]
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...)
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)
#define GWEN_PATH_FLAGS_VARIABLE
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
int GWENHYWFAR_CB(* GWEN_SIO_TLS_CHECKCERT_FN)(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert)
#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)
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)