The other half of make errors.
[openssl.git] / ssl / ssl.h
index 0581256d8c67cceb0374112d9ce883703ebdb5d6..a2669f9dafd4ffcf965aeb149f90e2745aad846d 100644 (file)
--- a/ssl/ssl.h
+++ b/ssl/ssl.h
@@ -275,6 +275,7 @@ extern "C" {
 #define SSL_TXT_RC4            "RC4"
 #define SSL_TXT_RC2            "RC2"
 #define SSL_TXT_IDEA           "IDEA"
+#define SSL_TXT_SEED           "SEED"
 #define SSL_TXT_AES128         "AES128"
 #define SSL_TXT_AES256         "AES256"
 #define SSL_TXT_AES            "AES"
@@ -285,6 +286,8 @@ extern "C" {
 #define SSL_TXT_MD5            "MD5"
 #define SSL_TXT_SHA1           "SHA1"
 #define SSL_TXT_SHA            "SHA" /* same as "SHA1" */
+#define SSL_TXT_GOST94         "GOST94" 
+#define SSL_TXT_GOST89MAC              "GOST89MAC" 
 
 #define SSL_TXT_SSLV2          "SSLv2"
 #define SSL_TXT_SSLV3          "SSLv3"
@@ -315,8 +318,13 @@ extern "C" {
 /* The following cipher list is used by default.
  * It also is substituted when an application-defined cipher list string
  * starts with 'DEFAULT'. */
-#define SSL_DEFAULT_CIPHER_LIST        "AES:CAMELLIA:ALL:!ADH:!AECDH:+aECDH:+kRSA:+RC4:@STRENGTH"
-/* low priority for ciphersuites w/o forwared secrecy (fixed ECDH, RSA key exchange), and for RC4 */
+#define SSL_DEFAULT_CIPHER_LIST        "ALL:!aNULL:!eNULL"
+/* As of OpenSSL 0.9.9, ssl_create_cipher_list() in ssl/ssl_ciph.c always
+ * starts with a reasonable order, and all we have to do for DEFAULT is
+ * throwing out anonymous and unencrypted ciphersuites!
+ * (The latter are not actually enabled by ALL, but "ALL:RSA" would enable
+ * some of them.)
+ */
 
 /* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
 #define SSL_SENT_SHUTDOWN      1
@@ -492,6 +500,10 @@ typedef struct ssl_session_st
        size_t tlsext_ellipticcurvelist_length;
        unsigned char *tlsext_ellipticcurvelist; /* peer's list */
 #endif /* OPENSSL_NO_EC */
+       /* RFC4507 info */
+       unsigned char *tlsext_tick;     /* Session ticket */
+       size_t  tlsext_ticklen;         /* Session ticket length */     
+       long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */
 #endif
        } SSL_SESSION;
 
@@ -521,6 +533,8 @@ typedef struct ssl_session_st
 #define SSL_OP_NO_QUERY_MTU                 0x00001000L
 /* Turn on Cookie Exchange (on relevant for servers) */
 #define SSL_OP_COOKIE_EXCHANGE              0x00002000L
+/* Don't use RFC4507 ticket extension */
+#define SSL_OP_NO_TICKET                   0x00004000L
 
 /* As server, disallow session resumption on renegotiation */
 #define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION  0x00010000L
@@ -781,6 +795,10 @@ struct ssl_ctx_st
        /* TLS extensions servername callback */
        int (*tlsext_servername_callback)(SSL*, int *, void *);
        void *tlsext_servername_arg;
+       /* RFC 4507 session ticket keys */
+       unsigned char tlsext_tick_key_name[16];
+       unsigned char tlsext_tick_hmac_key[16];
+       unsigned char tlsext_tick_aes_key[16];
 #endif
 #ifndef OPENSSL_NO_PSK
        char *psk_identity_hint;
@@ -878,6 +896,9 @@ const char *SSL_get_psk_identity(const SSL *s);
 #define SSL_want_write(s)      (SSL_want(s) == SSL_WRITING)
 #define SSL_want_x509_lookup(s)        (SSL_want(s) == SSL_X509_LOOKUP)
 
+#define SSL_MAC_FLAG_READ_MAC_STREAM 1
+#define SSL_MAC_FLAG_WRITE_MAC_STREAM 2
+
 struct ssl_st
        {
        /* protocol version
@@ -969,9 +990,9 @@ struct ssl_st
 
        /* These are the ones being used, the ones in SSL_SESSION are
         * the ones to be 'copied' into these ones */
-
+       int mac_flags; 
        EVP_CIPHER_CTX *enc_read_ctx;           /* cryptographic state */
-       const EVP_MD *read_hash;                /* used for mac generation */
+       EVP_MD_CTX *read_hash;          /* used for mac generation */
 #ifndef OPENSSL_NO_COMP
        COMP_CTX *expand;                       /* uncompress */
 #else
@@ -979,7 +1000,7 @@ struct ssl_st
 #endif
 
        EVP_CIPHER_CTX *enc_write_ctx;          /* cryptographic state */
-       const EVP_MD *write_hash;               /* used for mac generation */
+       EVP_MD_CTX *write_hash;         /* used for mac generation */
 #ifndef OPENSSL_NO_COMP
        COMP_CTX *compress;                     /* compression */
 #else
@@ -1046,12 +1067,19 @@ struct ssl_st
                                 * SSLv3/TLS rollback check */
        unsigned int max_send_fragment;
 #ifndef OPENSSL_NO_TLSEXT
+       /* TLS extension debug callback */
+       void (*tlsext_debug_cb)(SSL *s, int client_server, int type,
+                                       unsigned char *data, int len,
+                                       void *arg);
+       void *tlsext_debug_arg;
        char *tlsext_hostname;
        int servername_done;   /* no further mod of servername 
                                  0 : call the servername extension callback.
                                  1 : prepare 2, allow last ack just after in server callback.
                                  2 : don't call servername callback, no ack in server hello
                               */
+       /* RFC4507 session ticket expected to be received or sent */
+       int tlsext_ticket_expected;
 #ifndef OPENSSL_NO_EC
        size_t tlsext_ecpointformatlist_length;
        unsigned char *tlsext_ecpointformatlist; /* our list */
@@ -1171,14 +1199,8 @@ size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);
 
 #define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)
 #define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)
-#define PEM_read_SSL_SESSION(fp,x,cb,u) (SSL_SESSION *)PEM_ASN1_read( \
-       (char *(*)())d2i_SSL_SESSION,PEM_STRING_SSL_SESSION,fp,(char **)x,cb,u)
-#define PEM_read_bio_SSL_SESSION(bp,x,cb,u) PEM_ASN1_read_bio_of(SSL_SESSION,d2i_SSL_SESSION,PEM_STRING_SSL_SESSION,bp,x,cb,u)
-#define PEM_write_SSL_SESSION(fp,x) \
-       PEM_ASN1_write((int (*)())i2d_SSL_SESSION, \
-               PEM_STRING_SSL_SESSION,fp, (char *)x, NULL,NULL,0,NULL,NULL)
-#define PEM_write_bio_SSL_SESSION(bp,x) \
-       PEM_ASN1_write_bio_of(SSL_SESSION,i2d_SSL_SESSION,PEM_STRING_SSL_SESSION,bp,x,NULL,NULL,0,NULL,NULL)
+
+DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
 
 #define SSL_AD_REASON_OFFSET           1000 /* offset to get SSL_R_... value from SSL_AD_... */
 
@@ -1278,6 +1300,10 @@ size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);
 #define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB      53
 #define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG     54
 #define SSL_CTRL_SET_TLSEXT_HOSTNAME           55
+#define SSL_CTRL_SET_TLSEXT_DEBUG_CB           56
+#define SSL_CTRL_SET_TLSEXT_DEBUG_ARG          57
+#define SSL_CTRL_GET_TLSEXT_TICKET_KEYS                58
+#define SSL_CTRL_SET_TLSEXT_TICKET_KEYS                59
 #endif
 
 #define SSL_session_reused(ssl) \
@@ -1734,10 +1760,13 @@ void ERR_load_SSL_strings(void);
 #define SSL_F_SSL3_GET_FINISHED                                 140
 #define SSL_F_SSL3_GET_KEY_EXCHANGE                     141
 #define SSL_F_SSL3_GET_MESSAGE                          142
+#define SSL_F_SSL3_GET_NEW_SESSION_TICKET               283
 #define SSL_F_SSL3_GET_RECORD                           143
 #define SSL_F_SSL3_GET_SERVER_CERTIFICATE               144
 #define SSL_F_SSL3_GET_SERVER_DONE                      145
 #define SSL_F_SSL3_GET_SERVER_HELLO                     146
+#define SSL_F_SSL3_HANDSHAKE_MAC                        285
+#define SSL_F_SSL3_NEW_SESSION_TICKET                   287
 #define SSL_F_SSL3_OUTPUT_CERT_CHAIN                    147
 #define SSL_F_SSL3_PEEK                                         235
 #define SSL_F_SSL3_READ_BYTES                           148
@@ -1764,6 +1793,7 @@ void ERR_load_SSL_strings(void);
 #define SSL_F_SSL_CERT_INSTANTIATE                      214
 #define SSL_F_SSL_CERT_NEW                              162
 #define SSL_F_SSL_CHECK_PRIVATE_KEY                     163
+#define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT              280
 #define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG           279
 #define SSL_F_SSL_CIPHER_PROCESS_RULESTR                230
 #define SSL_F_SSL_CIPHER_STRENGTH_SORT                  231
@@ -1798,6 +1828,8 @@ void ERR_load_SSL_strings(void);
 #define SSL_F_SSL_LOAD_CLIENT_CA_FILE                   185
 #define SSL_F_SSL_NEW                                   186
 #define SSL_F_SSL_PEEK                                  270
+#define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT            281
+#define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT            282
 #define SSL_F_SSL_READ                                  223
 #define SSL_F_SSL_RSA_PRIVATE_DECRYPT                   187
 #define SSL_F_SSL_RSA_PUBLIC_ENCRYPT                    188
@@ -1830,11 +1862,13 @@ void ERR_load_SSL_strings(void);
 #define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE                206
 #define SSL_F_SSL_VERIFY_CERT_CHAIN                     207
 #define SSL_F_SSL_WRITE                                         208
+#define SSL_F_TLS1_CERT_VERIFY_MAC                      286
 #define SSL_F_TLS1_CHANGE_CIPHER_STATE                  209
 #define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT             274
 #define SSL_F_TLS1_ENC                                  210
 #define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT           275
 #define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT           276
+#define SSL_F_TLS1_PRF                                  284
 #define SSL_F_TLS1_SETUP_KEY_BLOCK                      211
 #define SSL_F_WRITE_PENDING                             212
 
@@ -1917,6 +1951,7 @@ void ERR_load_SSL_strings(void);
 #define SSL_R_INVALID_CHALLENGE_LENGTH                  158
 #define SSL_R_INVALID_COMMAND                           280
 #define SSL_R_INVALID_PURPOSE                           278
+#define SSL_R_INVALID_TICKET_KEYS_LENGTH                325
 #define SSL_R_INVALID_TRUST                             279
 #define SSL_R_KEY_ARG_TOO_LONG                          284
 #define SSL_R_KRB5                                      285
@@ -1967,6 +2002,7 @@ void ERR_load_SSL_strings(void);
 #define SSL_R_NO_PRIVATE_KEY_ASSIGNED                   190
 #define SSL_R_NO_PROTOCOLS_AVAILABLE                    191
 #define SSL_R_NO_PUBLICKEY                              192
+#define SSL_R_NO_REQUIRED_DIGEST                        324
 #define SSL_R_NO_SHARED_CIPHER                          193
 #define SSL_R_NO_VERIFY_CALLBACK                        194
 #define SSL_R_NULL_SSL_CTX                              195
@@ -2078,6 +2114,7 @@ void ERR_load_SSL_strings(void);
 #define SSL_R_UNKNOWN_STATE                             255
 #define SSL_R_UNSUPPORTED_CIPHER                        256
 #define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM                 257
+#define SSL_R_UNSUPPORTED_DIGEST_TYPE                   326
 #define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE                315
 #define SSL_R_UNSUPPORTED_PROTOCOL                      258
 #define SSL_R_UNSUPPORTED_SSL_VERSION                   259