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.destructors alien.libraries
5 alien.parser alien.syntax classes.struct combinators kernel
6 literals namespaces openssl.libcrypto system ;
7 SLOT: alpn-supported-protocols
10 LIBRARY-UNIX: libssl cdecl "libssl.so"
11 LIBRARY-MACOSX: libssl cdecl "libssl.35.dylib"
12 LIBRARY-WINDOWS: libssl cdecl "libssl-38.dll"
14 CONSTANT: X509_FILETYPE_PEM 1
15 CONSTANT: X509_FILETYPE_ASN1 2
16 CONSTANT: X509_FILETYPE_DEFAULT 3
18 ALIAS: SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1
19 ALIAS: SSL_FILETYPE_PEM X509_FILETYPE_PEM
21 CONSTANT: SSL_SENT_SHUTDOWN 1
22 CONSTANT: SSL_RECEIVED_SHUTDOWN 2
24 CONSTANT: SSL_NOTHING 1
25 CONSTANT: SSL_WRITING 2
26 CONSTANT: SSL_READING 3
27 CONSTANT: SSL_X509_LOOKUP 4
29 CONSTANT: SSL_CTRL_NEED_TMP_RSA 1
30 CONSTANT: SSL_CTRL_SET_TMP_RSA 2
31 CONSTANT: SSL_CTRL_SET_TMP_DH 3
32 CONSTANT: SSL_CTRL_SET_TMP_RSA_CB 4
33 CONSTANT: SSL_CTRL_SET_TMP_DH_CB 5
35 CONSTANT: SSL_CTRL_GET_SESSION_REUSED 6
36 CONSTANT: SSL_CTRL_GET_CLIENT_CERT_REQUEST 7
37 CONSTANT: SSL_CTRL_GET_NUM_RENEGOTIATIONS 8
38 CONSTANT: SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 9
39 CONSTANT: SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 10
40 CONSTANT: SSL_CTRL_GET_FLAGS 11
41 CONSTANT: SSL_CTRL_EXTRA_CHAIN_CERT 12
43 CONSTANT: SSL_CTRL_SET_MSG_CALLBACK 13
44 CONSTANT: SSL_CTRL_SET_MSG_CALLBACK_ARG 14
46 CONSTANT: SSL_CTRL_SESS_NUMBER 20
47 CONSTANT: SSL_CTRL_SESS_CONNECT 21
48 CONSTANT: SSL_CTRL_SESS_CONNECT_GOOD 22
49 CONSTANT: SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23
50 CONSTANT: SSL_CTRL_SESS_ACCEPT 24
51 CONSTANT: SSL_CTRL_SESS_ACCEPT_GOOD 25
52 CONSTANT: SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26
53 CONSTANT: SSL_CTRL_SESS_HIT 27
54 CONSTANT: SSL_CTRL_SESS_CB_HIT 28
55 CONSTANT: SSL_CTRL_SESS_MISSES 29
56 CONSTANT: SSL_CTRL_SESS_TIMEOUTS 30
57 CONSTANT: SSL_CTRL_SESS_CACHE_FULL 31
58 CONSTANT: SSL_CTRL_OPTIONS 32
59 CONSTANT: SSL_CTRL_MODE 33
61 CONSTANT: SSL_CTRL_GET_READ_AHEAD 40
62 CONSTANT: SSL_CTRL_SET_READ_AHEAD 41
63 CONSTANT: SSL_CTRL_SET_SESS_CACHE_SIZE 42
64 CONSTANT: SSL_CTRL_GET_SESS_CACHE_SIZE 43
65 CONSTANT: SSL_CTRL_SET_SESS_CACHE_MODE 44
66 CONSTANT: SSL_CTRL_GET_SESS_CACHE_MODE 45
68 CONSTANT: SSL_CTRL_GET_MAX_CERT_LIST 50
69 CONSTANT: SSL_CTRL_SET_MAX_CERT_LIST 51
70 CONSTANT: SSL_CTRL_SET_MAX_SEND_FRAGMENT 52
71 CONSTANT: SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53
72 CONSTANT: SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54
73 CONSTANT: SSL_CTRL_SET_TLSEXT_HOSTNAME 55
74 CONSTANT: SSL_CTRL_SET_TLSEXT_DEBUG_CB 56
75 CONSTANT: SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57
76 CONSTANT: SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58
77 CONSTANT: SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59
78 CONSTANT: SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61
79 CONSTANT: SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62
80 CONSTANT: SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63
81 CONSTANT: SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64
82 CONSTANT: SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65
83 CONSTANT: SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66
84 CONSTANT: SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67
85 CONSTANT: SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68
86 CONSTANT: SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69
87 CONSTANT: SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70
88 CONSTANT: SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71
89 CONSTANT: SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72
90 CONSTANT: SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75
91 CONSTANT: SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76
92 CONSTANT: SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77
93 CONSTANT: SSL_CTRL_SET_SRP_ARG 78
94 CONSTANT: SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79
95 CONSTANT: SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80
96 CONSTANT: SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81
97 CONSTANT: SSL_CTRL_TLS_EXT_SEND_HEARTBEAT 85
98 CONSTANT: SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING 86
99 CONSTANT: SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS 87
100 CONSTANT: SSL_CTRL_CHAIN 88
101 CONSTANT: SSL_CTRL_CHAIN_CERT 89
102 CONSTANT: SSL_CTRL_GET_CURVES 90
103 CONSTANT: SSL_CTRL_SET_CURVES 91
104 CONSTANT: SSL_CTRL_SET_CURVES_LIST 92
105 CONSTANT: SSL_CTRL_GET_SHARED_CURVE 93
106 CONSTANT: SSL_CTRL_SET_ECDH_AUTO 94
107 CONSTANT: SSL_CTRL_SET_SIGALGS 97
108 CONSTANT: SSL_CTRL_SET_SIGALGS_LIST 98
109 CONSTANT: SSL_CTRL_CERT_FLAGS 99
110 CONSTANT: SSL_CTRL_CLEAR_CERT_FLAGS 100
111 CONSTANT: SSL_CTRL_SET_CLIENT_SIGALGS 101
112 CONSTANT: SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102
113 CONSTANT: SSL_CTRL_GET_CLIENT_CERT_TYPES 103
114 CONSTANT: SSL_CTRL_SET_CLIENT_CERT_TYPES 104
115 CONSTANT: SSL_CTRL_BUILD_CERT_CHAIN 105
116 CONSTANT: SSL_CTRL_SET_VERIFY_CERT_STORE 106
117 CONSTANT: SSL_CTRL_SET_CHAIN_CERT_STORE 107
118 CONSTANT: SSL_CTRL_GET_PEER_SIGNATURE_NID 108
119 CONSTANT: SSL_CTRL_GET_SERVER_TMP_KEY 109
120 CONSTANT: SSL_CTRL_GET_RAW_CIPHERLIST 110
121 CONSTANT: SSL_CTRL_GET_EC_POINT_FORMATS 111
122 CONSTANT: SSL_CTRL_GET_CHAIN_CERTS 115
123 CONSTANT: SSL_CTRL_SELECT_CURRENT_CERT 116
124 CONSTANT: SSL_CTRL_SET_CURRENT_CERT 117
125 CONSTANT: SSL_CTRL_CHECK_PROTO_VERSION 119
126 CONSTANT: DTLS_CTRL_SET_LINK_MTU 120
127 CONSTANT: DTLS_CTRL_GET_LINK_MIN_MTU 121
129 CONSTANT: TLSEXT_NAMETYPE_host_name 0
130 CONSTANT: TLSEXT_STATUSTYPE_ocsp 1
132 CONSTANT: TLSEXT_ECPOINTFORMAT_first 0
133 CONSTANT: TLSEXT_ECPOINTFORMAT_uncompressed 0
134 CONSTANT: TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1
135 CONSTANT: TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2
136 CONSTANT: TLSEXT_ECPOINTFORMAT_last 2
138 CONSTANT: TLSEXT_signature_anonymous 0
139 CONSTANT: TLSEXT_signature_rsa 1
140 CONSTANT: TLSEXT_signature_dsa 2
141 CONSTANT: TLSEXT_signature_ecdsa 3
142 CONSTANT: TLSEXT_signature_num 4
144 CONSTANT: TLSEXT_hash_none 0
145 CONSTANT: TLSEXT_hash_md5 1
146 CONSTANT: TLSEXT_hash_sha1 2
147 CONSTANT: TLSEXT_hash_sha224 3
148 CONSTANT: TLSEXT_hash_sha256 4
149 CONSTANT: TLSEXT_hash_sha384 5
150 CONSTANT: TLSEXT_hash_sha512 6
151 CONSTANT: TLSEXT_hash_num 7
153 CONSTANT: TLSEXT_nid_unknown 0x1000000
155 CONSTANT: SSL_OP_NO_SSLv2 0x01000000
156 CONSTANT: SSL_OP_NO_SSLv3 0x02000000
157 CONSTANT: SSL_OP_NO_TLSv1 0x04000000
158 CONSTANT: SSL_OP_NO_TLSv1_2 0x08000000
159 CONSTANT: SSL_OP_NO_TLSv1_1 0x10000000
161 CONSTANT: SSL_VERIFY_NONE 0
162 CONSTANT: SSL_VERIFY_PEER 1
163 CONSTANT: SSL_VERIFY_FAIL_IF_NO_PEER_CERT 2
164 CONSTANT: SSL_VERIFY_CLIENT_ONCE 4
166 CONSTANT: SSL_SESS_CACHE_OFF 0x0000
167 CONSTANT: SSL_SESS_CACHE_CLIENT 0x0001
168 CONSTANT: SSL_SESS_CACHE_SERVER 0x0002
170 CONSTANT: SSL_SESS_CACHE_BOTH flags{ SSL_SESS_CACHE_CLIENT SSL_SESS_CACHE_SERVER }
172 CONSTANT: SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080
173 CONSTANT: SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100
174 CONSTANT: SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200
176 CONSTANT: SSL_SESS_CACHE_NO_INTERNAL
177 flags{ SSL_SESS_CACHE_NO_INTERNAL_LOOKUP SSL_SESS_CACHE_NO_INTERNAL_STORE }
179 CONSTANT: SSL_ERROR_NONE 0
180 CONSTANT: SSL_ERROR_SSL 1
181 CONSTANT: SSL_ERROR_WANT_READ 2
182 CONSTANT: SSL_ERROR_WANT_WRITE 3
183 CONSTANT: SSL_ERROR_WANT_X509_LOOKUP 4
184 CONSTANT: SSL_ERROR_SYSCALL 5 ! consult errno for details
185 CONSTANT: SSL_ERROR_ZERO_RETURN 6
186 CONSTANT: SSL_ERROR_WANT_CONNECT 7
187 CONSTANT: SSL_ERROR_WANT_ACCEPT 8
189 ! Error messages table
190 : error-messages ( -- hash )
192 { 0 "SSL_ERROR_NONE" }
193 { 1 "SSL_ERROR_SSL" }
194 { 2 "SSL_ERROR_WANT_READ" }
195 { 3 "SSL_ERROR_WANT_WRITE" }
196 { 4 "SSL_ERROR_WANT_X509_LOOKUP" }
197 { 5 "SSL_ERROR_SYSCALL" }
198 { 6 "SSL_ERROR_ZERO_RETURN" }
199 { 7 "SSL_ERROR_WANT_CONNECT" }
200 { 8 "SSL_ERROR_WANT_ACCEPT" }
208 ! ===============================================
210 ! ===============================================
217 TYPEDEF: stack_st _STACK
219 ! ===============================================
221 ! ===============================================
224 ! ===============================================
226 ! ===============================================
228 TYPEDEF: ASN1_ITEM ASN1_ITEM_EXP
236 FUNCTION: int ASN1_STRING_cmp ( ASN1_STRING* a, ASN1_STRING* b )
237 FUNCTION: ASN1_VALUE* ASN1_item_d2i ( ASN1_VALUE** val, uchar** in, long len, ASN1_ITEM* it )
239 ! ===============================================
241 ! ===============================================
242 TYPEDEF: ASN1_STRING ASN1_OCTET_STRING
244 ! ===============================================
246 ! ===============================================
247 STRUCT: X509_EXTENSION
250 { value ASN1_OCTET_STRING* } ;
255 ! ===============================================
257 ! ===============================================
258 STRUCT: X509V3_EXT_METHOD
263 FUNCTION: X509V3_EXT_METHOD* X509V3_EXT_get ( X509_EXTENSION* ext )
265 UNION-STRUCT: GENERAL_NAME_st_d
269 { dNSName ASN1_STRING* } ;
271 STRUCT: GENERAL_NAME_st
273 { d GENERAL_NAME_st_d } ;
275 CONSTANT: GEN_OTHERNAME 0
276 CONSTANT: GEN_EMAIL 1
279 CONSTANT: GEN_DIRNAME 4
280 CONSTANT: GEN_EDIPARTY 5
282 CONSTANT: GEN_IPADD 7
285 ! ===============================================
287 ! ===============================================
288 STRUCT: ssl_method_st
294 { ssl_connect void* }
298 { ssl_shutdown void* }
299 { ssl_renegotiate void* }
300 { ssl_renegotiate_check void* }
301 { ssl_get_message void* }
302 { ssl_read_bytes void* }
303 { ssl_write_bytes void* }
304 { ssl_dispatch_alert void* }
306 { ssl_ctx_ctrl void* }
307 { get_cipher_by_char void* }
308 { put_cipher_by_char void* }
309 { ssl_pending void* }
310 { num_ciphers void* }
312 { get_ssl_method void* }
313 { get_timeout void* }
315 { ssl_version void* }
316 { ssl_callback_ctrl void* }
317 { ssl_ctx_callback_ctrl void* } ;
318 TYPEDEF: ssl_method_st* ssl-method
323 { method ssl_method_st* }
329 { handshake_func void* }
332 { quiet_shutdown int }
341 { packet_length int }
346 { msg_callback void* }
347 { msg_callback_arg void* }
350 { cipher_list void* }
351 { cipher_list_by_id void* }
353 { enc_read_ctx void* }
356 { enc_write_ctx void* }
360 { sid_ctx_length uint }
362 { session SSL_SESSION* }
363 { generate_session_id void* }
365 { verify_callback void* }
366 { info_callback void* }
370 { psk_client_callback void* }
371 { psk_server_callback void* }
374 ! ------------------------------------------------------------------------------
376 ! ------------------------------------------------------------------------------
377 CONSTANT: OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001
378 CONSTANT: OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002
379 CONSTANT: OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000
380 CONSTANT: OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000
381 CONSTANT: OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004
382 CONSTANT: OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008
383 CONSTANT: OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010
384 CONSTANT: OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020
387 FUNCTION: int OPENSSL_init_ssl ( uint64_t opts, void* settings )
388 ! ------------------------------------------------------------------------------
389 ! API < 1.1.0, removed in new versions
390 ! ------------------------------------------------------------------------------
391 ! Initialization functions
392 FUNCTION: int SSL_library_init ( )
394 ! Maps OpenSSL errors to strings
395 FUNCTION: void SSL_load_error_strings ( )
396 ! ------------------------------------------------------------------------------
398 ! Sets the default SSL version
399 FUNCTION: ssl-method SSLv2_client_method ( )
400 FUNCTION: ssl-method SSLv23_client_method ( )
401 FUNCTION: ssl-method SSLv23_server_method ( )
402 FUNCTION: ssl-method SSLv23_method ( ) ! SSLv3 but can rollback to v2
403 FUNCTION: ssl-method SSLv3_client_method ( )
404 FUNCTION: ssl-method SSLv3_server_method ( )
405 FUNCTION: ssl-method SSLv3_method ( )
406 FUNCTION: ssl-method TLSv1_client_method ( )
407 FUNCTION: ssl-method TLSv1_server_method ( )
408 FUNCTION: ssl-method TLSv1_method ( )
409 FUNCTION: ssl-method TLSv1_1_method ( )
410 FUNCTION: ssl-method TLSv1_2_method ( )
412 FUNCTION: void SSL_SESSION_free ( SSL_SESSION* ses )
413 FUNCTION: void RAND_seed ( void* buf, int num )
414 FUNCTION: void* BIO_f_ssl ( )
416 ! ------------------------------------------------------------------------------
418 ! ------------------------------------------------------------------------------
419 FUNCTION: c-string SSL_get_version ( SSL* ssl )
421 FUNCTION: c-string SSL_state_string ( SSL* ssl )
422 FUNCTION: c-string SSL_rstate_string ( SSL* ssl )
423 FUNCTION: c-string SSL_state_string_long ( SSL* ssl )
424 FUNCTION: c-string SSL_rstate_string_long ( SSL* ssl )
426 FUNCTION: int SSL_set_fd ( SSL* ssl, int fd )
428 FUNCTION: void SSL_set_bio ( SSL* ssl, void* rbio, void* wbio )
430 FUNCTION: int SSL_set_session ( SSL* to, SSL_SESSION* session )
431 FUNCTION: SSL_SESSION* SSL_get_session ( SSL* to )
432 FUNCTION: SSL_SESSION* SSL_get1_session ( SSL* ssl )
434 FUNCTION: int SSL_get_error ( SSL* ssl, int ret )
436 FUNCTION: void SSL_set_connect_state ( SSL* ssl )
438 FUNCTION: void SSL_set_accept_state ( SSL* ssl )
439 FUNCTION: void SSL_free ( SSL* ssl )
442 FUNCTION: int SSL_accept ( SSL* ssl )
443 FUNCTION: int SSL_connect ( SSL* ssl )
444 FUNCTION: int SSL_read ( SSL* ssl, void* buf, int num )
445 FUNCTION: int SSL_write ( SSL* ssl, void* buf, int num )
446 FUNCTION: int SSL_write_ex ( SSL* ssl, void* buf, size_t num, size_t* written )
447 FUNCTION: long SSL_ctrl ( SSL* ssl, int cmd, long larg, void* parg )
449 FUNCTION: int SSL_shutdown ( SSL* ssl )
450 FUNCTION: int SSL_get_shutdown ( SSL* ssl )
452 FUNCTION: int SSL_want ( SSL* ssl )
453 FUNCTION: long SSL_get_verify_result ( SSL* ssl )
454 FUNCTION: X509* SSL_get_peer_certificate ( SSL* s )
456 FUNCTION: int SSL_set_cipher_list ( SSL* ssl, c-string str )
457 FUNCTION: int SSL_use_RSAPrivateKey_file ( SSL* ssl, c-string str )
458 FUNCTION: int SSL_use_certificate_file ( SSL* ssl, c-string str, int type )
460 FUNCTION: SSL* SSL_load_client_CA_file ( c-string file )
462 ! ------------------------------------------------------------------------------
464 ! ------------------------------------------------------------------------------
465 FUNCTION: SSL_CTX* SSL_CTX_new ( ssl-method method )
466 FUNCTION: void SSL_CTX_free ( SSL_CTX* ctx )
467 DESTRUCTOR: SSL_CTX_free
469 ! Load the certificates and private keys into the SSL_CTX
470 FUNCTION: int SSL_CTX_use_certificate_chain_file ( SSL_CTX* ctx,
471 c-string file ) ! PEM type
472 FUNCTION: int SSL_CTX_use_certificate ( SSL_CTX* ctx, X509* x )
474 FUNCTION: SSL* SSL_new ( SSL_CTX* ctx )
477 FUNCTION: int SSL_CTX_set_default_verify_paths ( SSL_CTX* ctx )
478 FUNCTION: int SSL_CTX_set_session_id_context ( SSL_CTX* ctx,
481 FUNCTION: int SSL_CTX_use_RSAPrivateKey_file ( SSL_CTX* ctx, int type )
482 FUNCTION: int SSL_CTX_load_verify_locations ( SSL_CTX* ctx,
485 FUNCTION: void SSL_CTX_set_verify ( SSL_CTX* ctx, int mode, void* callback )
486 FUNCTION: void SSL_CTX_set_client_CA_list ( SSL_CTX* ctx, SSL* list )
488 ! Used to manipulate settings of the SSL_CTX and SSL objects.
489 ! This function should never be called directly
490 FUNCTION: long SSL_CTX_ctrl ( SSL_CTX* ctx, int cmd, long larg, void* parg )
492 FUNCTION: void SSL_CTX_set_default_passwd_cb ( SSL_CTX* ctx, void* cb )
494 FUNCTION: void SSL_CTX_set_default_passwd_cb_userdata ( SSL_CTX* ctx,
497 FUNCTION: int SSL_CTX_use_PrivateKey_file ( SSL_CTX* ctx, c-string file,
500 ! Sets the maximum depth for the allowed ctx certificate chain verification
501 FUNCTION: void SSL_CTX_set_verify_depth ( SSL_CTX* ctx, int depth )
503 ! Sets DH parameters to be used to be dh.
504 ! The key is inherited by all ssl objects created from ctx
505 FUNCTION: void SSL_CTX_set_tmp_dh_callback ( SSL_CTX* ctx, void* dh )
507 FUNCTION: void SSL_CTX_set_tmp_rsa_callback ( SSL_CTX* ctx, void* rsa )
509 FUNCTION: ulong SSL_CTX_set_options ( SSL_CTX* ctx, ulong options )
510 FUNCTION: ulong SSL_set_options ( SSL* ssl, ulong options )
512 FUNCTION: ulong SSL_CTX_clear_options ( SSL_CTX* ctx, ulong options )
513 FUNCTION: ulong SSL_clear_options ( SSL* ssl, ulong options )
515 FUNCTION: ulong SSL_CTX_get_options ( SSL_CTX* ctx )
516 FUNCTION: ulong SSL_get_options ( SSL* ssl )
518 FUNCTION: ulong SSL_get_secure_renegotiation_support ( SSL* ssl )
520 ! -----------------------------
522 ! -----------------------------
524 ! values from https://github.com/openssl/openssl/blob/master/include/openssl/tls1.h
525 CONSTANT: SSL_TLSEXT_ERR_OK 0
526 CONSTANT: SSL_TLSEXT_ERR_ALERT_FATAL 2
527 CONSTANT: SSL_TLSEXT_ERR_NOACK 3
528 ! values from https://github.com/openssl/openssl/blob/master/include/openssl/ssl.h.in
529 CONSTANT: OPENSSL_NPN_UNSUPPORTED 0
530 CONSTANT: OPENSSL_NPN_NEGOTIATED 1
531 CONSTANT: OPENSSL_NPN_NO_OVERLAP 2
534 ! CALLBACK: int SSL_CTX_alpn_select_cb_func ( SSL* ssl, const
535 ! unsigned c-string* out, uchar* outlen, const unsigned c-string
536 ! in, uint inlen, void* arg )
537 CALLBACK: int SSL_CTX_alpn_select_cb_func ( SSL* ssl,
538 c-string* out, uchar* outlen, c-string in, uint inlen, void* arg )
539 FUNCTION: void SSL_CTX_set_alpn_select_cb ( SSL_CTX* ctx,
540 SSL_CTX_alpn_select_cb_func cb, void* arg )
541 FUNCTION: int SSL_select_next_proto ( c-string* out, uchar*
542 outlen, c-string server, uint server_len, c-string client, uint
545 FUNCTION: void SSL_get0_alpn_selected ( SSL* s,
546 c-string* data, uint* len )
548 ! ------------------------------------------------------------------------------
550 ! ------------------------------------------------------------------------------
551 : SSL_set_tlsext_host_name ( ctx hostname -- n )
552 [ SSL_CTRL_SET_TLSEXT_HOSTNAME TLSEXT_NAMETYPE_host_name ] dip
555 : SSL_CTX_need_tmp_rsa ( ctx -- n )
556 SSL_CTRL_NEED_TMP_RSA 0 f SSL_CTX_ctrl ;
558 : SSL_CTX_set_tmp_rsa ( ctx rsa -- n )
559 [ SSL_CTRL_SET_TMP_RSA 0 ] dip SSL_CTX_ctrl ;
561 : SSL_CTX_set_tmp_dh ( ctx dh -- n )
562 [ SSL_CTRL_SET_TMP_DH 0 ] dip SSL_CTX_ctrl ;
564 : SSL_CTX_set_session_cache_mode ( ctx mode -- n )
565 [ SSL_CTRL_SET_SESS_CACHE_MODE ] dip f SSL_CTX_ctrl ;
567 ! ===============================================
569 ! ===============================================
572 { X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 }
573 X509_V_ERR_UNABLE_TO_GET_CRL
574 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
575 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
576 X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
577 X509_V_ERR_CERT_SIGNATURE_FAILURE
578 X509_V_ERR_CRL_SIGNATURE_FAILURE
579 X509_V_ERR_CERT_NOT_YET_VALID
580 X509_V_ERR_CERT_HAS_EXPIRED
581 X509_V_ERR_CRL_NOT_YET_VALID
582 X509_V_ERR_CRL_HAS_EXPIRED
583 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
584 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
585 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
586 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
587 X509_V_ERR_OUT_OF_MEM
588 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
589 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
590 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
591 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
592 X509_V_ERR_CERT_CHAIN_TOO_LONG
593 X509_V_ERR_CERT_REVOKED
594 X509_V_ERR_INVALID_CA
595 X509_V_ERR_PATH_LENGTH_EXCEEDED
596 X509_V_ERR_INVALID_PURPOSE
597 X509_V_ERR_CERT_UNTRUSTED
598 X509_V_ERR_CERT_REJECTED
599 X509_V_ERR_SUBJECT_ISSUER_MISMATCH
600 X509_V_ERR_AKID_SKID_MISMATCH
601 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
602 X509_V_ERR_KEYUSAGE_NO_CERTSIGN
603 X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER
604 X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
605 X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
606 X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION
607 X509_V_ERR_INVALID_NON_CA
608 X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED
609 X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE
610 X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED
611 { X509_V_ERR_APPLICATION_VERIFICATION 50 } ;
613 ! ===============================================
615 ! ===============================================
616 CONSTANT: NID_commonName 13
617 CONSTANT: NID_subject_alt_name 85
618 CONSTANT: NID_issuer_alt_name 86
620 ! ===============================================
621 ! On Windows, some of the functions making up libressl
622 ! are placed in libcrypto-37.dll
623 ! ===============================================
626 [ "libcrypto-37.dll" cdecl add-library ] [ current-library set ] bi
629 ! ===============================================
631 ! ===============================================
632 CONSTANT: X509_R_CERT_ALREADY_IN_HASH_TABLE 101
634 FUNCTION: int X509_NAME_get_text_by_NID ( X509_NAME* name, int nid, void* buf, int len )
635 ! X509_NAME_oneline could return c-string but needs to be freed with OPENSSL_free
636 FUNCTION: char* X509_NAME_oneline ( X509_NAME* a, char* buf, int size )
638 FUNCTION: int X509_get_ext_by_NID ( X509* a, int nid, int lastpos )
639 FUNCTION: void* X509_get_ext_d2i ( X509* a, int nid, int* crit, int* idx )
640 FUNCTION: X509_NAME* X509_get_issuer_name ( X509* a )
641 FUNCTION: X509_NAME* X509_get_subject_name ( X509* a )
642 FUNCTION: int X509_check_trust ( X509* a, int id, int flags )
643 FUNCTION: X509_EXTENSION* X509_get_ext ( X509* a, int loc )
644 FUNCTION: void X509_free ( X509* a )
645 DESTRUCTOR: X509_free
646 FUNCTION: X509* d2i_X509 ( X509** px, uchar** in, int len )
647 FUNCTION: int i2d_X509 ( X509* x, uchar** out )
648 FUNCTION: int i2d_re_X509_tbs ( X509* x, uchar** out )
651 FUNCTION: X509_STORE* X509_STORE_new ( )
652 FUNCTION: int X509_STORE_add_cert ( X509_STORE* ctx, X509* x )
654 ! ------------------------------------------------------------------------------
656 ! ------------------------------------------------------------------------------
657 FUNCTION: int OPENSSL_sk_num ( _STACK* s )
658 FUNCTION: void* OPENSSL_sk_value ( _STACK* s, int v )
660 ! ------------------------------------------------------------------------------
661 ! API < 1.1.0, removed in new versions
662 ! ------------------------------------------------------------------------------
663 FUNCTION: int sk_num ( _STACK* s )
664 FUNCTION: void* sk_value ( _STACK* s, int v )
666 ! ------------------------------------------------------------------------------