92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef HV_SSL_H_
 | 
						|
#define HV_SSL_H_
 | 
						|
 | 
						|
#include "hexport.h"
 | 
						|
 | 
						|
#include "hplatform.h"
 | 
						|
#if !defined(WITH_OPENSSL) &&   \
 | 
						|
    !defined(WITH_GNUTLS)  &&   \
 | 
						|
    !defined(WITH_MBEDTLS)
 | 
						|
#ifdef OS_WIN
 | 
						|
    #define WITH_WINTLS
 | 
						|
    #ifdef _MSC_VER
 | 
						|
        #pragma comment(lib, "secur32.lib")
 | 
						|
        #pragma comment(lib, "crypt32.lib")
 | 
						|
    #endif
 | 
						|
#elif defined(OS_DARWIN)
 | 
						|
    #define WITH_APPLETLS
 | 
						|
#else
 | 
						|
    #define HV_WITHOUT_SSL
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
typedef void* hssl_ctx_t;   ///> SSL_CTX
 | 
						|
typedef void* hssl_t;       ///> SSL
 | 
						|
 | 
						|
enum {
 | 
						|
    HSSL_SERVER = 0,
 | 
						|
    HSSL_CLIENT = 1,
 | 
						|
};
 | 
						|
 | 
						|
enum {
 | 
						|
    HSSL_OK = 0,
 | 
						|
    HSSL_ERROR = -1,
 | 
						|
    HSSL_WANT_READ = -2,
 | 
						|
    HSSL_WANT_WRITE = -3,
 | 
						|
    HSSL_WOULD_BLOCK = -4,
 | 
						|
};
 | 
						|
 | 
						|
typedef struct {
 | 
						|
    const char* crt_file;
 | 
						|
    const char* key_file;
 | 
						|
    const char* ca_file;
 | 
						|
    const char* ca_path;
 | 
						|
    short       verify_peer;
 | 
						|
    short       endpoint; // HSSL_SERVER / HSSL_CLIENT
 | 
						|
} hssl_ctx_opt_t, hssl_ctx_init_param_t;
 | 
						|
 | 
						|
BEGIN_EXTERN_C
 | 
						|
 | 
						|
/*
 | 
						|
const char* hssl_backend() {
 | 
						|
#ifdef WITH_OPENSSL
 | 
						|
    return "openssl";
 | 
						|
#elif defined(WITH_GNUTLS)
 | 
						|
    return "gnutls";
 | 
						|
#elif defined(WITH_MBEDTLS)
 | 
						|
    return "mbedtls";
 | 
						|
#else
 | 
						|
    return "nossl";
 | 
						|
#endif
 | 
						|
}
 | 
						|
*/
 | 
						|
HV_EXPORT const char* hssl_backend();
 | 
						|
#define HV_WITH_SSL (strcmp(hssl_backend(), "nossl") != 0)
 | 
						|
 | 
						|
HV_EXPORT extern hssl_ctx_t g_ssl_ctx;
 | 
						|
HV_EXPORT hssl_ctx_t hssl_ctx_init(hssl_ctx_init_param_t* param);
 | 
						|
HV_EXPORT void hssl_ctx_cleanup(hssl_ctx_t ssl_ctx);
 | 
						|
HV_EXPORT hssl_ctx_t hssl_ctx_instance();
 | 
						|
 | 
						|
HV_EXPORT hssl_ctx_t hssl_ctx_new(hssl_ctx_opt_t* opt);
 | 
						|
HV_EXPORT void hssl_ctx_free(hssl_ctx_t ssl_ctx);
 | 
						|
 | 
						|
HV_EXPORT hssl_t hssl_new(hssl_ctx_t ssl_ctx, int fd);
 | 
						|
HV_EXPORT void hssl_free(hssl_t ssl);
 | 
						|
 | 
						|
HV_EXPORT int hssl_accept(hssl_t ssl);
 | 
						|
HV_EXPORT int hssl_connect(hssl_t ssl);
 | 
						|
HV_EXPORT int hssl_read(hssl_t ssl, void* buf, int len);
 | 
						|
HV_EXPORT int hssl_write(hssl_t ssl, const void* buf, int len);
 | 
						|
HV_EXPORT int hssl_close(hssl_t ssl);
 | 
						|
 | 
						|
HV_EXPORT int hssl_set_sni_hostname(hssl_t ssl, const char* hostname);
 | 
						|
 | 
						|
#ifdef WITH_OPENSSL
 | 
						|
HV_EXPORT int hssl_ctx_set_alpn_protos(hssl_ctx_t ssl_ctx, const unsigned char* protos, unsigned int protos_len);
 | 
						|
#endif
 | 
						|
 | 
						|
END_EXTERN_C
 | 
						|
 | 
						|
#endif // HV_SSL_H_
 |