wolfSSL SSL/TLS library, support up to TLS1.3

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

Committer:
wolfSSL
Date:
Thu Apr 28 00:57:21 2016 +0000
Revision:
4:1b0d80432c79
wolfSSL 3.9.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 4:1b0d80432c79 1 /* ssl.h
wolfSSL 4:1b0d80432c79 2 *
wolfSSL 4:1b0d80432c79 3 * Copyright (C) 2006-2016 wolfSSL Inc.
wolfSSL 4:1b0d80432c79 4 *
wolfSSL 4:1b0d80432c79 5 * This file is part of wolfSSL.
wolfSSL 4:1b0d80432c79 6 *
wolfSSL 4:1b0d80432c79 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 4:1b0d80432c79 8 * it under the terms of the GNU General Public License as published by
wolfSSL 4:1b0d80432c79 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 4:1b0d80432c79 10 * (at your option) any later version.
wolfSSL 4:1b0d80432c79 11 *
wolfSSL 4:1b0d80432c79 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 4:1b0d80432c79 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 4:1b0d80432c79 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 4:1b0d80432c79 15 * GNU General Public License for more details.
wolfSSL 4:1b0d80432c79 16 *
wolfSSL 4:1b0d80432c79 17 * You should have received a copy of the GNU General Public License
wolfSSL 4:1b0d80432c79 18 * along with this program; if not, write to the Free Software
wolfSSL 4:1b0d80432c79 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
wolfSSL 4:1b0d80432c79 20 */
wolfSSL 4:1b0d80432c79 21
wolfSSL 4:1b0d80432c79 22
wolfSSL 4:1b0d80432c79 23
wolfSSL 4:1b0d80432c79 24 /* wolfSSL API */
wolfSSL 4:1b0d80432c79 25
wolfSSL 4:1b0d80432c79 26 #ifndef WOLFSSL_SSL_H
wolfSSL 4:1b0d80432c79 27 #define WOLFSSL_SSL_H
wolfSSL 4:1b0d80432c79 28
wolfSSL 4:1b0d80432c79 29
wolfSSL 4:1b0d80432c79 30 /* for users not using preprocessor flags*/
wolfSSL 4:1b0d80432c79 31 #include <wolfssl/wolfcrypt/settings.h>
wolfSSL 4:1b0d80432c79 32 #include <wolfssl/version.h>
wolfSSL 4:1b0d80432c79 33
wolfSSL 4:1b0d80432c79 34 #ifndef NO_FILESYSTEM
wolfSSL 4:1b0d80432c79 35 #if defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
wolfSSL 4:1b0d80432c79 36 #if MQX_USE_IO_OLD
wolfSSL 4:1b0d80432c79 37 #include <fio.h>
wolfSSL 4:1b0d80432c79 38 #else
wolfSSL 4:1b0d80432c79 39 #include <nio.h>
wolfSSL 4:1b0d80432c79 40 #endif
wolfSSL 4:1b0d80432c79 41 #else
wolfSSL 4:1b0d80432c79 42 #include <stdio.h> /* ERR_printf */
wolfSSL 4:1b0d80432c79 43 #endif
wolfSSL 4:1b0d80432c79 44 #endif
wolfSSL 4:1b0d80432c79 45
wolfSSL 4:1b0d80432c79 46 #ifdef WOLFSSL_PREFIX
wolfSSL 4:1b0d80432c79 47 #include "prefix_ssl.h"
wolfSSL 4:1b0d80432c79 48 #endif
wolfSSL 4:1b0d80432c79 49
wolfSSL 4:1b0d80432c79 50 #ifdef LIBWOLFSSL_VERSION_STRING
wolfSSL 4:1b0d80432c79 51 #define WOLFSSL_VERSION LIBWOLFSSL_VERSION_STRING
wolfSSL 4:1b0d80432c79 52 #endif
wolfSSL 4:1b0d80432c79 53
wolfSSL 4:1b0d80432c79 54 #ifdef _WIN32
wolfSSL 4:1b0d80432c79 55 /* wincrypt.h clashes */
wolfSSL 4:1b0d80432c79 56 #undef OCSP_REQUEST
wolfSSL 4:1b0d80432c79 57 #undef OCSP_RESPONSE
wolfSSL 4:1b0d80432c79 58 #endif
wolfSSL 4:1b0d80432c79 59
wolfSSL 4:1b0d80432c79 60
wolfSSL 4:1b0d80432c79 61
wolfSSL 4:1b0d80432c79 62 #ifdef __cplusplus
wolfSSL 4:1b0d80432c79 63 extern "C" {
wolfSSL 4:1b0d80432c79 64 #endif
wolfSSL 4:1b0d80432c79 65
wolfSSL 4:1b0d80432c79 66 typedef struct WOLFSSL WOLFSSL;
wolfSSL 4:1b0d80432c79 67 typedef struct WOLFSSL_SESSION WOLFSSL_SESSION;
wolfSSL 4:1b0d80432c79 68 typedef struct WOLFSSL_METHOD WOLFSSL_METHOD;
wolfSSL 4:1b0d80432c79 69 typedef struct WOLFSSL_CTX WOLFSSL_CTX;
wolfSSL 4:1b0d80432c79 70
wolfSSL 4:1b0d80432c79 71 typedef struct WOLFSSL_X509 WOLFSSL_X509;
wolfSSL 4:1b0d80432c79 72 typedef struct WOLFSSL_X509_NAME WOLFSSL_X509_NAME;
wolfSSL 4:1b0d80432c79 73 typedef struct WOLFSSL_X509_CHAIN WOLFSSL_X509_CHAIN;
wolfSSL 4:1b0d80432c79 74
wolfSSL 4:1b0d80432c79 75 typedef struct WOLFSSL_CERT_MANAGER WOLFSSL_CERT_MANAGER;
wolfSSL 4:1b0d80432c79 76 typedef struct WOLFSSL_SOCKADDR WOLFSSL_SOCKADDR;
wolfSSL 4:1b0d80432c79 77
wolfSSL 4:1b0d80432c79 78 /* redeclare guard */
wolfSSL 4:1b0d80432c79 79 #define WOLFSSL_TYPES_DEFINED
wolfSSL 4:1b0d80432c79 80
wolfSSL 4:1b0d80432c79 81
wolfSSL 4:1b0d80432c79 82 #ifndef WOLFSSL_RSA_TYPE_DEFINED /* guard on redeclaration */
wolfSSL 4:1b0d80432c79 83 typedef struct WOLFSSL_RSA WOLFSSL_RSA;
wolfSSL 4:1b0d80432c79 84 #define WOLFSSL_RSA_TYPE_DEFINED
wolfSSL 4:1b0d80432c79 85 #endif
wolfSSL 4:1b0d80432c79 86
wolfSSL 4:1b0d80432c79 87 typedef struct WOLFSSL_DSA WOLFSSL_DSA;
wolfSSL 4:1b0d80432c79 88 typedef struct WOLFSSL_EC_KEY WOLFSSL_EC_KEY;
wolfSSL 4:1b0d80432c79 89 typedef struct WOLFSSL_EC_POINT WOLFSSL_EC_POINT;
wolfSSL 4:1b0d80432c79 90 typedef struct WOLFSSL_EC_GROUP WOLFSSL_EC_GROUP;
wolfSSL 4:1b0d80432c79 91 typedef struct WOLFSSL_ECDSA_SIG WOLFSSL_ECDSA_SIG;
wolfSSL 4:1b0d80432c79 92 typedef struct WOLFSSL_CIPHER WOLFSSL_CIPHER;
wolfSSL 4:1b0d80432c79 93 typedef struct WOLFSSL_X509_LOOKUP WOLFSSL_X509_LOOKUP;
wolfSSL 4:1b0d80432c79 94 typedef struct WOLFSSL_X509_LOOKUP_METHOD WOLFSSL_X509_LOOKUP_METHOD;
wolfSSL 4:1b0d80432c79 95 typedef struct WOLFSSL_X509_CRL WOLFSSL_X509_CRL;
wolfSSL 4:1b0d80432c79 96 typedef struct WOLFSSL_BIO WOLFSSL_BIO;
wolfSSL 4:1b0d80432c79 97 typedef struct WOLFSSL_BIO_METHOD WOLFSSL_BIO_METHOD;
wolfSSL 4:1b0d80432c79 98 typedef struct WOLFSSL_X509_EXTENSION WOLFSSL_X509_EXTENSION;
wolfSSL 4:1b0d80432c79 99 typedef struct WOLFSSL_ASN1_TIME WOLFSSL_ASN1_TIME;
wolfSSL 4:1b0d80432c79 100 typedef struct WOLFSSL_ASN1_INTEGER WOLFSSL_ASN1_INTEGER;
wolfSSL 4:1b0d80432c79 101 typedef struct WOLFSSL_ASN1_OBJECT WOLFSSL_ASN1_OBJECT;
wolfSSL 4:1b0d80432c79 102
wolfSSL 4:1b0d80432c79 103 typedef struct WOLFSSL_ASN1_STRING WOLFSSL_ASN1_STRING;
wolfSSL 4:1b0d80432c79 104 typedef struct WOLFSSL_dynlock_value WOLFSSL_dynlock_value;
wolfSSL 4:1b0d80432c79 105 typedef struct WOLFSSL_DH WOLFSSL_DH;
wolfSSL 4:1b0d80432c79 106 typedef struct WOLFSSL_ASN1_BIT_STRING WOLFSSL_ASN1_BIT_STRING;
wolfSSL 4:1b0d80432c79 107
wolfSSL 4:1b0d80432c79 108 #define WOLFSSL_ASN1_UTCTIME WOLFSSL_ASN1_TIME
wolfSSL 4:1b0d80432c79 109
wolfSSL 4:1b0d80432c79 110 typedef struct WOLFSSL_EVP_PKEY {
wolfSSL 4:1b0d80432c79 111 int type; /* openssh dereference */
wolfSSL 4:1b0d80432c79 112 int save_type; /* openssh dereference */
wolfSSL 4:1b0d80432c79 113 int pkey_sz;
wolfSSL 4:1b0d80432c79 114 union {
wolfSSL 4:1b0d80432c79 115 char* ptr;
wolfSSL 4:1b0d80432c79 116 } pkey;
wolfSSL 4:1b0d80432c79 117 #ifdef HAVE_ECC
wolfSSL 4:1b0d80432c79 118 int pkey_curve;
wolfSSL 4:1b0d80432c79 119 #endif
wolfSSL 4:1b0d80432c79 120 } WOLFSSL_EVP_PKEY;
wolfSSL 4:1b0d80432c79 121
wolfSSL 4:1b0d80432c79 122 typedef struct WOLFSSL_MD4_CTX {
wolfSSL 4:1b0d80432c79 123 int buffer[32]; /* big enough to hold, check size in Init */
wolfSSL 4:1b0d80432c79 124 } WOLFSSL_MD4_CTX;
wolfSSL 4:1b0d80432c79 125
wolfSSL 4:1b0d80432c79 126
wolfSSL 4:1b0d80432c79 127 typedef struct WOLFSSL_COMP_METHOD {
wolfSSL 4:1b0d80432c79 128 int type; /* stunnel dereference */
wolfSSL 4:1b0d80432c79 129 } WOLFSSL_COMP_METHOD;
wolfSSL 4:1b0d80432c79 130
wolfSSL 4:1b0d80432c79 131
wolfSSL 4:1b0d80432c79 132 typedef struct WOLFSSL_X509_STORE {
wolfSSL 4:1b0d80432c79 133 int cache; /* stunnel dereference */
wolfSSL 4:1b0d80432c79 134 WOLFSSL_CERT_MANAGER* cm;
wolfSSL 4:1b0d80432c79 135 } WOLFSSL_X509_STORE;
wolfSSL 4:1b0d80432c79 136
wolfSSL 4:1b0d80432c79 137 typedef struct WOLFSSL_ALERT {
wolfSSL 4:1b0d80432c79 138 int code;
wolfSSL 4:1b0d80432c79 139 int level;
wolfSSL 4:1b0d80432c79 140 } WOLFSSL_ALERT;
wolfSSL 4:1b0d80432c79 141
wolfSSL 4:1b0d80432c79 142 typedef struct WOLFSSL_ALERT_HISTORY {
wolfSSL 4:1b0d80432c79 143 WOLFSSL_ALERT last_rx;
wolfSSL 4:1b0d80432c79 144 WOLFSSL_ALERT last_tx;
wolfSSL 4:1b0d80432c79 145 } WOLFSSL_ALERT_HISTORY;
wolfSSL 4:1b0d80432c79 146
wolfSSL 4:1b0d80432c79 147 typedef struct WOLFSSL_X509_REVOKED {
wolfSSL 4:1b0d80432c79 148 WOLFSSL_ASN1_INTEGER* serialNumber; /* stunnel dereference */
wolfSSL 4:1b0d80432c79 149 } WOLFSSL_X509_REVOKED;
wolfSSL 4:1b0d80432c79 150
wolfSSL 4:1b0d80432c79 151
wolfSSL 4:1b0d80432c79 152 typedef struct WOLFSSL_X509_OBJECT {
wolfSSL 4:1b0d80432c79 153 union {
wolfSSL 4:1b0d80432c79 154 char* ptr;
wolfSSL 4:1b0d80432c79 155 WOLFSSL_X509 *x509;
wolfSSL 4:1b0d80432c79 156 WOLFSSL_X509_CRL* crl; /* stunnel dereference */
wolfSSL 4:1b0d80432c79 157 } data;
wolfSSL 4:1b0d80432c79 158 } WOLFSSL_X509_OBJECT;
wolfSSL 4:1b0d80432c79 159
wolfSSL 4:1b0d80432c79 160 typedef struct WOLFSSL_X509_STORE_CTX {
wolfSSL 4:1b0d80432c79 161 WOLFSSL_X509_STORE* store; /* Store full of a CA cert chain */
wolfSSL 4:1b0d80432c79 162 WOLFSSL_X509* current_cert; /* stunnel dereference */
wolfSSL 4:1b0d80432c79 163 char* domain; /* subject CN domain name */
wolfSSL 4:1b0d80432c79 164 void* ex_data; /* external data, for fortress build */
wolfSSL 4:1b0d80432c79 165 void* userCtx; /* user ctx */
wolfSSL 4:1b0d80432c79 166 int error; /* current error */
wolfSSL 4:1b0d80432c79 167 int error_depth; /* cert depth for this error */
wolfSSL 4:1b0d80432c79 168 int discardSessionCerts; /* so verify callback can flag for discard */
wolfSSL 4:1b0d80432c79 169 } WOLFSSL_X509_STORE_CTX;
wolfSSL 4:1b0d80432c79 170
wolfSSL 4:1b0d80432c79 171
wolfSSL 4:1b0d80432c79 172 /* Valid Alert types from page 16/17 */
wolfSSL 4:1b0d80432c79 173 enum AlertDescription {
wolfSSL 4:1b0d80432c79 174 close_notify = 0,
wolfSSL 4:1b0d80432c79 175 unexpected_message = 10,
wolfSSL 4:1b0d80432c79 176 bad_record_mac = 20,
wolfSSL 4:1b0d80432c79 177 record_overflow = 22,
wolfSSL 4:1b0d80432c79 178 decompression_failure = 30,
wolfSSL 4:1b0d80432c79 179 handshake_failure = 40,
wolfSSL 4:1b0d80432c79 180 no_certificate = 41,
wolfSSL 4:1b0d80432c79 181 bad_certificate = 42,
wolfSSL 4:1b0d80432c79 182 unsupported_certificate = 43,
wolfSSL 4:1b0d80432c79 183 certificate_revoked = 44,
wolfSSL 4:1b0d80432c79 184 certificate_expired = 45,
wolfSSL 4:1b0d80432c79 185 certificate_unknown = 46,
wolfSSL 4:1b0d80432c79 186 illegal_parameter = 47,
wolfSSL 4:1b0d80432c79 187 decrypt_error = 51,
wolfSSL 4:1b0d80432c79 188 #ifdef WOLFSSL_MYSQL_COMPATIBLE
wolfSSL 4:1b0d80432c79 189 /* catch name conflict for enum protocol with MYSQL build */
wolfSSL 4:1b0d80432c79 190 wc_protocol_version = 70,
wolfSSL 4:1b0d80432c79 191 #else
wolfSSL 4:1b0d80432c79 192 protocol_version = 70,
wolfSSL 4:1b0d80432c79 193 #endif
wolfSSL 4:1b0d80432c79 194 no_renegotiation = 100,
wolfSSL 4:1b0d80432c79 195 unrecognized_name = 112, /**< RFC 6066, section 3 */
wolfSSL 4:1b0d80432c79 196 bad_certificate_status_response = 113, /**< RFC 6066, section 8 */
wolfSSL 4:1b0d80432c79 197 no_application_protocol = 120
wolfSSL 4:1b0d80432c79 198 };
wolfSSL 4:1b0d80432c79 199
wolfSSL 4:1b0d80432c79 200
wolfSSL 4:1b0d80432c79 201 enum AlertLevel {
wolfSSL 4:1b0d80432c79 202 alert_warning = 1,
wolfSSL 4:1b0d80432c79 203 alert_fatal = 2
wolfSSL 4:1b0d80432c79 204 };
wolfSSL 4:1b0d80432c79 205
wolfSSL 4:1b0d80432c79 206
wolfSSL 4:1b0d80432c79 207 WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method(void);
wolfSSL 4:1b0d80432c79 208 WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method(void);
wolfSSL 4:1b0d80432c79 209 WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method(void);
wolfSSL 4:1b0d80432c79 210 WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_client_method(void);
wolfSSL 4:1b0d80432c79 211 WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_server_method(void);
wolfSSL 4:1b0d80432c79 212 WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method(void);
wolfSSL 4:1b0d80432c79 213 WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method(void);
wolfSSL 4:1b0d80432c79 214 WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method(void);
wolfSSL 4:1b0d80432c79 215
wolfSSL 4:1b0d80432c79 216 #ifdef WOLFSSL_DTLS
wolfSSL 4:1b0d80432c79 217 WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_client_method(void);
wolfSSL 4:1b0d80432c79 218 WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_server_method(void);
wolfSSL 4:1b0d80432c79 219 WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method(void);
wolfSSL 4:1b0d80432c79 220 WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method(void);
wolfSSL 4:1b0d80432c79 221 #endif
wolfSSL 4:1b0d80432c79 222
wolfSSL 4:1b0d80432c79 223 #ifdef HAVE_POLY1305
wolfSSL 4:1b0d80432c79 224 WOLFSSL_API int wolfSSL_use_old_poly(WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 225 #endif
wolfSSL 4:1b0d80432c79 226
wolfSSL 4:1b0d80432c79 227 #if !defined(NO_FILESYSTEM) && !defined(NO_CERTS)
wolfSSL 4:1b0d80432c79 228
wolfSSL 4:1b0d80432c79 229 WOLFSSL_API int wolfSSL_CTX_use_certificate_file(WOLFSSL_CTX*, const char*, int);
wolfSSL 4:1b0d80432c79 230 WOLFSSL_API int wolfSSL_CTX_use_PrivateKey_file(WOLFSSL_CTX*, const char*, int);
wolfSSL 4:1b0d80432c79 231 WOLFSSL_API int wolfSSL_CTX_load_verify_locations(WOLFSSL_CTX*, const char*,
wolfSSL 4:1b0d80432c79 232 const char*);
wolfSSL 4:1b0d80432c79 233 #ifdef WOLFSSL_TRUST_PEER_CERT
wolfSSL 4:1b0d80432c79 234 WOLFSSL_API int wolfSSL_CTX_trust_peer_cert(WOLFSSL_CTX*, const char*, int);
wolfSSL 4:1b0d80432c79 235 #endif
wolfSSL 4:1b0d80432c79 236 WOLFSSL_API int wolfSSL_CTX_use_certificate_chain_file(WOLFSSL_CTX *,
wolfSSL 4:1b0d80432c79 237 const char *file);
wolfSSL 4:1b0d80432c79 238 WOLFSSL_API int wolfSSL_CTX_use_RSAPrivateKey_file(WOLFSSL_CTX*, const char*, int);
wolfSSL 4:1b0d80432c79 239
wolfSSL 4:1b0d80432c79 240 WOLFSSL_API long wolfSSL_get_verify_depth(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 241 WOLFSSL_API long wolfSSL_CTX_get_verify_depth(WOLFSSL_CTX* ctx);
wolfSSL 4:1b0d80432c79 242 WOLFSSL_API int wolfSSL_use_certificate_file(WOLFSSL*, const char*, int);
wolfSSL 4:1b0d80432c79 243 WOLFSSL_API int wolfSSL_use_PrivateKey_file(WOLFSSL*, const char*, int);
wolfSSL 4:1b0d80432c79 244 WOLFSSL_API int wolfSSL_use_certificate_chain_file(WOLFSSL*, const char *file);
wolfSSL 4:1b0d80432c79 245 WOLFSSL_API int wolfSSL_use_RSAPrivateKey_file(WOLFSSL*, const char*, int);
wolfSSL 4:1b0d80432c79 246
wolfSSL 4:1b0d80432c79 247 #ifdef WOLFSSL_DER_LOAD
wolfSSL 4:1b0d80432c79 248 WOLFSSL_API int wolfSSL_CTX_der_load_verify_locations(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 249 const char*, int);
wolfSSL 4:1b0d80432c79 250 #endif
wolfSSL 4:1b0d80432c79 251
wolfSSL 4:1b0d80432c79 252 #ifdef HAVE_NTRU
wolfSSL 4:1b0d80432c79 253 WOLFSSL_API int wolfSSL_CTX_use_NTRUPrivateKey_file(WOLFSSL_CTX*, const char*);
wolfSSL 4:1b0d80432c79 254 /* load NTRU private key blob */
wolfSSL 4:1b0d80432c79 255 #endif
wolfSSL 4:1b0d80432c79 256
wolfSSL 4:1b0d80432c79 257 #ifndef WOLFSSL_PEMCERT_TODER_DEFINED
wolfSSL 4:1b0d80432c79 258 WOLFSSL_API int wolfSSL_PemCertToDer(const char*, unsigned char*, int);
wolfSSL 4:1b0d80432c79 259 #define WOLFSSL_PEMCERT_TODER_DEFINED
wolfSSL 4:1b0d80432c79 260 #endif
wolfSSL 4:1b0d80432c79 261
wolfSSL 4:1b0d80432c79 262 #endif /* !NO_FILESYSTEM && !NO_CERTS */
wolfSSL 4:1b0d80432c79 263
wolfSSL 4:1b0d80432c79 264 WOLFSSL_API WOLFSSL_CTX* wolfSSL_CTX_new(WOLFSSL_METHOD*);
wolfSSL 4:1b0d80432c79 265 WOLFSSL_API WOLFSSL* wolfSSL_new(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 266 WOLFSSL_API int wolfSSL_set_fd (WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 267 WOLFSSL_API char* wolfSSL_get_cipher_list(int priority);
wolfSSL 4:1b0d80432c79 268 WOLFSSL_API int wolfSSL_get_ciphers(char*, int);
wolfSSL 4:1b0d80432c79 269 WOLFSSL_API int wolfSSL_get_fd(const WOLFSSL*);
wolfSSL 4:1b0d80432c79 270 WOLFSSL_API void wolfSSL_set_using_nonblock(WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 271 WOLFSSL_API int wolfSSL_get_using_nonblock(WOLFSSL*);
wolfSSL 4:1b0d80432c79 272 WOLFSSL_API int wolfSSL_connect(WOLFSSL*); /* please see note at top of README
wolfSSL 4:1b0d80432c79 273 if you get an error from connect */
wolfSSL 4:1b0d80432c79 274 WOLFSSL_API int wolfSSL_write(WOLFSSL*, const void*, int);
wolfSSL 4:1b0d80432c79 275 WOLFSSL_API int wolfSSL_read(WOLFSSL*, void*, int);
wolfSSL 4:1b0d80432c79 276 WOLFSSL_API int wolfSSL_peek(WOLFSSL*, void*, int);
wolfSSL 4:1b0d80432c79 277 WOLFSSL_API int wolfSSL_accept(WOLFSSL*);
wolfSSL 4:1b0d80432c79 278 WOLFSSL_API void wolfSSL_CTX_free(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 279 WOLFSSL_API void wolfSSL_free(WOLFSSL*);
wolfSSL 4:1b0d80432c79 280 WOLFSSL_API int wolfSSL_shutdown(WOLFSSL*);
wolfSSL 4:1b0d80432c79 281 WOLFSSL_API int wolfSSL_send(WOLFSSL*, const void*, int sz, int flags);
wolfSSL 4:1b0d80432c79 282 WOLFSSL_API int wolfSSL_recv(WOLFSSL*, void*, int sz, int flags);
wolfSSL 4:1b0d80432c79 283
wolfSSL 4:1b0d80432c79 284 WOLFSSL_API void wolfSSL_CTX_set_quiet_shutdown(WOLFSSL_CTX*, int);
wolfSSL 4:1b0d80432c79 285 WOLFSSL_API void wolfSSL_set_quiet_shutdown(WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 286
wolfSSL 4:1b0d80432c79 287 WOLFSSL_API int wolfSSL_get_error(WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 288 WOLFSSL_API int wolfSSL_get_alert_history(WOLFSSL*, WOLFSSL_ALERT_HISTORY *);
wolfSSL 4:1b0d80432c79 289
wolfSSL 4:1b0d80432c79 290 WOLFSSL_API int wolfSSL_set_session(WOLFSSL* ssl,WOLFSSL_SESSION* session);
wolfSSL 4:1b0d80432c79 291 WOLFSSL_API long wolfSSL_SSL_SESSION_set_timeout(WOLFSSL_SESSION* session, long t);
wolfSSL 4:1b0d80432c79 292 WOLFSSL_API WOLFSSL_SESSION* wolfSSL_get_session(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 293 WOLFSSL_API void wolfSSL_flush_sessions(WOLFSSL_CTX *ctx, long tm);
wolfSSL 4:1b0d80432c79 294 WOLFSSL_API int wolfSSL_SetServerID(WOLFSSL* ssl, const unsigned char*,
wolfSSL 4:1b0d80432c79 295 int, int);
wolfSSL 4:1b0d80432c79 296
wolfSSL 4:1b0d80432c79 297 #ifdef SESSION_INDEX
wolfSSL 4:1b0d80432c79 298 WOLFSSL_API int wolfSSL_GetSessionIndex(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 299 WOLFSSL_API int wolfSSL_GetSessionAtIndex(int index, WOLFSSL_SESSION* session);
wolfSSL 4:1b0d80432c79 300 #endif /* SESSION_INDEX */
wolfSSL 4:1b0d80432c79 301
wolfSSL 4:1b0d80432c79 302 #if defined(SESSION_INDEX) && defined(SESSION_CERTS)
wolfSSL 4:1b0d80432c79 303 WOLFSSL_API
wolfSSL 4:1b0d80432c79 304 WOLFSSL_X509_CHAIN* wolfSSL_SESSION_get_peer_chain(WOLFSSL_SESSION* session);
wolfSSL 4:1b0d80432c79 305 #endif /* SESSION_INDEX && SESSION_CERTS */
wolfSSL 4:1b0d80432c79 306
wolfSSL 4:1b0d80432c79 307 typedef int (*VerifyCallback)(int, WOLFSSL_X509_STORE_CTX*);
wolfSSL 4:1b0d80432c79 308 typedef int (*pem_password_cb)(char*, int, int, void*);
wolfSSL 4:1b0d80432c79 309
wolfSSL 4:1b0d80432c79 310 WOLFSSL_API void wolfSSL_CTX_set_verify(WOLFSSL_CTX*, int,
wolfSSL 4:1b0d80432c79 311 VerifyCallback verify_callback);
wolfSSL 4:1b0d80432c79 312 WOLFSSL_API void wolfSSL_set_verify(WOLFSSL*, int, VerifyCallback verify_callback);
wolfSSL 4:1b0d80432c79 313 WOLFSSL_API void wolfSSL_SetCertCbCtx(WOLFSSL*, void*);
wolfSSL 4:1b0d80432c79 314
wolfSSL 4:1b0d80432c79 315 WOLFSSL_API int wolfSSL_pending(WOLFSSL*);
wolfSSL 4:1b0d80432c79 316
wolfSSL 4:1b0d80432c79 317 WOLFSSL_API void wolfSSL_load_error_strings(void);
wolfSSL 4:1b0d80432c79 318 WOLFSSL_API int wolfSSL_library_init(void);
wolfSSL 4:1b0d80432c79 319 WOLFSSL_API long wolfSSL_CTX_set_session_cache_mode(WOLFSSL_CTX*, long);
wolfSSL 4:1b0d80432c79 320
wolfSSL 4:1b0d80432c79 321 #ifdef HAVE_SECRET_CALLBACK
wolfSSL 4:1b0d80432c79 322 typedef int (*SessionSecretCb)(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 323 void* secret, int* secretSz, void* ctx);
wolfSSL 4:1b0d80432c79 324 WOLFSSL_API int wolfSSL_set_session_secret_cb(WOLFSSL*, SessionSecretCb, void*);
wolfSSL 4:1b0d80432c79 325 #endif /* HAVE_SECRET_CALLBACK */
wolfSSL 4:1b0d80432c79 326
wolfSSL 4:1b0d80432c79 327 /* session cache persistence */
wolfSSL 4:1b0d80432c79 328 WOLFSSL_API int wolfSSL_save_session_cache(const char*);
wolfSSL 4:1b0d80432c79 329 WOLFSSL_API int wolfSSL_restore_session_cache(const char*);
wolfSSL 4:1b0d80432c79 330 WOLFSSL_API int wolfSSL_memsave_session_cache(void*, int);
wolfSSL 4:1b0d80432c79 331 WOLFSSL_API int wolfSSL_memrestore_session_cache(const void*, int);
wolfSSL 4:1b0d80432c79 332 WOLFSSL_API int wolfSSL_get_session_cache_memsize(void);
wolfSSL 4:1b0d80432c79 333
wolfSSL 4:1b0d80432c79 334 /* certificate cache persistence, uses ctx since certs are per ctx */
wolfSSL 4:1b0d80432c79 335 WOLFSSL_API int wolfSSL_CTX_save_cert_cache(WOLFSSL_CTX*, const char*);
wolfSSL 4:1b0d80432c79 336 WOLFSSL_API int wolfSSL_CTX_restore_cert_cache(WOLFSSL_CTX*, const char*);
wolfSSL 4:1b0d80432c79 337 WOLFSSL_API int wolfSSL_CTX_memsave_cert_cache(WOLFSSL_CTX*, void*, int, int*);
wolfSSL 4:1b0d80432c79 338 WOLFSSL_API int wolfSSL_CTX_memrestore_cert_cache(WOLFSSL_CTX*, const void*, int);
wolfSSL 4:1b0d80432c79 339 WOLFSSL_API int wolfSSL_CTX_get_cert_cache_memsize(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 340
wolfSSL 4:1b0d80432c79 341 /* only supports full name from cipher_name[] delimited by : */
wolfSSL 4:1b0d80432c79 342 WOLFSSL_API int wolfSSL_CTX_set_cipher_list(WOLFSSL_CTX*, const char*);
wolfSSL 4:1b0d80432c79 343 WOLFSSL_API int wolfSSL_set_cipher_list(WOLFSSL*, const char*);
wolfSSL 4:1b0d80432c79 344
wolfSSL 4:1b0d80432c79 345 /* Nonblocking DTLS helper functions */
wolfSSL 4:1b0d80432c79 346 WOLFSSL_API int wolfSSL_dtls_get_current_timeout(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 347 WOLFSSL_API int wolfSSL_dtls_set_timeout_init(WOLFSSL* ssl, int);
wolfSSL 4:1b0d80432c79 348 WOLFSSL_API int wolfSSL_dtls_set_timeout_max(WOLFSSL* ssl, int);
wolfSSL 4:1b0d80432c79 349 WOLFSSL_API int wolfSSL_dtls_got_timeout(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 350 WOLFSSL_API int wolfSSL_dtls(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 351
wolfSSL 4:1b0d80432c79 352 WOLFSSL_API int wolfSSL_dtls_set_peer(WOLFSSL*, void*, unsigned int);
wolfSSL 4:1b0d80432c79 353 WOLFSSL_API int wolfSSL_dtls_get_peer(WOLFSSL*, void*, unsigned int*);
wolfSSL 4:1b0d80432c79 354
wolfSSL 4:1b0d80432c79 355 WOLFSSL_API int wolfSSL_ERR_GET_REASON(unsigned long err);
wolfSSL 4:1b0d80432c79 356 WOLFSSL_API char* wolfSSL_ERR_error_string(unsigned long,char*);
wolfSSL 4:1b0d80432c79 357 WOLFSSL_API void wolfSSL_ERR_error_string_n(unsigned long e, char* buf,
wolfSSL 4:1b0d80432c79 358 unsigned long sz);
wolfSSL 4:1b0d80432c79 359 WOLFSSL_API const char* wolfSSL_ERR_reason_error_string(unsigned long);
wolfSSL 4:1b0d80432c79 360
wolfSSL 4:1b0d80432c79 361 /* extras */
wolfSSL 4:1b0d80432c79 362
wolfSSL 4:1b0d80432c79 363 #define STACK_OF(x) x
wolfSSL 4:1b0d80432c79 364
wolfSSL 4:1b0d80432c79 365 WOLFSSL_API int wolfSSL_set_ex_data(WOLFSSL*, int, void*);
wolfSSL 4:1b0d80432c79 366 WOLFSSL_API int wolfSSL_get_shutdown(const WOLFSSL*);
wolfSSL 4:1b0d80432c79 367 WOLFSSL_API int wolfSSL_set_rfd(WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 368 WOLFSSL_API int wolfSSL_set_wfd(WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 369 WOLFSSL_API void wolfSSL_set_shutdown(WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 370 WOLFSSL_API int wolfSSL_set_session_id_context(WOLFSSL*, const unsigned char*,
wolfSSL 4:1b0d80432c79 371 unsigned int);
wolfSSL 4:1b0d80432c79 372 WOLFSSL_API void wolfSSL_set_connect_state(WOLFSSL*);
wolfSSL 4:1b0d80432c79 373 WOLFSSL_API void wolfSSL_set_accept_state(WOLFSSL*);
wolfSSL 4:1b0d80432c79 374 WOLFSSL_API int wolfSSL_session_reused(WOLFSSL*);
wolfSSL 4:1b0d80432c79 375 WOLFSSL_API void wolfSSL_SESSION_free(WOLFSSL_SESSION* session);
wolfSSL 4:1b0d80432c79 376 WOLFSSL_API int wolfSSL_is_init_finished(WOLFSSL*);
wolfSSL 4:1b0d80432c79 377
wolfSSL 4:1b0d80432c79 378 WOLFSSL_API const char* wolfSSL_get_version(WOLFSSL*);
wolfSSL 4:1b0d80432c79 379 WOLFSSL_API int wolfSSL_get_current_cipher_suite(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 380 WOLFSSL_API WOLFSSL_CIPHER* wolfSSL_get_current_cipher(WOLFSSL*);
wolfSSL 4:1b0d80432c79 381 WOLFSSL_API char* wolfSSL_CIPHER_description(WOLFSSL_CIPHER*, char*, int);
wolfSSL 4:1b0d80432c79 382 WOLFSSL_API const char* wolfSSL_CIPHER_get_name(const WOLFSSL_CIPHER* cipher);
wolfSSL 4:1b0d80432c79 383 WOLFSSL_API const char* wolfSSL_get_cipher(WOLFSSL*);
wolfSSL 4:1b0d80432c79 384 WOLFSSL_API WOLFSSL_SESSION* wolfSSL_get1_session(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 385 /* what's ref count */
wolfSSL 4:1b0d80432c79 386
wolfSSL 4:1b0d80432c79 387 WOLFSSL_API void wolfSSL_X509_free(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 388 WOLFSSL_API void wolfSSL_OPENSSL_free(void*);
wolfSSL 4:1b0d80432c79 389
wolfSSL 4:1b0d80432c79 390 WOLFSSL_API int wolfSSL_OCSP_parse_url(char* url, char** host, char** port,
wolfSSL 4:1b0d80432c79 391 char** path, int* ssl);
wolfSSL 4:1b0d80432c79 392
wolfSSL 4:1b0d80432c79 393 WOLFSSL_API WOLFSSL_METHOD* wolfSSLv23_client_method(void);
wolfSSL 4:1b0d80432c79 394 WOLFSSL_API WOLFSSL_METHOD* wolfSSLv2_client_method(void);
wolfSSL 4:1b0d80432c79 395 WOLFSSL_API WOLFSSL_METHOD* wolfSSLv2_server_method(void);
wolfSSL 4:1b0d80432c79 396
wolfSSL 4:1b0d80432c79 397 WOLFSSL_API void wolfSSL_MD4_Init(WOLFSSL_MD4_CTX*);
wolfSSL 4:1b0d80432c79 398 WOLFSSL_API void wolfSSL_MD4_Update(WOLFSSL_MD4_CTX*, const void*, unsigned long);
wolfSSL 4:1b0d80432c79 399 WOLFSSL_API void wolfSSL_MD4_Final(unsigned char*, WOLFSSL_MD4_CTX*);
wolfSSL 4:1b0d80432c79 400
wolfSSL 4:1b0d80432c79 401
wolfSSL 4:1b0d80432c79 402 WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new(WOLFSSL_BIO_METHOD*);
wolfSSL 4:1b0d80432c79 403 WOLFSSL_API int wolfSSL_BIO_free(WOLFSSL_BIO*);
wolfSSL 4:1b0d80432c79 404 WOLFSSL_API int wolfSSL_BIO_free_all(WOLFSSL_BIO*);
wolfSSL 4:1b0d80432c79 405 WOLFSSL_API int wolfSSL_BIO_read(WOLFSSL_BIO*, void*, int);
wolfSSL 4:1b0d80432c79 406 WOLFSSL_API int wolfSSL_BIO_write(WOLFSSL_BIO*, const void*, int);
wolfSSL 4:1b0d80432c79 407 WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_push(WOLFSSL_BIO*, WOLFSSL_BIO* append);
wolfSSL 4:1b0d80432c79 408 WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_pop(WOLFSSL_BIO*);
wolfSSL 4:1b0d80432c79 409 WOLFSSL_API int wolfSSL_BIO_flush(WOLFSSL_BIO*);
wolfSSL 4:1b0d80432c79 410 WOLFSSL_API int wolfSSL_BIO_pending(WOLFSSL_BIO*);
wolfSSL 4:1b0d80432c79 411
wolfSSL 4:1b0d80432c79 412 WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_f_buffer(void);
wolfSSL 4:1b0d80432c79 413 WOLFSSL_API long wolfSSL_BIO_set_write_buffer_size(WOLFSSL_BIO*, long size);
wolfSSL 4:1b0d80432c79 414 WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_f_ssl(void);
wolfSSL 4:1b0d80432c79 415 WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_socket(int sfd, int flag);
wolfSSL 4:1b0d80432c79 416 WOLFSSL_API int wolfSSL_BIO_eof(WOLFSSL_BIO*);
wolfSSL 4:1b0d80432c79 417
wolfSSL 4:1b0d80432c79 418 WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_s_mem(void);
wolfSSL 4:1b0d80432c79 419 WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_f_base64(void);
wolfSSL 4:1b0d80432c79 420 WOLFSSL_API void wolfSSL_BIO_set_flags(WOLFSSL_BIO*, int);
wolfSSL 4:1b0d80432c79 421
wolfSSL 4:1b0d80432c79 422 WOLFSSL_API int wolfSSL_BIO_get_mem_data(WOLFSSL_BIO* bio,const unsigned char** p);
wolfSSL 4:1b0d80432c79 423 WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_mem_buf(void* buf, int len);
wolfSSL 4:1b0d80432c79 424
wolfSSL 4:1b0d80432c79 425
wolfSSL 4:1b0d80432c79 426 WOLFSSL_API long wolfSSL_BIO_set_ssl(WOLFSSL_BIO*, WOLFSSL*, int flag);
wolfSSL 4:1b0d80432c79 427 WOLFSSL_API void wolfSSL_set_bio(WOLFSSL*, WOLFSSL_BIO* rd, WOLFSSL_BIO* wr);
wolfSSL 4:1b0d80432c79 428
wolfSSL 4:1b0d80432c79 429 WOLFSSL_API int wolfSSL_add_all_algorithms(void);
wolfSSL 4:1b0d80432c79 430
wolfSSL 4:1b0d80432c79 431 WOLFSSL_API void wolfSSL_RAND_screen(void);
wolfSSL 4:1b0d80432c79 432 WOLFSSL_API const char* wolfSSL_RAND_file_name(char*, unsigned long);
wolfSSL 4:1b0d80432c79 433 WOLFSSL_API int wolfSSL_RAND_write_file(const char*);
wolfSSL 4:1b0d80432c79 434 WOLFSSL_API int wolfSSL_RAND_load_file(const char*, long);
wolfSSL 4:1b0d80432c79 435 WOLFSSL_API int wolfSSL_RAND_egd(const char*);
wolfSSL 4:1b0d80432c79 436 WOLFSSL_API int wolfSSL_RAND_seed(const void*, int);
wolfSSL 4:1b0d80432c79 437 WOLFSSL_API void wolfSSL_RAND_add(const void*, int, double);
wolfSSL 4:1b0d80432c79 438
wolfSSL 4:1b0d80432c79 439 WOLFSSL_API WOLFSSL_COMP_METHOD* wolfSSL_COMP_zlib(void);
wolfSSL 4:1b0d80432c79 440 WOLFSSL_API WOLFSSL_COMP_METHOD* wolfSSL_COMP_rle(void);
wolfSSL 4:1b0d80432c79 441 WOLFSSL_API int wolfSSL_COMP_add_compression_method(int, void*);
wolfSSL 4:1b0d80432c79 442
wolfSSL 4:1b0d80432c79 443 WOLFSSL_API int wolfSSL_get_ex_new_index(long, void*, void*, void*, void*);
wolfSSL 4:1b0d80432c79 444
wolfSSL 4:1b0d80432c79 445 WOLFSSL_API void wolfSSL_set_id_callback(unsigned long (*f)(void));
wolfSSL 4:1b0d80432c79 446 WOLFSSL_API void wolfSSL_set_locking_callback(void (*f)(int, int, const char*,
wolfSSL 4:1b0d80432c79 447 int));
wolfSSL 4:1b0d80432c79 448 WOLFSSL_API void wolfSSL_set_dynlock_create_callback(WOLFSSL_dynlock_value* (*f)
wolfSSL 4:1b0d80432c79 449 (const char*, int));
wolfSSL 4:1b0d80432c79 450 WOLFSSL_API void wolfSSL_set_dynlock_lock_callback(void (*f)(int,
wolfSSL 4:1b0d80432c79 451 WOLFSSL_dynlock_value*, const char*, int));
wolfSSL 4:1b0d80432c79 452 WOLFSSL_API void wolfSSL_set_dynlock_destroy_callback(void (*f)
wolfSSL 4:1b0d80432c79 453 (WOLFSSL_dynlock_value*, const char*, int));
wolfSSL 4:1b0d80432c79 454 WOLFSSL_API int wolfSSL_num_locks(void);
wolfSSL 4:1b0d80432c79 455
wolfSSL 4:1b0d80432c79 456 WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_STORE_CTX_get_current_cert(
wolfSSL 4:1b0d80432c79 457 WOLFSSL_X509_STORE_CTX*);
wolfSSL 4:1b0d80432c79 458 WOLFSSL_API int wolfSSL_X509_STORE_CTX_get_error(WOLFSSL_X509_STORE_CTX*);
wolfSSL 4:1b0d80432c79 459 WOLFSSL_API int wolfSSL_X509_STORE_CTX_get_error_depth(WOLFSSL_X509_STORE_CTX*);
wolfSSL 4:1b0d80432c79 460
wolfSSL 4:1b0d80432c79 461 WOLFSSL_API char* wolfSSL_X509_NAME_oneline(WOLFSSL_X509_NAME*, char*, int);
wolfSSL 4:1b0d80432c79 462 WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_get_issuer_name(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 463 WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_get_subject_name(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 464 WOLFSSL_API int wolfSSL_X509_ext_isSet_by_NID(WOLFSSL_X509*, int);
wolfSSL 4:1b0d80432c79 465 WOLFSSL_API int wolfSSL_X509_ext_get_critical_by_NID(WOLFSSL_X509*, int);
wolfSSL 4:1b0d80432c79 466 WOLFSSL_API int wolfSSL_X509_get_isCA(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 467 WOLFSSL_API int wolfSSL_X509_get_isSet_pathLength(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 468 WOLFSSL_API unsigned int wolfSSL_X509_get_pathLength(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 469 WOLFSSL_API unsigned int wolfSSL_X509_get_keyUsage(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 470 WOLFSSL_API unsigned char* wolfSSL_X509_get_authorityKeyID(
wolfSSL 4:1b0d80432c79 471 WOLFSSL_X509*, unsigned char*, int*);
wolfSSL 4:1b0d80432c79 472 WOLFSSL_API unsigned char* wolfSSL_X509_get_subjectKeyID(
wolfSSL 4:1b0d80432c79 473 WOLFSSL_X509*, unsigned char*, int*);
wolfSSL 4:1b0d80432c79 474 WOLFSSL_API int wolfSSL_X509_NAME_entry_count(WOLFSSL_X509_NAME*);
wolfSSL 4:1b0d80432c79 475 WOLFSSL_API int wolfSSL_X509_NAME_get_text_by_NID(
wolfSSL 4:1b0d80432c79 476 WOLFSSL_X509_NAME*, int, char*, int);
wolfSSL 4:1b0d80432c79 477 WOLFSSL_API int wolfSSL_X509_verify_cert(WOLFSSL_X509_STORE_CTX*);
wolfSSL 4:1b0d80432c79 478 WOLFSSL_API const char* wolfSSL_X509_verify_cert_error_string(long);
wolfSSL 4:1b0d80432c79 479 WOLFSSL_API int wolfSSL_X509_get_signature_type(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 480 WOLFSSL_API int wolfSSL_X509_get_signature(WOLFSSL_X509*, unsigned char*, int*);
wolfSSL 4:1b0d80432c79 481
wolfSSL 4:1b0d80432c79 482 WOLFSSL_API int wolfSSL_X509_LOOKUP_add_dir(WOLFSSL_X509_LOOKUP*,const char*,long);
wolfSSL 4:1b0d80432c79 483 WOLFSSL_API int wolfSSL_X509_LOOKUP_load_file(WOLFSSL_X509_LOOKUP*, const char*,
wolfSSL 4:1b0d80432c79 484 long);
wolfSSL 4:1b0d80432c79 485 WOLFSSL_API WOLFSSL_X509_LOOKUP_METHOD* wolfSSL_X509_LOOKUP_hash_dir(void);
wolfSSL 4:1b0d80432c79 486 WOLFSSL_API WOLFSSL_X509_LOOKUP_METHOD* wolfSSL_X509_LOOKUP_file(void);
wolfSSL 4:1b0d80432c79 487
wolfSSL 4:1b0d80432c79 488 WOLFSSL_API WOLFSSL_X509_LOOKUP* wolfSSL_X509_STORE_add_lookup(WOLFSSL_X509_STORE*,
wolfSSL 4:1b0d80432c79 489 WOLFSSL_X509_LOOKUP_METHOD*);
wolfSSL 4:1b0d80432c79 490 WOLFSSL_API WOLFSSL_X509_STORE* wolfSSL_X509_STORE_new(void);
wolfSSL 4:1b0d80432c79 491 WOLFSSL_API void wolfSSL_X509_STORE_free(WOLFSSL_X509_STORE*);
wolfSSL 4:1b0d80432c79 492 WOLFSSL_API int wolfSSL_X509_STORE_add_cert(
wolfSSL 4:1b0d80432c79 493 WOLFSSL_X509_STORE*, WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 494 WOLFSSL_API int wolfSSL_X509_STORE_set_default_paths(WOLFSSL_X509_STORE*);
wolfSSL 4:1b0d80432c79 495 WOLFSSL_API int wolfSSL_X509_STORE_get_by_subject(WOLFSSL_X509_STORE_CTX*,
wolfSSL 4:1b0d80432c79 496 int, WOLFSSL_X509_NAME*, WOLFSSL_X509_OBJECT*);
wolfSSL 4:1b0d80432c79 497 WOLFSSL_API WOLFSSL_X509_STORE_CTX* wolfSSL_X509_STORE_CTX_new(void);
wolfSSL 4:1b0d80432c79 498 WOLFSSL_API int wolfSSL_X509_STORE_CTX_init(WOLFSSL_X509_STORE_CTX*,
wolfSSL 4:1b0d80432c79 499 WOLFSSL_X509_STORE*, WOLFSSL_X509*, STACK_OF(WOLFSSL_X509)*);
wolfSSL 4:1b0d80432c79 500 WOLFSSL_API void wolfSSL_X509_STORE_CTX_free(WOLFSSL_X509_STORE_CTX*);
wolfSSL 4:1b0d80432c79 501 WOLFSSL_API void wolfSSL_X509_STORE_CTX_cleanup(WOLFSSL_X509_STORE_CTX*);
wolfSSL 4:1b0d80432c79 502
wolfSSL 4:1b0d80432c79 503 WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_lastUpdate(WOLFSSL_X509_CRL*);
wolfSSL 4:1b0d80432c79 504 WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_nextUpdate(WOLFSSL_X509_CRL*);
wolfSSL 4:1b0d80432c79 505
wolfSSL 4:1b0d80432c79 506 WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 507 WOLFSSL_API int wolfSSL_X509_CRL_verify(WOLFSSL_X509_CRL*, WOLFSSL_EVP_PKEY*);
wolfSSL 4:1b0d80432c79 508 WOLFSSL_API void wolfSSL_X509_STORE_CTX_set_error(WOLFSSL_X509_STORE_CTX*,
wolfSSL 4:1b0d80432c79 509 int);
wolfSSL 4:1b0d80432c79 510 WOLFSSL_API void wolfSSL_X509_OBJECT_free_contents(WOLFSSL_X509_OBJECT*);
wolfSSL 4:1b0d80432c79 511 WOLFSSL_API void wolfSSL_EVP_PKEY_free(WOLFSSL_EVP_PKEY*);
wolfSSL 4:1b0d80432c79 512 WOLFSSL_API int wolfSSL_X509_cmp_current_time(const WOLFSSL_ASN1_TIME*);
wolfSSL 4:1b0d80432c79 513 WOLFSSL_API int wolfSSL_sk_X509_REVOKED_num(WOLFSSL_X509_REVOKED*);
wolfSSL 4:1b0d80432c79 514
wolfSSL 4:1b0d80432c79 515 WOLFSSL_API WOLFSSL_X509_REVOKED* wolfSSL_X509_CRL_get_REVOKED(WOLFSSL_X509_CRL*);
wolfSSL 4:1b0d80432c79 516 WOLFSSL_API WOLFSSL_X509_REVOKED* wolfSSL_sk_X509_REVOKED_value(
wolfSSL 4:1b0d80432c79 517 WOLFSSL_X509_REVOKED*,int);
wolfSSL 4:1b0d80432c79 518 WOLFSSL_API WOLFSSL_ASN1_INTEGER* wolfSSL_X509_get_serialNumber(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 519
wolfSSL 4:1b0d80432c79 520 WOLFSSL_API int wolfSSL_ASN1_TIME_print(WOLFSSL_BIO*, const WOLFSSL_ASN1_TIME*);
wolfSSL 4:1b0d80432c79 521
wolfSSL 4:1b0d80432c79 522 WOLFSSL_API int wolfSSL_ASN1_INTEGER_cmp(const WOLFSSL_ASN1_INTEGER*,
wolfSSL 4:1b0d80432c79 523 const WOLFSSL_ASN1_INTEGER*);
wolfSSL 4:1b0d80432c79 524 WOLFSSL_API long wolfSSL_ASN1_INTEGER_get(const WOLFSSL_ASN1_INTEGER*);
wolfSSL 4:1b0d80432c79 525
wolfSSL 4:1b0d80432c79 526 WOLFSSL_API STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_load_client_CA_file(const char*);
wolfSSL 4:1b0d80432c79 527
wolfSSL 4:1b0d80432c79 528 WOLFSSL_API void wolfSSL_CTX_set_client_CA_list(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 529 STACK_OF(WOLFSSL_X509_NAME)*);
wolfSSL 4:1b0d80432c79 530 WOLFSSL_API void* wolfSSL_X509_STORE_CTX_get_ex_data(WOLFSSL_X509_STORE_CTX*, int);
wolfSSL 4:1b0d80432c79 531 WOLFSSL_API int wolfSSL_get_ex_data_X509_STORE_CTX_idx(void);
wolfSSL 4:1b0d80432c79 532 WOLFSSL_API void* wolfSSL_get_ex_data(const WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 533
wolfSSL 4:1b0d80432c79 534 WOLFSSL_API void wolfSSL_CTX_set_default_passwd_cb_userdata(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 535 void* userdata);
wolfSSL 4:1b0d80432c79 536 WOLFSSL_API void wolfSSL_CTX_set_default_passwd_cb(WOLFSSL_CTX*, pem_password_cb);
wolfSSL 4:1b0d80432c79 537
wolfSSL 4:1b0d80432c79 538
wolfSSL 4:1b0d80432c79 539 WOLFSSL_API void wolfSSL_CTX_set_info_callback(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 540 void (*)(const WOLFSSL* ssl, int type, int val));
wolfSSL 4:1b0d80432c79 541
wolfSSL 4:1b0d80432c79 542 WOLFSSL_API unsigned long wolfSSL_ERR_peek_error(void);
wolfSSL 4:1b0d80432c79 543 WOLFSSL_API int wolfSSL_GET_REASON(int);
wolfSSL 4:1b0d80432c79 544
wolfSSL 4:1b0d80432c79 545 WOLFSSL_API char* wolfSSL_alert_type_string_long(int);
wolfSSL 4:1b0d80432c79 546 WOLFSSL_API char* wolfSSL_alert_desc_string_long(int);
wolfSSL 4:1b0d80432c79 547 WOLFSSL_API char* wolfSSL_state_string_long(const WOLFSSL*);
wolfSSL 4:1b0d80432c79 548
wolfSSL 4:1b0d80432c79 549 WOLFSSL_API WOLFSSL_RSA* wolfSSL_RSA_generate_key(int, unsigned long,
wolfSSL 4:1b0d80432c79 550 void(*)(int, int, void*), void*);
wolfSSL 4:1b0d80432c79 551 WOLFSSL_API void wolfSSL_CTX_set_tmp_rsa_callback(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 552 WOLFSSL_RSA*(*)(WOLFSSL*, int, int));
wolfSSL 4:1b0d80432c79 553
wolfSSL 4:1b0d80432c79 554 WOLFSSL_API int wolfSSL_PEM_def_callback(char*, int num, int w, void* key);
wolfSSL 4:1b0d80432c79 555
wolfSSL 4:1b0d80432c79 556 WOLFSSL_API long wolfSSL_CTX_sess_accept(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 557 WOLFSSL_API long wolfSSL_CTX_sess_connect(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 558 WOLFSSL_API long wolfSSL_CTX_sess_accept_good(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 559 WOLFSSL_API long wolfSSL_CTX_sess_connect_good(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 560 WOLFSSL_API long wolfSSL_CTX_sess_accept_renegotiate(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 561 WOLFSSL_API long wolfSSL_CTX_sess_connect_renegotiate(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 562 WOLFSSL_API long wolfSSL_CTX_sess_hits(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 563 WOLFSSL_API long wolfSSL_CTX_sess_cb_hits(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 564 WOLFSSL_API long wolfSSL_CTX_sess_cache_full(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 565 WOLFSSL_API long wolfSSL_CTX_sess_misses(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 566 WOLFSSL_API long wolfSSL_CTX_sess_timeouts(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 567 WOLFSSL_API long wolfSSL_CTX_sess_number(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 568 WOLFSSL_API long wolfSSL_CTX_sess_get_cache_size(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 569
wolfSSL 4:1b0d80432c79 570 #define WOLFSSL_DEFAULT_CIPHER_LIST "" /* default all */
wolfSSL 4:1b0d80432c79 571 #define WOLFSSL_RSA_F4 0x10001L
wolfSSL 4:1b0d80432c79 572
wolfSSL 4:1b0d80432c79 573 enum {
wolfSSL 4:1b0d80432c79 574 OCSP_NOCERTS = 1,
wolfSSL 4:1b0d80432c79 575 OCSP_NOINTERN = 2,
wolfSSL 4:1b0d80432c79 576 OCSP_NOSIGS = 4,
wolfSSL 4:1b0d80432c79 577 OCSP_NOCHAIN = 8,
wolfSSL 4:1b0d80432c79 578 OCSP_NOVERIFY = 16,
wolfSSL 4:1b0d80432c79 579 OCSP_NOEXPLICIT = 32,
wolfSSL 4:1b0d80432c79 580 OCSP_NOCASIGN = 64,
wolfSSL 4:1b0d80432c79 581 OCSP_NODELEGATED = 128,
wolfSSL 4:1b0d80432c79 582 OCSP_NOCHECKS = 256,
wolfSSL 4:1b0d80432c79 583 OCSP_TRUSTOTHER = 512,
wolfSSL 4:1b0d80432c79 584 OCSP_RESPID_KEY = 1024,
wolfSSL 4:1b0d80432c79 585 OCSP_NOTIME = 2048,
wolfSSL 4:1b0d80432c79 586
wolfSSL 4:1b0d80432c79 587 OCSP_CERTID = 2,
wolfSSL 4:1b0d80432c79 588 OCSP_REQUEST = 4,
wolfSSL 4:1b0d80432c79 589 OCSP_RESPONSE = 8,
wolfSSL 4:1b0d80432c79 590 OCSP_BASICRESP = 16,
wolfSSL 4:1b0d80432c79 591
wolfSSL 4:1b0d80432c79 592 WOLFSSL_OCSP_URL_OVERRIDE = 1,
wolfSSL 4:1b0d80432c79 593 WOLFSSL_OCSP_NO_NONCE = 2,
wolfSSL 4:1b0d80432c79 594 WOLFSSL_OCSP_CHECKALL = 4,
wolfSSL 4:1b0d80432c79 595
wolfSSL 4:1b0d80432c79 596 WOLFSSL_CRL_CHECKALL = 1,
wolfSSL 4:1b0d80432c79 597
wolfSSL 4:1b0d80432c79 598 ASN1_GENERALIZEDTIME = 4,
wolfSSL 4:1b0d80432c79 599
wolfSSL 4:1b0d80432c79 600 SSL_OP_MICROSOFT_SESS_ID_BUG = 1,
wolfSSL 4:1b0d80432c79 601 SSL_OP_NETSCAPE_CHALLENGE_BUG = 2,
wolfSSL 4:1b0d80432c79 602 SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG = 3,
wolfSSL 4:1b0d80432c79 603 SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG = 4,
wolfSSL 4:1b0d80432c79 604 SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER = 5,
wolfSSL 4:1b0d80432c79 605 SSL_OP_MSIE_SSLV2_RSA_PADDING = 6,
wolfSSL 4:1b0d80432c79 606 SSL_OP_SSLEAY_080_CLIENT_DH_BUG = 7,
wolfSSL 4:1b0d80432c79 607 SSL_OP_TLS_D5_BUG = 8,
wolfSSL 4:1b0d80432c79 608 SSL_OP_TLS_BLOCK_PADDING_BUG = 9,
wolfSSL 4:1b0d80432c79 609 SSL_OP_TLS_ROLLBACK_BUG = 10,
wolfSSL 4:1b0d80432c79 610 SSL_OP_ALL = 11,
wolfSSL 4:1b0d80432c79 611 SSL_OP_EPHEMERAL_RSA = 12,
wolfSSL 4:1b0d80432c79 612 SSL_OP_NO_SSLv3 = 13,
wolfSSL 4:1b0d80432c79 613 SSL_OP_NO_TLSv1 = 14,
wolfSSL 4:1b0d80432c79 614 SSL_OP_PKCS1_CHECK_1 = 15,
wolfSSL 4:1b0d80432c79 615 SSL_OP_PKCS1_CHECK_2 = 16,
wolfSSL 4:1b0d80432c79 616 SSL_OP_NETSCAPE_CA_DN_BUG = 17,
wolfSSL 4:1b0d80432c79 617 SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG = 18,
wolfSSL 4:1b0d80432c79 618 SSL_OP_SINGLE_DH_USE = 19,
wolfSSL 4:1b0d80432c79 619 SSL_OP_NO_TICKET = 20,
wolfSSL 4:1b0d80432c79 620 SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS = 21,
wolfSSL 4:1b0d80432c79 621 SSL_OP_NO_QUERY_MTU = 22,
wolfSSL 4:1b0d80432c79 622 SSL_OP_COOKIE_EXCHANGE = 23,
wolfSSL 4:1b0d80432c79 623 SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION = 24,
wolfSSL 4:1b0d80432c79 624 SSL_OP_SINGLE_ECDH_USE = 25,
wolfSSL 4:1b0d80432c79 625 SSL_OP_CIPHER_SERVER_PREFERENCE = 26,
wolfSSL 4:1b0d80432c79 626
wolfSSL 4:1b0d80432c79 627 SSL_MAX_SSL_SESSION_ID_LENGTH = 32,
wolfSSL 4:1b0d80432c79 628
wolfSSL 4:1b0d80432c79 629 EVP_R_BAD_DECRYPT = 2,
wolfSSL 4:1b0d80432c79 630
wolfSSL 4:1b0d80432c79 631 SSL_CB_LOOP = 4,
wolfSSL 4:1b0d80432c79 632 SSL_ST_CONNECT = 5,
wolfSSL 4:1b0d80432c79 633 SSL_ST_ACCEPT = 6,
wolfSSL 4:1b0d80432c79 634 SSL_CB_ALERT = 7,
wolfSSL 4:1b0d80432c79 635 SSL_CB_READ = 8,
wolfSSL 4:1b0d80432c79 636 SSL_CB_HANDSHAKE_DONE = 9,
wolfSSL 4:1b0d80432c79 637
wolfSSL 4:1b0d80432c79 638 SSL_MODE_ENABLE_PARTIAL_WRITE = 2,
wolfSSL 4:1b0d80432c79 639
wolfSSL 4:1b0d80432c79 640 BIO_FLAGS_BASE64_NO_NL = 1,
wolfSSL 4:1b0d80432c79 641 BIO_CLOSE = 1,
wolfSSL 4:1b0d80432c79 642 BIO_NOCLOSE = 0,
wolfSSL 4:1b0d80432c79 643
wolfSSL 4:1b0d80432c79 644 NID_undef = 0,
wolfSSL 4:1b0d80432c79 645
wolfSSL 4:1b0d80432c79 646 X509_FILETYPE_PEM = 8,
wolfSSL 4:1b0d80432c79 647 X509_LU_X509 = 9,
wolfSSL 4:1b0d80432c79 648 X509_LU_CRL = 12,
wolfSSL 4:1b0d80432c79 649
wolfSSL 4:1b0d80432c79 650 X509_V_ERR_CRL_SIGNATURE_FAILURE = 13,
wolfSSL 4:1b0d80432c79 651 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 14,
wolfSSL 4:1b0d80432c79 652 X509_V_ERR_CRL_HAS_EXPIRED = 15,
wolfSSL 4:1b0d80432c79 653 X509_V_ERR_CERT_REVOKED = 16,
wolfSSL 4:1b0d80432c79 654 X509_V_ERR_CERT_CHAIN_TOO_LONG = 17,
wolfSSL 4:1b0d80432c79 655 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT = 18,
wolfSSL 4:1b0d80432c79 656 X509_V_ERR_CERT_NOT_YET_VALID = 19,
wolfSSL 4:1b0d80432c79 657 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = 20,
wolfSSL 4:1b0d80432c79 658 X509_V_ERR_CERT_HAS_EXPIRED = 21,
wolfSSL 4:1b0d80432c79 659 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = 22,
wolfSSL 4:1b0d80432c79 660 X509_V_ERR_CERT_REJECTED = 23,
wolfSSL 4:1b0d80432c79 661 X509_V_OK = 0,
wolfSSL 4:1b0d80432c79 662
wolfSSL 4:1b0d80432c79 663 XN_FLAG_SPC_EQ = (1 << 23),
wolfSSL 4:1b0d80432c79 664 XN_FLAG_ONELINE = 0,
wolfSSL 4:1b0d80432c79 665
wolfSSL 4:1b0d80432c79 666 CRYPTO_LOCK = 1,
wolfSSL 4:1b0d80432c79 667 CRYPTO_NUM_LOCKS = 10,
wolfSSL 4:1b0d80432c79 668
wolfSSL 4:1b0d80432c79 669 ASN1_STRFLGS_ESC_MSB = 4
wolfSSL 4:1b0d80432c79 670 };
wolfSSL 4:1b0d80432c79 671
wolfSSL 4:1b0d80432c79 672 /* extras end */
wolfSSL 4:1b0d80432c79 673
wolfSSL 4:1b0d80432c79 674 #if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM)
wolfSSL 4:1b0d80432c79 675 /* wolfSSL extension, provide last error from SSL_get_error
wolfSSL 4:1b0d80432c79 676 since not using thread storage error queue */
wolfSSL 4:1b0d80432c79 677 WOLFSSL_API void wolfSSL_ERR_print_errors_fp(FILE*, int err);
wolfSSL 4:1b0d80432c79 678 #endif
wolfSSL 4:1b0d80432c79 679
wolfSSL 4:1b0d80432c79 680 enum { /* ssl Constants */
wolfSSL 4:1b0d80432c79 681 SSL_ERROR_NONE = 0, /* for most functions */
wolfSSL 4:1b0d80432c79 682 SSL_FAILURE = 0, /* for some functions */
wolfSSL 4:1b0d80432c79 683 SSL_SUCCESS = 1,
wolfSSL 4:1b0d80432c79 684 SSL_SHUTDOWN_NOT_DONE = 2, /* call wolfSSL_shutdown again to complete */
wolfSSL 4:1b0d80432c79 685
wolfSSL 4:1b0d80432c79 686 SSL_ALPN_NOT_FOUND = -9,
wolfSSL 4:1b0d80432c79 687 SSL_BAD_CERTTYPE = -8,
wolfSSL 4:1b0d80432c79 688 SSL_BAD_STAT = -7,
wolfSSL 4:1b0d80432c79 689 SSL_BAD_PATH = -6,
wolfSSL 4:1b0d80432c79 690 SSL_BAD_FILETYPE = -5,
wolfSSL 4:1b0d80432c79 691 SSL_BAD_FILE = -4,
wolfSSL 4:1b0d80432c79 692 SSL_NOT_IMPLEMENTED = -3,
wolfSSL 4:1b0d80432c79 693 SSL_UNKNOWN = -2,
wolfSSL 4:1b0d80432c79 694 SSL_FATAL_ERROR = -1,
wolfSSL 4:1b0d80432c79 695
wolfSSL 4:1b0d80432c79 696 SSL_FILETYPE_ASN1 = 2,
wolfSSL 4:1b0d80432c79 697 SSL_FILETYPE_PEM = 1,
wolfSSL 4:1b0d80432c79 698 SSL_FILETYPE_DEFAULT = 2, /* ASN1 */
wolfSSL 4:1b0d80432c79 699 SSL_FILETYPE_RAW = 3, /* NTRU raw key blob */
wolfSSL 4:1b0d80432c79 700
wolfSSL 4:1b0d80432c79 701 SSL_VERIFY_NONE = 0,
wolfSSL 4:1b0d80432c79 702 SSL_VERIFY_PEER = 1,
wolfSSL 4:1b0d80432c79 703 SSL_VERIFY_FAIL_IF_NO_PEER_CERT = 2,
wolfSSL 4:1b0d80432c79 704 SSL_VERIFY_CLIENT_ONCE = 4,
wolfSSL 4:1b0d80432c79 705 SSL_VERIFY_FAIL_EXCEPT_PSK = 8,
wolfSSL 4:1b0d80432c79 706
wolfSSL 4:1b0d80432c79 707 SSL_SESS_CACHE_OFF = 30,
wolfSSL 4:1b0d80432c79 708 SSL_SESS_CACHE_CLIENT = 31,
wolfSSL 4:1b0d80432c79 709 SSL_SESS_CACHE_SERVER = 32,
wolfSSL 4:1b0d80432c79 710 SSL_SESS_CACHE_BOTH = 33,
wolfSSL 4:1b0d80432c79 711 SSL_SESS_CACHE_NO_AUTO_CLEAR = 34,
wolfSSL 4:1b0d80432c79 712 SSL_SESS_CACHE_NO_INTERNAL_LOOKUP = 35,
wolfSSL 4:1b0d80432c79 713
wolfSSL 4:1b0d80432c79 714 SSL_ERROR_WANT_READ = 2,
wolfSSL 4:1b0d80432c79 715 SSL_ERROR_WANT_WRITE = 3,
wolfSSL 4:1b0d80432c79 716 SSL_ERROR_WANT_CONNECT = 7,
wolfSSL 4:1b0d80432c79 717 SSL_ERROR_WANT_ACCEPT = 8,
wolfSSL 4:1b0d80432c79 718 SSL_ERROR_SYSCALL = 5,
wolfSSL 4:1b0d80432c79 719 SSL_ERROR_WANT_X509_LOOKUP = 83,
wolfSSL 4:1b0d80432c79 720 SSL_ERROR_ZERO_RETURN = 6,
wolfSSL 4:1b0d80432c79 721 SSL_ERROR_SSL = 85,
wolfSSL 4:1b0d80432c79 722
wolfSSL 4:1b0d80432c79 723 SSL_SENT_SHUTDOWN = 1,
wolfSSL 4:1b0d80432c79 724 SSL_RECEIVED_SHUTDOWN = 2,
wolfSSL 4:1b0d80432c79 725 SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER = 4,
wolfSSL 4:1b0d80432c79 726 SSL_OP_NO_SSLv2 = 8,
wolfSSL 4:1b0d80432c79 727
wolfSSL 4:1b0d80432c79 728 SSL_R_SSL_HANDSHAKE_FAILURE = 101,
wolfSSL 4:1b0d80432c79 729 SSL_R_TLSV1_ALERT_UNKNOWN_CA = 102,
wolfSSL 4:1b0d80432c79 730 SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN = 103,
wolfSSL 4:1b0d80432c79 731 SSL_R_SSLV3_ALERT_BAD_CERTIFICATE = 104,
wolfSSL 4:1b0d80432c79 732
wolfSSL 4:1b0d80432c79 733 PEM_BUFSIZE = 1024
wolfSSL 4:1b0d80432c79 734 };
wolfSSL 4:1b0d80432c79 735
wolfSSL 4:1b0d80432c79 736
wolfSSL 4:1b0d80432c79 737 #ifndef NO_PSK
wolfSSL 4:1b0d80432c79 738 typedef unsigned int (*wc_psk_client_callback)(WOLFSSL*, const char*, char*,
wolfSSL 4:1b0d80432c79 739 unsigned int, unsigned char*, unsigned int);
wolfSSL 4:1b0d80432c79 740 WOLFSSL_API void wolfSSL_CTX_set_psk_client_callback(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 741 wc_psk_client_callback);
wolfSSL 4:1b0d80432c79 742 WOLFSSL_API void wolfSSL_set_psk_client_callback(WOLFSSL*,
wolfSSL 4:1b0d80432c79 743 wc_psk_client_callback);
wolfSSL 4:1b0d80432c79 744
wolfSSL 4:1b0d80432c79 745 WOLFSSL_API const char* wolfSSL_get_psk_identity_hint(const WOLFSSL*);
wolfSSL 4:1b0d80432c79 746 WOLFSSL_API const char* wolfSSL_get_psk_identity(const WOLFSSL*);
wolfSSL 4:1b0d80432c79 747
wolfSSL 4:1b0d80432c79 748 WOLFSSL_API int wolfSSL_CTX_use_psk_identity_hint(WOLFSSL_CTX*, const char*);
wolfSSL 4:1b0d80432c79 749 WOLFSSL_API int wolfSSL_use_psk_identity_hint(WOLFSSL*, const char*);
wolfSSL 4:1b0d80432c79 750
wolfSSL 4:1b0d80432c79 751 typedef unsigned int (*wc_psk_server_callback)(WOLFSSL*, const char*,
wolfSSL 4:1b0d80432c79 752 unsigned char*, unsigned int);
wolfSSL 4:1b0d80432c79 753 WOLFSSL_API void wolfSSL_CTX_set_psk_server_callback(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 754 wc_psk_server_callback);
wolfSSL 4:1b0d80432c79 755 WOLFSSL_API void wolfSSL_set_psk_server_callback(WOLFSSL*,
wolfSSL 4:1b0d80432c79 756 wc_psk_server_callback);
wolfSSL 4:1b0d80432c79 757
wolfSSL 4:1b0d80432c79 758 #define PSK_TYPES_DEFINED
wolfSSL 4:1b0d80432c79 759 #endif /* NO_PSK */
wolfSSL 4:1b0d80432c79 760
wolfSSL 4:1b0d80432c79 761
wolfSSL 4:1b0d80432c79 762 #ifdef HAVE_ANON
wolfSSL 4:1b0d80432c79 763 WOLFSSL_API int wolfSSL_CTX_allow_anon_cipher(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 764 #endif /* HAVE_ANON */
wolfSSL 4:1b0d80432c79 765
wolfSSL 4:1b0d80432c79 766
wolfSSL 4:1b0d80432c79 767 /* extra begins */
wolfSSL 4:1b0d80432c79 768
wolfSSL 4:1b0d80432c79 769 enum { /* ERR Constants */
wolfSSL 4:1b0d80432c79 770 ERR_TXT_STRING = 1
wolfSSL 4:1b0d80432c79 771 };
wolfSSL 4:1b0d80432c79 772
wolfSSL 4:1b0d80432c79 773 WOLFSSL_API unsigned long wolfSSL_ERR_get_error_line_data(const char**, int*,
wolfSSL 4:1b0d80432c79 774 const char**, int *);
wolfSSL 4:1b0d80432c79 775
wolfSSL 4:1b0d80432c79 776 WOLFSSL_API unsigned long wolfSSL_ERR_get_error(void);
wolfSSL 4:1b0d80432c79 777 WOLFSSL_API void wolfSSL_ERR_clear_error(void);
wolfSSL 4:1b0d80432c79 778
wolfSSL 4:1b0d80432c79 779
wolfSSL 4:1b0d80432c79 780 WOLFSSL_API int wolfSSL_RAND_status(void);
wolfSSL 4:1b0d80432c79 781 WOLFSSL_API int wolfSSL_RAND_bytes(unsigned char* buf, int num);
wolfSSL 4:1b0d80432c79 782 WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_server_method(void);
wolfSSL 4:1b0d80432c79 783 WOLFSSL_API long wolfSSL_CTX_set_options(WOLFSSL_CTX*, long);
wolfSSL 4:1b0d80432c79 784 #ifndef NO_CERTS
wolfSSL 4:1b0d80432c79 785 WOLFSSL_API int wolfSSL_CTX_check_private_key(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 786 #endif /* !NO_CERTS */
wolfSSL 4:1b0d80432c79 787
wolfSSL 4:1b0d80432c79 788 WOLFSSL_API void wolfSSL_ERR_free_strings(void);
wolfSSL 4:1b0d80432c79 789 WOLFSSL_API void wolfSSL_ERR_remove_state(unsigned long);
wolfSSL 4:1b0d80432c79 790 WOLFSSL_API void wolfSSL_EVP_cleanup(void);
wolfSSL 4:1b0d80432c79 791 WOLFSSL_API int wolfSSL_clear(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 792
wolfSSL 4:1b0d80432c79 793 WOLFSSL_API void wolfSSL_cleanup_all_ex_data(void);
wolfSSL 4:1b0d80432c79 794 WOLFSSL_API long wolfSSL_CTX_set_mode(WOLFSSL_CTX* ctx, long mode);
wolfSSL 4:1b0d80432c79 795 WOLFSSL_API long wolfSSL_CTX_get_mode(WOLFSSL_CTX* ctx);
wolfSSL 4:1b0d80432c79 796 WOLFSSL_API void wolfSSL_CTX_set_default_read_ahead(WOLFSSL_CTX* ctx, int m);
wolfSSL 4:1b0d80432c79 797 WOLFSSL_API long wolfSSL_SSL_get_mode(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 798
wolfSSL 4:1b0d80432c79 799 WOLFSSL_API long wolfSSL_CTX_sess_set_cache_size(WOLFSSL_CTX*, long);
wolfSSL 4:1b0d80432c79 800
wolfSSL 4:1b0d80432c79 801 WOLFSSL_API int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 802 WOLFSSL_API int wolfSSL_CTX_set_session_id_context(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 803 const unsigned char*, unsigned int);
wolfSSL 4:1b0d80432c79 804 WOLFSSL_API WOLFSSL_X509* wolfSSL_get_peer_certificate(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 805
wolfSSL 4:1b0d80432c79 806 WOLFSSL_API int wolfSSL_want_read(WOLFSSL*);
wolfSSL 4:1b0d80432c79 807 WOLFSSL_API int wolfSSL_want_write(WOLFSSL*);
wolfSSL 4:1b0d80432c79 808
wolfSSL 4:1b0d80432c79 809 WOLFSSL_API int wolfSSL_BIO_printf(WOLFSSL_BIO*, const char*, ...);
wolfSSL 4:1b0d80432c79 810 WOLFSSL_API int wolfSSL_ASN1_UTCTIME_print(WOLFSSL_BIO*,
wolfSSL 4:1b0d80432c79 811 const WOLFSSL_ASN1_UTCTIME*);
wolfSSL 4:1b0d80432c79 812 WOLFSSL_API int wolfSSL_sk_num(WOLFSSL_X509_REVOKED*);
wolfSSL 4:1b0d80432c79 813 WOLFSSL_API void* wolfSSL_sk_value(WOLFSSL_X509_REVOKED*, int);
wolfSSL 4:1b0d80432c79 814
wolfSSL 4:1b0d80432c79 815 /* stunnel 4.28 needs */
wolfSSL 4:1b0d80432c79 816 WOLFSSL_API void* wolfSSL_CTX_get_ex_data(const WOLFSSL_CTX*, int);
wolfSSL 4:1b0d80432c79 817 WOLFSSL_API int wolfSSL_CTX_set_ex_data(WOLFSSL_CTX*, int, void*);
wolfSSL 4:1b0d80432c79 818 WOLFSSL_API void wolfSSL_CTX_sess_set_get_cb(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 819 WOLFSSL_SESSION*(*f)(WOLFSSL*, unsigned char*, int, int*));
wolfSSL 4:1b0d80432c79 820 WOLFSSL_API void wolfSSL_CTX_sess_set_new_cb(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 821 int (*f)(WOLFSSL*, WOLFSSL_SESSION*));
wolfSSL 4:1b0d80432c79 822 WOLFSSL_API void wolfSSL_CTX_sess_set_remove_cb(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 823 void (*f)(WOLFSSL_CTX*, WOLFSSL_SESSION*));
wolfSSL 4:1b0d80432c79 824
wolfSSL 4:1b0d80432c79 825 WOLFSSL_API int wolfSSL_i2d_SSL_SESSION(WOLFSSL_SESSION*,unsigned char**);
wolfSSL 4:1b0d80432c79 826 WOLFSSL_API WOLFSSL_SESSION* wolfSSL_d2i_SSL_SESSION(WOLFSSL_SESSION**,
wolfSSL 4:1b0d80432c79 827 const unsigned char**, long);
wolfSSL 4:1b0d80432c79 828
wolfSSL 4:1b0d80432c79 829 WOLFSSL_API long wolfSSL_SESSION_get_timeout(const WOLFSSL_SESSION*);
wolfSSL 4:1b0d80432c79 830 WOLFSSL_API long wolfSSL_SESSION_get_time(const WOLFSSL_SESSION*);
wolfSSL 4:1b0d80432c79 831 WOLFSSL_API int wolfSSL_CTX_get_ex_new_index(long, void*, void*, void*, void*);
wolfSSL 4:1b0d80432c79 832
wolfSSL 4:1b0d80432c79 833 /* extra ends */
wolfSSL 4:1b0d80432c79 834
wolfSSL 4:1b0d80432c79 835
wolfSSL 4:1b0d80432c79 836 /* wolfSSL extensions */
wolfSSL 4:1b0d80432c79 837
wolfSSL 4:1b0d80432c79 838 /* call before SSL_connect, if verifying will add name check to
wolfSSL 4:1b0d80432c79 839 date check and signature check */
wolfSSL 4:1b0d80432c79 840 WOLFSSL_API int wolfSSL_check_domain_name(WOLFSSL* ssl, const char* dn);
wolfSSL 4:1b0d80432c79 841
wolfSSL 4:1b0d80432c79 842 /* need to call once to load library (session cache) */
wolfSSL 4:1b0d80432c79 843 WOLFSSL_API int wolfSSL_Init(void);
wolfSSL 4:1b0d80432c79 844 /* call when done to cleanup/free session cache mutex / resources */
wolfSSL 4:1b0d80432c79 845 WOLFSSL_API int wolfSSL_Cleanup(void);
wolfSSL 4:1b0d80432c79 846
wolfSSL 4:1b0d80432c79 847 /* which library version do we have */
wolfSSL 4:1b0d80432c79 848 WOLFSSL_API const char* wolfSSL_lib_version(void);
wolfSSL 4:1b0d80432c79 849 /* which library version do we have in hex */
wolfSSL 4:1b0d80432c79 850 WOLFSSL_API unsigned int wolfSSL_lib_version_hex(void);
wolfSSL 4:1b0d80432c79 851
wolfSSL 4:1b0d80432c79 852 /* turn logging on, only if compiled in */
wolfSSL 4:1b0d80432c79 853 WOLFSSL_API int wolfSSL_Debugging_ON(void);
wolfSSL 4:1b0d80432c79 854 /* turn logging off */
wolfSSL 4:1b0d80432c79 855 WOLFSSL_API void wolfSSL_Debugging_OFF(void);
wolfSSL 4:1b0d80432c79 856
wolfSSL 4:1b0d80432c79 857 /* do accept or connect depedning on side */
wolfSSL 4:1b0d80432c79 858 WOLFSSL_API int wolfSSL_negotiate(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 859 /* turn on wolfSSL data compression */
wolfSSL 4:1b0d80432c79 860 WOLFSSL_API int wolfSSL_set_compression(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 861
wolfSSL 4:1b0d80432c79 862 WOLFSSL_API int wolfSSL_set_timeout(WOLFSSL*, unsigned int);
wolfSSL 4:1b0d80432c79 863 WOLFSSL_API int wolfSSL_CTX_set_timeout(WOLFSSL_CTX*, unsigned int);
wolfSSL 4:1b0d80432c79 864
wolfSSL 4:1b0d80432c79 865 /* get wolfSSL peer X509_CHAIN */
wolfSSL 4:1b0d80432c79 866 WOLFSSL_API WOLFSSL_X509_CHAIN* wolfSSL_get_peer_chain(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 867 /* peer chain count */
wolfSSL 4:1b0d80432c79 868 WOLFSSL_API int wolfSSL_get_chain_count(WOLFSSL_X509_CHAIN* chain);
wolfSSL 4:1b0d80432c79 869 /* index cert length */
wolfSSL 4:1b0d80432c79 870 WOLFSSL_API int wolfSSL_get_chain_length(WOLFSSL_X509_CHAIN*, int idx);
wolfSSL 4:1b0d80432c79 871 /* index cert */
wolfSSL 4:1b0d80432c79 872 WOLFSSL_API unsigned char* wolfSSL_get_chain_cert(WOLFSSL_X509_CHAIN*, int idx);
wolfSSL 4:1b0d80432c79 873 /* index cert in X509 */
wolfSSL 4:1b0d80432c79 874 WOLFSSL_API WOLFSSL_X509* wolfSSL_get_chain_X509(WOLFSSL_X509_CHAIN*, int idx);
wolfSSL 4:1b0d80432c79 875 /* free X509 */
wolfSSL 4:1b0d80432c79 876 WOLFSSL_API void wolfSSL_FreeX509(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 877 /* get index cert in PEM */
wolfSSL 4:1b0d80432c79 878 WOLFSSL_API int wolfSSL_get_chain_cert_pem(WOLFSSL_X509_CHAIN*, int idx,
wolfSSL 4:1b0d80432c79 879 unsigned char* buffer, int inLen, int* outLen);
wolfSSL 4:1b0d80432c79 880 WOLFSSL_API const unsigned char* wolfSSL_get_sessionID(const WOLFSSL_SESSION* s);
wolfSSL 4:1b0d80432c79 881 WOLFSSL_API int wolfSSL_X509_get_serial_number(WOLFSSL_X509*,unsigned char*,int*);
wolfSSL 4:1b0d80432c79 882 WOLFSSL_API char* wolfSSL_X509_get_subjectCN(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 883 WOLFSSL_API const unsigned char* wolfSSL_X509_get_der(WOLFSSL_X509*, int*);
wolfSSL 4:1b0d80432c79 884 WOLFSSL_API const unsigned char* wolfSSL_X509_notBefore(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 885 WOLFSSL_API const unsigned char* wolfSSL_X509_notAfter(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 886 WOLFSSL_API int wolfSSL_X509_version(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 887
wolfSSL 4:1b0d80432c79 888 WOLFSSL_API int wolfSSL_cmp_peer_cert_to_file(WOLFSSL*, const char*);
wolfSSL 4:1b0d80432c79 889
wolfSSL 4:1b0d80432c79 890 WOLFSSL_API char* wolfSSL_X509_get_next_altname(WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 891
wolfSSL 4:1b0d80432c79 892 WOLFSSL_API WOLFSSL_X509*
wolfSSL 4:1b0d80432c79 893 wolfSSL_X509_d2i(WOLFSSL_X509** x509, const unsigned char* in, int len);
wolfSSL 4:1b0d80432c79 894 #ifndef NO_FILESYSTEM
wolfSSL 4:1b0d80432c79 895 #ifndef NO_STDIO_FILESYSTEM
wolfSSL 4:1b0d80432c79 896 WOLFSSL_API WOLFSSL_X509*
wolfSSL 4:1b0d80432c79 897 wolfSSL_X509_d2i_fp(WOLFSSL_X509** x509, FILE* file);
wolfSSL 4:1b0d80432c79 898 #endif
wolfSSL 4:1b0d80432c79 899 WOLFSSL_API WOLFSSL_X509*
wolfSSL 4:1b0d80432c79 900 wolfSSL_X509_load_certificate_file(const char* fname, int format);
wolfSSL 4:1b0d80432c79 901 #endif
wolfSSL 4:1b0d80432c79 902
wolfSSL 4:1b0d80432c79 903 #ifdef WOLFSSL_SEP
wolfSSL 4:1b0d80432c79 904 WOLFSSL_API unsigned char*
wolfSSL 4:1b0d80432c79 905 wolfSSL_X509_get_device_type(WOLFSSL_X509*, unsigned char*, int*);
wolfSSL 4:1b0d80432c79 906 WOLFSSL_API unsigned char*
wolfSSL 4:1b0d80432c79 907 wolfSSL_X509_get_hw_type(WOLFSSL_X509*, unsigned char*, int*);
wolfSSL 4:1b0d80432c79 908 WOLFSSL_API unsigned char*
wolfSSL 4:1b0d80432c79 909 wolfSSL_X509_get_hw_serial_number(WOLFSSL_X509*, unsigned char*, int*);
wolfSSL 4:1b0d80432c79 910 #endif
wolfSSL 4:1b0d80432c79 911
wolfSSL 4:1b0d80432c79 912 /* connect enough to get peer cert */
wolfSSL 4:1b0d80432c79 913 WOLFSSL_API int wolfSSL_connect_cert(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 914
wolfSSL 4:1b0d80432c79 915 #ifndef NO_DH
wolfSSL 4:1b0d80432c79 916 /* server Diffie-Hellman parameters */
wolfSSL 4:1b0d80432c79 917 WOLFSSL_API int wolfSSL_SetTmpDH(WOLFSSL*, const unsigned char* p, int pSz,
wolfSSL 4:1b0d80432c79 918 const unsigned char* g, int gSz);
wolfSSL 4:1b0d80432c79 919 WOLFSSL_API int wolfSSL_SetTmpDH_buffer(WOLFSSL*, const unsigned char* b, long sz,
wolfSSL 4:1b0d80432c79 920 int format);
wolfSSL 4:1b0d80432c79 921 #ifndef NO_FILESYSTEM
wolfSSL 4:1b0d80432c79 922 WOLFSSL_API int wolfSSL_SetTmpDH_file(WOLFSSL*, const char* f, int format);
wolfSSL 4:1b0d80432c79 923 #endif
wolfSSL 4:1b0d80432c79 924
wolfSSL 4:1b0d80432c79 925 /* server ctx Diffie-Hellman parameters */
wolfSSL 4:1b0d80432c79 926 WOLFSSL_API int wolfSSL_CTX_SetTmpDH(WOLFSSL_CTX*, const unsigned char* p,
wolfSSL 4:1b0d80432c79 927 int pSz, const unsigned char* g, int gSz);
wolfSSL 4:1b0d80432c79 928 WOLFSSL_API int wolfSSL_CTX_SetTmpDH_buffer(WOLFSSL_CTX*, const unsigned char* b,
wolfSSL 4:1b0d80432c79 929 long sz, int format);
wolfSSL 4:1b0d80432c79 930
wolfSSL 4:1b0d80432c79 931 #ifndef NO_FILESYSTEM
wolfSSL 4:1b0d80432c79 932 WOLFSSL_API int wolfSSL_CTX_SetTmpDH_file(WOLFSSL_CTX*, const char* f,
wolfSSL 4:1b0d80432c79 933 int format);
wolfSSL 4:1b0d80432c79 934 #endif
wolfSSL 4:1b0d80432c79 935
wolfSSL 4:1b0d80432c79 936 WOLFSSL_API int wolfSSL_CTX_SetMinDhKey_Sz(WOLFSSL_CTX*, unsigned short);
wolfSSL 4:1b0d80432c79 937 WOLFSSL_API int wolfSSL_SetMinDhKey_Sz(WOLFSSL*, unsigned short);
wolfSSL 4:1b0d80432c79 938 WOLFSSL_API int wolfSSL_GetDhKey_Sz(WOLFSSL*);
wolfSSL 4:1b0d80432c79 939 #endif /* NO_DH */
wolfSSL 4:1b0d80432c79 940
wolfSSL 4:1b0d80432c79 941 WOLFSSL_API int wolfSSL_SetTmpEC_DHE_Sz(WOLFSSL*, unsigned short);
wolfSSL 4:1b0d80432c79 942 WOLFSSL_API int wolfSSL_CTX_SetTmpEC_DHE_Sz(WOLFSSL_CTX*, unsigned short);
wolfSSL 4:1b0d80432c79 943
wolfSSL 4:1b0d80432c79 944 /* keyblock size in bytes or -1 */
wolfSSL 4:1b0d80432c79 945 /* need to call wolfSSL_KeepArrays before handshake to save keys */
wolfSSL 4:1b0d80432c79 946 WOLFSSL_API int wolfSSL_get_keyblock_size(WOLFSSL*);
wolfSSL 4:1b0d80432c79 947 WOLFSSL_API int wolfSSL_get_keys(WOLFSSL*,unsigned char** ms, unsigned int* msLen,
wolfSSL 4:1b0d80432c79 948 unsigned char** sr, unsigned int* srLen,
wolfSSL 4:1b0d80432c79 949 unsigned char** cr, unsigned int* crLen);
wolfSSL 4:1b0d80432c79 950
wolfSSL 4:1b0d80432c79 951 /* Computes EAP-TLS and EAP-TTLS keying material from the master_secret. */
wolfSSL 4:1b0d80432c79 952 WOLFSSL_API int wolfSSL_make_eap_keys(WOLFSSL*, void* key, unsigned int len,
wolfSSL 4:1b0d80432c79 953 const char* label);
wolfSSL 4:1b0d80432c79 954
wolfSSL 4:1b0d80432c79 955
wolfSSL 4:1b0d80432c79 956 #ifndef _WIN32
wolfSSL 4:1b0d80432c79 957 #ifndef NO_WRITEV
wolfSSL 4:1b0d80432c79 958 #ifdef __PPU
wolfSSL 4:1b0d80432c79 959 #include <sys/types.h>
wolfSSL 4:1b0d80432c79 960 #include <sys/socket.h>
wolfSSL 4:1b0d80432c79 961 #elif !defined(WOLFSSL_MDK_ARM) && !defined(WOLFSSL_IAR_ARM) && \
wolfSSL 4:1b0d80432c79 962 !defined(WOLFSSL_PICOTCP) && !defined(WOLFSSL_ROWLEY_ARM)
wolfSSL 4:1b0d80432c79 963 #include <sys/uio.h>
wolfSSL 4:1b0d80432c79 964 #endif
wolfSSL 4:1b0d80432c79 965 /* allow writev style writing */
wolfSSL 4:1b0d80432c79 966 WOLFSSL_API int wolfSSL_writev(WOLFSSL* ssl, const struct iovec* iov,
wolfSSL 4:1b0d80432c79 967 int iovcnt);
wolfSSL 4:1b0d80432c79 968 #endif
wolfSSL 4:1b0d80432c79 969 #endif
wolfSSL 4:1b0d80432c79 970
wolfSSL 4:1b0d80432c79 971
wolfSSL 4:1b0d80432c79 972 #ifndef NO_CERTS
wolfSSL 4:1b0d80432c79 973 /* SSL_CTX versions */
wolfSSL 4:1b0d80432c79 974 WOLFSSL_API int wolfSSL_CTX_UnloadCAs(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 975 #ifdef WOLFSSL_TRUST_PEER_CERT
wolfSSL 4:1b0d80432c79 976 WOLFSSL_API int wolfSSL_CTX_Unload_trust_peers(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 977 WOLFSSL_API int wolfSSL_CTX_trust_peer_buffer(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 978 const unsigned char*, long, int);
wolfSSL 4:1b0d80432c79 979 #endif
wolfSSL 4:1b0d80432c79 980 WOLFSSL_API int wolfSSL_CTX_load_verify_buffer(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 981 const unsigned char*, long, int);
wolfSSL 4:1b0d80432c79 982 WOLFSSL_API int wolfSSL_CTX_use_certificate_buffer(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 983 const unsigned char*, long, int);
wolfSSL 4:1b0d80432c79 984 WOLFSSL_API int wolfSSL_CTX_use_PrivateKey_buffer(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 985 const unsigned char*, long, int);
wolfSSL 4:1b0d80432c79 986 WOLFSSL_API int wolfSSL_CTX_use_certificate_chain_buffer(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 987 const unsigned char*, long);
wolfSSL 4:1b0d80432c79 988
wolfSSL 4:1b0d80432c79 989 /* SSL versions */
wolfSSL 4:1b0d80432c79 990 WOLFSSL_API int wolfSSL_use_certificate_buffer(WOLFSSL*, const unsigned char*,
wolfSSL 4:1b0d80432c79 991 long, int);
wolfSSL 4:1b0d80432c79 992 WOLFSSL_API int wolfSSL_use_PrivateKey_buffer(WOLFSSL*, const unsigned char*,
wolfSSL 4:1b0d80432c79 993 long, int);
wolfSSL 4:1b0d80432c79 994 WOLFSSL_API int wolfSSL_use_certificate_chain_buffer(WOLFSSL*,
wolfSSL 4:1b0d80432c79 995 const unsigned char*, long);
wolfSSL 4:1b0d80432c79 996 WOLFSSL_API int wolfSSL_UnloadCertsKeys(WOLFSSL*);
wolfSSL 4:1b0d80432c79 997 #endif
wolfSSL 4:1b0d80432c79 998
wolfSSL 4:1b0d80432c79 999 WOLFSSL_API int wolfSSL_CTX_set_group_messages(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 1000 WOLFSSL_API int wolfSSL_set_group_messages(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1001
wolfSSL 4:1b0d80432c79 1002 /* I/O callbacks */
wolfSSL 4:1b0d80432c79 1003 typedef int (*CallbackIORecv)(WOLFSSL *ssl, char *buf, int sz, void *ctx);
wolfSSL 4:1b0d80432c79 1004 typedef int (*CallbackIOSend)(WOLFSSL *ssl, char *buf, int sz, void *ctx);
wolfSSL 4:1b0d80432c79 1005
wolfSSL 4:1b0d80432c79 1006 #ifdef HAVE_FUZZER
wolfSSL 4:1b0d80432c79 1007 enum fuzzer_type {
wolfSSL 4:1b0d80432c79 1008 FUZZ_HMAC = 0,
wolfSSL 4:1b0d80432c79 1009 FUZZ_ENCRYPT = 1,
wolfSSL 4:1b0d80432c79 1010 FUZZ_SIGNATURE = 2,
wolfSSL 4:1b0d80432c79 1011 FUZZ_HASH = 3,
wolfSSL 4:1b0d80432c79 1012 FUZZ_HEAD = 4
wolfSSL 4:1b0d80432c79 1013 };
wolfSSL 4:1b0d80432c79 1014
wolfSSL 4:1b0d80432c79 1015 typedef int (*CallbackFuzzer)(WOLFSSL* ssl, const unsigned char* buf, int sz,
wolfSSL 4:1b0d80432c79 1016 int type, void* fuzzCtx);
wolfSSL 4:1b0d80432c79 1017
wolfSSL 4:1b0d80432c79 1018 WOLFSSL_API void wolfSSL_SetFuzzerCb(WOLFSSL* ssl, CallbackFuzzer cbf, void* fCtx);
wolfSSL 4:1b0d80432c79 1019 #endif
wolfSSL 4:1b0d80432c79 1020
wolfSSL 4:1b0d80432c79 1021 WOLFSSL_API void wolfSSL_SetIORecv(WOLFSSL_CTX*, CallbackIORecv);
wolfSSL 4:1b0d80432c79 1022 WOLFSSL_API void wolfSSL_SetIOSend(WOLFSSL_CTX*, CallbackIOSend);
wolfSSL 4:1b0d80432c79 1023
wolfSSL 4:1b0d80432c79 1024 WOLFSSL_API void wolfSSL_SetIOReadCtx( WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1025 WOLFSSL_API void wolfSSL_SetIOWriteCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1026
wolfSSL 4:1b0d80432c79 1027 WOLFSSL_API void* wolfSSL_GetIOReadCtx( WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1028 WOLFSSL_API void* wolfSSL_GetIOWriteCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1029
wolfSSL 4:1b0d80432c79 1030 WOLFSSL_API void wolfSSL_SetIOReadFlags( WOLFSSL* ssl, int flags);
wolfSSL 4:1b0d80432c79 1031 WOLFSSL_API void wolfSSL_SetIOWriteFlags(WOLFSSL* ssl, int flags);
wolfSSL 4:1b0d80432c79 1032
wolfSSL 4:1b0d80432c79 1033
wolfSSL 4:1b0d80432c79 1034 #ifndef WOLFSSL_USER_IO
wolfSSL 4:1b0d80432c79 1035 /* default IO callbacks */
wolfSSL 4:1b0d80432c79 1036 WOLFSSL_API int EmbedReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 4:1b0d80432c79 1037 WOLFSSL_API int EmbedSend(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 4:1b0d80432c79 1038
wolfSSL 4:1b0d80432c79 1039 #ifdef HAVE_OCSP
wolfSSL 4:1b0d80432c79 1040 WOLFSSL_API int EmbedOcspLookup(void*, const char*, int, unsigned char*,
wolfSSL 4:1b0d80432c79 1041 int, unsigned char**);
wolfSSL 4:1b0d80432c79 1042 WOLFSSL_API void EmbedOcspRespFree(void*, unsigned char*);
wolfSSL 4:1b0d80432c79 1043 #endif
wolfSSL 4:1b0d80432c79 1044
wolfSSL 4:1b0d80432c79 1045 #ifdef WOLFSSL_DTLS
wolfSSL 4:1b0d80432c79 1046 WOLFSSL_API int EmbedReceiveFrom(WOLFSSL* ssl, char* buf, int sz, void*);
wolfSSL 4:1b0d80432c79 1047 WOLFSSL_API int EmbedSendTo(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 4:1b0d80432c79 1048 WOLFSSL_API int EmbedGenerateCookie(WOLFSSL* ssl, unsigned char* buf,
wolfSSL 4:1b0d80432c79 1049 int sz, void*);
wolfSSL 4:1b0d80432c79 1050 #endif /* WOLFSSL_DTLS */
wolfSSL 4:1b0d80432c79 1051 #endif /* WOLFSSL_USER_IO */
wolfSSL 4:1b0d80432c79 1052
wolfSSL 4:1b0d80432c79 1053
wolfSSL 4:1b0d80432c79 1054 #ifdef HAVE_NETX
wolfSSL 4:1b0d80432c79 1055 WOLFSSL_API void wolfSSL_SetIO_NetX(WOLFSSL* ssl, NX_TCP_SOCKET* nxsocket,
wolfSSL 4:1b0d80432c79 1056 ULONG waitoption);
wolfSSL 4:1b0d80432c79 1057 #endif
wolfSSL 4:1b0d80432c79 1058
wolfSSL 4:1b0d80432c79 1059 typedef int (*CallbackGenCookie)(WOLFSSL* ssl, unsigned char* buf, int sz,
wolfSSL 4:1b0d80432c79 1060 void* ctx);
wolfSSL 4:1b0d80432c79 1061 WOLFSSL_API void wolfSSL_CTX_SetGenCookie(WOLFSSL_CTX*, CallbackGenCookie);
wolfSSL 4:1b0d80432c79 1062 WOLFSSL_API void wolfSSL_SetCookieCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1063 WOLFSSL_API void* wolfSSL_GetCookieCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1064 WOLFSSL_API int wolfSSL_DTLS_SetCookieSecret(WOLFSSL*,
wolfSSL 4:1b0d80432c79 1065 const unsigned char*,
wolfSSL 4:1b0d80432c79 1066 unsigned int);
wolfSSL 4:1b0d80432c79 1067
wolfSSL 4:1b0d80432c79 1068
wolfSSL 4:1b0d80432c79 1069 /* I/O Callback default errors */
wolfSSL 4:1b0d80432c79 1070 enum IOerrors {
wolfSSL 4:1b0d80432c79 1071 WOLFSSL_CBIO_ERR_GENERAL = -1, /* general unexpected err */
wolfSSL 4:1b0d80432c79 1072 WOLFSSL_CBIO_ERR_WANT_READ = -2, /* need to call read again */
wolfSSL 4:1b0d80432c79 1073 WOLFSSL_CBIO_ERR_WANT_WRITE = -2, /* need to call write again */
wolfSSL 4:1b0d80432c79 1074 WOLFSSL_CBIO_ERR_CONN_RST = -3, /* connection reset */
wolfSSL 4:1b0d80432c79 1075 WOLFSSL_CBIO_ERR_ISR = -4, /* interrupt */
wolfSSL 4:1b0d80432c79 1076 WOLFSSL_CBIO_ERR_CONN_CLOSE = -5, /* connection closed or epipe */
wolfSSL 4:1b0d80432c79 1077 WOLFSSL_CBIO_ERR_TIMEOUT = -6 /* socket timeout */
wolfSSL 4:1b0d80432c79 1078 };
wolfSSL 4:1b0d80432c79 1079
wolfSSL 4:1b0d80432c79 1080
wolfSSL 4:1b0d80432c79 1081 /* CA cache callbacks */
wolfSSL 4:1b0d80432c79 1082 enum {
wolfSSL 4:1b0d80432c79 1083 WOLFSSL_SSLV3 = 0,
wolfSSL 4:1b0d80432c79 1084 WOLFSSL_TLSV1 = 1,
wolfSSL 4:1b0d80432c79 1085 WOLFSSL_TLSV1_1 = 2,
wolfSSL 4:1b0d80432c79 1086 WOLFSSL_TLSV1_2 = 3,
wolfSSL 4:1b0d80432c79 1087 WOLFSSL_USER_CA = 1, /* user added as trusted */
wolfSSL 4:1b0d80432c79 1088 WOLFSSL_CHAIN_CA = 2 /* added to cache from trusted chain */
wolfSSL 4:1b0d80432c79 1089 };
wolfSSL 4:1b0d80432c79 1090
wolfSSL 4:1b0d80432c79 1091 WOLFSSL_API int wolfSSL_CTX_SetMinVersion(WOLFSSL_CTX* ctx, int version);
wolfSSL 4:1b0d80432c79 1092 WOLFSSL_API int wolfSSL_SetMinVersion(WOLFSSL* ssl, int version);
wolfSSL 4:1b0d80432c79 1093 WOLFSSL_API int wolfSSL_GetObjectSize(void); /* object size based on build */
wolfSSL 4:1b0d80432c79 1094 WOLFSSL_API int wolfSSL_SetVersion(WOLFSSL* ssl, int version);
wolfSSL 4:1b0d80432c79 1095 WOLFSSL_API int wolfSSL_KeyPemToDer(const unsigned char*, int,
wolfSSL 4:1b0d80432c79 1096 unsigned char*, int, const char*);
wolfSSL 4:1b0d80432c79 1097 WOLFSSL_API int wolfSSL_CertPemToDer(const unsigned char*, int,
wolfSSL 4:1b0d80432c79 1098 unsigned char*, int, int);
wolfSSL 4:1b0d80432c79 1099 #if defined(WOLFSSL_CERT_EXT) || defined(WOLFSSL_PUB_PEM_TO_DER)
wolfSSL 4:1b0d80432c79 1100 #ifndef WOLFSSL_PEMPUBKEY_TODER_DEFINED
wolfSSL 4:1b0d80432c79 1101 #ifndef NO_FILESYSTEM
wolfSSL 4:1b0d80432c79 1102 WOLFSSL_API int wolfSSL_PemPubKeyToDer(const char* fileName,
wolfSSL 4:1b0d80432c79 1103 unsigned char* derBuf, int derSz);
wolfSSL 4:1b0d80432c79 1104 #endif
wolfSSL 4:1b0d80432c79 1105 WOLFSSL_API int wolfSSL_PubKeyPemToDer(const unsigned char*, int,
wolfSSL 4:1b0d80432c79 1106 unsigned char*, int);
wolfSSL 4:1b0d80432c79 1107 #define WOLFSSL_PEMPUBKEY_TODER_DEFINED
wolfSSL 4:1b0d80432c79 1108 #endif /* WOLFSSL_PEMPUBKEY_TODER_DEFINED */
wolfSSL 4:1b0d80432c79 1109 #endif /* WOLFSSL_CERT_EXT || WOLFSSL_PUB_PEM_TO_DER*/
wolfSSL 4:1b0d80432c79 1110
wolfSSL 4:1b0d80432c79 1111 typedef void (*CallbackCACache)(unsigned char* der, int sz, int type);
wolfSSL 4:1b0d80432c79 1112 typedef void (*CbMissingCRL)(const char* url);
wolfSSL 4:1b0d80432c79 1113 typedef int (*CbOCSPIO)(void*, const char*, int,
wolfSSL 4:1b0d80432c79 1114 unsigned char*, int, unsigned char**);
wolfSSL 4:1b0d80432c79 1115 typedef void (*CbOCSPRespFree)(void*,unsigned char*);
wolfSSL 4:1b0d80432c79 1116
wolfSSL 4:1b0d80432c79 1117 /* User Atomic Record Layer CallBacks */
wolfSSL 4:1b0d80432c79 1118 typedef int (*CallbackMacEncrypt)(WOLFSSL* ssl, unsigned char* macOut,
wolfSSL 4:1b0d80432c79 1119 const unsigned char* macIn, unsigned int macInSz, int macContent,
wolfSSL 4:1b0d80432c79 1120 int macVerify, unsigned char* encOut, const unsigned char* encIn,
wolfSSL 4:1b0d80432c79 1121 unsigned int encSz, void* ctx);
wolfSSL 4:1b0d80432c79 1122 WOLFSSL_API void wolfSSL_CTX_SetMacEncryptCb(WOLFSSL_CTX*, CallbackMacEncrypt);
wolfSSL 4:1b0d80432c79 1123 WOLFSSL_API void wolfSSL_SetMacEncryptCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1124 WOLFSSL_API void* wolfSSL_GetMacEncryptCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1125
wolfSSL 4:1b0d80432c79 1126 typedef int (*CallbackDecryptVerify)(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 1127 unsigned char* decOut, const unsigned char* decIn,
wolfSSL 4:1b0d80432c79 1128 unsigned int decSz, int content, int verify, unsigned int* padSz,
wolfSSL 4:1b0d80432c79 1129 void* ctx);
wolfSSL 4:1b0d80432c79 1130 WOLFSSL_API void wolfSSL_CTX_SetDecryptVerifyCb(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 1131 CallbackDecryptVerify);
wolfSSL 4:1b0d80432c79 1132 WOLFSSL_API void wolfSSL_SetDecryptVerifyCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1133 WOLFSSL_API void* wolfSSL_GetDecryptVerifyCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1134
wolfSSL 4:1b0d80432c79 1135 WOLFSSL_API const unsigned char* wolfSSL_GetMacSecret(WOLFSSL*, int);
wolfSSL 4:1b0d80432c79 1136 WOLFSSL_API const unsigned char* wolfSSL_GetClientWriteKey(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1137 WOLFSSL_API const unsigned char* wolfSSL_GetClientWriteIV(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1138 WOLFSSL_API const unsigned char* wolfSSL_GetServerWriteKey(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1139 WOLFSSL_API const unsigned char* wolfSSL_GetServerWriteIV(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1140 WOLFSSL_API int wolfSSL_GetKeySize(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1141 WOLFSSL_API int wolfSSL_GetIVSize(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1142 WOLFSSL_API int wolfSSL_GetSide(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1143 WOLFSSL_API int wolfSSL_IsTLSv1_1(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1144 WOLFSSL_API int wolfSSL_GetBulkCipher(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1145 WOLFSSL_API int wolfSSL_GetCipherBlockSize(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1146 WOLFSSL_API int wolfSSL_GetAeadMacSize(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1147 WOLFSSL_API int wolfSSL_GetHmacSize(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1148 WOLFSSL_API int wolfSSL_GetHmacType(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1149 WOLFSSL_API int wolfSSL_GetCipherType(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1150 WOLFSSL_API int wolfSSL_SetTlsHmacInner(WOLFSSL*, unsigned char*,
wolfSSL 4:1b0d80432c79 1151 unsigned int, int, int);
wolfSSL 4:1b0d80432c79 1152
wolfSSL 4:1b0d80432c79 1153 /* Atomic User Needs */
wolfSSL 4:1b0d80432c79 1154 enum {
wolfSSL 4:1b0d80432c79 1155 WOLFSSL_SERVER_END = 0,
wolfSSL 4:1b0d80432c79 1156 WOLFSSL_CLIENT_END = 1,
wolfSSL 4:1b0d80432c79 1157 WOLFSSL_BLOCK_TYPE = 2,
wolfSSL 4:1b0d80432c79 1158 WOLFSSL_STREAM_TYPE = 3,
wolfSSL 4:1b0d80432c79 1159 WOLFSSL_AEAD_TYPE = 4,
wolfSSL 4:1b0d80432c79 1160 WOLFSSL_TLS_HMAC_INNER_SZ = 13 /* SEQ_SZ + ENUM + VERSION_SZ + LEN_SZ */
wolfSSL 4:1b0d80432c79 1161 };
wolfSSL 4:1b0d80432c79 1162
wolfSSL 4:1b0d80432c79 1163 /* for GetBulkCipher and internal use */
wolfSSL 4:1b0d80432c79 1164 enum BulkCipherAlgorithm {
wolfSSL 4:1b0d80432c79 1165 wolfssl_cipher_null,
wolfSSL 4:1b0d80432c79 1166 wolfssl_rc4,
wolfSSL 4:1b0d80432c79 1167 wolfssl_rc2,
wolfSSL 4:1b0d80432c79 1168 wolfssl_des,
wolfSSL 4:1b0d80432c79 1169 wolfssl_triple_des, /* leading 3 (3des) not valid identifier */
wolfSSL 4:1b0d80432c79 1170 wolfssl_des40,
wolfSSL 4:1b0d80432c79 1171 wolfssl_idea,
wolfSSL 4:1b0d80432c79 1172 wolfssl_aes,
wolfSSL 4:1b0d80432c79 1173 wolfssl_aes_gcm,
wolfSSL 4:1b0d80432c79 1174 wolfssl_aes_ccm,
wolfSSL 4:1b0d80432c79 1175 wolfssl_chacha,
wolfSSL 4:1b0d80432c79 1176 wolfssl_camellia,
wolfSSL 4:1b0d80432c79 1177 wolfssl_hc128, /* wolfSSL extensions */
wolfSSL 4:1b0d80432c79 1178 wolfssl_rabbit
wolfSSL 4:1b0d80432c79 1179 };
wolfSSL 4:1b0d80432c79 1180
wolfSSL 4:1b0d80432c79 1181
wolfSSL 4:1b0d80432c79 1182 /* for KDF TLS 1.2 mac types */
wolfSSL 4:1b0d80432c79 1183 enum KDF_MacAlgorithm {
wolfSSL 4:1b0d80432c79 1184 wolfssl_sha256 = 4, /* needs to match internal MACAlgorithm */
wolfSSL 4:1b0d80432c79 1185 wolfssl_sha384,
wolfSSL 4:1b0d80432c79 1186 wolfssl_sha512
wolfSSL 4:1b0d80432c79 1187 };
wolfSSL 4:1b0d80432c79 1188
wolfSSL 4:1b0d80432c79 1189
wolfSSL 4:1b0d80432c79 1190 /* Public Key Callback support */
wolfSSL 4:1b0d80432c79 1191 typedef int (*CallbackEccSign)(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 1192 const unsigned char* in, unsigned int inSz,
wolfSSL 4:1b0d80432c79 1193 unsigned char* out, unsigned int* outSz,
wolfSSL 4:1b0d80432c79 1194 const unsigned char* keyDer, unsigned int keySz,
wolfSSL 4:1b0d80432c79 1195 void* ctx);
wolfSSL 4:1b0d80432c79 1196 WOLFSSL_API void wolfSSL_CTX_SetEccSignCb(WOLFSSL_CTX*, CallbackEccSign);
wolfSSL 4:1b0d80432c79 1197 WOLFSSL_API void wolfSSL_SetEccSignCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1198 WOLFSSL_API void* wolfSSL_GetEccSignCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1199
wolfSSL 4:1b0d80432c79 1200 typedef int (*CallbackEccVerify)(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 1201 const unsigned char* sig, unsigned int sigSz,
wolfSSL 4:1b0d80432c79 1202 const unsigned char* hash, unsigned int hashSz,
wolfSSL 4:1b0d80432c79 1203 const unsigned char* keyDer, unsigned int keySz,
wolfSSL 4:1b0d80432c79 1204 int* result, void* ctx);
wolfSSL 4:1b0d80432c79 1205 WOLFSSL_API void wolfSSL_CTX_SetEccVerifyCb(WOLFSSL_CTX*, CallbackEccVerify);
wolfSSL 4:1b0d80432c79 1206 WOLFSSL_API void wolfSSL_SetEccVerifyCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1207 WOLFSSL_API void* wolfSSL_GetEccVerifyCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1208
wolfSSL 4:1b0d80432c79 1209 typedef int (*CallbackRsaSign)(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 1210 const unsigned char* in, unsigned int inSz,
wolfSSL 4:1b0d80432c79 1211 unsigned char* out, unsigned int* outSz,
wolfSSL 4:1b0d80432c79 1212 const unsigned char* keyDer, unsigned int keySz,
wolfSSL 4:1b0d80432c79 1213 void* ctx);
wolfSSL 4:1b0d80432c79 1214 WOLFSSL_API void wolfSSL_CTX_SetRsaSignCb(WOLFSSL_CTX*, CallbackRsaSign);
wolfSSL 4:1b0d80432c79 1215 WOLFSSL_API void wolfSSL_SetRsaSignCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1216 WOLFSSL_API void* wolfSSL_GetRsaSignCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1217
wolfSSL 4:1b0d80432c79 1218 typedef int (*CallbackRsaVerify)(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 1219 unsigned char* sig, unsigned int sigSz,
wolfSSL 4:1b0d80432c79 1220 unsigned char** out,
wolfSSL 4:1b0d80432c79 1221 const unsigned char* keyDer, unsigned int keySz,
wolfSSL 4:1b0d80432c79 1222 void* ctx);
wolfSSL 4:1b0d80432c79 1223 WOLFSSL_API void wolfSSL_CTX_SetRsaVerifyCb(WOLFSSL_CTX*, CallbackRsaVerify);
wolfSSL 4:1b0d80432c79 1224 WOLFSSL_API void wolfSSL_SetRsaVerifyCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1225 WOLFSSL_API void* wolfSSL_GetRsaVerifyCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1226
wolfSSL 4:1b0d80432c79 1227 /* RSA Public Encrypt cb */
wolfSSL 4:1b0d80432c79 1228 typedef int (*CallbackRsaEnc)(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 1229 const unsigned char* in, unsigned int inSz,
wolfSSL 4:1b0d80432c79 1230 unsigned char* out, unsigned int* outSz,
wolfSSL 4:1b0d80432c79 1231 const unsigned char* keyDer, unsigned int keySz,
wolfSSL 4:1b0d80432c79 1232 void* ctx);
wolfSSL 4:1b0d80432c79 1233 WOLFSSL_API void wolfSSL_CTX_SetRsaEncCb(WOLFSSL_CTX*, CallbackRsaEnc);
wolfSSL 4:1b0d80432c79 1234 WOLFSSL_API void wolfSSL_SetRsaEncCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1235 WOLFSSL_API void* wolfSSL_GetRsaEncCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1236
wolfSSL 4:1b0d80432c79 1237 /* RSA Private Decrypt cb */
wolfSSL 4:1b0d80432c79 1238 typedef int (*CallbackRsaDec)(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 1239 unsigned char* in, unsigned int inSz,
wolfSSL 4:1b0d80432c79 1240 unsigned char** out,
wolfSSL 4:1b0d80432c79 1241 const unsigned char* keyDer, unsigned int keySz,
wolfSSL 4:1b0d80432c79 1242 void* ctx);
wolfSSL 4:1b0d80432c79 1243 WOLFSSL_API void wolfSSL_CTX_SetRsaDecCb(WOLFSSL_CTX*, CallbackRsaDec);
wolfSSL 4:1b0d80432c79 1244 WOLFSSL_API void wolfSSL_SetRsaDecCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 4:1b0d80432c79 1245 WOLFSSL_API void* wolfSSL_GetRsaDecCtx(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1246
wolfSSL 4:1b0d80432c79 1247
wolfSSL 4:1b0d80432c79 1248 #ifndef NO_CERTS
wolfSSL 4:1b0d80432c79 1249 WOLFSSL_API void wolfSSL_CTX_SetCACb(WOLFSSL_CTX*, CallbackCACache);
wolfSSL 4:1b0d80432c79 1250
wolfSSL 4:1b0d80432c79 1251 WOLFSSL_API WOLFSSL_CERT_MANAGER* wolfSSL_CertManagerNew(void);
wolfSSL 4:1b0d80432c79 1252 WOLFSSL_API void wolfSSL_CertManagerFree(WOLFSSL_CERT_MANAGER*);
wolfSSL 4:1b0d80432c79 1253
wolfSSL 4:1b0d80432c79 1254 WOLFSSL_API int wolfSSL_CertManagerLoadCA(WOLFSSL_CERT_MANAGER*, const char* f,
wolfSSL 4:1b0d80432c79 1255 const char* d);
wolfSSL 4:1b0d80432c79 1256 WOLFSSL_API int wolfSSL_CertManagerLoadCABuffer(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1257 const unsigned char* in, long sz, int format);
wolfSSL 4:1b0d80432c79 1258 WOLFSSL_API int wolfSSL_CertManagerUnloadCAs(WOLFSSL_CERT_MANAGER* cm);
wolfSSL 4:1b0d80432c79 1259 #ifdef WOLFSSL_TRUST_PEER_CERT
wolfSSL 4:1b0d80432c79 1260 WOLFSSL_API int wolfSSL_CertManagerUnload_trust_peers(WOLFSSL_CERT_MANAGER* cm);
wolfSSL 4:1b0d80432c79 1261 #endif
wolfSSL 4:1b0d80432c79 1262 WOLFSSL_API int wolfSSL_CertManagerVerify(WOLFSSL_CERT_MANAGER*, const char* f,
wolfSSL 4:1b0d80432c79 1263 int format);
wolfSSL 4:1b0d80432c79 1264 WOLFSSL_API int wolfSSL_CertManagerVerifyBuffer(WOLFSSL_CERT_MANAGER* cm,
wolfSSL 4:1b0d80432c79 1265 const unsigned char* buff, long sz, int format);
wolfSSL 4:1b0d80432c79 1266 WOLFSSL_API int wolfSSL_CertManagerCheckCRL(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1267 unsigned char*, int sz);
wolfSSL 4:1b0d80432c79 1268 WOLFSSL_API int wolfSSL_CertManagerEnableCRL(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1269 int options);
wolfSSL 4:1b0d80432c79 1270 WOLFSSL_API int wolfSSL_CertManagerDisableCRL(WOLFSSL_CERT_MANAGER*);
wolfSSL 4:1b0d80432c79 1271 WOLFSSL_API int wolfSSL_CertManagerLoadCRL(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1272 const char*, int, int);
wolfSSL 4:1b0d80432c79 1273 WOLFSSL_API int wolfSSL_CertManagerLoadCRLBuffer(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1274 const unsigned char*, long sz, int);
wolfSSL 4:1b0d80432c79 1275 WOLFSSL_API int wolfSSL_CertManagerSetCRL_Cb(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1276 CbMissingCRL);
wolfSSL 4:1b0d80432c79 1277 WOLFSSL_API int wolfSSL_CertManagerCheckOCSP(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1278 unsigned char*, int sz);
wolfSSL 4:1b0d80432c79 1279 WOLFSSL_API int wolfSSL_CertManagerEnableOCSP(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1280 int options);
wolfSSL 4:1b0d80432c79 1281 WOLFSSL_API int wolfSSL_CertManagerDisableOCSP(WOLFSSL_CERT_MANAGER*);
wolfSSL 4:1b0d80432c79 1282 WOLFSSL_API int wolfSSL_CertManagerSetOCSPOverrideURL(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1283 const char*);
wolfSSL 4:1b0d80432c79 1284 WOLFSSL_API int wolfSSL_CertManagerSetOCSP_Cb(WOLFSSL_CERT_MANAGER*,
wolfSSL 4:1b0d80432c79 1285 CbOCSPIO, CbOCSPRespFree, void*);
wolfSSL 4:1b0d80432c79 1286
wolfSSL 4:1b0d80432c79 1287 WOLFSSL_API int wolfSSL_CertManagerEnableOCSPStapling(
wolfSSL 4:1b0d80432c79 1288 WOLFSSL_CERT_MANAGER* cm);
wolfSSL 4:1b0d80432c79 1289
wolfSSL 4:1b0d80432c79 1290 WOLFSSL_API int wolfSSL_EnableCRL(WOLFSSL* ssl, int options);
wolfSSL 4:1b0d80432c79 1291 WOLFSSL_API int wolfSSL_DisableCRL(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1292 WOLFSSL_API int wolfSSL_LoadCRL(WOLFSSL*, const char*, int, int);
wolfSSL 4:1b0d80432c79 1293 WOLFSSL_API int wolfSSL_SetCRL_Cb(WOLFSSL*, CbMissingCRL);
wolfSSL 4:1b0d80432c79 1294 WOLFSSL_API int wolfSSL_EnableOCSP(WOLFSSL*, int options);
wolfSSL 4:1b0d80432c79 1295 WOLFSSL_API int wolfSSL_DisableOCSP(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1296 WOLFSSL_API int wolfSSL_SetOCSP_OverrideURL(WOLFSSL*, const char*);
wolfSSL 4:1b0d80432c79 1297 WOLFSSL_API int wolfSSL_SetOCSP_Cb(WOLFSSL*, CbOCSPIO, CbOCSPRespFree, void*);
wolfSSL 4:1b0d80432c79 1298
wolfSSL 4:1b0d80432c79 1299 WOLFSSL_API int wolfSSL_CTX_EnableCRL(WOLFSSL_CTX* ctx, int options);
wolfSSL 4:1b0d80432c79 1300 WOLFSSL_API int wolfSSL_CTX_DisableCRL(WOLFSSL_CTX* ctx);
wolfSSL 4:1b0d80432c79 1301 WOLFSSL_API int wolfSSL_CTX_LoadCRL(WOLFSSL_CTX*, const char*, int, int);
wolfSSL 4:1b0d80432c79 1302 WOLFSSL_API int wolfSSL_CTX_SetCRL_Cb(WOLFSSL_CTX*, CbMissingCRL);
wolfSSL 4:1b0d80432c79 1303 WOLFSSL_API int wolfSSL_CTX_EnableOCSP(WOLFSSL_CTX*, int options);
wolfSSL 4:1b0d80432c79 1304 WOLFSSL_API int wolfSSL_CTX_DisableOCSP(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 1305 WOLFSSL_API int wolfSSL_CTX_SetOCSP_OverrideURL(WOLFSSL_CTX*, const char*);
wolfSSL 4:1b0d80432c79 1306 WOLFSSL_API int wolfSSL_CTX_SetOCSP_Cb(WOLFSSL_CTX*,
wolfSSL 4:1b0d80432c79 1307 CbOCSPIO, CbOCSPRespFree, void*);
wolfSSL 4:1b0d80432c79 1308
wolfSSL 4:1b0d80432c79 1309 WOLFSSL_API int wolfSSL_CTX_EnableOCSPStapling(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 1310 #endif /* !NO_CERTS */
wolfSSL 4:1b0d80432c79 1311
wolfSSL 4:1b0d80432c79 1312 /* end of handshake frees temporary arrays, if user needs for get_keys or
wolfSSL 4:1b0d80432c79 1313 psk hints, call KeepArrays before handshake and then FreeArrays when done
wolfSSL 4:1b0d80432c79 1314 if don't want to wait for object free */
wolfSSL 4:1b0d80432c79 1315 WOLFSSL_API void wolfSSL_KeepArrays(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1316 WOLFSSL_API void wolfSSL_FreeArrays(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1317
wolfSSL 4:1b0d80432c79 1318
wolfSSL 4:1b0d80432c79 1319 /* cavium additions */
wolfSSL 4:1b0d80432c79 1320 WOLFSSL_API int wolfSSL_UseCavium(WOLFSSL*, int devId);
wolfSSL 4:1b0d80432c79 1321 WOLFSSL_API int wolfSSL_CTX_UseCavium(WOLFSSL_CTX*, int devId);
wolfSSL 4:1b0d80432c79 1322
wolfSSL 4:1b0d80432c79 1323 /* TLS Extensions */
wolfSSL 4:1b0d80432c79 1324
wolfSSL 4:1b0d80432c79 1325 /* Server Name Indication */
wolfSSL 4:1b0d80432c79 1326 #ifdef HAVE_SNI
wolfSSL 4:1b0d80432c79 1327
wolfSSL 4:1b0d80432c79 1328 /* SNI types */
wolfSSL 4:1b0d80432c79 1329 enum {
wolfSSL 4:1b0d80432c79 1330 WOLFSSL_SNI_HOST_NAME = 0
wolfSSL 4:1b0d80432c79 1331 };
wolfSSL 4:1b0d80432c79 1332
wolfSSL 4:1b0d80432c79 1333 WOLFSSL_API int wolfSSL_UseSNI(WOLFSSL* ssl, unsigned char type,
wolfSSL 4:1b0d80432c79 1334 const void* data, unsigned short size);
wolfSSL 4:1b0d80432c79 1335 WOLFSSL_API int wolfSSL_CTX_UseSNI(WOLFSSL_CTX* ctx, unsigned char type,
wolfSSL 4:1b0d80432c79 1336 const void* data, unsigned short size);
wolfSSL 4:1b0d80432c79 1337
wolfSSL 4:1b0d80432c79 1338 #ifndef NO_WOLFSSL_SERVER
wolfSSL 4:1b0d80432c79 1339
wolfSSL 4:1b0d80432c79 1340 /* SNI options */
wolfSSL 4:1b0d80432c79 1341 enum {
wolfSSL 4:1b0d80432c79 1342 /* Do not abort the handshake if the requested SNI didn't match. */
wolfSSL 4:1b0d80432c79 1343 WOLFSSL_SNI_CONTINUE_ON_MISMATCH = 0x01,
wolfSSL 4:1b0d80432c79 1344
wolfSSL 4:1b0d80432c79 1345 /* Behave as if the requested SNI matched in a case of mismatch. */
wolfSSL 4:1b0d80432c79 1346 /* In this case, the status will be set to WOLFSSL_SNI_FAKE_MATCH. */
wolfSSL 4:1b0d80432c79 1347 WOLFSSL_SNI_ANSWER_ON_MISMATCH = 0x02,
wolfSSL 4:1b0d80432c79 1348
wolfSSL 4:1b0d80432c79 1349 /* Abort the handshake if the client didn't send a SNI request. */
wolfSSL 4:1b0d80432c79 1350 WOLFSSL_SNI_ABORT_ON_ABSENCE = 0x04,
wolfSSL 4:1b0d80432c79 1351 };
wolfSSL 4:1b0d80432c79 1352
wolfSSL 4:1b0d80432c79 1353 WOLFSSL_API void wolfSSL_SNI_SetOptions(WOLFSSL* ssl, unsigned char type,
wolfSSL 4:1b0d80432c79 1354 unsigned char options);
wolfSSL 4:1b0d80432c79 1355 WOLFSSL_API void wolfSSL_CTX_SNI_SetOptions(WOLFSSL_CTX* ctx,
wolfSSL 4:1b0d80432c79 1356 unsigned char type, unsigned char options);
wolfSSL 4:1b0d80432c79 1357
wolfSSL 4:1b0d80432c79 1358 /* SNI status */
wolfSSL 4:1b0d80432c79 1359 enum {
wolfSSL 4:1b0d80432c79 1360 WOLFSSL_SNI_NO_MATCH = 0,
wolfSSL 4:1b0d80432c79 1361 WOLFSSL_SNI_FAKE_MATCH = 1, /**< @see WOLFSSL_SNI_ANSWER_ON_MISMATCH */
wolfSSL 4:1b0d80432c79 1362 WOLFSSL_SNI_REAL_MATCH = 2,
wolfSSL 4:1b0d80432c79 1363 WOLFSSL_SNI_FORCE_KEEP = 3 /** Used with -DWOLFSSL_ALWAYS_KEEP_SNI */
wolfSSL 4:1b0d80432c79 1364 };
wolfSSL 4:1b0d80432c79 1365
wolfSSL 4:1b0d80432c79 1366 WOLFSSL_API unsigned char wolfSSL_SNI_Status(WOLFSSL* ssl, unsigned char type);
wolfSSL 4:1b0d80432c79 1367
wolfSSL 4:1b0d80432c79 1368 WOLFSSL_API unsigned short wolfSSL_SNI_GetRequest(WOLFSSL *ssl,
wolfSSL 4:1b0d80432c79 1369 unsigned char type, void** data);
wolfSSL 4:1b0d80432c79 1370 WOLFSSL_API int wolfSSL_SNI_GetFromBuffer(
wolfSSL 4:1b0d80432c79 1371 const unsigned char* clientHello, unsigned int helloSz,
wolfSSL 4:1b0d80432c79 1372 unsigned char type, unsigned char* sni, unsigned int* inOutSz);
wolfSSL 4:1b0d80432c79 1373
wolfSSL 4:1b0d80432c79 1374 #endif
wolfSSL 4:1b0d80432c79 1375 #endif
wolfSSL 4:1b0d80432c79 1376
wolfSSL 4:1b0d80432c79 1377 /* Application-Layer Protocol Negotiation */
wolfSSL 4:1b0d80432c79 1378 #ifdef HAVE_ALPN
wolfSSL 4:1b0d80432c79 1379
wolfSSL 4:1b0d80432c79 1380 /* ALPN status code */
wolfSSL 4:1b0d80432c79 1381 enum {
wolfSSL 4:1b0d80432c79 1382 WOLFSSL_ALPN_NO_MATCH = 0,
wolfSSL 4:1b0d80432c79 1383 WOLFSSL_ALPN_MATCH = 1,
wolfSSL 4:1b0d80432c79 1384 WOLFSSL_ALPN_CONTINUE_ON_MISMATCH = 2,
wolfSSL 4:1b0d80432c79 1385 WOLFSSL_ALPN_FAILED_ON_MISMATCH = 4,
wolfSSL 4:1b0d80432c79 1386 };
wolfSSL 4:1b0d80432c79 1387
wolfSSL 4:1b0d80432c79 1388 enum {
wolfSSL 4:1b0d80432c79 1389 WOLFSSL_MAX_ALPN_PROTO_NAME_LEN = 255,
wolfSSL 4:1b0d80432c79 1390 WOLFSSL_MAX_ALPN_NUMBER = 257
wolfSSL 4:1b0d80432c79 1391 };
wolfSSL 4:1b0d80432c79 1392
wolfSSL 4:1b0d80432c79 1393 WOLFSSL_API int wolfSSL_UseALPN(WOLFSSL* ssl, char *protocol_name_list,
wolfSSL 4:1b0d80432c79 1394 unsigned int protocol_name_listSz,
wolfSSL 4:1b0d80432c79 1395 unsigned char options);
wolfSSL 4:1b0d80432c79 1396
wolfSSL 4:1b0d80432c79 1397 WOLFSSL_API int wolfSSL_ALPN_GetProtocol(WOLFSSL* ssl, char **protocol_name,
wolfSSL 4:1b0d80432c79 1398 unsigned short *size);
wolfSSL 4:1b0d80432c79 1399
wolfSSL 4:1b0d80432c79 1400 WOLFSSL_API int wolfSSL_ALPN_GetPeerProtocol(WOLFSSL* ssl, char **list,
wolfSSL 4:1b0d80432c79 1401 unsigned short *listSz);
wolfSSL 4:1b0d80432c79 1402 #endif /* HAVE_ALPN */
wolfSSL 4:1b0d80432c79 1403
wolfSSL 4:1b0d80432c79 1404 /* Maximum Fragment Length */
wolfSSL 4:1b0d80432c79 1405 #ifdef HAVE_MAX_FRAGMENT
wolfSSL 4:1b0d80432c79 1406
wolfSSL 4:1b0d80432c79 1407 /* Fragment lengths */
wolfSSL 4:1b0d80432c79 1408 enum {
wolfSSL 4:1b0d80432c79 1409 WOLFSSL_MFL_2_9 = 1, /* 512 bytes */
wolfSSL 4:1b0d80432c79 1410 WOLFSSL_MFL_2_10 = 2, /* 1024 bytes */
wolfSSL 4:1b0d80432c79 1411 WOLFSSL_MFL_2_11 = 3, /* 2048 bytes */
wolfSSL 4:1b0d80432c79 1412 WOLFSSL_MFL_2_12 = 4, /* 4096 bytes */
wolfSSL 4:1b0d80432c79 1413 WOLFSSL_MFL_2_13 = 5 /* 8192 bytes *//* wolfSSL ONLY!!! */
wolfSSL 4:1b0d80432c79 1414 };
wolfSSL 4:1b0d80432c79 1415
wolfSSL 4:1b0d80432c79 1416 #ifndef NO_WOLFSSL_CLIENT
wolfSSL 4:1b0d80432c79 1417
wolfSSL 4:1b0d80432c79 1418 WOLFSSL_API int wolfSSL_UseMaxFragment(WOLFSSL* ssl, unsigned char mfl);
wolfSSL 4:1b0d80432c79 1419 WOLFSSL_API int wolfSSL_CTX_UseMaxFragment(WOLFSSL_CTX* ctx, unsigned char mfl);
wolfSSL 4:1b0d80432c79 1420
wolfSSL 4:1b0d80432c79 1421 #endif
wolfSSL 4:1b0d80432c79 1422 #endif
wolfSSL 4:1b0d80432c79 1423
wolfSSL 4:1b0d80432c79 1424 /* Truncated HMAC */
wolfSSL 4:1b0d80432c79 1425 #ifdef HAVE_TRUNCATED_HMAC
wolfSSL 4:1b0d80432c79 1426 #ifndef NO_WOLFSSL_CLIENT
wolfSSL 4:1b0d80432c79 1427
wolfSSL 4:1b0d80432c79 1428 WOLFSSL_API int wolfSSL_UseTruncatedHMAC(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1429 WOLFSSL_API int wolfSSL_CTX_UseTruncatedHMAC(WOLFSSL_CTX* ctx);
wolfSSL 4:1b0d80432c79 1430
wolfSSL 4:1b0d80432c79 1431 #endif
wolfSSL 4:1b0d80432c79 1432 #endif
wolfSSL 4:1b0d80432c79 1433
wolfSSL 4:1b0d80432c79 1434 /* Certificate Status Request */
wolfSSL 4:1b0d80432c79 1435 /* Certificate Status Type */
wolfSSL 4:1b0d80432c79 1436 enum {
wolfSSL 4:1b0d80432c79 1437 WOLFSSL_CSR_OCSP = 1
wolfSSL 4:1b0d80432c79 1438 };
wolfSSL 4:1b0d80432c79 1439
wolfSSL 4:1b0d80432c79 1440 /* Certificate Status Options (flags) */
wolfSSL 4:1b0d80432c79 1441 enum {
wolfSSL 4:1b0d80432c79 1442 WOLFSSL_CSR_OCSP_USE_NONCE = 0x01
wolfSSL 4:1b0d80432c79 1443 };
wolfSSL 4:1b0d80432c79 1444
wolfSSL 4:1b0d80432c79 1445 #ifdef HAVE_CERTIFICATE_STATUS_REQUEST
wolfSSL 4:1b0d80432c79 1446 #ifndef NO_WOLFSSL_CLIENT
wolfSSL 4:1b0d80432c79 1447
wolfSSL 4:1b0d80432c79 1448 WOLFSSL_API int wolfSSL_UseOCSPStapling(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 1449 unsigned char status_type, unsigned char options);
wolfSSL 4:1b0d80432c79 1450
wolfSSL 4:1b0d80432c79 1451 WOLFSSL_API int wolfSSL_CTX_UseOCSPStapling(WOLFSSL_CTX* ctx,
wolfSSL 4:1b0d80432c79 1452 unsigned char status_type, unsigned char options);
wolfSSL 4:1b0d80432c79 1453
wolfSSL 4:1b0d80432c79 1454 #endif
wolfSSL 4:1b0d80432c79 1455 #endif
wolfSSL 4:1b0d80432c79 1456
wolfSSL 4:1b0d80432c79 1457 /* Certificate Status Request v2 */
wolfSSL 4:1b0d80432c79 1458 /* Certificate Status Type */
wolfSSL 4:1b0d80432c79 1459 enum {
wolfSSL 4:1b0d80432c79 1460 WOLFSSL_CSR2_OCSP = 1,
wolfSSL 4:1b0d80432c79 1461 WOLFSSL_CSR2_OCSP_MULTI = 2
wolfSSL 4:1b0d80432c79 1462 };
wolfSSL 4:1b0d80432c79 1463
wolfSSL 4:1b0d80432c79 1464 /* Certificate Status v2 Options (flags) */
wolfSSL 4:1b0d80432c79 1465 enum {
wolfSSL 4:1b0d80432c79 1466 WOLFSSL_CSR2_OCSP_USE_NONCE = 0x01
wolfSSL 4:1b0d80432c79 1467 };
wolfSSL 4:1b0d80432c79 1468
wolfSSL 4:1b0d80432c79 1469 #ifdef HAVE_CERTIFICATE_STATUS_REQUEST_V2
wolfSSL 4:1b0d80432c79 1470 #ifndef NO_WOLFSSL_CLIENT
wolfSSL 4:1b0d80432c79 1471
wolfSSL 4:1b0d80432c79 1472 WOLFSSL_API int wolfSSL_UseOCSPStaplingV2(WOLFSSL* ssl,
wolfSSL 4:1b0d80432c79 1473 unsigned char status_type, unsigned char options);
wolfSSL 4:1b0d80432c79 1474
wolfSSL 4:1b0d80432c79 1475 WOLFSSL_API int wolfSSL_CTX_UseOCSPStaplingV2(WOLFSSL_CTX* ctx,
wolfSSL 4:1b0d80432c79 1476 unsigned char status_type, unsigned char options);
wolfSSL 4:1b0d80432c79 1477
wolfSSL 4:1b0d80432c79 1478 #endif
wolfSSL 4:1b0d80432c79 1479 #endif
wolfSSL 4:1b0d80432c79 1480
wolfSSL 4:1b0d80432c79 1481 /* Elliptic Curves */
wolfSSL 4:1b0d80432c79 1482 enum {
wolfSSL 4:1b0d80432c79 1483 WOLFSSL_ECC_SECP160R1 = 0x10,
wolfSSL 4:1b0d80432c79 1484 WOLFSSL_ECC_SECP192R1 = 0x13,
wolfSSL 4:1b0d80432c79 1485 WOLFSSL_ECC_SECP224R1 = 0x15,
wolfSSL 4:1b0d80432c79 1486 WOLFSSL_ECC_SECP256R1 = 0x17,
wolfSSL 4:1b0d80432c79 1487 WOLFSSL_ECC_SECP384R1 = 0x18,
wolfSSL 4:1b0d80432c79 1488 WOLFSSL_ECC_SECP521R1 = 0x19
wolfSSL 4:1b0d80432c79 1489 };
wolfSSL 4:1b0d80432c79 1490
wolfSSL 4:1b0d80432c79 1491 #ifdef HAVE_SUPPORTED_CURVES
wolfSSL 4:1b0d80432c79 1492 #ifndef NO_WOLFSSL_CLIENT
wolfSSL 4:1b0d80432c79 1493
wolfSSL 4:1b0d80432c79 1494 WOLFSSL_API int wolfSSL_UseSupportedCurve(WOLFSSL* ssl, unsigned short name);
wolfSSL 4:1b0d80432c79 1495 WOLFSSL_API int wolfSSL_CTX_UseSupportedCurve(WOLFSSL_CTX* ctx,
wolfSSL 4:1b0d80432c79 1496 unsigned short name);
wolfSSL 4:1b0d80432c79 1497
wolfSSL 4:1b0d80432c79 1498 #endif
wolfSSL 4:1b0d80432c79 1499 #endif
wolfSSL 4:1b0d80432c79 1500
wolfSSL 4:1b0d80432c79 1501
wolfSSL 4:1b0d80432c79 1502 /* Secure Renegotiation */
wolfSSL 4:1b0d80432c79 1503 #ifdef HAVE_SECURE_RENEGOTIATION
wolfSSL 4:1b0d80432c79 1504
wolfSSL 4:1b0d80432c79 1505 WOLFSSL_API int wolfSSL_UseSecureRenegotiation(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1506 WOLFSSL_API int wolfSSL_Rehandshake(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1507
wolfSSL 4:1b0d80432c79 1508 #endif
wolfSSL 4:1b0d80432c79 1509
wolfSSL 4:1b0d80432c79 1510 /* Session Ticket */
wolfSSL 4:1b0d80432c79 1511 #ifdef HAVE_SESSION_TICKET
wolfSSL 4:1b0d80432c79 1512
wolfSSL 4:1b0d80432c79 1513 #ifndef NO_WOLFSSL_CLIENT
wolfSSL 4:1b0d80432c79 1514 WOLFSSL_API int wolfSSL_UseSessionTicket(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1515 WOLFSSL_API int wolfSSL_CTX_UseSessionTicket(WOLFSSL_CTX* ctx);
wolfSSL 4:1b0d80432c79 1516 WOLFSSL_API int wolfSSL_get_SessionTicket(WOLFSSL*, unsigned char*, unsigned int*);
wolfSSL 4:1b0d80432c79 1517 WOLFSSL_API int wolfSSL_set_SessionTicket(WOLFSSL*, unsigned char*, unsigned int);
wolfSSL 4:1b0d80432c79 1518 typedef int (*CallbackSessionTicket)(WOLFSSL*, const unsigned char*, int, void*);
wolfSSL 4:1b0d80432c79 1519 WOLFSSL_API int wolfSSL_set_SessionTicket_cb(WOLFSSL*,
wolfSSL 4:1b0d80432c79 1520 CallbackSessionTicket, void*);
wolfSSL 4:1b0d80432c79 1521 #endif /* NO_WOLFSSL_CLIENT */
wolfSSL 4:1b0d80432c79 1522
wolfSSL 4:1b0d80432c79 1523 #ifndef NO_WOLFSSL_SERVER
wolfSSL 4:1b0d80432c79 1524
wolfSSL 4:1b0d80432c79 1525 #define WOLFSSL_TICKET_NAME_SZ 16
wolfSSL 4:1b0d80432c79 1526 #define WOLFSSL_TICKET_IV_SZ 16
wolfSSL 4:1b0d80432c79 1527 #define WOLFSSL_TICKET_MAC_SZ 32
wolfSSL 4:1b0d80432c79 1528
wolfSSL 4:1b0d80432c79 1529 enum TicketEncRet {
wolfSSL 4:1b0d80432c79 1530 WOLFSSL_TICKET_RET_FATAL = -1, /* fatal error, don't use ticket */
wolfSSL 4:1b0d80432c79 1531 WOLFSSL_TICKET_RET_OK = 0, /* ok, use ticket */
wolfSSL 4:1b0d80432c79 1532 WOLFSSL_TICKET_RET_REJECT, /* don't use ticket, but not fatal */
wolfSSL 4:1b0d80432c79 1533 WOLFSSL_TICKET_RET_CREATE /* existing ticket ok and create new one */
wolfSSL 4:1b0d80432c79 1534 };
wolfSSL 4:1b0d80432c79 1535
wolfSSL 4:1b0d80432c79 1536 typedef int (*SessionTicketEncCb)(WOLFSSL*,
wolfSSL 4:1b0d80432c79 1537 unsigned char key_name[WOLFSSL_TICKET_NAME_SZ],
wolfSSL 4:1b0d80432c79 1538 unsigned char iv[WOLFSSL_TICKET_IV_SZ],
wolfSSL 4:1b0d80432c79 1539 unsigned char mac[WOLFSSL_TICKET_MAC_SZ],
wolfSSL 4:1b0d80432c79 1540 int enc, unsigned char*, int, int*, void*);
wolfSSL 4:1b0d80432c79 1541 WOLFSSL_API int wolfSSL_CTX_set_TicketEncCb(WOLFSSL_CTX* ctx,
wolfSSL 4:1b0d80432c79 1542 SessionTicketEncCb);
wolfSSL 4:1b0d80432c79 1543 WOLFSSL_API int wolfSSL_CTX_set_TicketHint(WOLFSSL_CTX* ctx, int);
wolfSSL 4:1b0d80432c79 1544 WOLFSSL_API int wolfSSL_CTX_set_TicketEncCtx(WOLFSSL_CTX* ctx, void*);
wolfSSL 4:1b0d80432c79 1545
wolfSSL 4:1b0d80432c79 1546 #endif /* NO_WOLFSSL_SERVER */
wolfSSL 4:1b0d80432c79 1547
wolfSSL 4:1b0d80432c79 1548 #endif /* HAVE_SESSION_TICKET */
wolfSSL 4:1b0d80432c79 1549
wolfSSL 4:1b0d80432c79 1550 #ifdef HAVE_QSH
wolfSSL 4:1b0d80432c79 1551 /* Quantum-safe Crypto Schemes */
wolfSSL 4:1b0d80432c79 1552 enum {
wolfSSL 4:1b0d80432c79 1553 WOLFSSL_NTRU_EESS439 = 0x0101, /* max plaintext length of 65 */
wolfSSL 4:1b0d80432c79 1554 WOLFSSL_NTRU_EESS593 = 0x0102, /* max plaintext length of 86 */
wolfSSL 4:1b0d80432c79 1555 WOLFSSL_NTRU_EESS743 = 0x0103, /* max plaintext length of 106 */
wolfSSL 4:1b0d80432c79 1556 WOLFSSL_LWE_XXX = 0x0201, /* Learning With Error encryption scheme */
wolfSSL 4:1b0d80432c79 1557 WOLFSSL_HFE_XXX = 0x0301, /* Hidden Field Equation scheme */
wolfSSL 4:1b0d80432c79 1558 WOLFSSL_NULL_QSH = 0xFFFF /* QSHScheme is not used */
wolfSSL 4:1b0d80432c79 1559 };
wolfSSL 4:1b0d80432c79 1560
wolfSSL 4:1b0d80432c79 1561
wolfSSL 4:1b0d80432c79 1562 /* test if the connection is using a QSH secure connection return 1 if so */
wolfSSL 4:1b0d80432c79 1563 WOLFSSL_API int wolfSSL_isQSH(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1564 WOLFSSL_API int wolfSSL_UseSupportedQSH(WOLFSSL* ssl, unsigned short name);
wolfSSL 4:1b0d80432c79 1565 #ifndef NO_WOLFSSL_CLIENT
wolfSSL 4:1b0d80432c79 1566 /* user control over sending client public key in hello
wolfSSL 4:1b0d80432c79 1567 when flag = 1 will send keys if flag is 0 or function is not called
wolfSSL 4:1b0d80432c79 1568 then will not send keys in the hello extension */
wolfSSL 4:1b0d80432c79 1569 WOLFSSL_API int wolfSSL_UseClientQSHKeys(WOLFSSL* ssl, unsigned char flag);
wolfSSL 4:1b0d80432c79 1570 #endif
wolfSSL 4:1b0d80432c79 1571 #endif
wolfSSL 4:1b0d80432c79 1572
wolfSSL 4:1b0d80432c79 1573 #define WOLFSSL_CRL_MONITOR 0x01 /* monitor this dir flag */
wolfSSL 4:1b0d80432c79 1574 #define WOLFSSL_CRL_START_MON 0x02 /* start monitoring flag */
wolfSSL 4:1b0d80432c79 1575
wolfSSL 4:1b0d80432c79 1576
wolfSSL 4:1b0d80432c79 1577 /* notify user the handshake is done */
wolfSSL 4:1b0d80432c79 1578 typedef int (*HandShakeDoneCb)(WOLFSSL*, void*);
wolfSSL 4:1b0d80432c79 1579 WOLFSSL_API int wolfSSL_SetHsDoneCb(WOLFSSL*, HandShakeDoneCb, void*);
wolfSSL 4:1b0d80432c79 1580
wolfSSL 4:1b0d80432c79 1581
wolfSSL 4:1b0d80432c79 1582 WOLFSSL_API int wolfSSL_PrintSessionStats(void);
wolfSSL 4:1b0d80432c79 1583 WOLFSSL_API int wolfSSL_get_session_stats(unsigned int* active,
wolfSSL 4:1b0d80432c79 1584 unsigned int* total,
wolfSSL 4:1b0d80432c79 1585 unsigned int* peak,
wolfSSL 4:1b0d80432c79 1586 unsigned int* maxSessions);
wolfSSL 4:1b0d80432c79 1587 /* External facing KDF */
wolfSSL 4:1b0d80432c79 1588 WOLFSSL_API
wolfSSL 4:1b0d80432c79 1589 int wolfSSL_MakeTlsMasterSecret(unsigned char* ms, unsigned int msLen,
wolfSSL 4:1b0d80432c79 1590 const unsigned char* pms, unsigned int pmsLen,
wolfSSL 4:1b0d80432c79 1591 const unsigned char* cr, const unsigned char* sr,
wolfSSL 4:1b0d80432c79 1592 int tls1_2, int hash_type);
wolfSSL 4:1b0d80432c79 1593
wolfSSL 4:1b0d80432c79 1594 WOLFSSL_API
wolfSSL 4:1b0d80432c79 1595 int wolfSSL_DeriveTlsKeys(unsigned char* key_data, unsigned int keyLen,
wolfSSL 4:1b0d80432c79 1596 const unsigned char* ms, unsigned int msLen,
wolfSSL 4:1b0d80432c79 1597 const unsigned char* sr, const unsigned char* cr,
wolfSSL 4:1b0d80432c79 1598 int tls1_2, int hash_type);
wolfSSL 4:1b0d80432c79 1599
wolfSSL 4:1b0d80432c79 1600 #ifdef WOLFSSL_CALLBACKS
wolfSSL 4:1b0d80432c79 1601
wolfSSL 4:1b0d80432c79 1602 /* used internally by wolfSSL while OpenSSL types aren't */
wolfSSL 4:1b0d80432c79 1603 #include <wolfssl/callbacks.h>
wolfSSL 4:1b0d80432c79 1604
wolfSSL 4:1b0d80432c79 1605 typedef int (*HandShakeCallBack)(HandShakeInfo*);
wolfSSL 4:1b0d80432c79 1606 typedef int (*TimeoutCallBack)(TimeoutInfo*);
wolfSSL 4:1b0d80432c79 1607
wolfSSL 4:1b0d80432c79 1608 /* wolfSSL connect extension allowing HandShakeCallBack and/or TimeoutCallBack
wolfSSL 4:1b0d80432c79 1609 for diagnostics */
wolfSSL 4:1b0d80432c79 1610 WOLFSSL_API int wolfSSL_connect_ex(WOLFSSL*, HandShakeCallBack, TimeoutCallBack,
wolfSSL 4:1b0d80432c79 1611 Timeval);
wolfSSL 4:1b0d80432c79 1612 WOLFSSL_API int wolfSSL_accept_ex(WOLFSSL*, HandShakeCallBack, TimeoutCallBack,
wolfSSL 4:1b0d80432c79 1613 Timeval);
wolfSSL 4:1b0d80432c79 1614
wolfSSL 4:1b0d80432c79 1615 #endif /* WOLFSSL_CALLBACKS */
wolfSSL 4:1b0d80432c79 1616
wolfSSL 4:1b0d80432c79 1617
wolfSSL 4:1b0d80432c79 1618 #ifdef WOLFSSL_HAVE_WOLFSCEP
wolfSSL 4:1b0d80432c79 1619 WOLFSSL_API void wolfSSL_wolfSCEP(void);
wolfSSL 4:1b0d80432c79 1620 #endif /* WOLFSSL_HAVE_WOLFSCEP */
wolfSSL 4:1b0d80432c79 1621
wolfSSL 4:1b0d80432c79 1622 #ifdef WOLFSSL_HAVE_CERT_SERVICE
wolfSSL 4:1b0d80432c79 1623 WOLFSSL_API void wolfSSL_cert_service(void);
wolfSSL 4:1b0d80432c79 1624 #endif
wolfSSL 4:1b0d80432c79 1625
wolfSSL 4:1b0d80432c79 1626
wolfSSL 4:1b0d80432c79 1627 #ifdef OPENSSL_EXTRA /*lighttp compatibility */
wolfSSL 4:1b0d80432c79 1628 #ifdef HAVE_LIGHTY
wolfSSL 4:1b0d80432c79 1629
wolfSSL 4:1b0d80432c79 1630 typedef struct WOLFSSL_X509_NAME_ENTRY {
wolfSSL 4:1b0d80432c79 1631 WOLFSSL_ASN1_OBJECT* object;
wolfSSL 4:1b0d80432c79 1632 WOLFSSL_ASN1_STRING* value;
wolfSSL 4:1b0d80432c79 1633 int set;
wolfSSL 4:1b0d80432c79 1634 int size;
wolfSSL 4:1b0d80432c79 1635 } WOLFSSL_X509_NAME_ENTRY;
wolfSSL 4:1b0d80432c79 1636
wolfSSL 4:1b0d80432c79 1637
wolfSSL 4:1b0d80432c79 1638 #include <wolfssl/openssl/dh.h>
wolfSSL 4:1b0d80432c79 1639 #include <wolfssl/openssl/asn1.h>
wolfSSL 4:1b0d80432c79 1640
wolfSSL 4:1b0d80432c79 1641 WOLFSSL_API void wolfSSL_X509_NAME_free(WOLFSSL_X509_NAME *name);
wolfSSL 4:1b0d80432c79 1642 WOLFSSL_API char wolfSSL_CTX_use_certificate(WOLFSSL_CTX *ctx, WOLFSSL_X509 *x);
wolfSSL 4:1b0d80432c79 1643 WOLFSSL_API int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey);
wolfSSL 4:1b0d80432c79 1644 WOLFSSL_API int wolfSSL_BIO_read_filename(WOLFSSL_BIO *b, const char *name);
wolfSSL 4:1b0d80432c79 1645 WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_s_file(void);
wolfSSL 4:1b0d80432c79 1646 /* These are to be merged shortly */
wolfSSL 4:1b0d80432c79 1647 WOLFSSL_API const char * wolf_OBJ_nid2sn(int n);
wolfSSL 4:1b0d80432c79 1648 WOLFSSL_API int wolf_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o);
wolfSSL 4:1b0d80432c79 1649 WOLFSSL_API int wolf_OBJ_sn2nid(const char *sn);
wolfSSL 4:1b0d80432c79 1650 WOLFSSL_API WOLFSSL_X509 *PEM_read_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
wolfSSL 4:1b0d80432c79 1651 WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth);
wolfSSL 4:1b0d80432c79 1652 WOLFSSL_API void* wolfSSL_get_app_data( const WOLFSSL *ssl);
wolfSSL 4:1b0d80432c79 1653 WOLFSSL_API void wolfSSL_set_app_data(WOLFSSL *ssl, void *arg);
wolfSSL 4:1b0d80432c79 1654 WOLFSSL_API WOLFSSL_ASN1_OBJECT * wolfSSL_X509_NAME_ENTRY_get_object(WOLFSSL_X509_NAME_ENTRY *ne);
wolfSSL 4:1b0d80432c79 1655 WOLFSSL_API WOLFSSL_X509_NAME_ENTRY *wolfSSL_X509_NAME_get_entry(WOLFSSL_X509_NAME *name, int loc);
wolfSSL 4:1b0d80432c79 1656 WOLFSSL_API void wolfSSL_sk_X509_NAME_pop_free(STACK_OF(WOLFSSL_X509_NAME)* sk, void f (WOLFSSL_X509_NAME*));
wolfSSL 4:1b0d80432c79 1657 WOLFSSL_API unsigned char *wolfSSL_SHA1(const unsigned char *d, size_t n, unsigned char *md);
wolfSSL 4:1b0d80432c79 1658 WOLFSSL_API int wolfSSL_X509_check_private_key(WOLFSSL_X509*, WOLFSSL_EVP_PKEY*);
wolfSSL 4:1b0d80432c79 1659 WOLFSSL_API STACK_OF(WOLFSSL_X509_NAME) *wolfSSL_dup_CA_list( STACK_OF(WOLFSSL_X509_NAME) *sk );
wolfSSL 4:1b0d80432c79 1660
wolfSSL 4:1b0d80432c79 1661 /* end lighttpd*/
wolfSSL 4:1b0d80432c79 1662 #endif
wolfSSL 4:1b0d80432c79 1663 #endif
wolfSSL 4:1b0d80432c79 1664
wolfSSL 4:1b0d80432c79 1665 #if defined(HAVE_STUNNEL) || defined(HAVE_LIGHTY)
wolfSSL 4:1b0d80432c79 1666
wolfSSL 4:1b0d80432c79 1667 WOLFSSL_API char * wolf_OBJ_nid2ln(int n);
wolfSSL 4:1b0d80432c79 1668 WOLFSSL_API int wolf_OBJ_txt2nid(const char *sn);
wolfSSL 4:1b0d80432c79 1669 WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_file(const char *filename, const char *mode);
wolfSSL 4:1b0d80432c79 1670 WOLFSSL_API long wolfSSL_CTX_set_tmp_dh(WOLFSSL_CTX*, WOLFSSL_DH*);
wolfSSL 4:1b0d80432c79 1671 WOLFSSL_API WOLFSSL_DH *wolfSSL_PEM_read_bio_DHparams(WOLFSSL_BIO *bp,
wolfSSL 4:1b0d80432c79 1672 WOLFSSL_DH **x, pem_password_cb *cb, void *u);
wolfSSL 4:1b0d80432c79 1673 WOLFSSL_API int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x);
wolfSSL 4:1b0d80432c79 1674
wolfSSL 4:1b0d80432c79 1675
wolfSSL 4:1b0d80432c79 1676 #endif /* HAVE_STUNNEL || HAVE_LIGHTY */
wolfSSL 4:1b0d80432c79 1677
wolfSSL 4:1b0d80432c79 1678
wolfSSL 4:1b0d80432c79 1679 #ifdef HAVE_STUNNEL
wolfSSL 4:1b0d80432c79 1680
wolfSSL 4:1b0d80432c79 1681 #include <wolfssl/openssl/crypto.h>
wolfSSL 4:1b0d80432c79 1682
wolfSSL 4:1b0d80432c79 1683 /* SNI received callback type */
wolfSSL 4:1b0d80432c79 1684 typedef int (*CallbackSniRecv)(WOLFSSL *ssl, int *ret, void* exArg);
wolfSSL 4:1b0d80432c79 1685
wolfSSL 4:1b0d80432c79 1686 WOLFSSL_API int wolfSSL_CRYPTO_set_mem_ex_functions(void *(*m) (size_t, const char *, int),
wolfSSL 4:1b0d80432c79 1687 void *(*r) (void *, size_t, const char *, int), void (*f) (void *));
wolfSSL 4:1b0d80432c79 1688
wolfSSL 4:1b0d80432c79 1689 WOLFSSL_API WOLFSSL_DH *wolfSSL_DH_generate_parameters(int prime_len, int generator,
wolfSSL 4:1b0d80432c79 1690 void (*callback) (int, int, void *), void *cb_arg);
wolfSSL 4:1b0d80432c79 1691
wolfSSL 4:1b0d80432c79 1692 WOLFSSL_API int wolfSSL_DH_generate_parameters_ex(WOLFSSL_DH*, int, int,
wolfSSL 4:1b0d80432c79 1693 void (*callback) (int, int, void *));
wolfSSL 4:1b0d80432c79 1694
wolfSSL 4:1b0d80432c79 1695 WOLFSSL_API void wolfSSL_ERR_load_crypto_strings(void);
wolfSSL 4:1b0d80432c79 1696
wolfSSL 4:1b0d80432c79 1697 WOLFSSL_API unsigned long wolfSSL_ERR_peek_last_error(void);
wolfSSL 4:1b0d80432c79 1698
wolfSSL 4:1b0d80432c79 1699 WOLFSSL_API int wolfSSL_FIPS_mode(void);
wolfSSL 4:1b0d80432c79 1700
wolfSSL 4:1b0d80432c79 1701 WOLFSSL_API int wolfSSL_FIPS_mode_set(int r);
wolfSSL 4:1b0d80432c79 1702
wolfSSL 4:1b0d80432c79 1703 WOLFSSL_API int wolfSSL_RAND_set_rand_method(const void *meth);
wolfSSL 4:1b0d80432c79 1704
wolfSSL 4:1b0d80432c79 1705 WOLFSSL_API int wolfSSL_CIPHER_get_bits(const WOLFSSL_CIPHER *c, int *alg_bits);
wolfSSL 4:1b0d80432c79 1706
wolfSSL 4:1b0d80432c79 1707 WOLFSSL_API int wolfSSL_sk_X509_NAME_num(const STACK_OF(WOLFSSL_X509_NAME) *s);
wolfSSL 4:1b0d80432c79 1708
wolfSSL 4:1b0d80432c79 1709 WOLFSSL_API int wolfSSL_sk_X509_num(const STACK_OF(WOLFSSL_X509) *s);
wolfSSL 4:1b0d80432c79 1710
wolfSSL 4:1b0d80432c79 1711 WOLFSSL_API int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO*,WOLFSSL_X509_NAME*,int,
wolfSSL 4:1b0d80432c79 1712 unsigned long);
wolfSSL 4:1b0d80432c79 1713
wolfSSL 4:1b0d80432c79 1714 WOLFSSL_API WOLFSSL_ASN1_BIT_STRING* wolfSSL_X509_get0_pubkey_bitstr(
wolfSSL 4:1b0d80432c79 1715 const WOLFSSL_X509*);
wolfSSL 4:1b0d80432c79 1716
wolfSSL 4:1b0d80432c79 1717 WOLFSSL_API int wolfSSL_CTX_add_session(WOLFSSL_CTX*, WOLFSSL_SESSION*);
wolfSSL 4:1b0d80432c79 1718
wolfSSL 4:1b0d80432c79 1719 WOLFSSL_API WOLFSSL_CTX* wolfSSL_get_SSL_CTX(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1720
wolfSSL 4:1b0d80432c79 1721 WOLFSSL_API int wolfSSL_version(WOLFSSL*);
wolfSSL 4:1b0d80432c79 1722
wolfSSL 4:1b0d80432c79 1723 WOLFSSL_API int wolfSSL_get_state(const WOLFSSL*);
wolfSSL 4:1b0d80432c79 1724
wolfSSL 4:1b0d80432c79 1725 WOLFSSL_API void* wolfSSL_sk_X509_NAME_value(STACK_OF(WOLFSSL_X509_NAME)*, int);
wolfSSL 4:1b0d80432c79 1726
wolfSSL 4:1b0d80432c79 1727 WOLFSSL_API void* wolfSSL_sk_X509_value(STACK_OF(WOLFSSL_X509)*, int);
wolfSSL 4:1b0d80432c79 1728
wolfSSL 4:1b0d80432c79 1729 WOLFSSL_API STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL*);
wolfSSL 4:1b0d80432c79 1730
wolfSSL 4:1b0d80432c79 1731 WOLFSSL_API long wolfSSL_CTX_get_options(WOLFSSL_CTX* ctx);
wolfSSL 4:1b0d80432c79 1732
wolfSSL 4:1b0d80432c79 1733 WOLFSSL_API void* wolfSSL_SESSION_get_ex_data(const WOLFSSL_SESSION*, int);
wolfSSL 4:1b0d80432c79 1734
wolfSSL 4:1b0d80432c79 1735 WOLFSSL_API int wolfSSL_SESSION_set_ex_data(WOLFSSL_SESSION*, int, void*);
wolfSSL 4:1b0d80432c79 1736
wolfSSL 4:1b0d80432c79 1737 WOLFSSL_API int wolfSSL_SESSION_get_ex_new_index(long,void*,void*,void*,
wolfSSL 4:1b0d80432c79 1738 CRYPTO_free_func*);
wolfSSL 4:1b0d80432c79 1739
wolfSSL 4:1b0d80432c79 1740 WOLFSSL_API int wolfSSL_X509_NAME_get_sz(WOLFSSL_X509_NAME*);
wolfSSL 4:1b0d80432c79 1741
wolfSSL 4:1b0d80432c79 1742
wolfSSL 4:1b0d80432c79 1743 WOLFSSL_API const unsigned char* wolfSSL_SESSION_get_id(WOLFSSL_SESSION*,
wolfSSL 4:1b0d80432c79 1744 unsigned int*);
wolfSSL 4:1b0d80432c79 1745
wolfSSL 4:1b0d80432c79 1746 WOLFSSL_API int wolfSSL_set_tlsext_host_name(WOLFSSL *, const char *);
wolfSSL 4:1b0d80432c79 1747
wolfSSL 4:1b0d80432c79 1748 WOLFSSL_API const char* wolfSSL_get_servername(WOLFSSL *, unsigned char);
wolfSSL 4:1b0d80432c79 1749
wolfSSL 4:1b0d80432c79 1750 WOLFSSL_API WOLFSSL_CTX* wolfSSL_set_SSL_CTX(WOLFSSL*,WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 1751
wolfSSL 4:1b0d80432c79 1752 WOLFSSL_API VerifyCallback wolfSSL_CTX_get_verify_callback(WOLFSSL_CTX*);
wolfSSL 4:1b0d80432c79 1753
wolfSSL 4:1b0d80432c79 1754 WOLFSSL_API void wolfSSL_CTX_set_servername_callback(WOLFSSL_CTX *,
wolfSSL 4:1b0d80432c79 1755 CallbackSniRecv);
wolfSSL 4:1b0d80432c79 1756
wolfSSL 4:1b0d80432c79 1757 WOLFSSL_API void wolfSSL_CTX_set_servername_arg(WOLFSSL_CTX *, void*);
wolfSSL 4:1b0d80432c79 1758
wolfSSL 4:1b0d80432c79 1759 WOLFSSL_API void WOLFSSL_ERR_remove_thread_state(void*);
wolfSSL 4:1b0d80432c79 1760
wolfSSL 4:1b0d80432c79 1761 WOLFSSL_API long wolfSSL_CTX_clear_options(WOLFSSL_CTX*, long);
wolfSSL 4:1b0d80432c79 1762
wolfSSL 4:1b0d80432c79 1763 WOLFSSL_API void wolfSSL_THREADID_set_callback(void (*threadid_func)(void*));
wolfSSL 4:1b0d80432c79 1764
wolfSSL 4:1b0d80432c79 1765 WOLFSSL_API void wolfSSL_THREADID_set_numeric(void* id, unsigned long val);
wolfSSL 4:1b0d80432c79 1766
wolfSSL 4:1b0d80432c79 1767 WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_STORE_get1_certs(WOLFSSL_X509_STORE_CTX*,
wolfSSL 4:1b0d80432c79 1768 WOLFSSL_X509_NAME*);
wolfSSL 4:1b0d80432c79 1769
wolfSSL 4:1b0d80432c79 1770 WOLFSSL_API void wolfSSL_sk_X509_pop_free(STACK_OF(WOLFSSL_X509)* sk, void f (WOLFSSL_X509*));
wolfSSL 4:1b0d80432c79 1771 #endif /* HAVE_STUNNEL */
wolfSSL 4:1b0d80432c79 1772
wolfSSL 4:1b0d80432c79 1773 #if defined(HAVE_STUNNEL) || defined(WOLFSSL_MYSQL_COMPATIBLE)
wolfSSL 4:1b0d80432c79 1774
wolfSSL 4:1b0d80432c79 1775 WOLFSSL_API int wolfSSL_CTX_get_verify_mode(WOLFSSL_CTX* ctx);
wolfSSL 4:1b0d80432c79 1776
wolfSSL 4:1b0d80432c79 1777 #endif
wolfSSL 4:1b0d80432c79 1778
wolfSSL 4:1b0d80432c79 1779 #ifdef WOLFSSL_JNI
wolfSSL 4:1b0d80432c79 1780 WOLFSSL_API int wolfSSL_set_jobject(WOLFSSL* ssl, void* objPtr);
wolfSSL 4:1b0d80432c79 1781 WOLFSSL_API void* wolfSSL_get_jobject(WOLFSSL* ssl);
wolfSSL 4:1b0d80432c79 1782 #endif /* WOLFSSL_JNI */
wolfSSL 4:1b0d80432c79 1783
wolfSSL 4:1b0d80432c79 1784 #ifdef __cplusplus
wolfSSL 4:1b0d80432c79 1785 } /* extern "C" */
wolfSSL 4:1b0d80432c79 1786 #endif
wolfSSL 4:1b0d80432c79 1787
wolfSSL 4:1b0d80432c79 1788
wolfSSL 4:1b0d80432c79 1789 #endif /* WOLFSSL_SSL_H */
wolfSSL 4:1b0d80432c79 1790