New function SSL_renegotiate_pending().
[openssl.git] / ssl / ssl.h
index d3750f359b13c0426a7051808c1d22c8988f7467..8a8013463ba3024849dc202ccbed25a931de44d0 100644 (file)
--- a/ssl/ssl.h
+++ b/ssl/ssl.h
@@ -106,6 +106,7 @@ extern "C" {
 #define SSL_TXT_KRB5_DES_64_CBC_MD5   SSL3_TXT_KRB5_DES_64_CBC_MD5
 #define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA
 #define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5
+#define SSL_MAX_KRB5_PRINCIPAL_LENGTH  256
 
 #define SSL_MAX_SSL_SESSION_ID_LENGTH          32
 #define SSL_MAX_SID_CTX_LENGTH                 32
@@ -226,7 +227,7 @@ typedef struct ssl_method_st
        int (*ssl_accept)(SSL *s);
        int (*ssl_connect)(SSL *s);
        int (*ssl_read)(SSL *s,void *buf,int len);
-       int (*ssl_peek)(SSL *s,char *buf,int len);
+       int (*ssl_peek)(SSL *s,void *buf,int len);
        int (*ssl_write)(SSL *s,const void *buf,int len);
        int (*ssl_shutdown)(SSL *s);
        int (*ssl_renegotiate)(SSL *s);
@@ -283,6 +284,11 @@ typedef struct ssl_session_st
        unsigned int sid_ctx_length;
        unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
 
+#ifndef OPENSSL_NO_KRB5
+        unsigned int krb5_client_princ_len;
+        unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH];
+#endif /* OPENSSL_NO_KRB5 */
+
        int not_resumable;
 
        /* The cert is the certificate used to establish this connection */
@@ -326,24 +332,29 @@ typedef struct ssl_session_st
 #define SSL_OP_SSLEAY_080_CLIENT_DH_BUG                        0x00000080L
 #define SSL_OP_TLS_D5_BUG                              0x00000100L
 #define SSL_OP_TLS_BLOCK_PADDING_BUG                   0x00000200L
-#define SSL_OP_TLS_ROLLBACK_BUG                                0x00000400L
 
 /* If set, always create a new key when using tmp_dh parameters */
 #define SSL_OP_SINGLE_DH_USE                           0x00100000L
-/* Set to also use the tmp_rsa key when doing RSA operations. */
+/* Set to always use the tmp_rsa key when doing RSA operations,
+ * even when this violates protocol specs */
 #define SSL_OP_EPHEMERAL_RSA                           0x00200000L
 /* Set on servers to choose the cipher according to the server's
  * preferences */
 #define SSL_OP_CIPHER_SERVER_PREFERENCE                        0x00400000L
+/* If set, a server will allow a client to issue a SSLv3.0 version number
+ * as latest version supported in the premaster secret, even when TLSv1.0
+ * (version 3.1) was announced in the client hello. Normally this is
+ * forbidden to prevent version rollback attacks. */
+#define SSL_OP_TLS_ROLLBACK_BUG                                0x00800000L
+/* As server, disallow session resumption on renegotiation */
+#define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION  0x01000000L
 
 /* The next flag deliberately changes the ciphertest, this is a check
  * for the PKCS#1 attack */
 #define SSL_OP_PKCS1_CHECK_1                           0x08000000L
 #define SSL_OP_PKCS1_CHECK_2                           0x10000000L
 #define SSL_OP_NETSCAPE_CA_DN_BUG                      0x20000000L
-/* SSL_OP_NON_EXPORT_FIRST looks utterly broken .. */
-#define SSL_OP_NON_EXPORT_FIRST                        0x40000000L
-#define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG         0x80000000L
+#define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG         0x40000000L
 #define SSL_OP_ALL                                     0x000FFFFFL
 
 #define SSL_OP_NO_SSLv2                                        0x01000000L
@@ -383,6 +394,12 @@ typedef struct ssl_session_st
 #define SSL_get_mode(ssl) \
         SSL_ctrl(ssl,SSL_CTRL_MODE,0,NULL)
 
+#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32)
+#define SSL_MAX_CERT_LIST_DEFAULT 1024*30 /* 30k max cert list :-) */
+#else
+#define SSL_MAX_CERT_LIST_DEFAULT 1024*100 /* 100k max cert list :-) */
+#endif
+
 #define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT     (1024*20)
 
 /* This callback type is used inside SSL_CTX, SSL, and in the functions that set
@@ -419,6 +436,7 @@ struct ssl_ctx_st
        SSL_METHOD *method;
        unsigned long options;
        unsigned long mode;
+       long max_cert_list;
 
        STACK_OF(SSL_CIPHER) *cipher_list;
        /* same as above but sorted for lookup */
@@ -625,7 +643,11 @@ struct ssl_st
 
        int server;     /* are we the server side? - mostly used by SSL_clear*/
 
-       int new_session;/* 1 if we are to use a new session */
+       int new_session;/* 1 if we are to use a new session,
+                        * (sometimes 2 after a new session has in fact been assigned).
+                        * NB: For servers, the 'new' session may actually be a previously
+                        * cached session or even the previous session unless
+                        * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set */
        int quiet_shutdown;/* don't send shutdown packets */
        int shutdown;   /* we have shut things down, 0x01 sent, 0x02
                         * for received */
@@ -719,6 +741,7 @@ struct ssl_st
        int references;
        unsigned long options; /* protocol behaviour */
        unsigned long mode; /* API behaviour */
+       long max_cert_list;
        int first_packet;
        int client_version;     /* what was passed, used for
                                 * SSLv3/TLS rollback check */
@@ -910,7 +933,7 @@ size_t SSL_get_peer_finished(SSL *s, void *buf, size_t count);
 #define SSL_CTRL_SESS_TIMEOUTS                 30
 #define SSL_CTRL_SESS_CACHE_FULL               31
 #define SSL_CTRL_OPTIONS                       32
-#define SSL_CTRL_MODE                  33
+#define SSL_CTRL_MODE                          33
 
 #define SSL_CTRL_GET_READ_AHEAD                        40
 #define SSL_CTRL_SET_READ_AHEAD                        41
@@ -919,6 +942,9 @@ size_t SSL_get_peer_finished(SSL *s, void *buf, size_t count);
 #define SSL_CTRL_SET_SESS_CACHE_MODE           44
 #define SSL_CTRL_GET_SESS_CACHE_MODE           45
 
+#define SSL_CTRL_GET_MAX_CERT_LIST             50
+#define SSL_CTRL_SET_MAX_CERT_LIST             51
+
 #define SSL_session_reused(ssl) \
        SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL)
 #define SSL_num_renegotiations(ssl) \
@@ -973,6 +999,8 @@ char *      SSL_CIPHER_get_version(SSL_CIPHER *c);
 const char *   SSL_CIPHER_get_name(SSL_CIPHER *c);
 
 int    SSL_get_fd(SSL *s);
+int    SSL_get_rfd(SSL *s);
+int    SSL_get_wfd(SSL *s);
 const char  * SSL_get_cipher_list(SSL *s,int n);
 char * SSL_get_shared_ciphers(SSL *s, char *buf, int len);
 int    SSL_get_read_ahead(SSL * s);
@@ -1028,10 +1056,10 @@ int     SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
 
 void   ERR_load_SSL_strings(void );
 void   SSL_load_error_strings(void );
-char *         SSL_state_string(SSL *s);
-char *         SSL_rstate_string(SSL *s);
-char *         SSL_state_string_long(SSL *s);
-char *         SSL_rstate_string_long(SSL *s);
+const char *SSL_state_string(SSL *s);
+const char *SSL_rstate_string(SSL *s);
+const char *SSL_state_string_long(SSL *s);
+const char *SSL_rstate_string_long(SSL *s);
 long   SSL_SESSION_get_time(SSL_SESSION *s);
 long   SSL_SESSION_set_time(SSL_SESSION *s, long t);
 long   SSL_SESSION_get_timeout(SSL_SESSION *s);
@@ -1102,9 +1130,9 @@ int SSL_set_trust(SSL *s, int trust);
 void   SSL_free(SSL *ssl);
 int    SSL_accept(SSL *ssl);
 int    SSL_connect(SSL *ssl);
-int    SSL_read(SSL *ssl,char *buf,int num);
-int    SSL_peek(SSL *ssl,char *buf,int num);
-int    SSL_write(SSL *ssl,const char *buf,int num);
+int    SSL_read(SSL *ssl,void *buf,int num);
+int    SSL_peek(SSL *ssl,void *buf,int num);
+int    SSL_write(SSL *ssl,const void *buf,int num);
 long   SSL_ctrl(SSL *ssl,int cmd, long larg, char *parg);
 long   SSL_callback_ctrl(SSL *, int, void (*)());
 long   SSL_CTX_ctrl(SSL_CTX *ctx,int cmd, long larg, char *parg);
@@ -1136,14 +1164,15 @@ STACK_OF(SSL_CIPHER) *SSL_get_ciphers(SSL *s);
 
 int SSL_do_handshake(SSL *s);
 int SSL_renegotiate(SSL *s);
+int SSL_renegotiate_pending(SSL *s);
 int SSL_shutdown(SSL *s);
 
 SSL_METHOD *SSL_get_ssl_method(SSL *s);
 int SSL_set_ssl_method(SSL *s,SSL_METHOD *method);
-char *SSL_alert_type_string_long(int value);
-char *SSL_alert_type_string(int value);
-char *SSL_alert_desc_string_long(int value);
-char *SSL_alert_desc_string(int value);
+const char *SSL_alert_type_string_long(int value);
+const char *SSL_alert_type_string(int value);
+const char *SSL_alert_desc_string_long(int value);
+const char *SSL_alert_desc_string(int value);
 
 void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *list);
 void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *list);
@@ -1220,6 +1249,14 @@ int SSL_get_ex_data_X509_STORE_CTX_idx(void );
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL)
 #define SSL_CTX_set_read_ahead(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL)
+#define SSL_CTX_get_max_cert_list(ctx) \
+       SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
+#define SSL_CTX_set_max_cert_list(ctx,m) \
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
+#define SSL_get_max_cert_list(ssl) \
+       SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
+#define SSL_set_max_cert_list(ssl,m) \
+       SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
 
      /* NB: the keylength is only applicable when is_export is true */
 #ifndef OPENSSL_NO_RSA
@@ -1250,6 +1287,7 @@ int SSL_COMP_add_compression_method(int id,char *cm);
 /* The following lines are auto generated by the script mkerr.pl. Any changes
  * made after this point may be overwritten when the script is next run.
  */
+void ERR_load_SSL_strings(void);
 
 /* Error codes for the SSL functions. */
 
@@ -1274,6 +1312,7 @@ int SSL_COMP_add_compression_method(int id,char *cm);
 #define SSL_F_SSL23_CONNECT                             117
 #define SSL_F_SSL23_GET_CLIENT_HELLO                    118
 #define SSL_F_SSL23_GET_SERVER_HELLO                    119
+#define SSL_F_SSL23_PEEK                                237
 #define SSL_F_SSL23_READ                                120
 #define SSL_F_SSL23_WRITE                               121
 #define SSL_F_SSL2_ACCEPT                               122
@@ -1293,6 +1332,7 @@ int SSL_COMP_add_compression_method(int id,char *cm);
 #define SSL_F_SSL3_CTRL                                         213
 #define SSL_F_SSL3_CTX_CTRL                             133
 #define SSL_F_SSL3_ENC                                  134
+#define SSL_F_SSL3_GENERATE_KEY_BLOCK                   238
 #define SSL_F_SSL3_GET_CERTIFICATE_REQUEST              135
 #define SSL_F_SSL3_GET_CERT_VERIFY                      136
 #define SSL_F_SSL3_GET_CLIENT_CERTIFICATE               137
@@ -1442,6 +1482,7 @@ int SSL_COMP_add_compression_method(int id,char *cm);
 #define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED             145
 #define SSL_R_DATA_LENGTH_TOO_LONG                      146
 #define SSL_R_DECRYPTION_FAILED                                 147
+#define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC       1109
 #define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG           148
 #define SSL_R_DIGEST_CHECK_FAILED                       149
 #define SSL_R_ENCRYPTED_LENGTH_TOO_LONG                         150
@@ -1452,18 +1493,22 @@ int SSL_COMP_add_compression_method(int id,char *cm);
 #define SSL_R_GOT_A_FIN_BEFORE_A_CCS                    154
 #define SSL_R_HTTPS_PROXY_REQUEST                       155
 #define SSL_R_HTTP_REQUEST                              156
-#define SSL_R_INTERNAL_ERROR                            157
+#define SSL_R_ILLEGAL_PADDING                           1110
 #define SSL_R_INVALID_CHALLENGE_LENGTH                  158
 #define SSL_R_INVALID_COMMAND                           280
 #define SSL_R_INVALID_PURPOSE                           278
 #define SSL_R_INVALID_TRUST                             279
+#define SSL_R_KRB5                                      1104
 #define SSL_R_KRB5_C_CC_PRINC                           1094
 #define SSL_R_KRB5_C_GET_CRED                           1095
 #define SSL_R_KRB5_C_INIT                               1096
 #define SSL_R_KRB5_C_MK_REQ                             1097
 #define SSL_R_KRB5_S_BAD_TICKET                                 1098
 #define SSL_R_KRB5_S_INIT                               1099
-#define SSL_R_KRB5_S_RD_REQ                             1100
+#define SSL_R_KRB5_S_RD_REQ                             1108
+#define SSL_R_KRB5_S_TKT_EXPIRED                        1105
+#define SSL_R_KRB5_S_TKT_NYV                            1106
+#define SSL_R_KRB5_S_TKT_SKEW                           1107
 #define SSL_R_LENGTH_MISMATCH                           159
 #define SSL_R_LENGTH_TOO_SHORT                          160
 #define SSL_R_LIBRARY_BUG                               274
@@ -1551,10 +1596,10 @@ int SSL_COMP_add_compression_method(int id,char *cm);
 #define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION        228
 #define SSL_R_SSL_HANDSHAKE_FAILURE                     229
 #define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS                230
-#define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH             1101
 #define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED            1102
 #define SSL_R_SSL_SESSION_ID_CONFLICT                   1103
 #define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG           273
+#define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH             1101
 #define SSL_R_SSL_SESSION_ID_IS_DIFFERENT               231
 #define SSL_R_TLSV1_ALERT_ACCESS_DENIED                         1049
 #define SSL_R_TLSV1_ALERT_DECODE_ERROR                  1050
@@ -1613,4 +1658,3 @@ int SSL_COMP_add_compression_method(int id,char *cm);
 }
 #endif
 #endif
-