ssl.h 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347
  1. /* ssl.h
  2. *
  3. * Copyright (C) 2006-2014 wolfSSL Inc.
  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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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. int pkey_sz;
  78. union {
  79. char* ptr;
  80. } pkey;
  81. #ifdef HAVE_ECC
  82. int pkey_curve;
  83. #endif
  84. } CYASSL_EVP_PKEY;
  85. typedef struct CYASSL_MD4_CTX {
  86. int buffer[32]; /* big enough to hold, check size in Init */
  87. } CYASSL_MD4_CTX;
  88. typedef struct CYASSL_COMP_METHOD {
  89. int type; /* stunnel dereference */
  90. } CYASSL_COMP_METHOD;
  91. typedef struct CYASSL_X509_STORE {
  92. int cache; /* stunnel dereference */
  93. CYASSL_CERT_MANAGER* cm;
  94. } CYASSL_X509_STORE;
  95. typedef struct CYASSL_ALERT {
  96. int code;
  97. int level;
  98. } CYASSL_ALERT;
  99. typedef struct CYASSL_ALERT_HISTORY {
  100. CYASSL_ALERT last_rx;
  101. CYASSL_ALERT last_tx;
  102. } CYASSL_ALERT_HISTORY;
  103. typedef struct CYASSL_X509_REVOKED {
  104. CYASSL_ASN1_INTEGER* serialNumber; /* stunnel dereference */
  105. } CYASSL_X509_REVOKED;
  106. typedef struct CYASSL_X509_OBJECT {
  107. union {
  108. char* ptr;
  109. CYASSL_X509_CRL* crl; /* stunnel dereference */
  110. } data;
  111. } CYASSL_X509_OBJECT;
  112. typedef struct CYASSL_X509_STORE_CTX {
  113. CYASSL_X509_STORE* store; /* Store full of a CA cert chain */
  114. CYASSL_X509* current_cert; /* stunnel dereference */
  115. char* domain; /* subject CN domain name */
  116. void* ex_data; /* external data, for fortress build */
  117. void* userCtx; /* user ctx */
  118. int error; /* current error */
  119. int error_depth; /* cert depth for this error */
  120. int discardSessionCerts; /* so verify callback can flag for discard */
  121. } CYASSL_X509_STORE_CTX;
  122. /* Valid Alert types from page 16/17 */
  123. enum AlertDescription {
  124. close_notify = 0,
  125. unexpected_message = 10,
  126. bad_record_mac = 20,
  127. decompression_failure = 30,
  128. handshake_failure = 40,
  129. no_certificate = 41,
  130. bad_certificate = 42,
  131. unsupported_certificate = 43,
  132. certificate_revoked = 44,
  133. certificate_expired = 45,
  134. certificate_unknown = 46,
  135. illegal_parameter = 47,
  136. decrypt_error = 51,
  137. protocol_version = 70,
  138. no_renegotiation = 100,
  139. unrecognized_name = 112
  140. };
  141. enum AlertLevel {
  142. alert_warning = 1,
  143. alert_fatal = 2
  144. };
  145. CYASSL_API CYASSL_METHOD *CyaSSLv3_server_method(void);
  146. CYASSL_API CYASSL_METHOD *CyaSSLv3_client_method(void);
  147. CYASSL_API CYASSL_METHOD *CyaTLSv1_server_method(void);
  148. CYASSL_API CYASSL_METHOD *CyaTLSv1_client_method(void);
  149. CYASSL_API CYASSL_METHOD *CyaTLSv1_1_server_method(void);
  150. CYASSL_API CYASSL_METHOD *CyaTLSv1_1_client_method(void);
  151. CYASSL_API CYASSL_METHOD *CyaTLSv1_2_server_method(void);
  152. CYASSL_API CYASSL_METHOD *CyaTLSv1_2_client_method(void);
  153. #ifdef CYASSL_DTLS
  154. CYASSL_API CYASSL_METHOD *CyaDTLSv1_client_method(void);
  155. CYASSL_API CYASSL_METHOD *CyaDTLSv1_server_method(void);
  156. CYASSL_API CYASSL_METHOD *CyaDTLSv1_2_client_method(void);
  157. CYASSL_API CYASSL_METHOD *CyaDTLSv1_2_server_method(void);
  158. #endif
  159. #if !defined(NO_FILESYSTEM) && !defined(NO_CERTS)
  160. CYASSL_API int CyaSSL_CTX_use_certificate_file(CYASSL_CTX*, const char*, int);
  161. CYASSL_API int CyaSSL_CTX_use_PrivateKey_file(CYASSL_CTX*, const char*, int);
  162. CYASSL_API int CyaSSL_CTX_load_verify_locations(CYASSL_CTX*, const char*,
  163. const char*);
  164. CYASSL_API int CyaSSL_CTX_use_certificate_chain_file(CYASSL_CTX *,
  165. const char *file);
  166. CYASSL_API int CyaSSL_CTX_use_RSAPrivateKey_file(CYASSL_CTX*, const char*, int);
  167. CYASSL_API int CyaSSL_use_certificate_file(CYASSL*, const char*, int);
  168. CYASSL_API int CyaSSL_use_PrivateKey_file(CYASSL*, const char*, int);
  169. CYASSL_API int CyaSSL_use_certificate_chain_file(CYASSL*, const char *file);
  170. CYASSL_API int CyaSSL_use_RSAPrivateKey_file(CYASSL*, const char*, int);
  171. #ifdef CYASSL_DER_LOAD
  172. CYASSL_API int CyaSSL_CTX_der_load_verify_locations(CYASSL_CTX*,
  173. const char*, int);
  174. #endif
  175. #ifdef HAVE_POLY1305
  176. CYASSL_API int CyaSSL_use_old_poly(CYASSL*, int);
  177. #endif
  178. #ifdef HAVE_NTRU
  179. CYASSL_API int CyaSSL_CTX_use_NTRUPrivateKey_file(CYASSL_CTX*, const char*);
  180. /* load NTRU private key blob */
  181. #endif
  182. CYASSL_API int CyaSSL_PemCertToDer(const char*, unsigned char*, int);
  183. #endif /* !NO_FILESYSTEM && !NO_CERTS */
  184. CYASSL_API CYASSL_CTX* CyaSSL_CTX_new(CYASSL_METHOD*);
  185. CYASSL_API CYASSL* CyaSSL_new(CYASSL_CTX*);
  186. CYASSL_API int CyaSSL_set_fd (CYASSL*, int);
  187. CYASSL_API int CyaSSL_get_ciphers(char*, int);
  188. CYASSL_API int CyaSSL_get_fd(const CYASSL*);
  189. CYASSL_API void CyaSSL_set_using_nonblock(CYASSL*, int);
  190. CYASSL_API int CyaSSL_get_using_nonblock(CYASSL*);
  191. CYASSL_API int CyaSSL_connect(CYASSL*); /* please see note at top of README
  192. if you get an error from connect */
  193. CYASSL_API int CyaSSL_write(CYASSL*, const void*, int);
  194. CYASSL_API int CyaSSL_read(CYASSL*, void*, int);
  195. CYASSL_API int CyaSSL_peek(CYASSL*, void*, int);
  196. CYASSL_API int CyaSSL_accept(CYASSL*);
  197. CYASSL_API void CyaSSL_CTX_free(CYASSL_CTX*);
  198. CYASSL_API void CyaSSL_free(CYASSL*);
  199. CYASSL_API int CyaSSL_shutdown(CYASSL*);
  200. CYASSL_API int CyaSSL_send(CYASSL*, const void*, int sz, int flags);
  201. CYASSL_API int CyaSSL_recv(CYASSL*, void*, int sz, int flags);
  202. CYASSL_API void CyaSSL_CTX_set_quiet_shutdown(CYASSL_CTX*, int);
  203. CYASSL_API void CyaSSL_set_quiet_shutdown(CYASSL*, int);
  204. CYASSL_API int CyaSSL_get_error(CYASSL*, int);
  205. CYASSL_API int CyaSSL_get_alert_history(CYASSL*, CYASSL_ALERT_HISTORY *);
  206. CYASSL_API int CyaSSL_set_session(CYASSL* ssl,CYASSL_SESSION* session);
  207. CYASSL_API CYASSL_SESSION* CyaSSL_get_session(CYASSL* ssl);
  208. CYASSL_API void CyaSSL_flush_sessions(CYASSL_CTX *ctx, long tm);
  209. CYASSL_API int CyaSSL_SetServerID(CYASSL* ssl, const unsigned char*,
  210. int, int);
  211. #ifdef SESSION_INDEX
  212. CYASSL_API int CyaSSL_GetSessionIndex(CYASSL* ssl);
  213. CYASSL_API int CyaSSL_GetSessionAtIndex(int index, CYASSL_SESSION* session);
  214. #endif /* SESSION_INDEX */
  215. #if defined(SESSION_INDEX) && defined(SESSION_CERTS)
  216. CYASSL_API
  217. CYASSL_X509_CHAIN* CyaSSL_SESSION_get_peer_chain(CYASSL_SESSION* session);
  218. #endif /* SESSION_INDEX && SESSION_CERTS */
  219. typedef int (*VerifyCallback)(int, CYASSL_X509_STORE_CTX*);
  220. typedef int (*pem_password_cb)(char*, int, int, void*);
  221. CYASSL_API void CyaSSL_CTX_set_verify(CYASSL_CTX*, int,
  222. VerifyCallback verify_callback);
  223. CYASSL_API void CyaSSL_set_verify(CYASSL*, int, VerifyCallback verify_callback);
  224. CYASSL_API void CyaSSL_SetCertCbCtx(CYASSL*, void*);
  225. CYASSL_API int CyaSSL_pending(CYASSL*);
  226. CYASSL_API void CyaSSL_load_error_strings(void);
  227. CYASSL_API int CyaSSL_library_init(void);
  228. CYASSL_API long CyaSSL_CTX_set_session_cache_mode(CYASSL_CTX*, long);
  229. /* session cache persistence */
  230. CYASSL_API int CyaSSL_save_session_cache(const char*);
  231. CYASSL_API int CyaSSL_restore_session_cache(const char*);
  232. CYASSL_API int CyaSSL_memsave_session_cache(void*, int);
  233. CYASSL_API int CyaSSL_memrestore_session_cache(const void*, int);
  234. CYASSL_API int CyaSSL_get_session_cache_memsize(void);
  235. /* certificate cache persistence, uses ctx since certs are per ctx */
  236. CYASSL_API int CyaSSL_CTX_save_cert_cache(CYASSL_CTX*, const char*);
  237. CYASSL_API int CyaSSL_CTX_restore_cert_cache(CYASSL_CTX*, const char*);
  238. CYASSL_API int CyaSSL_CTX_memsave_cert_cache(CYASSL_CTX*, void*, int, int*);
  239. CYASSL_API int CyaSSL_CTX_memrestore_cert_cache(CYASSL_CTX*, const void*, int);
  240. CYASSL_API int CyaSSL_CTX_get_cert_cache_memsize(CYASSL_CTX*);
  241. /* only supports full name from cipher_name[] delimited by : */
  242. CYASSL_API int CyaSSL_CTX_set_cipher_list(CYASSL_CTX*, const char*);
  243. CYASSL_API int CyaSSL_set_cipher_list(CYASSL*, const char*);
  244. /* Nonblocking DTLS helper functions */
  245. CYASSL_API int CyaSSL_dtls_get_current_timeout(CYASSL* ssl);
  246. CYASSL_API int CyaSSL_dtls_set_timeout_init(CYASSL* ssl, int);
  247. CYASSL_API int CyaSSL_dtls_set_timeout_max(CYASSL* ssl, int);
  248. CYASSL_API int CyaSSL_dtls_got_timeout(CYASSL* ssl);
  249. CYASSL_API int CyaSSL_dtls(CYASSL* ssl);
  250. CYASSL_API int CyaSSL_dtls_set_peer(CYASSL*, void*, unsigned int);
  251. CYASSL_API int CyaSSL_dtls_get_peer(CYASSL*, void*, unsigned int*);
  252. CYASSL_API int CyaSSL_ERR_GET_REASON(int err);
  253. CYASSL_API char* CyaSSL_ERR_error_string(unsigned long,char*);
  254. CYASSL_API void CyaSSL_ERR_error_string_n(unsigned long e, char* buf,
  255. unsigned long sz);
  256. CYASSL_API const char* CyaSSL_ERR_reason_error_string(unsigned long);
  257. /* extras */
  258. #define STACK_OF(x) x
  259. CYASSL_API int CyaSSL_set_ex_data(CYASSL*, int, void*);
  260. CYASSL_API int CyaSSL_get_shutdown(const CYASSL*);
  261. CYASSL_API int CyaSSL_set_rfd(CYASSL*, int);
  262. CYASSL_API int CyaSSL_set_wfd(CYASSL*, int);
  263. CYASSL_API void CyaSSL_set_shutdown(CYASSL*, int);
  264. CYASSL_API int CyaSSL_set_session_id_context(CYASSL*, const unsigned char*,
  265. unsigned int);
  266. CYASSL_API void CyaSSL_set_connect_state(CYASSL*);
  267. CYASSL_API void CyaSSL_set_accept_state(CYASSL*);
  268. CYASSL_API int CyaSSL_session_reused(CYASSL*);
  269. CYASSL_API void CyaSSL_SESSION_free(CYASSL_SESSION* session);
  270. CYASSL_API int CyaSSL_is_init_finished(CYASSL*);
  271. CYASSL_API const char* CyaSSL_get_version(CYASSL*);
  272. CYASSL_API int CyaSSL_get_current_cipher_suite(CYASSL* ssl);
  273. CYASSL_API CYASSL_CIPHER* CyaSSL_get_current_cipher(CYASSL*);
  274. CYASSL_API char* CyaSSL_CIPHER_description(CYASSL_CIPHER*, char*, int);
  275. CYASSL_API const char* CyaSSL_CIPHER_get_name(const CYASSL_CIPHER* cipher);
  276. CYASSL_API const char* CyaSSL_get_cipher(CYASSL*);
  277. CYASSL_API CYASSL_SESSION* CyaSSL_get1_session(CYASSL* ssl);
  278. /* what's ref count */
  279. CYASSL_API void CyaSSL_X509_free(CYASSL_X509*);
  280. CYASSL_API void CyaSSL_OPENSSL_free(void*);
  281. CYASSL_API int CyaSSL_OCSP_parse_url(char* url, char** host, char** port,
  282. char** path, int* ssl);
  283. CYASSL_API CYASSL_METHOD* CyaSSLv23_client_method(void);
  284. CYASSL_API CYASSL_METHOD* CyaSSLv2_client_method(void);
  285. CYASSL_API CYASSL_METHOD* CyaSSLv2_server_method(void);
  286. CYASSL_API void CyaSSL_MD4_Init(CYASSL_MD4_CTX*);
  287. CYASSL_API void CyaSSL_MD4_Update(CYASSL_MD4_CTX*, const void*, unsigned long);
  288. CYASSL_API void CyaSSL_MD4_Final(unsigned char*, CYASSL_MD4_CTX*);
  289. CYASSL_API CYASSL_BIO* CyaSSL_BIO_new(CYASSL_BIO_METHOD*);
  290. CYASSL_API int CyaSSL_BIO_free(CYASSL_BIO*);
  291. CYASSL_API int CyaSSL_BIO_free_all(CYASSL_BIO*);
  292. CYASSL_API int CyaSSL_BIO_read(CYASSL_BIO*, void*, int);
  293. CYASSL_API int CyaSSL_BIO_write(CYASSL_BIO*, const void*, int);
  294. CYASSL_API CYASSL_BIO* CyaSSL_BIO_push(CYASSL_BIO*, CYASSL_BIO* append);
  295. CYASSL_API CYASSL_BIO* CyaSSL_BIO_pop(CYASSL_BIO*);
  296. CYASSL_API int CyaSSL_BIO_flush(CYASSL_BIO*);
  297. CYASSL_API int CyaSSL_BIO_pending(CYASSL_BIO*);
  298. CYASSL_API CYASSL_BIO_METHOD* CyaSSL_BIO_f_buffer(void);
  299. CYASSL_API long CyaSSL_BIO_set_write_buffer_size(CYASSL_BIO*, long size);
  300. CYASSL_API CYASSL_BIO_METHOD* CyaSSL_BIO_f_ssl(void);
  301. CYASSL_API CYASSL_BIO* CyaSSL_BIO_new_socket(int sfd, int flag);
  302. CYASSL_API int CyaSSL_BIO_eof(CYASSL_BIO*);
  303. CYASSL_API CYASSL_BIO_METHOD* CyaSSL_BIO_s_mem(void);
  304. CYASSL_API CYASSL_BIO_METHOD* CyaSSL_BIO_f_base64(void);
  305. CYASSL_API void CyaSSL_BIO_set_flags(CYASSL_BIO*, int);
  306. CYASSL_API int CyaSSL_BIO_get_mem_data(CYASSL_BIO* bio,const unsigned char** p);
  307. CYASSL_API CYASSL_BIO* CyaSSL_BIO_new_mem_buf(void* buf, int len);
  308. CYASSL_API long CyaSSL_BIO_set_ssl(CYASSL_BIO*, CYASSL*, int flag);
  309. CYASSL_API void CyaSSL_set_bio(CYASSL*, CYASSL_BIO* rd, CYASSL_BIO* wr);
  310. CYASSL_API int CyaSSL_add_all_algorithms(void);
  311. CYASSL_API void CyaSSL_RAND_screen(void);
  312. CYASSL_API const char* CyaSSL_RAND_file_name(char*, unsigned long);
  313. CYASSL_API int CyaSSL_RAND_write_file(const char*);
  314. CYASSL_API int CyaSSL_RAND_load_file(const char*, long);
  315. CYASSL_API int CyaSSL_RAND_egd(const char*);
  316. CYASSL_API int CyaSSL_RAND_seed(const void*, int);
  317. CYASSL_API void CyaSSL_RAND_add(const void*, int, double);
  318. CYASSL_API CYASSL_COMP_METHOD* CyaSSL_COMP_zlib(void);
  319. CYASSL_API CYASSL_COMP_METHOD* CyaSSL_COMP_rle(void);
  320. CYASSL_API int CyaSSL_COMP_add_compression_method(int, void*);
  321. CYASSL_API int CyaSSL_get_ex_new_index(long, void*, void*, void*, void*);
  322. CYASSL_API void CyaSSL_set_id_callback(unsigned long (*f)(void));
  323. CYASSL_API void CyaSSL_set_locking_callback(void (*f)(int, int, const char*,
  324. int));
  325. CYASSL_API void CyaSSL_set_dynlock_create_callback(CYASSL_dynlock_value* (*f)
  326. (const char*, int));
  327. CYASSL_API void CyaSSL_set_dynlock_lock_callback(void (*f)(int,
  328. CYASSL_dynlock_value*, const char*, int));
  329. CYASSL_API void CyaSSL_set_dynlock_destroy_callback(void (*f)
  330. (CYASSL_dynlock_value*, const char*, int));
  331. CYASSL_API int CyaSSL_num_locks(void);
  332. CYASSL_API CYASSL_X509* CyaSSL_X509_STORE_CTX_get_current_cert(
  333. CYASSL_X509_STORE_CTX*);
  334. CYASSL_API int CyaSSL_X509_STORE_CTX_get_error(CYASSL_X509_STORE_CTX*);
  335. CYASSL_API int CyaSSL_X509_STORE_CTX_get_error_depth(CYASSL_X509_STORE_CTX*);
  336. CYASSL_API char* CyaSSL_X509_NAME_oneline(CYASSL_X509_NAME*, char*, int);
  337. CYASSL_API CYASSL_X509_NAME* CyaSSL_X509_get_issuer_name(CYASSL_X509*);
  338. CYASSL_API CYASSL_X509_NAME* CyaSSL_X509_get_subject_name(CYASSL_X509*);
  339. CYASSL_API int CyaSSL_X509_ext_isSet_by_NID(CYASSL_X509*, int);
  340. CYASSL_API int CyaSSL_X509_ext_get_critical_by_NID(CYASSL_X509*, int);
  341. CYASSL_API int CyaSSL_X509_get_isCA(CYASSL_X509*);
  342. CYASSL_API int CyaSSL_X509_get_isSet_pathLength(CYASSL_X509*);
  343. CYASSL_API unsigned int CyaSSL_X509_get_pathLength(CYASSL_X509*);
  344. CYASSL_API unsigned int CyaSSL_X509_get_keyUsage(CYASSL_X509*);
  345. CYASSL_API unsigned char* CyaSSL_X509_get_authorityKeyID(
  346. CYASSL_X509*, unsigned char*, int*);
  347. CYASSL_API unsigned char* CyaSSL_X509_get_subjectKeyID(
  348. CYASSL_X509*, unsigned char*, int*);
  349. CYASSL_API int CyaSSL_X509_NAME_entry_count(CYASSL_X509_NAME*);
  350. CYASSL_API int CyaSSL_X509_NAME_get_text_by_NID(
  351. CYASSL_X509_NAME*, int, char*, int);
  352. CYASSL_API int CyaSSL_X509_verify_cert(CYASSL_X509_STORE_CTX*);
  353. CYASSL_API const char* CyaSSL_X509_verify_cert_error_string(long);
  354. CYASSL_API int CyaSSL_X509_get_signature_type(CYASSL_X509*);
  355. CYASSL_API int CyaSSL_X509_get_signature(CYASSL_X509*, unsigned char*, int*);
  356. CYASSL_API int CyaSSL_X509_LOOKUP_add_dir(CYASSL_X509_LOOKUP*,const char*,long);
  357. CYASSL_API int CyaSSL_X509_LOOKUP_load_file(CYASSL_X509_LOOKUP*, const char*,
  358. long);
  359. CYASSL_API CYASSL_X509_LOOKUP_METHOD* CyaSSL_X509_LOOKUP_hash_dir(void);
  360. CYASSL_API CYASSL_X509_LOOKUP_METHOD* CyaSSL_X509_LOOKUP_file(void);
  361. CYASSL_API CYASSL_X509_LOOKUP* CyaSSL_X509_STORE_add_lookup(CYASSL_X509_STORE*,
  362. CYASSL_X509_LOOKUP_METHOD*);
  363. CYASSL_API CYASSL_X509_STORE* CyaSSL_X509_STORE_new(void);
  364. CYASSL_API void CyaSSL_X509_STORE_free(CYASSL_X509_STORE*);
  365. CYASSL_API int CyaSSL_X509_STORE_add_cert(
  366. CYASSL_X509_STORE*, CYASSL_X509*);
  367. CYASSL_API int CyaSSL_X509_STORE_set_default_paths(CYASSL_X509_STORE*);
  368. CYASSL_API int CyaSSL_X509_STORE_get_by_subject(CYASSL_X509_STORE_CTX*,
  369. int, CYASSL_X509_NAME*, CYASSL_X509_OBJECT*);
  370. CYASSL_API CYASSL_X509_STORE_CTX* CyaSSL_X509_STORE_CTX_new(void);
  371. CYASSL_API int CyaSSL_X509_STORE_CTX_init(CYASSL_X509_STORE_CTX*,
  372. CYASSL_X509_STORE*, CYASSL_X509*, STACK_OF(CYASSL_X509)*);
  373. CYASSL_API void CyaSSL_X509_STORE_CTX_free(CYASSL_X509_STORE_CTX*);
  374. CYASSL_API void CyaSSL_X509_STORE_CTX_cleanup(CYASSL_X509_STORE_CTX*);
  375. CYASSL_API CYASSL_ASN1_TIME* CyaSSL_X509_CRL_get_lastUpdate(CYASSL_X509_CRL*);
  376. CYASSL_API CYASSL_ASN1_TIME* CyaSSL_X509_CRL_get_nextUpdate(CYASSL_X509_CRL*);
  377. CYASSL_API CYASSL_EVP_PKEY* CyaSSL_X509_get_pubkey(CYASSL_X509*);
  378. CYASSL_API int CyaSSL_X509_CRL_verify(CYASSL_X509_CRL*, CYASSL_EVP_PKEY*);
  379. CYASSL_API void CyaSSL_X509_STORE_CTX_set_error(CYASSL_X509_STORE_CTX*,
  380. int);
  381. CYASSL_API void CyaSSL_X509_OBJECT_free_contents(CYASSL_X509_OBJECT*);
  382. CYASSL_API void CyaSSL_EVP_PKEY_free(CYASSL_EVP_PKEY*);
  383. CYASSL_API int CyaSSL_X509_cmp_current_time(const CYASSL_ASN1_TIME*);
  384. CYASSL_API int CyaSSL_sk_X509_REVOKED_num(CYASSL_X509_REVOKED*);
  385. CYASSL_API CYASSL_X509_REVOKED* CyaSSL_X509_CRL_get_REVOKED(CYASSL_X509_CRL*);
  386. CYASSL_API CYASSL_X509_REVOKED* CyaSSL_sk_X509_REVOKED_value(
  387. CYASSL_X509_REVOKED*,int);
  388. CYASSL_API CYASSL_ASN1_INTEGER* CyaSSL_X509_get_serialNumber(CYASSL_X509*);
  389. CYASSL_API int CyaSSL_ASN1_TIME_print(CYASSL_BIO*, const CYASSL_ASN1_TIME*);
  390. CYASSL_API int CyaSSL_ASN1_INTEGER_cmp(const CYASSL_ASN1_INTEGER*,
  391. const CYASSL_ASN1_INTEGER*);
  392. CYASSL_API long CyaSSL_ASN1_INTEGER_get(const CYASSL_ASN1_INTEGER*);
  393. CYASSL_API STACK_OF(CYASSL_X509_NAME)* CyaSSL_load_client_CA_file(const char*);
  394. CYASSL_API void CyaSSL_CTX_set_client_CA_list(CYASSL_CTX*,
  395. STACK_OF(CYASSL_X509_NAME)*);
  396. CYASSL_API void* CyaSSL_X509_STORE_CTX_get_ex_data(CYASSL_X509_STORE_CTX*, int);
  397. CYASSL_API int CyaSSL_get_ex_data_X509_STORE_CTX_idx(void);
  398. CYASSL_API void* CyaSSL_get_ex_data(const CYASSL*, int);
  399. CYASSL_API void CyaSSL_CTX_set_default_passwd_cb_userdata(CYASSL_CTX*,
  400. void* userdata);
  401. CYASSL_API void CyaSSL_CTX_set_default_passwd_cb(CYASSL_CTX*, pem_password_cb);
  402. CYASSL_API void CyaSSL_CTX_set_info_callback(CYASSL_CTX*, void (*)(void));
  403. CYASSL_API unsigned long CyaSSL_ERR_peek_error(void);
  404. CYASSL_API int CyaSSL_GET_REASON(int);
  405. CYASSL_API char* CyaSSL_alert_type_string_long(int);
  406. CYASSL_API char* CyaSSL_alert_desc_string_long(int);
  407. CYASSL_API char* CyaSSL_state_string_long(CYASSL*);
  408. CYASSL_API CYASSL_RSA* CyaSSL_RSA_generate_key(int, unsigned long,
  409. void(*)(int, int, void*), void*);
  410. CYASSL_API void CyaSSL_CTX_set_tmp_rsa_callback(CYASSL_CTX*,
  411. CYASSL_RSA*(*)(CYASSL*, int, int));
  412. CYASSL_API int CyaSSL_PEM_def_callback(char*, int num, int w, void* key);
  413. CYASSL_API long CyaSSL_CTX_sess_accept(CYASSL_CTX*);
  414. CYASSL_API long CyaSSL_CTX_sess_connect(CYASSL_CTX*);
  415. CYASSL_API long CyaSSL_CTX_sess_accept_good(CYASSL_CTX*);
  416. CYASSL_API long CyaSSL_CTX_sess_connect_good(CYASSL_CTX*);
  417. CYASSL_API long CyaSSL_CTX_sess_accept_renegotiate(CYASSL_CTX*);
  418. CYASSL_API long CyaSSL_CTX_sess_connect_renegotiate(CYASSL_CTX*);
  419. CYASSL_API long CyaSSL_CTX_sess_hits(CYASSL_CTX*);
  420. CYASSL_API long CyaSSL_CTX_sess_cb_hits(CYASSL_CTX*);
  421. CYASSL_API long CyaSSL_CTX_sess_cache_full(CYASSL_CTX*);
  422. CYASSL_API long CyaSSL_CTX_sess_misses(CYASSL_CTX*);
  423. CYASSL_API long CyaSSL_CTX_sess_timeouts(CYASSL_CTX*);
  424. CYASSL_API long CyaSSL_CTX_sess_number(CYASSL_CTX*);
  425. CYASSL_API long CyaSSL_CTX_sess_get_cache_size(CYASSL_CTX*);
  426. #define CYASSL_DEFAULT_CIPHER_LIST "" /* default all */
  427. #define CYASSL_RSA_F4 0x10001L
  428. enum {
  429. OCSP_NOCERTS = 1,
  430. OCSP_NOINTERN = 2,
  431. OCSP_NOSIGS = 4,
  432. OCSP_NOCHAIN = 8,
  433. OCSP_NOVERIFY = 16,
  434. OCSP_NOEXPLICIT = 32,
  435. OCSP_NOCASIGN = 64,
  436. OCSP_NODELEGATED = 128,
  437. OCSP_NOCHECKS = 256,
  438. OCSP_TRUSTOTHER = 512,
  439. OCSP_RESPID_KEY = 1024,
  440. OCSP_NOTIME = 2048,
  441. OCSP_CERTID = 2,
  442. OCSP_REQUEST = 4,
  443. OCSP_RESPONSE = 8,
  444. OCSP_BASICRESP = 16,
  445. CYASSL_OCSP_URL_OVERRIDE = 1,
  446. CYASSL_OCSP_NO_NONCE = 2,
  447. CYASSL_CRL_CHECKALL = 1,
  448. ASN1_GENERALIZEDTIME = 4,
  449. SSL_OP_MICROSOFT_SESS_ID_BUG = 1,
  450. SSL_OP_NETSCAPE_CHALLENGE_BUG = 2,
  451. SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG = 3,
  452. SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG = 4,
  453. SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER = 5,
  454. SSL_OP_MSIE_SSLV2_RSA_PADDING = 6,
  455. SSL_OP_SSLEAY_080_CLIENT_DH_BUG = 7,
  456. SSL_OP_TLS_D5_BUG = 8,
  457. SSL_OP_TLS_BLOCK_PADDING_BUG = 9,
  458. SSL_OP_TLS_ROLLBACK_BUG = 10,
  459. SSL_OP_ALL = 11,
  460. SSL_OP_EPHEMERAL_RSA = 12,
  461. SSL_OP_NO_SSLv3 = 13,
  462. SSL_OP_NO_TLSv1 = 14,
  463. SSL_OP_PKCS1_CHECK_1 = 15,
  464. SSL_OP_PKCS1_CHECK_2 = 16,
  465. SSL_OP_NETSCAPE_CA_DN_BUG = 17,
  466. SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG = 18,
  467. SSL_OP_SINGLE_DH_USE = 19,
  468. SSL_OP_NO_TICKET = 20,
  469. SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS = 21,
  470. SSL_OP_NO_QUERY_MTU = 22,
  471. SSL_OP_COOKIE_EXCHANGE = 23,
  472. SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION = 24,
  473. SSL_OP_SINGLE_ECDH_USE = 25,
  474. SSL_OP_CIPHER_SERVER_PREFERENCE = 26,
  475. SSL_MAX_SSL_SESSION_ID_LENGTH = 32,
  476. EVP_R_BAD_DECRYPT = 2,
  477. SSL_CB_LOOP = 4,
  478. SSL_ST_CONNECT = 5,
  479. SSL_ST_ACCEPT = 6,
  480. SSL_CB_ALERT = 7,
  481. SSL_CB_READ = 8,
  482. SSL_CB_HANDSHAKE_DONE = 9,
  483. SSL_MODE_ENABLE_PARTIAL_WRITE = 2,
  484. BIO_FLAGS_BASE64_NO_NL = 1,
  485. BIO_CLOSE = 1,
  486. BIO_NOCLOSE = 0,
  487. NID_undef = 0,
  488. X509_FILETYPE_PEM = 8,
  489. X509_LU_X509 = 9,
  490. X509_LU_CRL = 12,
  491. X509_V_ERR_CRL_SIGNATURE_FAILURE = 13,
  492. X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 14,
  493. X509_V_ERR_CRL_HAS_EXPIRED = 15,
  494. X509_V_ERR_CERT_REVOKED = 16,
  495. X509_V_ERR_CERT_CHAIN_TOO_LONG = 17,
  496. X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT = 18,
  497. X509_V_ERR_CERT_NOT_YET_VALID = 19,
  498. X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = 20,
  499. X509_V_ERR_CERT_HAS_EXPIRED = 21,
  500. X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = 22,
  501. X509_V_OK = 0,
  502. CRYPTO_LOCK = 1,
  503. CRYPTO_NUM_LOCKS = 10
  504. };
  505. /* extras end */
  506. #if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM)
  507. /* CyaSSL extension, provide last error from SSL_get_error
  508. since not using thread storage error queue */
  509. CYASSL_API void CyaSSL_ERR_print_errors_fp(FILE*, int err);
  510. #endif
  511. enum { /* ssl Constants */
  512. SSL_ERROR_NONE = 0, /* for most functions */
  513. SSL_FAILURE = 0, /* for some functions */
  514. SSL_SUCCESS = 1,
  515. SSL_BAD_CERTTYPE = -8,
  516. SSL_BAD_STAT = -7,
  517. SSL_BAD_PATH = -6,
  518. SSL_BAD_FILETYPE = -5,
  519. SSL_BAD_FILE = -4,
  520. SSL_NOT_IMPLEMENTED = -3,
  521. SSL_UNKNOWN = -2,
  522. SSL_FATAL_ERROR = -1,
  523. SSL_FILETYPE_ASN1 = 2,
  524. SSL_FILETYPE_PEM = 1,
  525. SSL_FILETYPE_DEFAULT = 2, /* ASN1 */
  526. SSL_FILETYPE_RAW = 3, /* NTRU raw key blob */
  527. SSL_VERIFY_NONE = 0,
  528. SSL_VERIFY_PEER = 1,
  529. SSL_VERIFY_FAIL_IF_NO_PEER_CERT = 2,
  530. SSL_VERIFY_CLIENT_ONCE = 4,
  531. SSL_SESS_CACHE_OFF = 30,
  532. SSL_SESS_CACHE_CLIENT = 31,
  533. SSL_SESS_CACHE_SERVER = 32,
  534. SSL_SESS_CACHE_BOTH = 33,
  535. SSL_SESS_CACHE_NO_AUTO_CLEAR = 34,
  536. SSL_SESS_CACHE_NO_INTERNAL_LOOKUP = 35,
  537. SSL_ERROR_WANT_READ = 2,
  538. SSL_ERROR_WANT_WRITE = 3,
  539. SSL_ERROR_WANT_CONNECT = 7,
  540. SSL_ERROR_WANT_ACCEPT = 8,
  541. SSL_ERROR_SYSCALL = 5,
  542. SSL_ERROR_WANT_X509_LOOKUP = 83,
  543. SSL_ERROR_ZERO_RETURN = 6,
  544. SSL_ERROR_SSL = 85,
  545. SSL_SENT_SHUTDOWN = 1,
  546. SSL_RECEIVED_SHUTDOWN = 2,
  547. SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER = 4,
  548. SSL_OP_NO_SSLv2 = 8,
  549. SSL_R_SSL_HANDSHAKE_FAILURE = 101,
  550. SSL_R_TLSV1_ALERT_UNKNOWN_CA = 102,
  551. SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN = 103,
  552. SSL_R_SSLV3_ALERT_BAD_CERTIFICATE = 104,
  553. PEM_BUFSIZE = 1024
  554. };
  555. #ifndef NO_PSK
  556. typedef unsigned int (*psk_client_callback)(CYASSL*, const char*, char*,
  557. unsigned int, unsigned char*, unsigned int);
  558. CYASSL_API void CyaSSL_CTX_set_psk_client_callback(CYASSL_CTX*,
  559. psk_client_callback);
  560. CYASSL_API void CyaSSL_set_psk_client_callback(CYASSL*,psk_client_callback);
  561. CYASSL_API const char* CyaSSL_get_psk_identity_hint(const CYASSL*);
  562. CYASSL_API const char* CyaSSL_get_psk_identity(const CYASSL*);
  563. CYASSL_API int CyaSSL_CTX_use_psk_identity_hint(CYASSL_CTX*, const char*);
  564. CYASSL_API int CyaSSL_use_psk_identity_hint(CYASSL*, const char*);
  565. typedef unsigned int (*psk_server_callback)(CYASSL*, const char*,
  566. unsigned char*, unsigned int);
  567. CYASSL_API void CyaSSL_CTX_set_psk_server_callback(CYASSL_CTX*,
  568. psk_server_callback);
  569. CYASSL_API void CyaSSL_set_psk_server_callback(CYASSL*,psk_server_callback);
  570. #define PSK_TYPES_DEFINED
  571. #endif /* NO_PSK */
  572. /* extra begins */
  573. enum { /* ERR Constants */
  574. ERR_TXT_STRING = 1
  575. };
  576. CYASSL_API unsigned long CyaSSL_ERR_get_error_line_data(const char**, int*,
  577. const char**, int *);
  578. CYASSL_API unsigned long CyaSSL_ERR_get_error(void);
  579. CYASSL_API void CyaSSL_ERR_clear_error(void);
  580. CYASSL_API int CyaSSL_RAND_status(void);
  581. CYASSL_API int CyaSSL_RAND_bytes(unsigned char* buf, int num);
  582. CYASSL_API CYASSL_METHOD *CyaSSLv23_server_method(void);
  583. CYASSL_API long CyaSSL_CTX_set_options(CYASSL_CTX*, long);
  584. #ifndef NO_CERTS
  585. CYASSL_API int CyaSSL_CTX_check_private_key(CYASSL_CTX*);
  586. #endif /* !NO_CERTS */
  587. CYASSL_API void CyaSSL_ERR_free_strings(void);
  588. CYASSL_API void CyaSSL_ERR_remove_state(unsigned long);
  589. CYASSL_API void CyaSSL_EVP_cleanup(void);
  590. CYASSL_API void CyaSSL_cleanup_all_ex_data(void);
  591. CYASSL_API long CyaSSL_CTX_set_mode(CYASSL_CTX* ctx, long mode);
  592. CYASSL_API long CyaSSL_CTX_get_mode(CYASSL_CTX* ctx);
  593. CYASSL_API void CyaSSL_CTX_set_default_read_ahead(CYASSL_CTX* ctx, int m);
  594. CYASSL_API long CyaSSL_CTX_sess_set_cache_size(CYASSL_CTX*, long);
  595. CYASSL_API int CyaSSL_CTX_set_default_verify_paths(CYASSL_CTX*);
  596. CYASSL_API int CyaSSL_CTX_set_session_id_context(CYASSL_CTX*,
  597. const unsigned char*, unsigned int);
  598. CYASSL_API CYASSL_X509* CyaSSL_get_peer_certificate(CYASSL* ssl);
  599. CYASSL_API int CyaSSL_want_read(CYASSL*);
  600. CYASSL_API int CyaSSL_want_write(CYASSL*);
  601. CYASSL_API int CyaSSL_BIO_printf(CYASSL_BIO*, const char*, ...);
  602. CYASSL_API int CyaSSL_ASN1_UTCTIME_print(CYASSL_BIO*,
  603. const CYASSL_ASN1_UTCTIME*);
  604. CYASSL_API int CyaSSL_sk_num(CYASSL_X509_REVOKED*);
  605. CYASSL_API void* CyaSSL_sk_value(CYASSL_X509_REVOKED*, int);
  606. /* stunnel 4.28 needs */
  607. CYASSL_API void* CyaSSL_CTX_get_ex_data(const CYASSL_CTX*, int);
  608. CYASSL_API int CyaSSL_CTX_set_ex_data(CYASSL_CTX*, int, void*);
  609. CYASSL_API void CyaSSL_CTX_sess_set_get_cb(CYASSL_CTX*,
  610. CYASSL_SESSION*(*f)(CYASSL*, unsigned char*, int, int*));
  611. CYASSL_API void CyaSSL_CTX_sess_set_new_cb(CYASSL_CTX*,
  612. int (*f)(CYASSL*, CYASSL_SESSION*));
  613. CYASSL_API void CyaSSL_CTX_sess_set_remove_cb(CYASSL_CTX*,
  614. void (*f)(CYASSL_CTX*, CYASSL_SESSION*));
  615. CYASSL_API int CyaSSL_i2d_SSL_SESSION(CYASSL_SESSION*,unsigned char**);
  616. CYASSL_API CYASSL_SESSION* CyaSSL_d2i_SSL_SESSION(CYASSL_SESSION**,
  617. const unsigned char**, long);
  618. CYASSL_API long CyaSSL_SESSION_get_timeout(const CYASSL_SESSION*);
  619. CYASSL_API long CyaSSL_SESSION_get_time(const CYASSL_SESSION*);
  620. CYASSL_API int CyaSSL_CTX_get_ex_new_index(long, void*, void*, void*, void*);
  621. /* extra ends */
  622. /* CyaSSL extensions */
  623. /* call before SSL_connect, if verifying will add name check to
  624. date check and signature check */
  625. CYASSL_API int CyaSSL_check_domain_name(CYASSL* ssl, const char* dn);
  626. /* need to call once to load library (session cache) */
  627. CYASSL_API int CyaSSL_Init(void);
  628. /* call when done to cleanup/free session cache mutex / resources */
  629. CYASSL_API int CyaSSL_Cleanup(void);
  630. /* turn logging on, only if compiled in */
  631. CYASSL_API int CyaSSL_Debugging_ON(void);
  632. /* turn logging off */
  633. CYASSL_API void CyaSSL_Debugging_OFF(void);
  634. /* do accept or connect depedning on side */
  635. CYASSL_API int CyaSSL_negotiate(CYASSL* ssl);
  636. /* turn on CyaSSL data compression */
  637. CYASSL_API int CyaSSL_set_compression(CYASSL* ssl);
  638. CYASSL_API int CyaSSL_set_timeout(CYASSL*, unsigned int);
  639. CYASSL_API int CyaSSL_CTX_set_timeout(CYASSL_CTX*, unsigned int);
  640. /* get CyaSSL peer X509_CHAIN */
  641. CYASSL_API CYASSL_X509_CHAIN* CyaSSL_get_peer_chain(CYASSL* ssl);
  642. /* peer chain count */
  643. CYASSL_API int CyaSSL_get_chain_count(CYASSL_X509_CHAIN* chain);
  644. /* index cert length */
  645. CYASSL_API int CyaSSL_get_chain_length(CYASSL_X509_CHAIN*, int idx);
  646. /* index cert */
  647. CYASSL_API unsigned char* CyaSSL_get_chain_cert(CYASSL_X509_CHAIN*, int idx);
  648. /* index cert in X509 */
  649. CYASSL_API CYASSL_X509* CyaSSL_get_chain_X509(CYASSL_X509_CHAIN*, int idx);
  650. /* free X509 */
  651. CYASSL_API void CyaSSL_FreeX509(CYASSL_X509*);
  652. /* get index cert in PEM */
  653. CYASSL_API int CyaSSL_get_chain_cert_pem(CYASSL_X509_CHAIN*, int idx,
  654. unsigned char* buffer, int inLen, int* outLen);
  655. CYASSL_API const unsigned char* CyaSSL_get_sessionID(const CYASSL_SESSION* s);
  656. CYASSL_API int CyaSSL_X509_get_serial_number(CYASSL_X509*,unsigned char*,int*);
  657. CYASSL_API char* CyaSSL_X509_get_subjectCN(CYASSL_X509*);
  658. CYASSL_API const unsigned char* CyaSSL_X509_get_der(CYASSL_X509*, int*);
  659. CYASSL_API const unsigned char* CyaSSL_X509_notBefore(CYASSL_X509*);
  660. CYASSL_API const unsigned char* CyaSSL_X509_notAfter(CYASSL_X509*);
  661. CYASSL_API int CyaSSL_X509_version(CYASSL_X509*);
  662. CYASSL_API
  663. CYASSL_API int CyaSSL_cmp_peer_cert_to_file(CYASSL*, const char*);
  664. CYASSL_API char* CyaSSL_X509_get_next_altname(CYASSL_X509*);
  665. CYASSL_API CYASSL_X509*
  666. CyaSSL_X509_d2i(CYASSL_X509** x509, const unsigned char* in, int len);
  667. #ifndef NO_FILESYSTEM
  668. #ifndef NO_STDIO_FILESYSTEM
  669. CYASSL_API CYASSL_X509*
  670. CyaSSL_X509_d2i_fp(CYASSL_X509** x509, FILE* file);
  671. #endif
  672. CYASSL_API CYASSL_X509*
  673. CyaSSL_X509_load_certificate_file(const char* fname, int format);
  674. #endif
  675. #ifdef CYASSL_SEP
  676. CYASSL_API unsigned char*
  677. CyaSSL_X509_get_device_type(CYASSL_X509*, unsigned char*, int*);
  678. CYASSL_API unsigned char*
  679. CyaSSL_X509_get_hw_type(CYASSL_X509*, unsigned char*, int*);
  680. CYASSL_API unsigned char*
  681. CyaSSL_X509_get_hw_serial_number(CYASSL_X509*, unsigned char*, int*);
  682. #endif
  683. /* connect enough to get peer cert */
  684. CYASSL_API int CyaSSL_connect_cert(CYASSL* ssl);
  685. /* XXX This should be #ifndef NO_DH */
  686. #ifndef NO_CERTS
  687. /* server Diffie-Hellman parameters */
  688. CYASSL_API int CyaSSL_SetTmpDH(CYASSL*, const unsigned char* p, int pSz,
  689. const unsigned char* g, int gSz);
  690. CYASSL_API int CyaSSL_SetTmpDH_buffer(CYASSL*, const unsigned char* b, long sz,
  691. int format);
  692. CYASSL_API int CyaSSL_SetTmpEC_DHE_Sz(CYASSL*, unsigned short);
  693. #ifndef NO_FILESYSTEM
  694. CYASSL_API int CyaSSL_SetTmpDH_file(CYASSL*, const char* f, int format);
  695. #endif
  696. /* server ctx Diffie-Hellman parameters */
  697. CYASSL_API int CyaSSL_CTX_SetTmpDH(CYASSL_CTX*, const unsigned char* p,
  698. int pSz, const unsigned char* g, int gSz);
  699. CYASSL_API int CyaSSL_CTX_SetTmpDH_buffer(CYASSL_CTX*, const unsigned char* b,
  700. long sz, int format);
  701. CYASSL_API int CyaSSL_CTX_SetTmpEC_DHE_Sz(CYASSL_CTX*, unsigned short);
  702. #ifndef NO_FILESYSTEM
  703. CYASSL_API int CyaSSL_CTX_SetTmpDH_file(CYASSL_CTX*, const char* f,
  704. int format);
  705. #endif
  706. #endif
  707. /* keyblock size in bytes or -1 */
  708. /* need to call CyaSSL_KeepArrays before handshake to save keys */
  709. CYASSL_API int CyaSSL_get_keyblock_size(CYASSL*);
  710. CYASSL_API int CyaSSL_get_keys(CYASSL*,unsigned char** ms, unsigned int* msLen,
  711. unsigned char** sr, unsigned int* srLen,
  712. unsigned char** cr, unsigned int* crLen);
  713. /* Computes EAP-TLS and EAP-TTLS keying material from the master_secret. */
  714. CYASSL_API int CyaSSL_make_eap_keys(CYASSL*, void* key, unsigned int len,
  715. const char* label);
  716. #ifndef _WIN32
  717. #ifndef NO_WRITEV
  718. #ifdef __PPU
  719. #include <sys/types.h>
  720. #include <sys/socket.h>
  721. #elif !defined(CYASSL_MDK_ARM) && !defined(CYASSL_IAR_ARM)
  722. #include <sys/uio.h>
  723. #endif
  724. /* allow writev style writing */
  725. CYASSL_API int CyaSSL_writev(CYASSL* ssl, const struct iovec* iov,
  726. int iovcnt);
  727. #endif
  728. #endif
  729. #ifndef NO_CERTS
  730. /* SSL_CTX versions */
  731. CYASSL_API int CyaSSL_CTX_UnloadCAs(CYASSL_CTX*);
  732. CYASSL_API int CyaSSL_CTX_load_verify_buffer(CYASSL_CTX*,
  733. const unsigned char*, long, int);
  734. CYASSL_API int CyaSSL_CTX_use_certificate_buffer(CYASSL_CTX*,
  735. const unsigned char*, long, int);
  736. CYASSL_API int CyaSSL_CTX_use_PrivateKey_buffer(CYASSL_CTX*,
  737. const unsigned char*, long, int);
  738. CYASSL_API int CyaSSL_CTX_use_certificate_chain_buffer(CYASSL_CTX*,
  739. const unsigned char*, long);
  740. /* SSL versions */
  741. CYASSL_API int CyaSSL_use_certificate_buffer(CYASSL*, const unsigned char*,
  742. long, int);
  743. CYASSL_API int CyaSSL_use_PrivateKey_buffer(CYASSL*, const unsigned char*,
  744. long, int);
  745. CYASSL_API int CyaSSL_use_certificate_chain_buffer(CYASSL*,
  746. const unsigned char*, long);
  747. CYASSL_API int CyaSSL_UnloadCertsKeys(CYASSL*);
  748. #endif
  749. CYASSL_API int CyaSSL_CTX_set_group_messages(CYASSL_CTX*);
  750. CYASSL_API int CyaSSL_set_group_messages(CYASSL*);
  751. /* I/O callbacks */
  752. typedef int (*CallbackIORecv)(CYASSL *ssl, char *buf, int sz, void *ctx);
  753. typedef int (*CallbackIOSend)(CYASSL *ssl, char *buf, int sz, void *ctx);
  754. #ifdef HAVE_FUZZER
  755. enum fuzzer_type {
  756. FUZZ_HMAC = 0,
  757. FUZZ_ENCRYPT = 1,
  758. FUZZ_SIGNATURE = 2,
  759. FUZZ_HASH = 3,
  760. FUZZ_HEAD = 4
  761. };
  762. typedef int (*CallbackFuzzer)(CYASSL* ssl, const unsigned char* buf, int sz,
  763. int type, void* fuzzCtx);
  764. CYASSL_API void CyaSSL_SetFuzzerCb(CYASSL* ssl, CallbackFuzzer cbf, void* fCtx);
  765. #endif
  766. CYASSL_API void CyaSSL_SetIORecv(CYASSL_CTX*, CallbackIORecv);
  767. CYASSL_API void CyaSSL_SetIOSend(CYASSL_CTX*, CallbackIOSend);
  768. CYASSL_API void CyaSSL_SetIOReadCtx( CYASSL* ssl, void *ctx);
  769. CYASSL_API void CyaSSL_SetIOWriteCtx(CYASSL* ssl, void *ctx);
  770. CYASSL_API void* CyaSSL_GetIOReadCtx( CYASSL* ssl);
  771. CYASSL_API void* CyaSSL_GetIOWriteCtx(CYASSL* ssl);
  772. CYASSL_API void CyaSSL_SetIOReadFlags( CYASSL* ssl, int flags);
  773. CYASSL_API void CyaSSL_SetIOWriteFlags(CYASSL* ssl, int flags);
  774. #ifndef CYASSL_USER_IO
  775. /* default IO callbacks */
  776. CYASSL_API int EmbedReceive(CYASSL* ssl, char* buf, int sz, void* ctx);
  777. CYASSL_API int EmbedSend(CYASSL* ssl, char* buf, int sz, void* ctx);
  778. #ifdef HAVE_OCSP
  779. CYASSL_API int EmbedOcspLookup(void*, const char*, int, unsigned char*,
  780. int, unsigned char**);
  781. CYASSL_API void EmbedOcspRespFree(void*, unsigned char*);
  782. #endif
  783. #ifdef CYASSL_DTLS
  784. CYASSL_API int EmbedReceiveFrom(CYASSL* ssl, char* buf, int sz, void*);
  785. CYASSL_API int EmbedSendTo(CYASSL* ssl, char* buf, int sz, void* ctx);
  786. CYASSL_API int EmbedGenerateCookie(CYASSL* ssl, unsigned char* buf,
  787. int sz, void*);
  788. #endif /* CYASSL_DTLS */
  789. #endif /* CYASSL_USER_IO */
  790. #ifdef HAVE_NETX
  791. CYASSL_API void CyaSSL_SetIO_NetX(CYASSL* ssl, NX_TCP_SOCKET* nxsocket,
  792. ULONG waitoption);
  793. #endif
  794. typedef int (*CallbackGenCookie)(CYASSL* ssl, unsigned char* buf, int sz,
  795. void* ctx);
  796. CYASSL_API void CyaSSL_CTX_SetGenCookie(CYASSL_CTX*, CallbackGenCookie);
  797. CYASSL_API void CyaSSL_SetCookieCtx(CYASSL* ssl, void *ctx);
  798. CYASSL_API void* CyaSSL_GetCookieCtx(CYASSL* ssl);
  799. /* I/O Callback default errors */
  800. enum IOerrors {
  801. CYASSL_CBIO_ERR_GENERAL = -1, /* general unexpected err */
  802. CYASSL_CBIO_ERR_WANT_READ = -2, /* need to call read again */
  803. CYASSL_CBIO_ERR_WANT_WRITE = -2, /* need to call write again */
  804. CYASSL_CBIO_ERR_CONN_RST = -3, /* connection reset */
  805. CYASSL_CBIO_ERR_ISR = -4, /* interrupt */
  806. CYASSL_CBIO_ERR_CONN_CLOSE = -5, /* connection closed or epipe */
  807. CYASSL_CBIO_ERR_TIMEOUT = -6 /* socket timeout */
  808. };
  809. /* CA cache callbacks */
  810. enum {
  811. CYASSL_SSLV3 = 0,
  812. CYASSL_TLSV1 = 1,
  813. CYASSL_TLSV1_1 = 2,
  814. CYASSL_TLSV1_2 = 3,
  815. CYASSL_USER_CA = 1, /* user added as trusted */
  816. CYASSL_CHAIN_CA = 2 /* added to cache from trusted chain */
  817. };
  818. CYASSL_API int CyaSSL_GetObjectSize(void); /* object size based on build */
  819. CYASSL_API int CyaSSL_SetVersion(CYASSL* ssl, int version);
  820. CYASSL_API int CyaSSL_KeyPemToDer(const unsigned char*, int sz, unsigned char*,
  821. int, const char*);
  822. CYASSL_API int CyaSSL_CertPemToDer(const unsigned char*, int sz, unsigned char*,
  823. int, int);
  824. typedef void (*CallbackCACache)(unsigned char* der, int sz, int type);
  825. typedef void (*CbMissingCRL)(const char* url);
  826. typedef int (*CbOCSPIO)(void*, const char*, int,
  827. unsigned char*, int, unsigned char**);
  828. typedef void (*CbOCSPRespFree)(void*,unsigned char*);
  829. /* User Atomic Record Layer CallBacks */
  830. typedef int (*CallbackMacEncrypt)(CYASSL* ssl, unsigned char* macOut,
  831. const unsigned char* macIn, unsigned int macInSz, int macContent,
  832. int macVerify, unsigned char* encOut, const unsigned char* encIn,
  833. unsigned int encSz, void* ctx);
  834. CYASSL_API void CyaSSL_CTX_SetMacEncryptCb(CYASSL_CTX*, CallbackMacEncrypt);
  835. CYASSL_API void CyaSSL_SetMacEncryptCtx(CYASSL* ssl, void *ctx);
  836. CYASSL_API void* CyaSSL_GetMacEncryptCtx(CYASSL* ssl);
  837. typedef int (*CallbackDecryptVerify)(CYASSL* ssl,
  838. unsigned char* decOut, const unsigned char* decIn,
  839. unsigned int decSz, int content, int verify, unsigned int* padSz,
  840. void* ctx);
  841. CYASSL_API void CyaSSL_CTX_SetDecryptVerifyCb(CYASSL_CTX*,
  842. CallbackDecryptVerify);
  843. CYASSL_API void CyaSSL_SetDecryptVerifyCtx(CYASSL* ssl, void *ctx);
  844. CYASSL_API void* CyaSSL_GetDecryptVerifyCtx(CYASSL* ssl);
  845. CYASSL_API const unsigned char* CyaSSL_GetMacSecret(CYASSL*, int);
  846. CYASSL_API const unsigned char* CyaSSL_GetClientWriteKey(CYASSL*);
  847. CYASSL_API const unsigned char* CyaSSL_GetClientWriteIV(CYASSL*);
  848. CYASSL_API const unsigned char* CyaSSL_GetServerWriteKey(CYASSL*);
  849. CYASSL_API const unsigned char* CyaSSL_GetServerWriteIV(CYASSL*);
  850. CYASSL_API int CyaSSL_GetKeySize(CYASSL*);
  851. CYASSL_API int CyaSSL_GetIVSize(CYASSL*);
  852. CYASSL_API int CyaSSL_GetSide(CYASSL*);
  853. CYASSL_API int CyaSSL_IsTLSv1_1(CYASSL*);
  854. CYASSL_API int CyaSSL_GetBulkCipher(CYASSL*);
  855. CYASSL_API int CyaSSL_GetCipherBlockSize(CYASSL*);
  856. CYASSL_API int CyaSSL_GetAeadMacSize(CYASSL*);
  857. CYASSL_API int CyaSSL_GetHmacSize(CYASSL*);
  858. CYASSL_API int CyaSSL_GetHmacType(CYASSL*);
  859. CYASSL_API int CyaSSL_GetCipherType(CYASSL*);
  860. CYASSL_API int CyaSSL_SetTlsHmacInner(CYASSL*, unsigned char*,
  861. unsigned int, int, int);
  862. /* Atomic User Needs */
  863. enum {
  864. CYASSL_SERVER_END = 0,
  865. CYASSL_CLIENT_END = 1,
  866. CYASSL_BLOCK_TYPE = 2,
  867. CYASSL_STREAM_TYPE = 3,
  868. CYASSL_AEAD_TYPE = 4,
  869. CYASSL_TLS_HMAC_INNER_SZ = 13 /* SEQ_SZ + ENUM + VERSION_SZ + LEN_SZ */
  870. };
  871. /* for GetBulkCipher and internal use */
  872. enum BulkCipherAlgorithm {
  873. cyassl_cipher_null,
  874. cyassl_rc4,
  875. cyassl_rc2,
  876. cyassl_des,
  877. cyassl_triple_des, /* leading 3 (3des) not valid identifier */
  878. cyassl_des40,
  879. cyassl_idea,
  880. cyassl_aes,
  881. cyassl_aes_gcm,
  882. cyassl_aes_ccm,
  883. cyassl_chacha,
  884. cyassl_camellia,
  885. cyassl_hc128, /* CyaSSL extensions */
  886. cyassl_rabbit
  887. };
  888. /* Public Key Callback support */
  889. typedef int (*CallbackEccSign)(CYASSL* ssl,
  890. const unsigned char* in, unsigned int inSz,
  891. unsigned char* out, unsigned int* outSz,
  892. const unsigned char* keyDer, unsigned int keySz,
  893. void* ctx);
  894. CYASSL_API void CyaSSL_CTX_SetEccSignCb(CYASSL_CTX*, CallbackEccSign);
  895. CYASSL_API void CyaSSL_SetEccSignCtx(CYASSL* ssl, void *ctx);
  896. CYASSL_API void* CyaSSL_GetEccSignCtx(CYASSL* ssl);
  897. typedef int (*CallbackEccVerify)(CYASSL* ssl,
  898. const unsigned char* sig, unsigned int sigSz,
  899. const unsigned char* hash, unsigned int hashSz,
  900. const unsigned char* keyDer, unsigned int keySz,
  901. int* result, void* ctx);
  902. CYASSL_API void CyaSSL_CTX_SetEccVerifyCb(CYASSL_CTX*, CallbackEccVerify);
  903. CYASSL_API void CyaSSL_SetEccVerifyCtx(CYASSL* ssl, void *ctx);
  904. CYASSL_API void* CyaSSL_GetEccVerifyCtx(CYASSL* ssl);
  905. typedef int (*CallbackRsaSign)(CYASSL* ssl,
  906. const unsigned char* in, unsigned int inSz,
  907. unsigned char* out, unsigned int* outSz,
  908. const unsigned char* keyDer, unsigned int keySz,
  909. void* ctx);
  910. CYASSL_API void CyaSSL_CTX_SetRsaSignCb(CYASSL_CTX*, CallbackRsaSign);
  911. CYASSL_API void CyaSSL_SetRsaSignCtx(CYASSL* ssl, void *ctx);
  912. CYASSL_API void* CyaSSL_GetRsaSignCtx(CYASSL* ssl);
  913. typedef int (*CallbackRsaVerify)(CYASSL* ssl,
  914. unsigned char* sig, unsigned int sigSz,
  915. unsigned char** out,
  916. const unsigned char* keyDer, unsigned int keySz,
  917. void* ctx);
  918. CYASSL_API void CyaSSL_CTX_SetRsaVerifyCb(CYASSL_CTX*, CallbackRsaVerify);
  919. CYASSL_API void CyaSSL_SetRsaVerifyCtx(CYASSL* ssl, void *ctx);
  920. CYASSL_API void* CyaSSL_GetRsaVerifyCtx(CYASSL* ssl);
  921. /* RSA Public Encrypt cb */
  922. typedef int (*CallbackRsaEnc)(CYASSL* ssl,
  923. const unsigned char* in, unsigned int inSz,
  924. unsigned char* out, unsigned int* outSz,
  925. const unsigned char* keyDer, unsigned int keySz,
  926. void* ctx);
  927. CYASSL_API void CyaSSL_CTX_SetRsaEncCb(CYASSL_CTX*, CallbackRsaEnc);
  928. CYASSL_API void CyaSSL_SetRsaEncCtx(CYASSL* ssl, void *ctx);
  929. CYASSL_API void* CyaSSL_GetRsaEncCtx(CYASSL* ssl);
  930. /* RSA Private Decrypt cb */
  931. typedef int (*CallbackRsaDec)(CYASSL* ssl,
  932. unsigned char* in, unsigned int inSz,
  933. unsigned char** out,
  934. const unsigned char* keyDer, unsigned int keySz,
  935. void* ctx);
  936. CYASSL_API void CyaSSL_CTX_SetRsaDecCb(CYASSL_CTX*, CallbackRsaDec);
  937. CYASSL_API void CyaSSL_SetRsaDecCtx(CYASSL* ssl, void *ctx);
  938. CYASSL_API void* CyaSSL_GetRsaDecCtx(CYASSL* ssl);
  939. #ifndef NO_CERTS
  940. CYASSL_API void CyaSSL_CTX_SetCACb(CYASSL_CTX*, CallbackCACache);
  941. CYASSL_API CYASSL_CERT_MANAGER* CyaSSL_CertManagerNew(void);
  942. CYASSL_API void CyaSSL_CertManagerFree(CYASSL_CERT_MANAGER*);
  943. CYASSL_API int CyaSSL_CertManagerLoadCA(CYASSL_CERT_MANAGER*, const char* f,
  944. const char* d);
  945. CYASSL_API int CyaSSL_CertManagerUnloadCAs(CYASSL_CERT_MANAGER* cm);
  946. CYASSL_API int CyaSSL_CertManagerVerify(CYASSL_CERT_MANAGER*, const char* f,
  947. int format);
  948. CYASSL_API int CyaSSL_CertManagerVerifyBuffer(CYASSL_CERT_MANAGER* cm,
  949. const unsigned char* buff, long sz, int format);
  950. CYASSL_API int CyaSSL_CertManagerCheckCRL(CYASSL_CERT_MANAGER*,
  951. unsigned char*, int sz);
  952. CYASSL_API int CyaSSL_CertManagerEnableCRL(CYASSL_CERT_MANAGER*,
  953. int options);
  954. CYASSL_API int CyaSSL_CertManagerDisableCRL(CYASSL_CERT_MANAGER*);
  955. CYASSL_API int CyaSSL_CertManagerLoadCRL(CYASSL_CERT_MANAGER*, const char*,
  956. int, int);
  957. CYASSL_API int CyaSSL_CertManagerSetCRL_Cb(CYASSL_CERT_MANAGER*,
  958. CbMissingCRL);
  959. CYASSL_API int CyaSSL_CertManagerCheckOCSP(CYASSL_CERT_MANAGER*,
  960. unsigned char*, int sz);
  961. CYASSL_API int CyaSSL_CertManagerEnableOCSP(CYASSL_CERT_MANAGER*,
  962. int options);
  963. CYASSL_API int CyaSSL_CertManagerDisableOCSP(CYASSL_CERT_MANAGER*);
  964. CYASSL_API int CyaSSL_CertManagerSetOCSPOverrideURL(CYASSL_CERT_MANAGER*,
  965. const char*);
  966. CYASSL_API int CyaSSL_CertManagerSetOCSP_Cb(CYASSL_CERT_MANAGER*,
  967. CbOCSPIO, CbOCSPRespFree, void*);
  968. CYASSL_API int CyaSSL_EnableCRL(CYASSL* ssl, int options);
  969. CYASSL_API int CyaSSL_DisableCRL(CYASSL* ssl);
  970. CYASSL_API int CyaSSL_LoadCRL(CYASSL*, const char*, int, int);
  971. CYASSL_API int CyaSSL_SetCRL_Cb(CYASSL*, CbMissingCRL);
  972. CYASSL_API int CyaSSL_EnableOCSP(CYASSL*, int options);
  973. CYASSL_API int CyaSSL_DisableOCSP(CYASSL*);
  974. CYASSL_API int CyaSSL_SetOCSP_OverrideURL(CYASSL*, const char*);
  975. CYASSL_API int CyaSSL_SetOCSP_Cb(CYASSL*, CbOCSPIO, CbOCSPRespFree, void*);
  976. CYASSL_API int CyaSSL_CTX_EnableCRL(CYASSL_CTX* ctx, int options);
  977. CYASSL_API int CyaSSL_CTX_DisableCRL(CYASSL_CTX* ctx);
  978. CYASSL_API int CyaSSL_CTX_LoadCRL(CYASSL_CTX*, const char*, int, int);
  979. CYASSL_API int CyaSSL_CTX_SetCRL_Cb(CYASSL_CTX*, CbMissingCRL);
  980. CYASSL_API int CyaSSL_CTX_EnableOCSP(CYASSL_CTX*, int options);
  981. CYASSL_API int CyaSSL_CTX_DisableOCSP(CYASSL_CTX*);
  982. CYASSL_API int CyaSSL_CTX_SetOCSP_OverrideURL(CYASSL_CTX*, const char*);
  983. CYASSL_API int CyaSSL_CTX_SetOCSP_Cb(CYASSL_CTX*,
  984. CbOCSPIO, CbOCSPRespFree, void*);
  985. #endif /* !NO_CERTS */
  986. /* end of handshake frees temporary arrays, if user needs for get_keys or
  987. psk hints, call KeepArrays before handshake and then FreeArrays when done
  988. if don't want to wait for object free */
  989. CYASSL_API void CyaSSL_KeepArrays(CYASSL*);
  990. CYASSL_API void CyaSSL_FreeArrays(CYASSL*);
  991. /* cavium additions */
  992. CYASSL_API int CyaSSL_UseCavium(CYASSL*, int devId);
  993. CYASSL_API int CyaSSL_CTX_UseCavium(CYASSL_CTX*, int devId);
  994. /* TLS Extensions */
  995. /* Server Name Indication */
  996. #ifdef HAVE_SNI
  997. /* SNI types */
  998. enum {
  999. CYASSL_SNI_HOST_NAME = 0
  1000. };
  1001. CYASSL_API int CyaSSL_UseSNI(CYASSL* ssl, unsigned char type, const void* data,
  1002. unsigned short size);
  1003. CYASSL_API int CyaSSL_CTX_UseSNI(CYASSL_CTX* ctx, unsigned char type,
  1004. const void* data, unsigned short size);
  1005. #ifndef NO_CYASSL_SERVER
  1006. /* SNI options */
  1007. enum {
  1008. CYASSL_SNI_CONTINUE_ON_MISMATCH = 0x01, /* do not abort on mismatch flag */
  1009. CYASSL_SNI_ANSWER_ON_MISMATCH = 0x02 /* fake match on mismatch flag */
  1010. };
  1011. CYASSL_API void CyaSSL_SNI_SetOptions(CYASSL* ssl, unsigned char type,
  1012. unsigned char options);
  1013. CYASSL_API void CyaSSL_CTX_SNI_SetOptions(CYASSL_CTX* ctx, unsigned char type,
  1014. unsigned char options);
  1015. /* SNI status */
  1016. enum {
  1017. CYASSL_SNI_NO_MATCH = 0,
  1018. CYASSL_SNI_FAKE_MATCH = 1, /* if CYASSL_SNI_ANSWER_ON_MISMATCH is enabled */
  1019. CYASSL_SNI_REAL_MATCH = 2
  1020. };
  1021. CYASSL_API unsigned char CyaSSL_SNI_Status(CYASSL* ssl, unsigned char type);
  1022. CYASSL_API unsigned short CyaSSL_SNI_GetRequest(CYASSL *ssl, unsigned char type,
  1023. void** data);
  1024. CYASSL_API int CyaSSL_SNI_GetFromBuffer(
  1025. const unsigned char* clientHello, unsigned int helloSz,
  1026. unsigned char type, unsigned char* sni, unsigned int* inOutSz);
  1027. #endif /* NO_CYASSL_SERVER */
  1028. #endif /* HAVE_SNI */
  1029. /* Maximum Fragment Length */
  1030. #ifdef HAVE_MAX_FRAGMENT
  1031. /* Fragment lengths */
  1032. enum {
  1033. CYASSL_MFL_2_9 = 1, /* 512 bytes */
  1034. CYASSL_MFL_2_10 = 2, /* 1024 bytes */
  1035. CYASSL_MFL_2_11 = 3, /* 2048 bytes */
  1036. CYASSL_MFL_2_12 = 4, /* 4096 bytes */
  1037. CYASSL_MFL_2_13 = 5 /* 8192 bytes *//* CyaSSL ONLY!!! */
  1038. };
  1039. #ifndef NO_CYASSL_CLIENT
  1040. CYASSL_API int CyaSSL_UseMaxFragment(CYASSL* ssl, unsigned char mfl);
  1041. CYASSL_API int CyaSSL_CTX_UseMaxFragment(CYASSL_CTX* ctx, unsigned char mfl);
  1042. #endif /* NO_CYASSL_CLIENT */
  1043. #endif /* HAVE_MAX_FRAGMENT */
  1044. /* Truncated HMAC */
  1045. #ifdef HAVE_TRUNCATED_HMAC
  1046. #ifndef NO_CYASSL_CLIENT
  1047. CYASSL_API int CyaSSL_UseTruncatedHMAC(CYASSL* ssl);
  1048. CYASSL_API int CyaSSL_CTX_UseTruncatedHMAC(CYASSL_CTX* ctx);
  1049. #endif /* NO_CYASSL_CLIENT */
  1050. #endif /* HAVE_TRUNCATED_HMAC */
  1051. /* Elliptic Curves */
  1052. #ifdef HAVE_SUPPORTED_CURVES
  1053. enum {
  1054. CYASSL_ECC_SECP160R1 = 0x10,
  1055. CYASSL_ECC_SECP192R1 = 0x13,
  1056. CYASSL_ECC_SECP224R1 = 0x15,
  1057. CYASSL_ECC_SECP256R1 = 0x17,
  1058. CYASSL_ECC_SECP384R1 = 0x18,
  1059. CYASSL_ECC_SECP521R1 = 0x19
  1060. };
  1061. #ifndef NO_CYASSL_CLIENT
  1062. CYASSL_API int CyaSSL_UseSupportedCurve(CYASSL* ssl, unsigned short name);
  1063. CYASSL_API int CyaSSL_CTX_UseSupportedCurve(CYASSL_CTX* ctx,
  1064. unsigned short name);
  1065. #endif /* NO_CYASSL_CLIENT */
  1066. #endif /* HAVE_SUPPORTED_CURVES */
  1067. #define CYASSL_CRL_MONITOR 0x01 /* monitor this dir flag */
  1068. #define CYASSL_CRL_START_MON 0x02 /* start monitoring flag */
  1069. #ifdef CYASSL_CALLBACKS
  1070. /* used internally by CyaSSL while OpenSSL types aren't */
  1071. #include <cyassl/callbacks.h>
  1072. typedef int (*HandShakeCallBack)(HandShakeInfo*);
  1073. typedef int (*TimeoutCallBack)(TimeoutInfo*);
  1074. /* CyaSSL connect extension allowing HandShakeCallBack and/or TimeoutCallBack
  1075. for diagnostics */
  1076. CYASSL_API int CyaSSL_connect_ex(CYASSL*, HandShakeCallBack, TimeoutCallBack,
  1077. Timeval);
  1078. CYASSL_API int CyaSSL_accept_ex(CYASSL*, HandShakeCallBack, TimeoutCallBack,
  1079. Timeval);
  1080. #endif /* CYASSL_CALLBACKS */
  1081. #ifdef CYASSL_HAVE_WOLFSCEP
  1082. CYASSL_API void CyaSSL_wolfSCEP(void);
  1083. #endif /* CYASSL_HAVE_WOLFSCEP */
  1084. #ifdef CYASSL_HAVE_CERT_SERVICE
  1085. CYASSL_API void CyaSSL_cert_service(void);
  1086. #endif
  1087. #ifdef __cplusplus
  1088. } /* extern "C" */
  1089. #endif
  1090. #endif /* CYASSL_SSL_H */