Decrypt test vector data even if previous decryption failed to get
[openssl.git] / ssl / s2_clnt.c
index d5457b03287434f9882ca1a43b32325e00d71287..e2e6a2b45fe7bc1d94687779be135dfec62bfcd8 100644 (file)
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
-#include "rand.h"
-#include "buffer.h"
-#include "objects.h"
+#include <openssl/rand.h>
+#include <openssl/buffer.h>
+#include <openssl/objects.h>
 #include "ssl_locl.h"
-#include "evp.h"
+#include <openssl/evp.h>
 
-#ifndef NOPROTO
 static SSL_METHOD *ssl2_get_client_method(int ver);
 static int get_server_finished(SSL *s);
 static int get_server_verify(SSL *s);
@@ -74,22 +74,9 @@ static int client_finished(SSL *s);
 static int client_certificate(SSL *s);
 static int ssl_rsa_public_encrypt(CERT *c, int len, unsigned char *from,
        unsigned char *to,int padding);
-#else
-static SSL_METHOD *ssl2_get_client_method();
-static int get_server_finished();
-static int get_server_verify();
-static int get_server_hello();
-static int client_hello(); 
-static int client_master_key();
-static int client_finished();
-static int client_certificate();
-static int ssl_rsa_public_encrypt();
-#endif
-
 #define BREAK  break
 
-static SSL_METHOD *ssl2_get_client_method(ver)
-int ver;
+static SSL_METHOD *ssl2_get_client_method(int ver)
        {
        if (ver == SSL2_VERSION)
                return(SSLv2_client_method());
@@ -97,24 +84,23 @@ int ver;
                return(NULL);
        }
 
-SSL_METHOD *SSLv2_client_method()
+SSL_METHOD *SSLv2_client_method(void)
        {
        static int init=1;
        static SSL_METHOD SSLv2_client_data;
 
        if (init)
                {
-               init=0;
                memcpy((char *)&SSLv2_client_data,(char *)sslv2_base_method(),
                        sizeof(SSL_METHOD));
                SSLv2_client_data.ssl_connect=ssl2_connect;
                SSLv2_client_data.get_ssl_method=ssl2_get_client_method;
+               init=0;
                }
        return(&SSLv2_client_data);
        }
 
-int ssl2_connect(s)
-SSL *s;
+int ssl2_connect(SSL *s)
        {
        unsigned long l=time(NULL);
        BUF_MEM *buf=NULL;
@@ -296,13 +282,12 @@ end:
        return(ret);
        }
 
-static int get_server_hello(s)
-SSL *s;
+static int get_server_hello(SSL *s)
        {
        unsigned char *buf;
        unsigned char *p;
        int i,j;
-       STACK *sk=NULL,*cl;
+       STACK_OF(SSL_CIPHER) *sk=NULL,*cl;
 
        buf=(unsigned char *)s->init_buf->data;
        p=buf;
@@ -411,7 +396,7 @@ SSL *s;
 
                /* load the ciphers */
                sk=ssl_bytes_to_cipher_list(s,p,s->s2->tmp.csl,
-                       &s->session->ciphers);
+                                           &s->session->ciphers);
                p+=s->s2->tmp.csl;
                if (sk == NULL)
                        {
@@ -420,7 +405,7 @@ SSL *s;
                        return(-1);
                        }
 
-               sk_set_cmp_func(sk,ssl_cipher_ptr_id_cmp);
+               sk_SSL_CIPHER_set_cmp_func(sk,ssl_cipher_ptr_id_cmp);
 
                /* get the array of ciphers we will accept */
                cl=ssl_get_ciphers_by_id(s);
@@ -430,19 +415,20 @@ SSL *s;
                 * will check against the list we origionally sent and
                 * for performance reasons we should not bother to match
                 * the two lists up just to check. */
-               for (i=0; i<sk_num(cl); i++)
+               for (i=0; i<sk_SSL_CIPHER_num(cl); i++)
                        {
-                       if (sk_find(sk,sk_value(cl,i)) >= 0)
+                       if (sk_SSL_CIPHER_find(sk,
+                                              sk_SSL_CIPHER_value(cl,i)) >= 0)
                                break;
                        }
 
-               if (i >= sk_num(cl))
+               if (i >= sk_SSL_CIPHER_num(cl))
                        {
                        ssl2_return_error(s,SSL2_PE_NO_CIPHER);
                        SSLerr(SSL_F_GET_SERVER_HELLO,SSL_R_NO_CIPHER_MATCH);
                        return(-1);
                        }
-               s->session->cipher=(SSL_CIPHER *)sk_value(cl,i);
+               s->session->cipher=sk_SSL_CIPHER_value(cl,i);
                }
 
        if ((s->session != NULL) && (s->session->peer != NULL))
@@ -460,8 +446,7 @@ SSL *s;
        return(1);
        }
 
-static int client_hello(s)
-SSL *s;
+static int client_hello(SSL *s)
        {
        unsigned char *buf;
        unsigned char *p,*d;
@@ -528,15 +513,14 @@ SSL *s;
        return(ssl2_do_write(s));
        }
 
-static int client_master_key(s)
-SSL *s;
+static int client_master_key(SSL *s)
        {
        unsigned char *buf;
        unsigned char *p,*d;
        int clear,enc,karg,i;
        SSL_SESSION *sess;
-       EVP_CIPHER *c;
-       EVP_MD *md;
+       const EVP_CIPHER *c;
+       const EVP_MD *md;
 
        buf=(unsigned char *)s->init_buf->data;
        if (s->state == SSL2_ST_SEND_CLIENT_MASTER_KEY_A)
@@ -614,8 +598,7 @@ SSL *s;
        return(ssl2_do_write(s));
        }
 
-static int client_finished(s)
-SSL *s;
+static int client_finished(SSL *s)
        {
        unsigned char *p;
 
@@ -633,8 +616,7 @@ SSL *s;
        }
 
 /* read the data and then respond */
-static int client_certificate(s)
-SSL *s;
+static int client_certificate(SSL *s)
        {
        unsigned char *buf;
        unsigned char *p,*d;
@@ -778,8 +760,7 @@ SSL *s;
        return(ssl2_do_write(s));
        }
 
-static int get_server_verify(s)
-SSL *s;
+static int get_server_verify(SSL *s)
        {
        unsigned char *p;
        int i;
@@ -822,8 +803,7 @@ SSL *s;
        return(1);
        }
 
-static int get_server_finished(s)
-SSL *s;
+static int get_server_finished(SSL *s)
        {
        unsigned char *buf;
        unsigned char *p;
@@ -888,13 +868,9 @@ SSL *s;
        }
 
 /* loads in the certificate from the server */
-int ssl2_set_certificate(s, type, len, data)
-SSL *s;
-int type;
-int len;
-unsigned char *data;
+int ssl2_set_certificate(SSL *s, int type, int len, unsigned char *data)
        {
-       STACK *sk=NULL;
+       STACK_OF(X509) *sk=NULL;
        EVP_PKEY *pkey=NULL;
        CERT *c=NULL;
        int i;
@@ -908,8 +884,7 @@ unsigned char *data;
                goto err;
                }
 
-       if (((sk=sk_new_null()) == NULL) ||
-               (!sk_push(sk,(char *)x509)))
+       if ((sk=sk_X509_new_null()) == NULL || !sk_X509_push(sk,x509))
                {
                SSLerr(SSL_F_SSL2_SET_CERTIFICATE,ERR_R_MALLOC_FAILURE);
                goto err;
@@ -957,18 +932,14 @@ unsigned char *data;
                goto err;
        ret=1;
 err:
-       sk_free(sk);
+       sk_X509_free(sk);
        X509_free(x509);
        EVP_PKEY_free(pkey);
        return(ret);
        }
 
-static int ssl_rsa_public_encrypt(c, len, from, to, padding)
-CERT *c;
-int len;
-unsigned char *from;
-unsigned char *to;
-int padding;
+static int ssl_rsa_public_encrypt(CERT *c, int len, unsigned char *from,
+            unsigned char *to, int padding)
        {
        EVP_PKEY *pkey=NULL;
        int i= -1;
@@ -993,4 +964,4 @@ end:
        EVP_PKEY_free(pkey);
        return(i);
        }
-
+#endif