Support INSTALL_PREFIX for packagers.
[openssl.git] / ssl / s3_clnt.c
index 24d4f14e93a093ddab828cd6475f8be380e9c475..e0871c47ef0e186334cc55695e6923f034c4f2f5 100644 (file)
  */
 
 #include <stdio.h>
-#include "buffer.h"
-#include "rand.h"
-#include "objects.h"
-#include "evp.h"
+#include <openssl/buffer.h>
+#include <openssl/rand.h>
+#include <openssl/objects.h>
+#include <openssl/md5.h>
+#include <openssl/sha.h>
+#include <openssl/evp.h>
 #include "ssl_locl.h"
 
-#define BREAK break
-/* SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,ERR_R_MALLOC_FAILURE);
- * SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,ERR_R_MALLOC_FAILURE);
- * SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,ERR_R_MALLOC_FAILURE);
- * SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_MALLOC_FAILURE);
- * SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,ERR_R_MALLOC_FAILURE);
- * SSLerr(SSL_F_SSL3_GET_SERVER_DONE,ERR_R_MALLOC_FAILURE);
-SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_SSL3_SESSION_ID_TOO_SHORT);
- */
-
-#ifndef NOPROTO
 static SSL_METHOD *ssl3_get_client_method(int ver);
 static int ssl3_client_hello(SSL *s);
 static int ssl3_get_server_hello(SSL *s);
@@ -86,23 +77,7 @@ static int ssl3_send_client_key_exchange(SSL *s);
 static int ssl3_get_key_exchange(SSL *s);
 static int ssl3_get_server_certificate(SSL *s);
 static int ssl3_check_cert_and_algorithm(SSL *s);
-#else
-static SSL_METHOD *ssl3_get_client_method();
-static int ssl3_client_hello();
-static int ssl3_get_server_hello();
-static int ssl3_get_certificate_request();
-static int ca_dn_cmp();
-static int ssl3_get_server_done();
-static int ssl3_send_client_verify();
-static int ssl3_send_client_certificate();
-static int ssl3_send_client_key_exchange();
-static int ssl3_get_key_exchange();
-static int ssl3_get_server_certificate();
-static int ssl3_check_cert_and_algorithm();
-#endif
-
-static SSL_METHOD *ssl3_get_client_method(ver)
-int ver;
+static SSL_METHOD *ssl3_get_client_method(int ver)
        {
        if (ver == SSL3_VERSION)
                return(SSLv3_client_method());
@@ -110,7 +85,7 @@ int ver;
                return(NULL);
        }
 
-SSL_METHOD *SSLv3_client_method()
+SSL_METHOD *SSLv3_client_method(void)
        {
        static int init=1;
        static SSL_METHOD SSLv3_client_data;
@@ -126,8 +101,7 @@ SSL_METHOD *SSLv3_client_method()
        return(&SSLv3_client_data);
        }
 
-int ssl3_connect(s)
-SSL *s;
+int ssl3_connect(SSL *s)
        {
        BUF_MEM *buf;
        unsigned long Time=time(NULL),l;
@@ -468,8 +442,7 @@ end:
        }
 
 
-static int ssl3_client_hello(s)
-SSL *s;
+static int ssl3_client_hello(SSL *s)
        {
        unsigned char *buf;
        unsigned char *p,*d;
@@ -557,8 +530,7 @@ err:
        return(-1);
        }
 
-static int ssl3_get_server_hello(s)
-SSL *s;
+static int ssl3_get_server_hello(SSL *s)
        {
        STACK_OF(SSL_CIPHER) *sk;
        SSL_CIPHER *c;
@@ -700,8 +672,7 @@ err:
        return(-1);
        }
 
-static int ssl3_get_server_certificate(s)
-SSL *s;
+static int ssl3_get_server_certificate(SSL *s)
        {
        int al,i,ok,ret= -1;
        unsigned long n,nc,llen,l;
@@ -849,8 +820,7 @@ err:
        return(ret);
        }
 
-static int ssl3_get_key_exchange(s)
-SSL *s;
+static int ssl3_get_key_exchange(SSL *s)
        {
 #ifndef NO_RSA
        unsigned char *q,md_buf[EVP_MAX_MD_SIZE*2];
@@ -860,7 +830,9 @@ SSL *s;
        int al,i,j,param_len,ok;
        long n,alg;
        EVP_PKEY *pkey=NULL;
+#ifndef NO_RSA
        RSA *rsa=NULL;
+#endif
 #ifndef NO_DH
        DH *dh=NULL;
 #endif
@@ -1143,8 +1115,7 @@ err:
        return(-1);
        }
 
-static int ssl3_get_certificate_request(s)
-SSL *s;
+static int ssl3_get_certificate_request(SSL *s)
        {
        int ok,ret=0;
        unsigned long n,nc,l;
@@ -1290,14 +1261,12 @@ err:
        return(ret);
        }
 
-static int ca_dn_cmp(a,b)
-X509_NAME **a,**b;
+static int ca_dn_cmp(X509_NAME **a, X509_NAME **b)
        {
        return(X509_NAME_cmp(*a,*b));
        }
 
-static int ssl3_get_server_done(s)
-SSL *s;
+static int ssl3_get_server_done(SSL *s)
        {
        int ok,ret=0;
        long n;
@@ -1320,13 +1289,15 @@ SSL *s;
        return(ret);
        }
 
-static int ssl3_send_client_key_exchange(s)
-SSL *s;
+static int ssl3_send_client_key_exchange(SSL *s)
        {
-       unsigned char *p,*q,*d;
+       unsigned char *p,*d;
        int n;
        unsigned long l;
+#ifndef NO_RSA
+       unsigned char *q;
        EVP_PKEY *pkey=NULL;
+#endif
 
        if (s->state == SSL3_ST_CW_KEY_EXCH_A)
                {
@@ -1471,13 +1442,14 @@ err:
        return(-1);
        }
 
-static int ssl3_send_client_verify(s)
-SSL *s;
+static int ssl3_send_client_verify(SSL *s)
        {
        unsigned char *p,*d;
        unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH];
        EVP_PKEY *pkey;
+#ifndef NO_RSA
        int i=0;
+#endif
        unsigned long n;
 #ifndef NO_DSA
        int j;
@@ -1542,8 +1514,7 @@ err:
        return(-1);
        }
 
-static int ssl3_send_client_certificate(s)
-SSL *s;
+static int ssl3_send_client_certificate(SSL *s)
        {
        X509 *x509=NULL;
        EVP_PKEY *pkey=NULL;
@@ -1622,15 +1593,18 @@ SSL *s;
 
 #define has_bits(i,m)  (((i)&(m)) == (m))
 
-static int ssl3_check_cert_and_algorithm(s)
-SSL *s;
+static int ssl3_check_cert_and_algorithm(SSL *s)
        {
        int i,idx;
        long algs;
        EVP_PKEY *pkey=NULL;
        CERT *c;
+#ifndef NO_RSA
        RSA *rsa;
+#endif
+#ifndef NO_DH
        DH *dh;
+#endif
 
        c=s->session->cert;
 
@@ -1646,8 +1620,12 @@ SSL *s;
        if (algs & (SSL_aDH|SSL_aNULL))
                return(1);
 
+#ifndef NO_RSA
        rsa=s->session->cert->rsa_tmp;
+#endif
+#ifndef NO_DH
        dh=s->session->cert->dh_tmp;
+#endif
 
        /* This is the passed certificate */
 
@@ -1670,15 +1648,16 @@ SSL *s;
                goto f_err;
                }
 #endif
-
+#ifndef NO_RSA
        if ((algs & SSL_kRSA) &&
                !(has_bits(i,EVP_PK_RSA|EVP_PKT_ENC) || (rsa != NULL)))
                {
                SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_RSA_ENCRYPTING_CERT);
                goto f_err;
                }
+#endif
 #ifndef NO_DH
-       else if ((algs & SSL_kEDH) &&
+       if ((algs & SSL_kEDH) &&
                !(has_bits(i,EVP_PK_DH|EVP_PKT_EXCH) || (dh != NULL)))
                {
                SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_DH_KEY);