19bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifndef HEADER_CURL_POLARSSL_H 29bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define HEADER_CURL_POLARSSL_H 39bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/*************************************************************************** 49bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * _ _ ____ _ 59bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * Project ___| | | | _ \| | 69bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * / __| | | | |_) | | 79bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * | (__| |_| | _ <| |___ 89bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * \___|\___/|_| \_\_____| 99bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * 108f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo * Copyright (C) 2012 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. 119bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com> 129bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * 139bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * This software is licensed as described in the file COPYING, which 149bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * you should have received as part of this distribution. The terms 158f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo * are also available at https://curl.haxx.se/docs/copyright.html. 169bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * 179bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * You may opt to use, copy, modify, merge, publish, distribute and/or sell 189bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * copies of the Software, and permit persons to whom the Software is 199bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * furnished to do so, under the terms of the COPYING file. 209bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * 219bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * KIND, either express or implied. 239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * 249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels ***************************************************************************/ 25e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "curl_setup.h" 269bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 279bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef USE_POLARSSL 289bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 298f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo#include <polarssl/sha256.h> 308f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo 31e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* Called on first use PolarSSL, setup threading if supported */ 328f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymoint Curl_polarssl_init(void); 338f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymovoid Curl_polarssl_cleanup(void); 34e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 35e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 369bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas EckelsCURLcode Curl_polarssl_connect(struct connectdata *conn, int sockindex); 379bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 38e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETCURLcode Curl_polarssl_connect_nonblocking(struct connectdata *conn, 39e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET int sockindex, 40e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET bool *done); 419bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 429bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* close a SSL connection */ 439bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsvoid Curl_polarssl_close(struct connectdata *conn, int sockindex); 449bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 459bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsvoid Curl_polarssl_session_free(void *ptr); 469bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelssize_t Curl_polarssl_version(char *buffer, size_t size); 479bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint Curl_polarssl_shutdown(struct connectdata *conn, int sockindex); 489bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 49e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* Set the API backend definition to PolarSSL */ 50e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define CURL_SSL_BACKEND CURLSSLBACKEND_POLARSSL 51e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 52e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* this backend supports the CAPATH option */ 53e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define have_curlssl_ca_path 1 54e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 558f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo/* this backends supports CURLOPT_PINNEDPUBLICKEY */ 568f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo#define have_curlssl_pinnedpubkey 1 578f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo 589bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* API setup for PolarSSL */ 598f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo#define curlssl_init() Curl_polarssl_init() 608f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo#define curlssl_cleanup() Curl_polarssl_cleanup() 619bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define curlssl_connect Curl_polarssl_connect 62e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define curlssl_connect_nonblocking Curl_polarssl_connect_nonblocking 639bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define curlssl_session_free(x) Curl_polarssl_session_free(x) 64e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define curlssl_close_all(x) ((void)x) 659bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define curlssl_close Curl_polarssl_close 669bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define curlssl_shutdown(x,y) 0 67e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define curlssl_set_engine(x,y) ((void)x, (void)y, CURLE_NOT_BUILT_IN) 68e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define curlssl_set_engine_default(x) ((void)x, CURLE_NOT_BUILT_IN) 69e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define curlssl_engines_list(x) ((void)x, (struct curl_slist *)NULL) 709bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define curlssl_version Curl_polarssl_version 71e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define curlssl_check_cxn(x) ((void)x, -1) 72e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define curlssl_data_pending(x,y) ((void)x, (void)y, 0) 738f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo#define curlssl_sha256sum(a,b,c,d) sha256(a,b,c,0) 74e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 75e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* This might cause libcurl to use a weeker random! 76e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET TODO: implement proper use of Polarssl's CTR-DRBG or HMAC-DRBG and use that 77e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET*/ 78e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define curlssl_random(x,y,z) ((void)x, (void)y, (void)z, CURLE_NOT_BUILT_IN) 799bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 809bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif /* USE_POLARSSL */ 819bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif /* HEADER_CURL_POLARSSL_H */ 82