⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssl.h

📁 it is know of https implement source code
💻 H
📖 第 1 页 / 共 2 页
字号:
/** * \file ssl.h */#ifndef XYSSL_SSL_H#define XYSSL_SSL_H#include <time.h>#include "xyssl/net.h"#include "xyssl/dhm.h"#include "xyssl/rsa.h"#include "xyssl/md5.h"#include "xyssl/sha1.h"#include "xyssl/x509.h"#define XYSSL_ERR_SSL_FEATURE_UNAVAILABLE               -0x1000#define XYSSL_ERR_SSL_BAD_INPUT_DATA                    -0x1800#define XYSSL_ERR_SSL_INVALID_MAC                       -0x2000#define XYSSL_ERR_SSL_INVALID_RECORD                    -0x2800#define XYSSL_ERR_SSL_INVALID_MODULUS_SIZE              -0x3000#define XYSSL_ERR_SSL_UNKNOWN_CIPHER                    -0x3800#define XYSSL_ERR_SSL_NO_CIPHER_CHOSEN                  -0x4000#define XYSSL_ERR_SSL_NO_SESSION_FOUND                  -0x4800#define XYSSL_ERR_SSL_NO_CLIENT_CERTIFICATE             -0x5000#define XYSSL_ERR_SSL_CERTIFICATE_TOO_LARGE             -0x5800#define XYSSL_ERR_SSL_CERTIFICATE_REQUIRED              -0x6000#define XYSSL_ERR_SSL_PRIVATE_KEY_REQUIRED              -0x6800#define XYSSL_ERR_SSL_CA_CHAIN_REQUIRED                 -0x7000#define XYSSL_ERR_SSL_UNEXPECTED_MESSAGE                -0x7800#define XYSSL_ERR_SSL_FATAL_ALERT_MESSAGE               -0x8000#define XYSSL_ERR_SSL_PEER_VERIFY_FAILED                -0x8800#define XYSSL_ERR_SSL_PEER_CLOSE_NOTIFY                 -0x9000#define XYSSL_ERR_SSL_BAD_HS_CLIENT_HELLO               -0x9800#define XYSSL_ERR_SSL_BAD_HS_SERVER_HELLO               -0xA000#define XYSSL_ERR_SSL_BAD_HS_CERTIFICATE                -0xA800#define XYSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST        -0xB000#define XYSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE        -0xB800#define XYSSL_ERR_SSL_BAD_HS_SERVER_HELLO_DONE          -0xC000#define XYSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE        -0xC800#define XYSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY         -0xD000#define XYSSL_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC         -0xD800#define XYSSL_ERR_SSL_BAD_HS_FINISHED                   -0xE000/* * Various constants */#define SSL_MAJOR_VERSION_3             3#define SSL_MINOR_VERSION_0             0   /*!< SSL v3.0 */#define SSL_MINOR_VERSION_1             1   /*!< TLS v1.0 */#define SSL_MINOR_VERSION_2             2   /*!< TLS v1.1 */#define SSL_IS_CLIENT                   0#define SSL_IS_SERVER                   1#define SSL_COMPRESS_NULL               0#define SSL_VERIFY_NONE                 0#define SSL_VERIFY_OPTIONAL             1#define SSL_VERIFY_REQUIRED             2#define SSL_MAX_CONTENT_LEN         16384/* * Allow an extra 512 bytes for the record header * and encryption overhead (counter + MAC + padding). */#define SSL_BUFFER_LEN (SSL_MAX_CONTENT_LEN + 512)/* * Supported ciphersuites */#define SSL_RSA_RC4_128_MD5              4#define SSL_RSA_RC4_128_SHA              5#define SSL_RSA_DES_168_SHA             10#define SSL_EDH_RSA_DES_168_SHA         22#define SSL_RSA_AES_128_SHA             47#define SSL_RSA_AES_256_SHA             53#define SSL_EDH_RSA_AES_256_SHA         57/* * Message, alert and handshake types */#define SSL_MSG_CHANGE_CIPHER_SPEC     20#define SSL_MSG_ALERT                  21#define SSL_MSG_HANDSHAKE              22#define SSL_MSG_APPLICATION_DATA       23#define SSL_ALERT_CLOSE_NOTIFY          0#define SSL_ALERT_WARNING               1#define SSL_ALERT_FATAL                 2#define SSL_ALERT_NO_CERTIFICATE       41#define SSL_HS_HELLO_REQUEST            0#define SSL_HS_CLIENT_HELLO             1#define SSL_HS_SERVER_HELLO             2#define SSL_HS_CERTIFICATE             11#define SSL_HS_SERVER_KEY_EXCHANGE     12#define SSL_HS_CERTIFICATE_REQUEST     13#define SSL_HS_SERVER_HELLO_DONE       14#define SSL_HS_CERTIFICATE_VERIFY      15#define SSL_HS_CLIENT_KEY_EXCHANGE     16#define SSL_HS_FINISHED                20/* * TLS extensions */#define TLS_EXT_SERVERNAME              0#define TLS_EXT_SERVERNAME_HOSTNAME     0/* * SSL state machine */typedef enum{    SSL_HELLO_REQUEST,    SSL_CLIENT_HELLO,    SSL_SERVER_HELLO,    SSL_SERVER_CERTIFICATE,    SSL_SERVER_KEY_EXCHANGE,    SSL_CERTIFICATE_REQUEST,    SSL_SERVER_HELLO_DONE,    SSL_CLIENT_CERTIFICATE,    SSL_CLIENT_KEY_EXCHANGE,    SSL_CERTIFICATE_VERIFY,    SSL_CLIENT_CHANGE_CIPHER_SPEC,    SSL_CLIENT_FINISHED,    SSL_SERVER_CHANGE_CIPHER_SPEC,    SSL_SERVER_FINISHED,    SSL_FLUSH_BUFFERS,    SSL_HANDSHAKE_OVER}ssl_states;typedef struct _ssl_session ssl_session;typedef struct _ssl_context ssl_context;/* * This structure is used for session resuming. */struct _ssl_session{    time_t start;               /*!< starting time      */    int cipher;                 /*!< chosen cipher      */    int length;                 /*!< session id length  */    unsigned char id[32];       /*!< session identifier */    unsigned char master[48];   /*!< the master secret  */    ssl_session *next;          /*!< next session entry */};struct _ssl_context{    /*     * Miscellaneous     */    int state;                  /*!< SSL handshake: current state     */    int major_ver;              /*!< equal to  SSL_MAJOR_VERSION_3    */    int minor_ver;              /*!< either 0 (SSL3) or 1 (TLS1.0)    */    int max_major_ver;          /*!< max. major version from client   */    int max_minor_ver;          /*!< max. minor version from client   */    /*     * Callbacks (RNG, debug, I/O)     */    int  (*f_rng)(void *);    void (*f_dbg)(void *, int, char *);    int (*f_recv)(void *, unsigned char *, int);    int (*f_send)(void *, unsigned char *, int);    void *p_rng;                /*!< context for the RNG function     */    void *p_dbg;                /*!< context for the debug function   */    void *p_recv;               /*!< context for reading operations   */    void *p_send;               /*!< context for writing operations   */    /*     * Session layer     */    int resume;                         /*!<  session resuming flag   */    int timeout;                        /*!<  sess. expiration time   */    ssl_session *session;               /*!<  current session data    */    int (*s_get)(ssl_context *);        /*!<  (server) get callback   */    int (*s_set)(ssl_context *);        /*!<  (server) set callback   */    /*     * Record layer (incoming data)     */    unsigned char *in_ctr;      /*!< 64-bit incoming message counter  */    unsigned char *in_hdr;      /*!< 5-byte record header (in_ctr+8)  */    unsigned char *in_msg;      /*!< the message contents (in_hdr+5)  */    unsigned char *in_offt;     /*!< read offset in application data  */    int in_msgtype;             /*!< record header: message type      */    int in_msglen;              /*!< record header: message length    */    int in_left;                /*!< amount of data read so far       */    int in_hslen;               /*!< current handshake message length */    int nb_zero;                /*!< # of 0-length encrypted messages */    /*     * Record layer (outgoing data)     */    unsigned char *out_ctr;     /*!< 64-bit outgoing message counter  */    unsigned char *out_hdr;     /*!< 5-byte record header (out_ctr+8) */    unsigned char *out_msg;     /*!< the message contents (out_hdr+5) */    int out_msgtype;            /*!< record header: message type      */    int out_msglen;             /*!< record header: message length    */    int out_left;               /*!< amount of data not yet written   */    /*     * PKI layer     */    rsa_context *rsa_key;               /*!<  own RSA private key     */    x509_cert *own_cert;                /*!<  own X.509 certificate   */    x509_cert *ca_chain;                /*!<  own trusted CA chain    */    x509_cert *peer_cert;               /*!<  peer X.509 cert chain   */    char *peer_cn;                      /*!<  expected peer CN        */    int endpoint;                       /*!<  0: client, 1: server    */    int authmode;                       /*!<  verification mode       */    int client_auth;                    /*!<  flag for client auth.   */    int verify_result;                  /*!<  verification result     */    /*     * Crypto layer     */     dhm_context dhm_ctx;               /*!<  DHM key exchange        */     md5_context fin_md5;               /*!<  Finished MD5 checksum   */    sha1_context fin_sha1;              /*!<  Finished SHA-1 checksum */    int do_crypt;                       /*!<  en(de)cryption flag     */    int *ciphers;                       /*!<  allowed ciphersuites    */    int pmslen;                         /*!<  premaster length        */    int keylen;                         /*!<  symmetric key length    */    int minlen;                         /*!<  min. ciphertext length  */    int ivlen;                          /*!<  IV length               */    int maclen;                         /*!<  MAC length              */    unsigned char randbytes[64];        /*!<  random bytes            */    unsigned char premaster[256];       /*!<  premaster secret        */    unsigned char iv_enc[16];           /*!<  IV (encryption)         */    unsigned char iv_dec[16];           /*!<  IV (decryption)         */    unsigned char mac_enc[32];          /*!<  MAC (encryption)        */    unsigned char mac_dec[32];          /*!<  MAC (decryption)        */    unsigned long ctx_enc[128];         /*!<  encryption context      */    unsigned long ctx_dec[128];         /*!<  decryption context      */    /*     * TLS extensions     */    unsigned char *hostname;    unsigned long  hostname_len;};#ifdef __cplusplusextern "C" {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -