Use separate arrays for certificate verify and for finished hashes.
[openssl.git] / ssl / ssl3.h
index 23375f16eac64996758908ebc60a428c868492e5..60f33de3a16cf5a71e4f1de28fc04e1105d9365c 100644 (file)
@@ -60,6 +60,8 @@
 #define HEADER_SSL3_H 
 
 #include <openssl/buffer.h>
+#include <openssl/evp.h>
+#include <openssl/ssl.h>
 
 #ifdef  __cplusplus
 extern "C" {
@@ -172,8 +174,8 @@ extern "C" {
 #define SSL3_RS_PART_READ              4
 #define SSL3_RS_PART_WRITE             5
 
-#define SSL3_MD_CLIENT_FINISHED_CONST  {0x43,0x4C,0x4E,0x54}
-#define SSL3_MD_SERVER_FINISHED_CONST  {0x53,0x52,0x56,0x52}
+#define SSL3_MD_CLIENT_FINISHED_CONST  "\x43\x4C\x4E\x54"
+#define SSL3_MD_SERVER_FINISHED_CONST  "\x53\x52\x56\x52"
 
 #define SSL3_VERSION                   0x0300
 #define SSL3_VERSION_MAJOR             0x03
@@ -312,16 +314,23 @@ typedef struct ssl3_ctx_st
        int in_read_app_data;
 
        struct  {
-               /* Actually only needs to be 16+20 for SSLv3 and 12 for TLS */
-               unsigned char finish_md[EVP_MAX_MD_SIZE*2];
+               /* actually only needs to be 16+20 */
+               unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];
+
+               /* actually only need to be 16+20 for SSLv3 and 12 for TLS */
+               unsigned char server_finish_md[EVP_MAX_MD_SIZE*2];
+               int server_finish_md_len;
+               unsigned char client_finish_md[EVP_MAX_MD_SIZE*2];
+               int client_finish_md_len;
                
                unsigned long message_size;
                int message_type;
 
                /* used to hold the new cipher we are going to use */
                SSL_CIPHER *new_cipher;
+#ifndef NO_DH
                DH *dh;
-
+#endif
                /* used when SSL_ST_FLUSH_DATA is entered */
                int next_state;                 
 
@@ -395,6 +404,7 @@ typedef struct ssl3_ctx_st
 #define SSL3_ST_SR_CLNT_HELLO_A                (0x110|SSL_ST_ACCEPT)
 #define SSL3_ST_SR_CLNT_HELLO_B                (0x111|SSL_ST_ACCEPT)
 #define SSL3_ST_SR_CLNT_HELLO_C                (0x112|SSL_ST_ACCEPT)
+#define SSL3_ST_SR_MS_SGC                      (0x113|SSL_ST_ACCEPT)
 /* write to client */
 #define SSL3_ST_SW_HELLO_REQ_A         (0x120|SSL_ST_ACCEPT)
 #define SSL3_ST_SW_HELLO_REQ_B         (0x121|SSL_ST_ACCEPT)