311 lines
5.7 KiB
C
311 lines
5.7 KiB
C
// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef _SSL_TYPES_H_
|
|
#define _SSL_TYPES_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "ssl_code.h"
|
|
|
|
typedef void SSL_CIPHER;
|
|
|
|
typedef void X509_STORE_CTX;
|
|
typedef void X509_STORE;
|
|
|
|
typedef void RSA;
|
|
|
|
typedef void STACK;
|
|
|
|
#define ossl_inline inline
|
|
|
|
#define SSL_METHOD_CALL(f, s, ...) s->method->func->ssl_##f(s, ##__VA_ARGS__)
|
|
#define X509_METHOD_CALL(f, x, ...) x->method->x509_##f(x, ##__VA_ARGS__)
|
|
#define EVP_PKEY_METHOD_CALL(f, k, ...) k->method->pkey_##f(k, ##__VA_ARGS__)
|
|
|
|
typedef int (*OPENSSL_sk_compfunc)(const void *, const void *);
|
|
|
|
struct stack_st;
|
|
typedef struct stack_st OPENSSL_STACK;
|
|
|
|
struct ssl_method_st;
|
|
typedef struct ssl_method_st SSL_METHOD;
|
|
|
|
struct ssl_method_func_st;
|
|
typedef struct ssl_method_func_st SSL_METHOD_FUNC;
|
|
|
|
struct record_layer_st;
|
|
typedef struct record_layer_st RECORD_LAYER;
|
|
|
|
struct ossl_statem_st;
|
|
typedef struct ossl_statem_st OSSL_STATEM;
|
|
|
|
struct ssl_session_st;
|
|
typedef struct ssl_session_st SSL_SESSION;
|
|
|
|
struct ssl_ctx_st;
|
|
typedef struct ssl_ctx_st SSL_CTX;
|
|
|
|
struct ssl_st;
|
|
typedef struct ssl_st SSL;
|
|
|
|
struct cert_st;
|
|
typedef struct cert_st CERT;
|
|
|
|
struct x509_st;
|
|
typedef struct x509_st X509;
|
|
|
|
struct X509_VERIFY_PARAM_st;
|
|
typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM;
|
|
|
|
struct evp_pkey_st;
|
|
typedef struct evp_pkey_st EVP_PKEY;
|
|
|
|
struct x509_method_st;
|
|
typedef struct x509_method_st X509_METHOD;
|
|
|
|
struct pkey_method_st;
|
|
typedef struct pkey_method_st PKEY_METHOD;
|
|
|
|
struct ssl_alpn_st;
|
|
typedef struct ssl_alpn_st SSL_ALPN;
|
|
|
|
struct bio_st;
|
|
typedef struct bio_st BIO;
|
|
|
|
struct stack_st {
|
|
|
|
char **data;
|
|
|
|
int num_alloc;
|
|
|
|
OPENSSL_sk_compfunc c;
|
|
};
|
|
|
|
struct evp_pkey_st {
|
|
|
|
void *pkey_pm;
|
|
|
|
const PKEY_METHOD *method;
|
|
};
|
|
|
|
struct x509_st {
|
|
|
|
/* X509 certification platform private point */
|
|
void *x509_pm;
|
|
|
|
const X509_METHOD *method;
|
|
|
|
int ref_counter;
|
|
};
|
|
|
|
struct cert_st {
|
|
|
|
int sec_level;
|
|
|
|
X509 *x509;
|
|
|
|
EVP_PKEY *pkey;
|
|
|
|
};
|
|
|
|
struct ossl_statem_st {
|
|
|
|
MSG_FLOW_STATE state;
|
|
|
|
int hand_state;
|
|
};
|
|
|
|
struct record_layer_st {
|
|
|
|
int rstate;
|
|
|
|
int read_ahead;
|
|
};
|
|
|
|
struct ssl_session_st {
|
|
|
|
long timeout;
|
|
|
|
long time;
|
|
|
|
X509 *peer;
|
|
};
|
|
|
|
struct X509_VERIFY_PARAM_st {
|
|
|
|
int depth;
|
|
|
|
};
|
|
|
|
struct bio_st {
|
|
const unsigned char * data;
|
|
int dlen;
|
|
};
|
|
|
|
typedef enum { ALPN_INIT, ALPN_ENABLE, ALPN_DISABLE, ALPN_ERROR } ALPN_STATUS;
|
|
struct ssl_alpn_st {
|
|
ALPN_STATUS alpn_status;
|
|
/* This is dynamically allocated */
|
|
char *alpn_string;
|
|
/* This only points to the members in the string */
|
|
#define ALPN_LIST_MAX 10
|
|
const char *alpn_list[ALPN_LIST_MAX];
|
|
};
|
|
|
|
struct ssl_ctx_st
|
|
{
|
|
int version;
|
|
|
|
int references;
|
|
|
|
unsigned long options;
|
|
|
|
SSL_ALPN ssl_alpn;
|
|
|
|
const SSL_METHOD *method;
|
|
|
|
CERT *cert;
|
|
|
|
X509 *client_CA;
|
|
|
|
int verify_mode;
|
|
|
|
int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx);
|
|
|
|
long session_timeout;
|
|
|
|
int read_ahead;
|
|
|
|
int read_buffer_len;
|
|
|
|
X509_VERIFY_PARAM param;
|
|
};
|
|
|
|
struct ssl_st
|
|
{
|
|
/* protocol version(one of SSL3.0, TLS1.0, etc.) */
|
|
int version;
|
|
|
|
unsigned long options;
|
|
|
|
/* shut things down(0x01 : sent, 0x02 : received) */
|
|
int shutdown;
|
|
|
|
CERT *cert;
|
|
|
|
X509 *client_CA;
|
|
|
|
SSL_CTX *ctx;
|
|
|
|
const SSL_METHOD *method;
|
|
|
|
RECORD_LAYER rlayer;
|
|
|
|
/* where we are */
|
|
OSSL_STATEM statem;
|
|
|
|
SSL_SESSION *session;
|
|
|
|
int verify_mode;
|
|
|
|
int (*verify_callback) (int ok, X509_STORE_CTX *ctx);
|
|
|
|
int rwstate;
|
|
|
|
long verify_result;
|
|
|
|
X509_VERIFY_PARAM param;
|
|
|
|
int err;
|
|
|
|
void (*info_callback) (const SSL *ssl, int type, int val);
|
|
|
|
/* SSL low-level system arch point */
|
|
void *ssl_pm;
|
|
};
|
|
|
|
struct ssl_method_st {
|
|
/* protocol version(one of SSL3.0, TLS1.0, etc.) */
|
|
int version;
|
|
|
|
/* SSL mode(client(0) , server(1), not known(-1)) */
|
|
int endpoint;
|
|
|
|
const SSL_METHOD_FUNC *func;
|
|
};
|
|
|
|
struct ssl_method_func_st {
|
|
|
|
int (*ssl_new)(SSL *ssl);
|
|
|
|
void (*ssl_free)(SSL *ssl);
|
|
|
|
int (*ssl_handshake)(SSL *ssl);
|
|
|
|
int (*ssl_shutdown)(SSL *ssl);
|
|
|
|
int (*ssl_clear)(SSL *ssl);
|
|
|
|
int (*ssl_read)(SSL *ssl, void *buffer, int len);
|
|
|
|
int (*ssl_send)(SSL *ssl, const void *buffer, int len);
|
|
|
|
int (*ssl_pending)(const SSL *ssl);
|
|
|
|
void (*ssl_set_fd)(SSL *ssl, int fd, int mode);
|
|
|
|
void (*ssl_set_hostname)(SSL *ssl, const char *hostname);
|
|
|
|
int (*ssl_get_fd)(const SSL *ssl, int mode);
|
|
|
|
void (*ssl_set_bufflen)(SSL *ssl, int len);
|
|
|
|
long (*ssl_get_verify_result)(const SSL *ssl);
|
|
|
|
OSSL_HANDSHAKE_STATE (*ssl_get_state)(const SSL *ssl);
|
|
};
|
|
|
|
struct x509_method_st {
|
|
|
|
int (*x509_new)(X509 *x, X509 *m_x);
|
|
|
|
void (*x509_free)(X509 *x);
|
|
|
|
int (*x509_load)(X509 *x, const unsigned char *buf, int len);
|
|
|
|
int (*x509_show_info)(X509 *x);
|
|
};
|
|
|
|
struct pkey_method_st {
|
|
|
|
int (*pkey_new)(EVP_PKEY *pkey, EVP_PKEY *m_pkey);
|
|
|
|
void (*pkey_free)(EVP_PKEY *pkey);
|
|
|
|
int (*pkey_load)(EVP_PKEY *pkey, const unsigned char *buf, int len);
|
|
};
|
|
|
|
|
|
typedef int (*next_proto_cb)(SSL *ssl, unsigned char **out,
|
|
unsigned char *outlen, const unsigned char *in,
|
|
unsigned int inlen, void *arg);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|