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