]> gitweb.factorcode.org Git - factor.git/blob - basis/openssl/libssl/libssl.factor
Remove Windows CE from core/ basis/ and build-support/
[factor.git] / basis / openssl / libssl / libssl.factor
1 ! Copyright (C) 2007 Elie CHAFTARI
2 ! Portions copyright (C) 2008 Slava Pestov
3 ! See http://factorcode.org/license.txt for BSD license.
4 USING: alien alien.c-types alien.syntax combinators kernel
5 system namespaces assocs parser lexer sequences words
6 quotations math.bitwise alien.libraries literals ;
7
8 IN: openssl.libssl
9
10 << {
11     { [ os openbsd? ] [ ] } ! VM is linked with it
12     { [ os netbsd? ] [ ] }
13     { [ os windows? ] [ "libssl" "ssleay32.dll" cdecl add-library ] }
14     { [ os macosx? ] [ "libssl" "libssl.dylib" cdecl add-library ] }
15     { [ os unix? ] [ "libssl" "libssl.so" cdecl add-library ] }
16 } cond >>
17
18 CONSTANT: X509_FILETYPE_PEM       1
19 CONSTANT: X509_FILETYPE_ASN1      2
20 CONSTANT: X509_FILETYPE_DEFAULT   3
21
22 ALIAS: SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1
23 ALIAS: SSL_FILETYPE_PEM  X509_FILETYPE_PEM
24
25 CONSTANT: SSL_CTRL_NEED_TMP_RSA   1
26 CONSTANT: SSL_CTRL_SET_TMP_RSA    2
27 CONSTANT: SSL_CTRL_SET_TMP_DH     3
28 CONSTANT: SSL_CTRL_SET_TMP_RSA_CB 4
29 CONSTANT: SSL_CTRL_SET_TMP_DH_CB  5
30
31 CONSTANT: SSL_CTRL_GET_SESSION_REUSED       6 
32 CONSTANT: SSL_CTRL_GET_CLIENT_CERT_REQUEST  7 
33 CONSTANT: SSL_CTRL_GET_NUM_RENEGOTIATIONS   8 
34 CONSTANT: SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 9 
35 CONSTANT: SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 10
36 CONSTANT: SSL_CTRL_GET_FLAGS                11
37 CONSTANT: SSL_CTRL_EXTRA_CHAIN_CERT         12
38
39 CONSTANT: SSL_CTRL_SET_MSG_CALLBACK         13
40 CONSTANT: SSL_CTRL_SET_MSG_CALLBACK_ARG     14
41
42 CONSTANT: SSL_CTRL_SESS_NUMBER              20
43 CONSTANT: SSL_CTRL_SESS_CONNECT             21
44 CONSTANT: SSL_CTRL_SESS_CONNECT_GOOD        22
45 CONSTANT: SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23
46 CONSTANT: SSL_CTRL_SESS_ACCEPT              24
47 CONSTANT: SSL_CTRL_SESS_ACCEPT_GOOD         25
48 CONSTANT: SSL_CTRL_SESS_ACCEPT_RENEGOTIATE  26
49 CONSTANT: SSL_CTRL_SESS_HIT                 27
50 CONSTANT: SSL_CTRL_SESS_CB_HIT              28
51 CONSTANT: SSL_CTRL_SESS_MISSES              29
52 CONSTANT: SSL_CTRL_SESS_TIMEOUTS            30
53 CONSTANT: SSL_CTRL_SESS_CACHE_FULL          31
54 CONSTANT: SSL_CTRL_OPTIONS                  32
55 CONSTANT: SSL_CTRL_MODE                     33
56
57 CONSTANT: SSL_CTRL_GET_READ_AHEAD           40
58 CONSTANT: SSL_CTRL_SET_READ_AHEAD           41
59 CONSTANT: SSL_CTRL_SET_SESS_CACHE_SIZE      42
60 CONSTANT: SSL_CTRL_GET_SESS_CACHE_SIZE      43
61 CONSTANT: SSL_CTRL_SET_SESS_CACHE_MODE      44
62 CONSTANT: SSL_CTRL_GET_SESS_CACHE_MODE      45
63
64 CONSTANT: SSL_CTRL_GET_MAX_CERT_LIST        50
65 CONSTANT: SSL_CTRL_SET_MAX_CERT_LIST        51
66
67 CONSTANT: SSL_ERROR_NONE             0
68 CONSTANT: SSL_ERROR_SSL              1
69 CONSTANT: SSL_ERROR_WANT_READ        2
70 CONSTANT: SSL_ERROR_WANT_WRITE       3
71 CONSTANT: SSL_ERROR_WANT_X509_LOOKUP 4
72 CONSTANT: SSL_ERROR_SYSCALL          5 ! consult errno for details
73 CONSTANT: SSL_ERROR_ZERO_RETURN      6
74 CONSTANT: SSL_ERROR_WANT_CONNECT     7
75 CONSTANT: SSL_ERROR_WANT_ACCEPT      8
76
77 ! Error messages table
78 : error-messages ( -- hash )
79     H{
80         { 0  "SSL_ERROR_NONE" }
81         { 1  "SSL_ERROR_SSL" }
82         { 2  "SSL_ERROR_WANT_READ" }
83         { 3  "SSL_ERROR_WANT_WRITE" }
84         { 4  "SSL_ERROR_WANT_X509_LOOKUP" }
85         { 5  "SSL_ERROR_SYSCALL" }
86         { 6  "SSL_ERROR_ZERO_RETURN" }
87         { 7  "SSL_ERROR_WANT_CONNECT" }
88         { 8  "SSL_ERROR_WANT_ACCEPT" }
89     } ;
90
91 TYPEDEF: void* ssl-method
92 C-TYPE: SSL_CTX
93 C-TYPE: SSL_SESSION
94 C-TYPE: SSL
95
96 LIBRARY: libssl
97
98 ! ===============================================
99 ! x509.h
100 ! ===============================================
101
102 C-TYPE: X509_NAME
103 C-TYPE: X509
104
105 FUNCTION: int X509_NAME_get_text_by_NID ( X509_NAME* name, int nid, void* buf, int len ) ;
106 FUNCTION: X509_NAME* X509_get_subject_name ( X509* a ) ;
107
108 ! ===============================================
109 ! ssl.h
110 ! ===============================================
111
112 FUNCTION: c-string SSL_get_version ( SSL* ssl ) ;
113
114 ! Maps OpenSSL errors to strings
115 FUNCTION: void SSL_load_error_strings (  ) ;
116
117 ! Must be called before any other action takes place
118 FUNCTION: int SSL_library_init (  ) ;
119
120 ! Sets the default SSL version
121 FUNCTION: ssl-method SSLv2_client_method (  ) ;
122
123 FUNCTION: ssl-method SSLv23_client_method (  ) ;
124
125 FUNCTION: ssl-method SSLv23_server_method (  ) ;
126
127 FUNCTION: ssl-method SSLv23_method (  ) ; ! SSLv3 but can rollback to v2
128
129 FUNCTION: ssl-method SSLv3_client_method (  ) ;
130
131 FUNCTION: ssl-method SSLv3_server_method (  ) ;
132
133 FUNCTION: ssl-method SSLv3_method (  ) ;
134
135 FUNCTION: ssl-method TLSv1_client_method (  ) ;
136
137 FUNCTION: ssl-method TLSv1_server_method (  ) ;
138
139 FUNCTION: ssl-method TLSv1_method (  ) ;
140
141 ! Creates the context
142 FUNCTION: SSL_CTX* SSL_CTX_new ( ssl-method method ) ;
143
144 ! Load the certificates and private keys into the SSL_CTX
145 FUNCTION: int SSL_CTX_use_certificate_chain_file ( SSL_CTX* ctx,
146                                                    c-string file ) ; ! PEM type
147
148 FUNCTION: SSL* SSL_new ( SSL_CTX* ctx ) ;
149
150 FUNCTION: int SSL_set_fd ( SSL* ssl, int fd ) ;
151
152 FUNCTION: void SSL_set_bio ( SSL* ssl, void* rbio, void* wbio ) ;
153
154 FUNCTION: int SSL_set_session ( SSL* to, SSL_SESSION* session ) ;
155
156 FUNCTION: int SSL_get_error ( SSL* ssl, int ret ) ;
157
158 FUNCTION: void SSL_set_connect_state ( SSL* ssl ) ;
159
160 FUNCTION: void SSL_set_accept_state ( SSL* ssl ) ;
161
162 FUNCTION: int SSL_connect ( SSL* ssl ) ;
163
164 FUNCTION: int SSL_accept ( SSL* ssl ) ;
165
166 FUNCTION: int SSL_write ( SSL* ssl, void* buf, int num ) ;
167
168 FUNCTION: int SSL_read ( SSL* ssl, void* buf, int num ) ;
169
170 FUNCTION: int SSL_shutdown ( SSL* ssl ) ;
171
172 CONSTANT: SSL_SENT_SHUTDOWN 1
173 CONSTANT: SSL_RECEIVED_SHUTDOWN 2
174
175 FUNCTION: int SSL_get_shutdown ( SSL* ssl ) ;
176
177 FUNCTION: int SSL_CTX_set_session_id_context ( SSL_CTX* ctx, c-string sid_ctx, uint len ) ;
178
179 FUNCTION: SSL_SESSION* SSL_get1_session ( SSL* ssl ) ;
180
181 FUNCTION: void SSL_free ( SSL* ssl ) ;
182
183 FUNCTION: void SSL_SESSION_free ( SSL_SESSION* ses ) ;
184
185 FUNCTION: int SSL_want ( SSL* ssl ) ;
186
187 CONSTANT: SSL_NOTHING 1
188 CONSTANT: SSL_WRITING 2
189 CONSTANT: SSL_READING 3
190 CONSTANT: SSL_X509_LOOKUP 4
191
192 FUNCTION: long SSL_get_verify_result ( SSL* ssl ) ;
193
194 FUNCTION: X509* SSL_get_peer_certificate ( SSL* s ) ;
195
196 FUNCTION: void SSL_CTX_free ( SSL_CTX* ctx ) ;
197
198 FUNCTION: void RAND_seed ( void* buf, int num ) ;
199
200 FUNCTION: int SSL_set_cipher_list ( SSL* ssl, c-string str ) ;
201
202 FUNCTION: int SSL_use_RSAPrivateKey_file ( SSL* ssl, c-string str ) ;
203
204 FUNCTION: int SSL_CTX_use_RSAPrivateKey_file ( SSL_CTX* ctx, int type ) ;
205
206 FUNCTION: int SSL_use_certificate_file ( SSL* ssl,
207                                          c-string str, int type ) ;
208
209 FUNCTION: int SSL_CTX_load_verify_locations ( SSL_CTX* ctx, c-string CAfile,
210                                               c-string CApath ) ;
211
212 FUNCTION: int SSL_CTX_set_default_verify_paths ( SSL_CTX* ctx ) ;
213
214 CONSTANT: SSL_VERIFY_NONE 0
215 CONSTANT: SSL_VERIFY_PEER 1
216 CONSTANT: SSL_VERIFY_FAIL_IF_NO_PEER_CERT 2
217 CONSTANT: SSL_VERIFY_CLIENT_ONCE 4
218
219 FUNCTION: void SSL_CTX_set_verify ( SSL_CTX* ctx, int mode, void* callback ) ;
220
221 FUNCTION: void SSL_CTX_set_client_CA_list ( SSL_CTX* ctx, SSL* list ) ;
222
223 FUNCTION: SSL* SSL_load_client_CA_file ( c-string file ) ;
224
225 ! Used to manipulate settings of the SSL_CTX and SSL objects.
226 ! This function should never be called directly
227 FUNCTION: long SSL_CTX_ctrl ( SSL_CTX* ctx, int cmd, long larg, void* parg ) ;
228
229 FUNCTION: void SSL_CTX_set_default_passwd_cb ( SSL_CTX* ctx, void* cb ) ;
230
231 FUNCTION: void SSL_CTX_set_default_passwd_cb_userdata ( SSL_CTX* ctx,
232                                                         void* u ) ;
233
234 FUNCTION: int SSL_CTX_use_PrivateKey_file ( SSL_CTX* ctx, c-string file,
235                                             int type ) ;
236
237 ! Sets the maximum depth for the allowed ctx certificate chain verification
238 FUNCTION: void SSL_CTX_set_verify_depth ( SSL_CTX* ctx, int depth ) ;
239
240 ! Sets DH parameters to be used to be dh.
241 ! The key is inherited by all ssl objects created from ctx
242 FUNCTION: void SSL_CTX_set_tmp_dh_callback ( SSL_CTX* ctx, void* dh ) ;
243
244 FUNCTION: void SSL_CTX_set_tmp_rsa_callback ( SSL_CTX* ctx, void* rsa ) ;
245
246 FUNCTION: void* BIO_f_ssl (  ) ;
247
248 : SSL_CTX_set_tmp_rsa ( ctx rsa -- n )
249     [ SSL_CTRL_SET_TMP_RSA 0 ] dip SSL_CTX_ctrl ;
250
251 : SSL_CTX_set_tmp_dh ( ctx dh -- n )
252     [ SSL_CTRL_SET_TMP_DH 0 ] dip SSL_CTX_ctrl ;
253
254 : SSL_CTX_set_session_cache_mode ( ctx mode -- n )
255     [ SSL_CTRL_SET_SESS_CACHE_MODE ] dip f SSL_CTX_ctrl ;
256
257 CONSTANT: SSL_SESS_CACHE_OFF    HEX: 0000
258 CONSTANT: SSL_SESS_CACHE_CLIENT HEX: 0001
259 CONSTANT: SSL_SESS_CACHE_SERVER HEX: 0002
260
261 CONSTANT: SSL_SESS_CACHE_BOTH flags{ SSL_SESS_CACHE_CLIENT SSL_SESS_CACHE_SERVER }
262
263 CONSTANT: SSL_SESS_CACHE_NO_AUTO_CLEAR      HEX: 0080
264 CONSTANT: SSL_SESS_CACHE_NO_INTERNAL_LOOKUP HEX: 0100
265 CONSTANT: SSL_SESS_CACHE_NO_INTERNAL_STORE  HEX: 0200
266
267 CONSTANT: SSL_SESS_CACHE_NO_INTERNAL
268     flags{ SSL_SESS_CACHE_NO_INTERNAL_LOOKUP SSL_SESS_CACHE_NO_INTERNAL_STORE }
269
270 ! ===============================================
271 ! x509_vfy.h
272 ! ===============================================
273
274 <<
275
276 SYMBOL: verify-messages
277
278 H{ } clone verify-messages set-global
279
280 : verify-message ( n -- word ) verify-messages get-global at ;
281
282 SYNTAX: X509_V_:
283     scan "X509_V_" prepend create-in
284     scan-word
285     [ 1quotation (( -- value )) define-inline ]
286     [ verify-messages get set-at ]
287     2bi ;
288
289 >>
290
291 X509_V_: OK 0
292 X509_V_: ERR_UNABLE_TO_GET_ISSUER_CERT 2
293 X509_V_: ERR_UNABLE_TO_GET_CRL 3
294 X509_V_: ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4
295 X509_V_: ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5
296 X509_V_: ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6
297 X509_V_: ERR_CERT_SIGNATURE_FAILURE 7
298 X509_V_: ERR_CRL_SIGNATURE_FAILURE 8
299 X509_V_: ERR_CERT_NOT_YET_VALID 9
300 X509_V_: ERR_CERT_HAS_EXPIRED 10
301 X509_V_: ERR_CRL_NOT_YET_VALID 11
302 X509_V_: ERR_CRL_HAS_EXPIRED 12
303 X509_V_: ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13
304 X509_V_: ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14
305 X509_V_: ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15
306 X509_V_: ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16
307 X509_V_: ERR_OUT_OF_MEM 17
308 X509_V_: ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18
309 X509_V_: ERR_SELF_SIGNED_CERT_IN_CHAIN 19
310 X509_V_: ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20
311 X509_V_: ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21
312 X509_V_: ERR_CERT_CHAIN_TOO_LONG 22
313 X509_V_: ERR_CERT_REVOKED 23
314 X509_V_: ERR_INVALID_CA 24
315 X509_V_: ERR_PATH_LENGTH_EXCEEDED 25
316 X509_V_: ERR_INVALID_PURPOSE 26
317 X509_V_: ERR_CERT_UNTRUSTED 27
318 X509_V_: ERR_CERT_REJECTED 28
319 X509_V_: ERR_SUBJECT_ISSUER_MISMATCH 29
320 X509_V_: ERR_AKID_SKID_MISMATCH 30
321 X509_V_: ERR_AKID_ISSUER_SERIAL_MISMATCH 31
322 X509_V_: ERR_KEYUSAGE_NO_CERTSIGN 32
323 X509_V_: ERR_UNABLE_TO_GET_CRL_ISSUER 33
324 X509_V_: ERR_UNHANDLED_CRITICAL_EXTENSION 34
325 X509_V_: ERR_KEYUSAGE_NO_CRL_SIGN 35
326 X509_V_: ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36
327 X509_V_: ERR_INVALID_NON_CA 37
328 X509_V_: ERR_PROXY_PATH_LENGTH_EXCEEDED 38
329 X509_V_: ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39
330 X509_V_: ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40
331 X509_V_: ERR_APPLICATION_VERIFICATION 50
332
333 ! ===============================================
334 ! obj_mac.h
335 ! ===============================================
336
337 CONSTANT: NID_commonName 13