PageRenderTime 340ms CodeModel.GetById 16ms RepoModel.GetById 29ms app.codeStats 0ms

/cyassl/ssl.h

https://github.com/andersmalm/cyassl
C Header | 912 lines | 643 code | 197 blank | 72 comment | 1 complexity | e9573939d98e19b167ad0386f5eb6be1 MD5 | raw file
Possible License(s): GPL-2.0
  1. /* ssl.h
  2. *
  3. * Copyright (C) 2006-2012 Sawtooth Consulting Ltd.
  4. *
  5. * This file is part of CyaSSL.
  6. *
  7. * CyaSSL is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * CyaSSL is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  20. */
  21. /* CyaSSL API */
  22. #ifndef CYASSL_SSL_H
  23. #define CYASSL_SSL_H
  24. /* for users not using preprocessor flags*/
  25. #include <cyassl/ctaocrypt/settings.h>
  26. #include <cyassl/version.h>
  27. #ifndef NO_FILESYSTEM
  28. #ifdef FREESCALE_MQX
  29. #include <fio.h>
  30. #else
  31. #include <stdio.h> /* ERR_printf */
  32. #endif
  33. #endif
  34. #ifdef YASSL_PREFIX
  35. #include "prefix_ssl.h"
  36. #endif
  37. #ifdef LIBCYASSL_VERSION_STRING
  38. #define CYASSL_VERSION LIBCYASSL_VERSION_STRING
  39. #endif
  40. #ifdef _WIN32
  41. /* wincrypt.h clashes */
  42. #undef OCSP_REQUEST
  43. #undef OCSP_RESPONSE
  44. #endif
  45. #ifdef __cplusplus
  46. extern "C" {
  47. #endif
  48. typedef struct CYASSL CYASSL;
  49. typedef struct CYASSL_SESSION CYASSL_SESSION;
  50. typedef struct CYASSL_METHOD CYASSL_METHOD;
  51. typedef struct CYASSL_CTX CYASSL_CTX;
  52. typedef struct CYASSL_X509 CYASSL_X509;
  53. typedef struct CYASSL_X509_NAME CYASSL_X509_NAME;
  54. typedef struct CYASSL_X509_CHAIN CYASSL_X509_CHAIN;
  55. typedef struct CYASSL_CERT_MANAGER CYASSL_CERT_MANAGER;
  56. typedef struct CYASSL_SOCKADDR CYASSL_SOCKADDR;
  57. /* redeclare guard */
  58. #define CYASSL_TYPES_DEFINED
  59. typedef struct CYASSL_RSA CYASSL_RSA;
  60. typedef struct CYASSL_DSA CYASSL_DSA;
  61. typedef struct CYASSL_CIPHER CYASSL_CIPHER;
  62. typedef struct CYASSL_X509_LOOKUP CYASSL_X509_LOOKUP;
  63. typedef struct CYASSL_X509_LOOKUP_METHOD CYASSL_X509_LOOKUP_METHOD;
  64. typedef struct CYASSL_X509_CRL CYASSL_X509_CRL;
  65. typedef struct CYASSL_BIO CYASSL_BIO;
  66. typedef struct CYASSL_BIO_METHOD CYASSL_BIO_METHOD;
  67. typedef struct CYASSL_X509_EXTENSION CYASSL_X509_EXTENSION;
  68. typedef struct CYASSL_ASN1_TIME CYASSL_ASN1_TIME;
  69. typedef struct CYASSL_ASN1_INTEGER CYASSL_ASN1_INTEGER;
  70. typedef struct CYASSL_ASN1_OBJECT CYASSL_ASN1_OBJECT;
  71. typedef struct CYASSL_ASN1_STRING CYASSL_ASN1_STRING;
  72. typedef struct CYASSL_dynlock_value CYASSL_dynlock_value;
  73. #define CYASSL_ASN1_UTCTIME CYASSL_ASN1_TIME
  74. typedef struct CYASSL_EVP_PKEY {
  75. int type; /* openssh dereference */
  76. int save_type; /* openssh dereference */
  77. } CYASSL_EVP_PKEY;
  78. typedef struct CYASSL_MD4_CTX {
  79. int buffer[32]; /* big enough to hold, check size in Init */
  80. } CYASSL_MD4_CTX;
  81. typedef struct CYASSL_COMP_METHOD {
  82. int type; /* stunnel dereference */
  83. } CYASSL_COMP_METHOD;
  84. typedef struct CYASSL_X509_STORE {
  85. int cache; /* stunnel dereference */
  86. } CYASSL_X509_STORE;
  87. typedef struct CYASSL_X509_REVOKED {
  88. CYASSL_ASN1_INTEGER* serialNumber; /* stunnel dereference */
  89. } CYASSL_X509_REVOKED;
  90. typedef struct CYASSL_X509_OBJECT {
  91. union {
  92. char* ptr;
  93. CYASSL_X509_CRL* crl; /* stunnel dereference */
  94. } data;
  95. } CYASSL_X509_OBJECT;
  96. /* in internal.h too, change there !! */
  97. typedef struct CYASSL_X509_STORE_CTX {
  98. int error;
  99. int error_depth;
  100. CYASSL_X509* current_cert; /* stunnel dereference */
  101. char* domain; /* subject CN domain name */
  102. void* ex_data; /* external data, for fortress build */
  103. /* in internal.h too, change there !! */
  104. } CYASSL_X509_STORE_CTX;
  105. CYASSL_API CYASSL_METHOD *CyaSSLv3_server_method(void);
  106. CYASSL_API CYASSL_METHOD *CyaSSLv3_client_method(void);
  107. CYASSL_API CYASSL_METHOD *CyaTLSv1_server_method(void);
  108. CYASSL_API CYASSL_METHOD *CyaTLSv1_client_method(void);
  109. CYASSL_API CYASSL_METHOD *CyaTLSv1_1_server_method(void);
  110. CYASSL_API CYASSL_METHOD *CyaTLSv1_1_client_method(void);
  111. CYASSL_API CYASSL_METHOD *CyaTLSv1_2_server_method(void);
  112. CYASSL_API CYASSL_METHOD *CyaTLSv1_2_client_method(void);
  113. #ifdef CYASSL_DTLS
  114. CYASSL_API CYASSL_METHOD *CyaDTLSv1_client_method(void);
  115. CYASSL_API CYASSL_METHOD *CyaDTLSv1_server_method(void);
  116. #endif
  117. #if !defined(NO_FILESYSTEM) && !defined(NO_CERTS)
  118. CYASSL_API int CyaSSL_CTX_use_certificate_file(CYASSL_CTX*, const char*, int);
  119. CYASSL_API int CyaSSL_CTX_use_PrivateKey_file(CYASSL_CTX*, const char*, int);
  120. CYASSL_API int CyaSSL_CTX_load_verify_locations(CYASSL_CTX*, const char*,
  121. const char*);
  122. CYASSL_API int CyaSSL_CTX_use_certificate_chain_file(CYASSL_CTX *,
  123. const char *file);
  124. CYASSL_API int CyaSSL_CTX_use_RSAPrivateKey_file(CYASSL_CTX*, const char*, int);
  125. CYASSL_API int CyaSSL_use_certificate_file(CYASSL*, const char*, int);
  126. CYASSL_API int CyaSSL_use_PrivateKey_file(CYASSL*, const char*, int);
  127. CYASSL_API int CyaSSL_use_certificate_chain_file(CYASSL*, const char *file);
  128. CYASSL_API int CyaSSL_use_RSAPrivateKey_file(CYASSL*, const char*, int);
  129. #ifdef CYASSL_DER_LOAD
  130. CYASSL_API int CyaSSL_CTX_der_load_verify_locations(CYASSL_CTX*,
  131. const char*, int);
  132. #endif
  133. #ifdef HAVE_NTRU
  134. CYASSL_API int CyaSSL_CTX_use_NTRUPrivateKey_file(CYASSL_CTX*, const char*);
  135. /* load NTRU private key blob */
  136. #endif
  137. CYASSL_API int CyaSSL_PemCertToDer(const char*, unsigned char*, int);
  138. #endif /* !NO_FILESYSTEM && !NO_CERTS */
  139. CYASSL_API CYASSL_CTX* CyaSSL_CTX_new(CYASSL_METHOD*);
  140. CYASSL_API CYASSL* CyaSSL_new(CYASSL_CTX*);
  141. CYASSL_API int CyaSSL_set_fd (CYASSL*, int);
  142. CYASSL_API int CyaSSL_get_fd(const CYASSL*);
  143. CYASSL_API void CyaSSL_set_using_nonblock(CYASSL*, int);
  144. CYASSL_API int CyaSSL_get_using_nonblock(CYASSL*);
  145. CYASSL_API int CyaSSL_connect(CYASSL*); /* please see note at top of README
  146. if you get an error from connect */
  147. CYASSL_API int CyaSSL_write(CYASSL*, const void*, int);
  148. CYASSL_API int CyaSSL_read(CYASSL*, void*, int);
  149. CYASSL_API int CyaSSL_peek(CYASSL*, void*, int);
  150. CYASSL_API int CyaSSL_accept(CYASSL*);
  151. CYASSL_API void CyaSSL_CTX_free(CYASSL_CTX*);
  152. CYASSL_API void CyaSSL_free(CYASSL*);
  153. CYASSL_API int CyaSSL_shutdown(CYASSL*);
  154. CYASSL_API int CyaSSL_send(CYASSL*, const void*, int sz, int flags);
  155. CYASSL_API int CyaSSL_recv(CYASSL*, void*, int sz, int flags);
  156. CYASSL_API void CyaSSL_CTX_set_quiet_shutdown(CYASSL_CTX*, int);
  157. CYASSL_API void CyaSSL_set_quiet_shutdown(CYASSL*, int);
  158. CYASSL_API int CyaSSL_get_error(CYASSL*, int);
  159. CYASSL_API int CyaSSL_set_session(CYASSL* ssl,CYASSL_SESSION* session);
  160. CYASSL_API CYASSL_SESSION* CyaSSL_get_session(CYASSL* ssl);
  161. CYASSL_API void CyaSSL_flush_sessions(CYASSL_CTX *ctx, long tm);
  162. typedef int (*VerifyCallback)(int, CYASSL_X509_STORE_CTX*);
  163. typedef int (*pem_password_cb)(char*, int, int, void*);
  164. CYASSL_API void CyaSSL_CTX_set_verify(CYASSL_CTX*, int,
  165. VerifyCallback verify_callback);
  166. CYASSL_API void CyaSSL_set_verify(CYASSL*, int, VerifyCallback verify_callback);
  167. CYASSL_API int CyaSSL_pending(CYASSL*);
  168. CYASSL_API void CyaSSL_load_error_strings(void);
  169. CYASSL_API int CyaSSL_library_init(void);
  170. CYASSL_API long CyaSSL_CTX_set_session_cache_mode(CYASSL_CTX*, long);
  171. /* only supports full name from cipher_name[] delimited by : */
  172. CYASSL_API int CyaSSL_CTX_set_cipher_list(CYASSL_CTX*, const char*);
  173. CYASSL_API int CyaSSL_set_cipher_list(CYASSL*, const char*);
  174. /* Nonblocking DTLS helper functions */
  175. CYASSL_API int CyaSSL_dtls_get_current_timeout(CYASSL* ssl);
  176. CYASSL_API int CyaSSL_dtls_got_timeout(CYASSL* ssl);
  177. CYASSL_API int CyaSSL_dtls(CYASSL* ssl);
  178. CYASSL_API int CyaSSL_dtls_set_peer(CYASSL*, void*, unsigned int);
  179. CYASSL_API int CyaSSL_dtls_get_peer(CYASSL*, void*, unsigned int*);
  180. CYASSL_API int CyaSSL_ERR_GET_REASON(int err);
  181. CYASSL_API char* CyaSSL_ERR_error_string(unsigned long,char*);
  182. CYASSL_API void CyaSSL_ERR_error_string_n(unsigned long e, char* buf,
  183. unsigned long sz);
  184. /* extras */
  185. #define STACK_OF(x) x
  186. CYASSL_API int CyaSSL_set_ex_data(CYASSL*, int, void*);
  187. CYASSL_API int CyaSSL_get_shutdown(const CYASSL*);
  188. CYASSL_API int CyaSSL_set_rfd(CYASSL*, int);
  189. CYASSL_API int CyaSSL_set_wfd(CYASSL*, int);
  190. CYASSL_API void CyaSSL_set_shutdown(CYASSL*, int);
  191. CYASSL_API int CyaSSL_set_session_id_context(CYASSL*, const unsigned char*,
  192. unsigned int);
  193. CYASSL_API void CyaSSL_set_connect_state(CYASSL*);
  194. CYASSL_API void CyaSSL_set_accept_state(CYASSL*);
  195. CYASSL_API int CyaSSL_session_reused(CYASSL*);
  196. CYASSL_API void CyaSSL_SESSION_free(CYASSL_SESSION* session);
  197. CYASSL_API int CyaSSL_is_init_finished(CYASSL*);
  198. CYASSL_API const char* CyaSSL_get_version(CYASSL*);
  199. CYASSL_API CYASSL_CIPHER* CyaSSL_get_current_cipher(CYASSL*);
  200. CYASSL_API char* CyaSSL_CIPHER_description(CYASSL_CIPHER*, char*, int);
  201. CYASSL_API const char* CyaSSL_CIPHER_get_name(const CYASSL_CIPHER* cipher);
  202. CYASSL_API const char* CyaSSL_get_cipher(CYASSL*);
  203. CYASSL_API CYASSL_SESSION* CyaSSL_get1_session(CYASSL* ssl);
  204. /* what's ref count */
  205. CYASSL_API void CyaSSL_X509_free(CYASSL_X509*);
  206. CYASSL_API void CyaSSL_OPENSSL_free(void*);
  207. CYASSL_API int CyaSSL_OCSP_parse_url(char* url, char** host, char** port,
  208. char** path, int* ssl);
  209. CYASSL_API CYASSL_METHOD* CyaSSLv23_client_method(void);
  210. CYASSL_API CYASSL_METHOD* CyaSSLv2_client_method(void);
  211. CYASSL_API CYASSL_METHOD* CyaSSLv2_server_method(void);
  212. CYASSL_API void CyaSSL_MD4_Init(CYASSL_MD4_CTX*);
  213. CYASSL_API void CyaSSL_MD4_Update(CYASSL_MD4_CTX*, const void*, unsigned long);
  214. CYASSL_API void CyaSSL_MD4_Final(unsigned char*, CYASSL_MD4_CTX*);
  215. CYASSL_API CYASSL_BIO* CyaSSL_BIO_new(CYASSL_BIO_METHOD*);
  216. CYASSL_API int CyaSSL_BIO_free(CYASSL_BIO*);
  217. CYASSL_API int CyaSSL_BIO_free_all(CYASSL_BIO*);
  218. CYASSL_API int CyaSSL_BIO_read(CYASSL_BIO*, void*, int);
  219. CYASSL_API int CyaSSL_BIO_write(CYASSL_BIO*, const void*, int);
  220. CYASSL_API CYASSL_BIO* CyaSSL_BIO_push(CYASSL_BIO*, CYASSL_BIO* append);
  221. CYASSL_API CYASSL_BIO* CyaSSL_BIO_pop(CYASSL_BIO*);
  222. CYASSL_API int CyaSSL_BIO_flush(CYASSL_BIO*);
  223. CYASSL_API int CyaSSL_BIO_pending(CYASSL_BIO*);
  224. CYASSL_API CYASSL_BIO_METHOD* CyaSSL_BIO_f_buffer(void);
  225. CYASSL_API long CyaSSL_BIO_set_write_buffer_size(CYASSL_BIO*, long size);
  226. CYASSL_API CYASSL_BIO_METHOD* CyaSSL_BIO_f_ssl(void);
  227. CYASSL_API CYASSL_BIO* CyaSSL_BIO_new_socket(int sfd, int flag);
  228. CYASSL_API int CyaSSL_BIO_eof(CYASSL_BIO*);
  229. CYASSL_API CYASSL_BIO_METHOD* CyaSSL_BIO_s_mem(void);
  230. CYASSL_API CYASSL_BIO_METHOD* CyaSSL_BIO_f_base64(void);
  231. CYASSL_API void CyaSSL_BIO_set_flags(CYASSL_BIO*, int);
  232. CYASSL_API int CyaSSL_BIO_get_mem_data(CYASSL_BIO* bio,const unsigned char** p);
  233. CYASSL_API CYASSL_BIO* CyaSSL_BIO_new_mem_buf(void* buf, int len);
  234. CYASSL_API long CyaSSL_BIO_set_ssl(CYASSL_BIO*, CYASSL*, int flag);
  235. CYASSL_API void CyaSSL_set_bio(CYASSL*, CYASSL_BIO* rd, CYASSL_BIO* wr);
  236. CYASSL_API int CyaSSL_add_all_algorithms(void);
  237. CYASSL_API void CyaSSL_RAND_screen(void);
  238. CYASSL_API const char* CyaSSL_RAND_file_name(char*, unsigned long);
  239. CYASSL_API int CyaSSL_RAND_write_file(const char*);
  240. CYASSL_API int CyaSSL_RAND_load_file(const char*, long);
  241. CYASSL_API int CyaSSL_RAND_egd(const char*);
  242. CYASSL_API int CyaSSL_RAND_seed(const void*, int);
  243. CYASSL_API void CyaSSL_RAND_add(const void*, int, double);
  244. CYASSL_API CYASSL_COMP_METHOD* CyaSSL_COMP_zlib(void);
  245. CYASSL_API CYASSL_COMP_METHOD* CyaSSL_COMP_rle(void);
  246. CYASSL_API int CyaSSL_COMP_add_compression_method(int, void*);
  247. CYASSL_API int CyaSSL_get_ex_new_index(long, void*, void*, void*, void*);
  248. CYASSL_API void CyaSSL_set_id_callback(unsigned long (*f)(void));
  249. CYASSL_API void CyaSSL_set_locking_callback(void (*f)(int, int, const char*,
  250. int));
  251. CYASSL_API void CyaSSL_set_dynlock_create_callback(CYASSL_dynlock_value* (*f)
  252. (const char*, int));
  253. CYASSL_API void CyaSSL_set_dynlock_lock_callback(void (*f)(int,
  254. CYASSL_dynlock_value*, const char*, int));
  255. CYASSL_API void CyaSSL_set_dynlock_destroy_callback(void (*f)
  256. (CYASSL_dynlock_value*, const char*, int));
  257. CYASSL_API int CyaSSL_num_locks(void);
  258. CYASSL_API CYASSL_X509* CyaSSL_X509_STORE_CTX_get_current_cert(
  259. CYASSL_X509_STORE_CTX*);
  260. CYASSL_API int CyaSSL_X509_STORE_CTX_get_error(CYASSL_X509_STORE_CTX*);
  261. CYASSL_API int CyaSSL_X509_STORE_CTX_get_error_depth(CYASSL_X509_STORE_CTX*);
  262. CYASSL_API char* CyaSSL_X509_NAME_oneline(CYASSL_X509_NAME*, char*, int);
  263. CYASSL_API CYASSL_X509_NAME* CyaSSL_X509_get_issuer_name(CYASSL_X509*);
  264. CYASSL_API CYASSL_X509_NAME* CyaSSL_X509_get_subject_name(CYASSL_X509*);
  265. CYASSL_API const char* CyaSSL_X509_verify_cert_error_string(long);
  266. CYASSL_API int CyaSSL_X509_LOOKUP_add_dir(CYASSL_X509_LOOKUP*,const char*,long);
  267. CYASSL_API int CyaSSL_X509_LOOKUP_load_file(CYASSL_X509_LOOKUP*, const char*,
  268. long);
  269. CYASSL_API CYASSL_X509_LOOKUP_METHOD* CyaSSL_X509_LOOKUP_hash_dir(void);
  270. CYASSL_API CYASSL_X509_LOOKUP_METHOD* CyaSSL_X509_LOOKUP_file(void);
  271. CYASSL_API CYASSL_X509_LOOKUP* CyaSSL_X509_STORE_add_lookup(CYASSL_X509_STORE*,
  272. CYASSL_X509_LOOKUP_METHOD*);
  273. CYASSL_API CYASSL_X509_STORE* CyaSSL_X509_STORE_new(void);
  274. CYASSL_API int CyaSSL_X509_STORE_get_by_subject(CYASSL_X509_STORE_CTX*,
  275. int, CYASSL_X509_NAME*, CYASSL_X509_OBJECT*);
  276. CYASSL_API int CyaSSL_X509_STORE_CTX_init(CYASSL_X509_STORE_CTX*,
  277. CYASSL_X509_STORE*, CYASSL_X509*, STACK_OF(CYASSL_X509)*);
  278. CYASSL_API void CyaSSL_X509_STORE_CTX_cleanup(CYASSL_X509_STORE_CTX*);
  279. CYASSL_API CYASSL_ASN1_TIME* CyaSSL_X509_CRL_get_lastUpdate(CYASSL_X509_CRL*);
  280. CYASSL_API CYASSL_ASN1_TIME* CyaSSL_X509_CRL_get_nextUpdate(CYASSL_X509_CRL*);
  281. CYASSL_API CYASSL_EVP_PKEY* CyaSSL_X509_get_pubkey(CYASSL_X509*);
  282. CYASSL_API int CyaSSL_X509_CRL_verify(CYASSL_X509_CRL*, CYASSL_EVP_PKEY*);
  283. CYASSL_API void CyaSSL_X509_STORE_CTX_set_error(CYASSL_X509_STORE_CTX*,
  284. int);
  285. CYASSL_API void CyaSSL_X509_OBJECT_free_contents(CYASSL_X509_OBJECT*);
  286. CYASSL_API void CyaSSL_EVP_PKEY_free(CYASSL_EVP_PKEY*);
  287. CYASSL_API int CyaSSL_X509_cmp_current_time(const CYASSL_ASN1_TIME*);
  288. CYASSL_API int CyaSSL_sk_X509_REVOKED_num(CYASSL_X509_REVOKED*);
  289. CYASSL_API CYASSL_X509_REVOKED* CyaSSL_X509_CRL_get_REVOKED(CYASSL_X509_CRL*);
  290. CYASSL_API CYASSL_X509_REVOKED* CyaSSL_sk_X509_REVOKED_value(
  291. CYASSL_X509_REVOKED*,int);
  292. CYASSL_API CYASSL_ASN1_INTEGER* CyaSSL_X509_get_serialNumber(CYASSL_X509*);
  293. CYASSL_API int CyaSSL_ASN1_TIME_print(CYASSL_BIO*, const CYASSL_ASN1_TIME*);
  294. CYASSL_API int CyaSSL_ASN1_INTEGER_cmp(const CYASSL_ASN1_INTEGER*,
  295. const CYASSL_ASN1_INTEGER*);
  296. CYASSL_API long CyaSSL_ASN1_INTEGER_get(const CYASSL_ASN1_INTEGER*);
  297. CYASSL_API STACK_OF(CYASSL_X509_NAME)* CyaSSL_load_client_CA_file(const char*);
  298. CYASSL_API void CyaSSL_CTX_set_client_CA_list(CYASSL_CTX*,
  299. STACK_OF(CYASSL_X509_NAME)*);
  300. CYASSL_API void* CyaSSL_X509_STORE_CTX_get_ex_data(CYASSL_X509_STORE_CTX*, int);
  301. CYASSL_API int CyaSSL_get_ex_data_X509_STORE_CTX_idx(void);
  302. CYASSL_API void* CyaSSL_get_ex_data(const CYASSL*, int);
  303. CYASSL_API void CyaSSL_CTX_set_default_passwd_cb_userdata(CYASSL_CTX*,
  304. void* userdata);
  305. CYASSL_API void CyaSSL_CTX_set_default_passwd_cb(CYASSL_CTX*, pem_password_cb);
  306. CYASSL_API void CyaSSL_CTX_set_info_callback(CYASSL_CTX*, void (*)(void));
  307. CYASSL_API unsigned long CyaSSL_ERR_peek_error(void);
  308. CYASSL_API int CyaSSL_GET_REASON(int);
  309. CYASSL_API char* CyaSSL_alert_type_string_long(int);
  310. CYASSL_API char* CyaSSL_alert_desc_string_long(int);
  311. CYASSL_API char* CyaSSL_state_string_long(CYASSL*);
  312. CYASSL_API CYASSL_RSA* CyaSSL_RSA_generate_key(int, unsigned long,
  313. void(*)(int, int, void*), void*);
  314. CYASSL_API void CyaSSL_CTX_set_tmp_rsa_callback(CYASSL_CTX*,
  315. CYASSL_RSA*(*)(CYASSL*, int, int));
  316. CYASSL_API int CyaSSL_PEM_def_callback(char*, int num, int w, void* key);
  317. CYASSL_API long CyaSSL_CTX_sess_accept(CYASSL_CTX*);
  318. CYASSL_API long CyaSSL_CTX_sess_connect(CYASSL_CTX*);
  319. CYASSL_API long CyaSSL_CTX_sess_accept_good(CYASSL_CTX*);
  320. CYASSL_API long CyaSSL_CTX_sess_connect_good(CYASSL_CTX*);
  321. CYASSL_API long CyaSSL_CTX_sess_accept_renegotiate(CYASSL_CTX*);
  322. CYASSL_API long CyaSSL_CTX_sess_connect_renegotiate(CYASSL_CTX*);
  323. CYASSL_API long CyaSSL_CTX_sess_hits(CYASSL_CTX*);
  324. CYASSL_API long CyaSSL_CTX_sess_cb_hits(CYASSL_CTX*);
  325. CYASSL_API long CyaSSL_CTX_sess_cache_full(CYASSL_CTX*);
  326. CYASSL_API long CyaSSL_CTX_sess_misses(CYASSL_CTX*);
  327. CYASSL_API long CyaSSL_CTX_sess_timeouts(CYASSL_CTX*);
  328. CYASSL_API long CyaSSL_CTX_sess_number(CYASSL_CTX*);
  329. CYASSL_API long CyaSSL_CTX_sess_get_cache_size(CYASSL_CTX*);
  330. #define CYASSL_DEFAULT_CIPHER_LIST "" /* default all */
  331. #define CYASSL_RSA_F4 0x10001L
  332. enum {
  333. OCSP_NOCERTS = 1,
  334. OCSP_NOINTERN = 2,
  335. OCSP_NOSIGS = 4,
  336. OCSP_NOCHAIN = 8,
  337. OCSP_NOVERIFY = 16,
  338. OCSP_NOEXPLICIT = 32,
  339. OCSP_NOCASIGN = 64,
  340. OCSP_NODELEGATED = 128,
  341. OCSP_NOCHECKS = 256,
  342. OCSP_TRUSTOTHER = 512,
  343. OCSP_RESPID_KEY = 1024,
  344. OCSP_NOTIME = 2048,
  345. OCSP_CERTID = 2,
  346. OCSP_REQUEST = 4,
  347. OCSP_RESPONSE = 8,
  348. OCSP_BASICRESP = 16,
  349. CYASSL_CRL_CHECKALL = 1,
  350. ASN1_GENERALIZEDTIME = 4,
  351. SSL_OP_MICROSOFT_SESS_ID_BUG = 1,
  352. SSL_OP_NETSCAPE_CHALLENGE_BUG = 2,
  353. SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG = 3,
  354. SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG = 4,
  355. SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER = 5,
  356. SSL_OP_MSIE_SSLV2_RSA_PADDING = 6,
  357. SSL_OP_SSLEAY_080_CLIENT_DH_BUG = 7,
  358. SSL_OP_TLS_D5_BUG = 8,
  359. SSL_OP_TLS_BLOCK_PADDING_BUG = 9,
  360. SSL_OP_TLS_ROLLBACK_BUG = 10,
  361. SSL_OP_ALL = 11,
  362. SSL_OP_EPHEMERAL_RSA = 12,
  363. SSL_OP_NO_SSLv3 = 13,
  364. SSL_OP_NO_TLSv1 = 14,
  365. SSL_OP_PKCS1_CHECK_1 = 15,
  366. SSL_OP_PKCS1_CHECK_2 = 16,
  367. SSL_OP_NETSCAPE_CA_DN_BUG = 17,
  368. SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG = 18,
  369. SSL_OP_SINGLE_DH_USE = 19,
  370. SSL_OP_NO_TICKET = 20,
  371. SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS = 21,
  372. SSL_OP_NO_QUERY_MTU = 22,
  373. SSL_OP_COOKIE_EXCHANGE = 23,
  374. SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION = 24,
  375. SSL_OP_SINGLE_ECDH_USE = 25,
  376. SSL_OP_CIPHER_SERVER_PREFERENCE = 26,
  377. SSL_MAX_SSL_SESSION_ID_LENGTH = 32,
  378. EVP_R_BAD_DECRYPT = 2,
  379. SSL_CB_LOOP = 4,
  380. SSL_ST_CONNECT = 5,
  381. SSL_ST_ACCEPT = 6,
  382. SSL_CB_ALERT = 7,
  383. SSL_CB_READ = 8,
  384. SSL_CB_HANDSHAKE_DONE = 9,
  385. SSL_MODE_ENABLE_PARTIAL_WRITE = 2,
  386. BIO_FLAGS_BASE64_NO_NL = 1,
  387. BIO_CLOSE = 1,
  388. BIO_NOCLOSE = 0,
  389. NID_undef = 0,
  390. X509_FILETYPE_PEM = 8,
  391. X509_LU_X509 = 9,
  392. X509_LU_CRL = 12,
  393. X509_V_ERR_CRL_SIGNATURE_FAILURE = 13,
  394. X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 14,
  395. X509_V_ERR_CRL_HAS_EXPIRED = 15,
  396. X509_V_ERR_CERT_REVOKED = 16,
  397. X509_V_ERR_CERT_CHAIN_TOO_LONG = 17,
  398. X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT = 18,
  399. X509_V_ERR_CERT_NOT_YET_VALID = 19,
  400. X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = 20,
  401. X509_V_ERR_CERT_HAS_EXPIRED = 21,
  402. X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = 22,
  403. X509_V_OK = 0,
  404. CRYPTO_LOCK = 1,
  405. CRYPTO_NUM_LOCKS = 10
  406. };
  407. /* extras end */
  408. #ifndef NO_FILESYSTEM
  409. /* CyaSSL extension, provide last error from SSL_get_error
  410. since not using thread storage error queue */
  411. CYASSL_API void CyaSSL_ERR_print_errors_fp(FILE*, int err);
  412. #endif
  413. enum { /* ssl Constants */
  414. SSL_ERROR_NONE = 0, /* for most functions */
  415. SSL_FAILURE = 0, /* for some functions */
  416. SSL_SUCCESS = 1,
  417. SSL_BAD_CERTTYPE = -8,
  418. SSL_BAD_STAT = -7,
  419. SSL_BAD_PATH = -6,
  420. SSL_BAD_FILETYPE = -5,
  421. SSL_BAD_FILE = -4,
  422. SSL_NOT_IMPLEMENTED = -3,
  423. SSL_UNKNOWN = -2,
  424. SSL_FATAL_ERROR = -1,
  425. SSL_FILETYPE_ASN1 = 2,
  426. SSL_FILETYPE_PEM = 1,
  427. SSL_FILETYPE_DEFAULT = 2, /* ASN1 */
  428. SSL_FILETYPE_RAW = 3, /* NTRU raw key blob */
  429. SSL_VERIFY_NONE = 0,
  430. SSL_VERIFY_PEER = 1,
  431. SSL_VERIFY_FAIL_IF_NO_PEER_CERT = 2,
  432. SSL_VERIFY_CLIENT_ONCE = 4,
  433. SSL_SESS_CACHE_OFF = 30,
  434. SSL_SESS_CACHE_CLIENT = 31,
  435. SSL_SESS_CACHE_SERVER = 32,
  436. SSL_SESS_CACHE_BOTH = 33,
  437. SSL_SESS_CACHE_NO_AUTO_CLEAR = 34,
  438. SSL_SESS_CACHE_NO_INTERNAL_LOOKUP = 35,
  439. SSL_ERROR_WANT_READ = 2,
  440. SSL_ERROR_WANT_WRITE = 3,
  441. SSL_ERROR_WANT_CONNECT = 7,
  442. SSL_ERROR_WANT_ACCEPT = 8,
  443. SSL_ERROR_SYSCALL = 5,
  444. SSL_ERROR_WANT_X509_LOOKUP = 83,
  445. SSL_ERROR_ZERO_RETURN = 6,
  446. SSL_ERROR_SSL = 85,
  447. SSL_SENT_SHUTDOWN = 1,
  448. SSL_RECEIVED_SHUTDOWN = 2,
  449. SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER = 4,
  450. SSL_OP_NO_SSLv2 = 8,
  451. SSL_R_SSL_HANDSHAKE_FAILURE = 101,
  452. SSL_R_TLSV1_ALERT_UNKNOWN_CA = 102,
  453. SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN = 103,
  454. SSL_R_SSLV3_ALERT_BAD_CERTIFICATE = 104,
  455. PEM_BUFSIZE = 1024
  456. };
  457. #ifndef NO_PSK
  458. typedef unsigned int (*psk_client_callback)(CYASSL*, const char*, char*,
  459. unsigned int, unsigned char*, unsigned int);
  460. CYASSL_API void CyaSSL_CTX_set_psk_client_callback(CYASSL_CTX*,
  461. psk_client_callback);
  462. CYASSL_API void CyaSSL_set_psk_client_callback(CYASSL*,psk_client_callback);
  463. CYASSL_API const char* CyaSSL_get_psk_identity_hint(const CYASSL*);
  464. CYASSL_API const char* CyaSSL_get_psk_identity(const CYASSL*);
  465. CYASSL_API int CyaSSL_CTX_use_psk_identity_hint(CYASSL_CTX*, const char*);
  466. CYASSL_API int CyaSSL_use_psk_identity_hint(CYASSL*, const char*);
  467. typedef unsigned int (*psk_server_callback)(CYASSL*, const char*,
  468. unsigned char*, unsigned int);
  469. CYASSL_API void CyaSSL_CTX_set_psk_server_callback(CYASSL_CTX*,
  470. psk_server_callback);
  471. CYASSL_API void CyaSSL_set_psk_server_callback(CYASSL*,psk_server_callback);
  472. #define PSK_TYPES_DEFINED
  473. #endif /* NO_PSK */
  474. /* extra begins */
  475. enum { /* ERR Constants */
  476. ERR_TXT_STRING = 1
  477. };
  478. CYASSL_API unsigned long CyaSSL_ERR_get_error_line_data(const char**, int*,
  479. const char**, int *);
  480. CYASSL_API unsigned long CyaSSL_ERR_get_error(void);
  481. CYASSL_API void CyaSSL_ERR_clear_error(void);
  482. CYASSL_API int CyaSSL_RAND_status(void);
  483. CYASSL_API int CyaSSL_RAND_bytes(unsigned char* buf, int num);
  484. CYASSL_API CYASSL_METHOD *CyaSSLv23_server_method(void);
  485. CYASSL_API long CyaSSL_CTX_set_options(CYASSL_CTX*, long);
  486. #ifndef NO_CERTS
  487. CYASSL_API int CyaSSL_CTX_check_private_key(CYASSL_CTX*);
  488. #endif /* !NO_CERTS */
  489. CYASSL_API void CyaSSL_ERR_free_strings(void);
  490. CYASSL_API void CyaSSL_ERR_remove_state(unsigned long);
  491. CYASSL_API void CyaSSL_EVP_cleanup(void);
  492. CYASSL_API void CyaSSL_cleanup_all_ex_data(void);
  493. CYASSL_API long CyaSSL_CTX_set_mode(CYASSL_CTX* ctx, long mode);
  494. CYASSL_API long CyaSSL_CTX_get_mode(CYASSL_CTX* ctx);
  495. CYASSL_API void CyaSSL_CTX_set_default_read_ahead(CYASSL_CTX* ctx, int m);
  496. CYASSL_API long CyaSSL_CTX_sess_set_cache_size(CYASSL_CTX*, long);
  497. CYASSL_API int CyaSSL_CTX_set_default_verify_paths(CYASSL_CTX*);
  498. CYASSL_API int CyaSSL_CTX_set_session_id_context(CYASSL_CTX*,
  499. const unsigned char*, unsigned int);
  500. CYASSL_API CYASSL_X509* CyaSSL_get_peer_certificate(CYASSL* ssl);
  501. CYASSL_API int CyaSSL_want_read(CYASSL*);
  502. CYASSL_API int CyaSSL_want_write(CYASSL*);
  503. CYASSL_API int CyaSSL_BIO_printf(CYASSL_BIO*, const char*, ...);
  504. CYASSL_API int CyaSSL_ASN1_UTCTIME_print(CYASSL_BIO*,
  505. const CYASSL_ASN1_UTCTIME*);
  506. CYASSL_API int CyaSSL_sk_num(CYASSL_X509_REVOKED*);
  507. CYASSL_API void* CyaSSL_sk_value(CYASSL_X509_REVOKED*, int);
  508. /* stunnel 4.28 needs */
  509. CYASSL_API void* CyaSSL_CTX_get_ex_data(const CYASSL_CTX*, int);
  510. CYASSL_API int CyaSSL_CTX_set_ex_data(CYASSL_CTX*, int, void*);
  511. CYASSL_API void CyaSSL_CTX_sess_set_get_cb(CYASSL_CTX*,
  512. CYASSL_SESSION*(*f)(CYASSL*, unsigned char*, int, int*));
  513. CYASSL_API void CyaSSL_CTX_sess_set_new_cb(CYASSL_CTX*,
  514. int (*f)(CYASSL*, CYASSL_SESSION*));
  515. CYASSL_API void CyaSSL_CTX_sess_set_remove_cb(CYASSL_CTX*,
  516. void (*f)(CYASSL_CTX*, CYASSL_SESSION*));
  517. CYASSL_API int CyaSSL_i2d_SSL_SESSION(CYASSL_SESSION*,unsigned char**);
  518. CYASSL_API CYASSL_SESSION* CyaSSL_d2i_SSL_SESSION(CYASSL_SESSION**,
  519. const unsigned char**, long);
  520. CYASSL_API long CyaSSL_SESSION_get_timeout(const CYASSL_SESSION*);
  521. CYASSL_API long CyaSSL_SESSION_get_time(const CYASSL_SESSION*);
  522. CYASSL_API int CyaSSL_CTX_get_ex_new_index(long, void*, void*, void*, void*);
  523. /* extra ends */
  524. /* CyaSSL extensions */
  525. /* call before SSL_connect, if verifying will add name check to
  526. date check and signature check */
  527. CYASSL_API int CyaSSL_check_domain_name(CYASSL* ssl, const char* dn);
  528. /* need to call once to load library (session cache) */
  529. CYASSL_API int CyaSSL_Init(void);
  530. /* call when done to cleanup/free session cache mutex / resources */
  531. CYASSL_API int CyaSSL_Cleanup(void);
  532. /* turn logging on, only if compiled in */
  533. CYASSL_API int CyaSSL_Debugging_ON(void);
  534. /* turn logging off */
  535. CYASSL_API void CyaSSL_Debugging_OFF(void);
  536. /* do accept or connect depedning on side */
  537. CYASSL_API int CyaSSL_negotiate(CYASSL* ssl);
  538. /* turn on CyaSSL data compression */
  539. CYASSL_API int CyaSSL_set_compression(CYASSL* ssl);
  540. CYASSL_API int CyaSSL_set_timeout(CYASSL*, unsigned int);
  541. CYASSL_API int CyaSSL_CTX_set_timeout(CYASSL_CTX*, unsigned int);
  542. /* get CyaSSL peer X509_CHAIN */
  543. CYASSL_API CYASSL_X509_CHAIN* CyaSSL_get_peer_chain(CYASSL* ssl);
  544. /* peer chain count */
  545. CYASSL_API int CyaSSL_get_chain_count(CYASSL_X509_CHAIN* chain);
  546. /* index cert length */
  547. CYASSL_API int CyaSSL_get_chain_length(CYASSL_X509_CHAIN*, int idx);
  548. /* index cert */
  549. CYASSL_API unsigned char* CyaSSL_get_chain_cert(CYASSL_X509_CHAIN*, int idx);
  550. /* get index cert in PEM */
  551. CYASSL_API int CyaSSL_get_chain_cert_pem(CYASSL_X509_CHAIN*, int idx,
  552. unsigned char* buffer, int inLen, int* outLen);
  553. CYASSL_API const unsigned char* CyaSSL_get_sessionID(const CYASSL_SESSION* s);
  554. CYASSL_API int CyaSSL_X509_get_serial_number(CYASSL_X509*,unsigned char*,int*);
  555. CYASSL_API char* CyaSSL_X509_get_subjectCN(CYASSL_X509*);
  556. CYASSL_API const unsigned char* CyaSSL_X509_get_der(CYASSL_X509*, int*);
  557. CYASSL_API int CyaSSL_cmp_peer_cert_to_file(CYASSL*, const char*);
  558. CYASSL_API char* CyaSSL_X509_get_next_altname(CYASSL_X509*);
  559. /* connect enough to get peer cert */
  560. CYASSL_API int CyaSSL_connect_cert(CYASSL* ssl);
  561. /* XXX This should be #ifndef NO_DH */
  562. #ifndef NO_CERTS
  563. /* server Diffie-Hellman parameters */
  564. CYASSL_API int CyaSSL_SetTmpDH(CYASSL*, const unsigned char* p, int pSz,
  565. const unsigned char* g, int gSz);
  566. CYASSL_API int CyaSSL_SetTmpDH_buffer(CYASSL*, const unsigned char* b, long sz,
  567. int format);
  568. CYASSL_API int CyaSSL_SetTmpEC_DHE_Sz(CYASSL*, unsigned short);
  569. #ifndef NO_FILESYSTEM
  570. CYASSL_API int CyaSSL_SetTmpDH_file(CYASSL*, const char* f, int format);
  571. #endif
  572. /* server ctx Diffie-Hellman parameters */
  573. CYASSL_API int CyaSSL_CTX_SetTmpDH(CYASSL_CTX*, const unsigned char* p,
  574. int pSz, const unsigned char* g, int gSz);
  575. CYASSL_API int CyaSSL_CTX_SetTmpDH_buffer(CYASSL_CTX*, const unsigned char* b,
  576. long sz, int format);
  577. CYASSL_API int CyaSSL_CTX_SetTmpEC_DHE_Sz(CYASSL_CTX*, unsigned short);
  578. #ifndef NO_FILESYSTEM
  579. CYASSL_API int CyaSSL_CTX_SetTmpDH_file(CYASSL_CTX*, const char* f,
  580. int format);
  581. #endif
  582. #endif
  583. /* keyblock size in bytes or -1 */
  584. /* need to call CyaSSL_KeepArrays before handshake to save keys */
  585. CYASSL_API int CyaSSL_get_keyblock_size(CYASSL*);
  586. CYASSL_API int CyaSSL_get_keys(CYASSL*,unsigned char** ms, unsigned int* msLen,
  587. unsigned char** sr, unsigned int* srLen,
  588. unsigned char** cr, unsigned int* crLen);
  589. #ifndef _WIN32
  590. #ifndef NO_WRITEV
  591. #ifdef __PPU
  592. #include <sys/types.h>
  593. #include <sys/socket.h>
  594. #else
  595. #include <sys/uio.h>
  596. #endif
  597. /* allow writev style writing */
  598. CYASSL_API int CyaSSL_writev(CYASSL* ssl, const struct iovec* iov,
  599. int iovcnt);
  600. #endif
  601. #endif
  602. #ifndef NO_CERTS
  603. /* SSL_CTX versions */
  604. CYASSL_API int CyaSSL_CTX_load_verify_buffer(CYASSL_CTX*,
  605. const unsigned char*, long, int);
  606. CYASSL_API int CyaSSL_CTX_use_certificate_buffer(CYASSL_CTX*,
  607. const unsigned char*, long, int);
  608. CYASSL_API int CyaSSL_CTX_use_PrivateKey_buffer(CYASSL_CTX*,
  609. const unsigned char*, long, int);
  610. CYASSL_API int CyaSSL_CTX_use_certificate_chain_buffer(CYASSL_CTX*,
  611. const unsigned char*, long);
  612. /* SSL versions */
  613. CYASSL_API int CyaSSL_use_certificate_buffer(CYASSL*, const unsigned char*,
  614. long, int);
  615. CYASSL_API int CyaSSL_use_PrivateKey_buffer(CYASSL*, const unsigned char*,
  616. long, int);
  617. CYASSL_API int CyaSSL_use_certificate_chain_buffer(CYASSL*,
  618. const unsigned char*, long);
  619. #endif
  620. CYASSL_API int CyaSSL_CTX_set_group_messages(CYASSL_CTX*);
  621. CYASSL_API int CyaSSL_set_group_messages(CYASSL*);
  622. /* I/O callbacks */
  623. typedef int (*CallbackIORecv)(CYASSL *ssl, char *buf, int sz, void *ctx);
  624. typedef int (*CallbackIOSend)(CYASSL *ssl, char *buf, int sz, void *ctx);
  625. CYASSL_API void CyaSSL_SetIORecv(CYASSL_CTX*, CallbackIORecv);
  626. CYASSL_API void CyaSSL_SetIOSend(CYASSL_CTX*, CallbackIOSend);
  627. CYASSL_API void CyaSSL_SetIOReadCtx( CYASSL* ssl, void *ctx);
  628. CYASSL_API void CyaSSL_SetIOWriteCtx(CYASSL* ssl, void *ctx);
  629. CYASSL_API void CyaSSL_SetIOReadFlags( CYASSL* ssl, int flags);
  630. CYASSL_API void CyaSSL_SetIOWriteFlags(CYASSL* ssl, int flags);
  631. typedef int (*CallbackIOOcsp)(void*, const char*, int,
  632. unsigned char*, int, unsigned char**);
  633. typedef void (*CallbackIOOcspRespFree)(void*,unsigned char*);
  634. #ifdef HAVE_OCSP
  635. CYASSL_API void CyaSSL_SetIOOcsp(CYASSL_CTX *ocsp, CallbackIOOcsp cb);
  636. CYASSL_API void CyaSSL_SetIOOcspRespFree(CYASSL_CTX *ocsp,
  637. CallbackIOOcspRespFree cb);
  638. CYASSL_API void CyaSSL_SetIOOcspCtx(CYASSL_CTX *ocsp, void *octx);
  639. #endif
  640. /* CA cache callbacks */
  641. enum {
  642. CYASSL_SSLV3 = 0,
  643. CYASSL_TLSV1 = 1,
  644. CYASSL_TLSV1_1 = 2,
  645. CYASSL_TLSV1_2 = 3,
  646. CYASSL_USER_CA = 1, /* user added as trusted */
  647. CYASSL_CHAIN_CA = 2 /* added to cache from trusted chain */
  648. };
  649. CYASSL_API int CyaSSL_GetObjectSize(void); /* object size based on build */
  650. CYASSL_API int CyaSSL_SetVersion(CYASSL* ssl, int version);
  651. CYASSL_API int CyaSSL_KeyPemToDer(const unsigned char*, int sz, unsigned char*,
  652. int, const char*);
  653. typedef void (*CallbackCACache)(unsigned char* der, int sz, int type);
  654. typedef void (*CbMissingCRL)(const char* url);
  655. #ifndef NO_CERTS
  656. CYASSL_API void CyaSSL_CTX_SetCACb(CYASSL_CTX*, CallbackCACache);
  657. CYASSL_API CYASSL_CERT_MANAGER* CyaSSL_CertManagerNew(void);
  658. CYASSL_API void CyaSSL_CertManagerFree(CYASSL_CERT_MANAGER*);
  659. CYASSL_API int CyaSSL_CertManagerLoadCA(CYASSL_CERT_MANAGER*, const char* f,
  660. const char* d);
  661. CYASSL_API int CyaSSL_CertManagerVerify(CYASSL_CERT_MANAGER*, const char* f,
  662. int format);
  663. CYASSL_API int CyaSSL_CertManagerVerifyBuffer(CYASSL_CERT_MANAGER* cm,
  664. const unsigned char* buff, int sz, int format);
  665. CYASSL_API int CyaSSL_CertManagerCheckCRL(CYASSL_CERT_MANAGER*,
  666. unsigned char*, int sz);
  667. CYASSL_API int CyaSSL_CertManagerEnableCRL(CYASSL_CERT_MANAGER*,
  668. int options);
  669. CYASSL_API int CyaSSL_CertManagerDisableCRL(CYASSL_CERT_MANAGER*);
  670. CYASSL_API int CyaSSL_CertManagerLoadCRL(CYASSL_CERT_MANAGER*, const char*,
  671. int, int);
  672. CYASSL_API int CyaSSL_CertManagerSetCRL_Cb(CYASSL_CERT_MANAGER*,
  673. CbMissingCRL);
  674. CYASSL_API int CyaSSL_EnableCRL(CYASSL* ssl, int options);
  675. CYASSL_API int CyaSSL_DisableCRL(CYASSL* ssl);
  676. CYASSL_API int CyaSSL_LoadCRL(CYASSL*, const char*, int, int);
  677. CYASSL_API int CyaSSL_SetCRL_Cb(CYASSL*, CbMissingCRL);
  678. CYASSL_API int CyaSSL_CTX_EnableCRL(CYASSL_CTX* ctx, int options);
  679. CYASSL_API int CyaSSL_CTX_DisableCRL(CYASSL_CTX* ctx);
  680. CYASSL_API int CyaSSL_CTX_LoadCRL(CYASSL_CTX*, const char*, int, int);
  681. CYASSL_API int CyaSSL_CTX_SetCRL_Cb(CYASSL_CTX*, CbMissingCRL);
  682. #endif /* !NO_CERTS */
  683. /* end of handshake frees temporary arrays, if user needs for get_keys or
  684. psk hints, call KeepArrays before handshake and then FreeArrays when done
  685. if don't want to wait for object free */
  686. CYASSL_API void CyaSSL_KeepArrays(CYASSL*);
  687. CYASSL_API void CyaSSL_FreeArrays(CYASSL*);
  688. /* cavium additions */
  689. CYASSL_API int CyaSSL_UseCavium(CYASSL*, int devId);
  690. CYASSL_API int CyaSSL_CTX_UseCavium(CYASSL_CTX*, int devId);
  691. #define CYASSL_CRL_MONITOR 0x01 /* monitor this dir flag */
  692. #define CYASSL_CRL_START_MON 0x02 /* start monitoring flag */
  693. #ifdef CYASSL_CALLBACKS
  694. /* used internally by CyaSSL while OpenSSL types aren't */
  695. #include <cyassl/callbacks.h>
  696. typedef int (*HandShakeCallBack)(HandShakeInfo*);
  697. typedef int (*TimeoutCallBack)(TimeoutInfo*);
  698. /* CyaSSL connect extension allowing HandShakeCallBack and/or TimeoutCallBack
  699. for diagnostics */
  700. CYASSL_API int CyaSSL_connect_ex(CYASSL*, HandShakeCallBack, TimeoutCallBack,
  701. Timeval);
  702. CYASSL_API int CyaSSL_accept_ex(CYASSL*, HandShakeCallBack, TimeoutCallBack,
  703. Timeval);
  704. #endif /* CYASSL_CALLBACKS */
  705. CYASSL_API long CyaSSL_CTX_OCSP_set_options(CYASSL_CTX*, long);
  706. CYASSL_API int CyaSSL_CTX_OCSP_set_override_url(CYASSL_CTX*, const char*);
  707. /* OCSP Options */
  708. #define CYASSL_OCSP_ENABLE 0x0001 /* Enable OCSP lookups */
  709. #define CYASSL_OCSP_URL_OVERRIDE 0x0002 /* Use the override URL instead of URL
  710. * in certificate */
  711. #define CYASSL_OCSP_NO_NONCE 0x0004 /* Disables the request nonce. */
  712. #ifdef __cplusplus
  713. } /* extern "C" */
  714. #endif
  715. #endif /* CYASSL_SSL_H */