1 module deimos.wolfssl.wolfssl;
2 
3 public:
4 
5 enum SSL_ERROR_NONE      =  0;   /* for most functions */
6 enum SSL_FAILURE         =  0;   /* for some functions */
7 enum SSL_SUCCESS         =  1;
8 
9 enum SSL_SHUTDOWN_NOT_DONE = 2;  /* call wolfSSL_shutdown again to complete */
10 
11 enum SSL_ALPN_NOT_FOUND  = -9;
12 enum SSL_BAD_CERTTYPE    = -8;
13 enum SSL_BAD_STAT        = -7;
14 enum SSL_BAD_PATH        = -6;
15 enum SSL_BAD_FILETYPE    = -5;
16 enum SSL_BAD_FILE        = -4;
17 enum SSL_NOT_IMPLEMENTED = -3;
18 enum SSL_UNKNOWN         = -2;
19 enum SSL_FATAL_ERROR     = -1;
20 
21 enum SSL_FILETYPE_PEM     = 1;
22 enum SSL_FILETYPE_ASN1    = 2;
23 enum SSL_FILETYPE_DEFAULT = 2; /* ASN1 */
24 enum SSL_FILETYPE_RAW     = 3; /* NTRU raw key blob */
25 
26 enum SSL_VERIFY_NONE                 = 0;
27 enum SSL_VERIFY_PEER                 = 1;
28 enum SSL_VERIFY_FAIL_IF_NO_PEER_CERT = 2;
29 enum SSL_VERIFY_CLIENT_ONCE          = 4;
30 enum SSL_VERIFY_FAIL_EXCEPT_PSK      = 8;
31 
32 enum SSL_SESS_CACHE_OFF                = 0x0000;
33 enum SSL_SESS_CACHE_CLIENT             = 0x0001;
34 enum SSL_SESS_CACHE_SERVER             = 0x0002;
35 enum SSL_SESS_CACHE_BOTH               = 0x0003;
36 enum SSL_SESS_CACHE_NO_AUTO_CLEAR      = 0x0008;
37 enum SSL_SESS_CACHE_NO_INTERNAL_LOOKUP = 0x0100;
38 enum SSL_SESS_CACHE_NO_INTERNAL_STORE  = 0x0200;
39 enum SSL_SESS_CACHE_NO_INTERNAL        = 0x0300;
40 
41 enum SSL_ERROR_WANT_READ        =  2;
42 enum SSL_ERROR_WANT_WRITE       =  3;
43 enum SSL_ERROR_WANT_CONNECT     =  7;
44 enum SSL_ERROR_WANT_ACCEPT      =  8;
45 enum SSL_ERROR_SYSCALL          =  5;
46 enum SSL_ERROR_WANT_X509_LOOKUP =  83;
47 enum SSL_ERROR_ZERO_RETURN      =  6;
48 enum SSL_ERROR_SSL              =  85;
49 
50 enum SSL_SENT_SHUTDOWN     = 1;
51 enum SSL_RECEIVED_SHUTDOWN = 2;
52 enum SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER = 4;
53 
54 enum SSL_R_SSL_HANDSHAKE_FAILURE           = 101;
55 enum SSL_R_TLSV1_ALERT_UNKNOWN_CA          = 102;
56 enum SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN = 103;
57 enum SSL_R_SSLV3_ALERT_BAD_CERTIFICATE     = 104;
58 
59 enum SSL_CBIO_ERR_GENERAL    = -1;     /* general unexpected err */
60 enum SSL_CBIO_ERR_WANT_READ  = -2;     /* need to call read  again */
61 enum SSL_CBIO_ERR_WANT_WRITE = -2;     /* need to call write again */
62 enum SSL_CBIO_ERR_CONN_RST   = -3;     /* connection reset */
63 enum SSL_CBIO_ERR_ISR        = -4;     /* interrupt */
64 enum SSL_CBIO_ERR_CONN_CLOSE = -5;     /* connection closed or epipe */
65 enum SSL_CBIO_ERR_TIMEOUT    = -6;     /* socket timeout */
66 
67 
68 alias SSL     = WOLFSSL;
69 alias SSL_CTX = WOLFSSL_CTX;
70 
71 alias SSL_library_init                   = wolfSSL_library_init;
72 alias SSL_load_error_strings             = wolfSSL_load_error_strings;
73 alias ERR_print_errors_fp                = wolfSSL_ERR_dump_errors_fp;
74 alias ERR_free_strings                   = wolfSSL_ERR_free_strings;
75 alias OpenSSL_add_ssl_algorithms         = wolfSSL_add_all_algorithms;
76 
77 alias TLSv1_server_method                = wolfTLSv1_server_method;
78 alias TLSv1_client_method                = wolfTLSv1_client_method;
79 
80 alias SSL_CTX_new                        = wolfSSL_CTX_new;
81 alias SSL_CTX_load_verify_locations      = wolfSSL_CTX_load_verify_locations;
82 alias SSL_CTX_use_certificate_chain_file = wolfSSL_CTX_use_certificate_chain_file;
83 alias SSL_CTX_use_PrivateKey_file        = wolfSSL_CTX_use_PrivateKey_file;
84 alias SSL_CTX_check_private_key          = wolfSSL_CTX_check_private_key;
85 alias SSL_new                            = wolfSSL_new;
86 alias SSL_CTX_free                       = wolfSSL_CTX_free;
87 alias SSL_set_fd                         = wolfSSL_set_fd;
88 alias SSL_get_fd                         = wolfSSL_get_fd;
89 alias SSL_connect                        = wolfSSL_connect;
90 alias SSL_shutdown                       = wolfSSL_shutdown;
91 alias SSL_free                           = wolfSSL_free;
92 alias SSL_read                           = wolfSSL_read;
93 alias SSL_get_error                      = wolfSSL_get_error;
94 alias SSL_write                          = wolfSSL_write;
95 alias SSL_set_accept_state               = wolfSSL_set_accept_state;
96 alias SSL_SSL_do_handshake               = wolfSSL_SSL_do_handshake;
97 alias SSL_SSLSetIOSend                   = wolfSSL_SSLSetIOSend;
98 alias SSL_SSLSetIORecv                   = wolfSSL_SSLSetIORecv;
99 
100 extern (C):
101 
102 alias SSL_sendFunc                       = int function(WOLFSSL*, const void*, int, void*);
103 alias SSL_recvFunc                       = int function(WOLFSSL*, void*, int, void*);
104 
105 struct FILE;
106 struct WOLFSSL_METHOD;
107 struct WOLFSSL_CTX;
108 struct WOLFSSL;
109 
110 void  wolfSSL_library_init();
111 void  wolfSSL_load_error_strings();
112 void  wolfSSL_ERR_dump_errors_fp(FILE* fp);
113 void  wolfSSL_ERR_free_strings();
114 int   wolfSSL_add_all_algorithms();
115 
116 WOLFSSL_METHOD* wolfTLSv1_server_method();
117 WOLFSSL_METHOD* wolfTLSv1_client_method();
118 
119 WOLFSSL_CTX* wolfSSL_CTX_new(WOLFSSL_METHOD* method);
120 int          wolfSSL_CTX_load_verify_locations(WOLFSSL_CTX* ctx, const char* file, const char* path);
121 int          wolfSSL_CTX_use_certificate_chain_file(WOLFSSL_CTX* ctx, const char* file);
122 int          wolfSSL_CTX_use_PrivateKey_file(WOLFSSL_CTX* ctx, const char* file, int format);
123 int          wolfSSL_CTX_check_private_key(const WOLFSSL_CTX* ctx);
124 WOLFSSL*     wolfSSL_new(WOLFSSL_CTX* ctx);
125 void         wolfSSL_CTX_free(WOLFSSL_CTX* ctx);
126 int          wolfSSL_set_fd(WOLFSSL* ssl, int fd);
127 int          wolfSSL_get_fd(WOLFSSL* ssl);
128 int          wolfSSL_connect(WOLFSSL* ssl);
129 int          wolfSSL_shutdown(WOLFSSL* ssl);
130 void         wolfSSL_free(WOLFSSL* ssl);
131 int          wolfSSL_read(WOLFSSL* ssl, void* data, int sz);
132 int          wolfSSL_get_error(WOLFSSL* ssl, int ret);
133 int          wolfSSL_write(WOLFSSL* ssl, const void* data, int sz);
134 void         wolfSSL_set_accept_state(WOLFSSL* ssl);
135 int          wolfSSL_SSL_do_handshake(WOLFSSL* ssl);
136 void         wolfSSL_SSLSetIOSend(WOLFSSL* ssl, SSL_sendFunc sendFunc);
137 void         wolfSSL_SSLSetIORecv(WOLFSSL* ssl, SSL_recvFunc recvFunc);