make
[openssl.git] / ssl / s3_lib.c
index 1ff9e3093ba86aba6ecaeb4419f11d438ac8da40..d9d6ddbbe3bfde6454bd448fa1ec78c345a2210d 100644 (file)
 #include "ssl_locl.h"
 #include "kssl_lcl.h"
 #include <openssl/md5.h>
+#ifndef OPENSSL_NO_DH
+#include <openssl/dh.h>
+#endif
 
 const char *ssl3_version_str="SSLv3" OPENSSL_VERSION_PTEXT;
 
@@ -1380,6 +1383,10 @@ static SSL_METHOD SSLv3_data= {
        ssl3_shutdown,
        ssl3_renegotiate,
        ssl3_renegotiate_check,
+       ssl3_get_message,
+       ssl3_read_bytes,
+       ssl3_write_bytes,
+       ssl3_dispatch_alert,
        ssl3_ctrl,
        ssl3_ctx_ctrl,
        ssl3_get_cipher_by_char,
@@ -1390,7 +1397,7 @@ static SSL_METHOD SSLv3_data= {
        ssl_bad_method,
        ssl3_default_timeout,
        &SSLv3_enc_data,
-       ssl_undefined_function,
+       ssl_undefined_void_function,
        ssl3_callback_ctrl,
        ssl3_ctx_callback_ctrl,
        };
@@ -1420,7 +1427,7 @@ SSL_CIPHER *ssl3_get_cipher(unsigned int u)
                return(NULL);
        }
 
-int ssl3_pending(SSL *s)
+int ssl3_pending(const SSL *s)
        {
        if (s->rstate == SSL_ST_READ_BODY)
                return 0;
@@ -1436,6 +1443,8 @@ int ssl3_new(SSL *s)
        memset(s3,0,sizeof *s3);
        EVP_MD_CTX_init(&s3->finish_dgst1);
        EVP_MD_CTX_init(&s3->finish_dgst2);
+       memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
+       memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
 
        s->s3=s3;
 
@@ -1470,6 +1479,7 @@ void ssl3_free(SSL *s)
                sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
        EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
        EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
+
        OPENSSL_cleanse(s->s3,sizeof *s->s3);
        OPENSSL_free(s->s3);
        s->s3=NULL;
@@ -1679,7 +1689,7 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
        return(ret);
        }
 
-long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)())
+long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
        {
        int ret=0;
 
@@ -1828,7 +1838,7 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
                        }
                if (!EC_KEY_up_ref((EC_KEY *)parg))
                        {
-                       SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
+                       SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
                        return 0;
                        }
                ecdh = (EC_KEY *)parg;
@@ -1873,7 +1883,7 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
        return(1);
        }
 
-long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)())
+long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
        {
        CERT *cert;
 
@@ -2140,13 +2150,13 @@ int ssl3_shutdown(SSL *s)
                {
                /* resend it if not sent */
 #if 1
-               ssl3_dispatch_alert(s);
+               s->method->ssl_dispatch_alert(s);
 #endif
                }
        else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
                {
                /* If we are waiting for a close from our peer, we are closed */
-               ssl3_read_bytes(s,0,NULL,0,0);
+               s->method->ssl_read_bytes(s,0,NULL,0,0);
                }
 
        if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
@@ -2201,8 +2211,8 @@ int ssl3_write(SSL *s, const void *buf, int len)
                }
        else
                {
-               ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
-                                    buf,len);
+               ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
+                       buf,len);
                if (ret <= 0) return(ret);
                }
 
@@ -2216,7 +2226,7 @@ static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
        clear_sys_error();
        if (s->s3->renegotiate) ssl3_renegotiate_check(s);
        s->s3->in_read_app_data=1;
-       ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
+       ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
        if ((ret == -1) && (s->s3->in_read_app_data == 2))
                {
                /* ssl3_read_bytes decided to call s->handshake_func, which
@@ -2225,7 +2235,7 @@ static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
                 * and thinks that application data makes sense here; so disable
                 * handshake processing and try to read application data again. */
                s->in_handshake++;
-               ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
+               ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
                s->in_handshake--;
                }
        else