Deprecate quite a few recursive includes from the ssl.h API header and
[openssl.git] / ssl / ssltest.c
index c60a8acddbc628a7868e863890d483d1a9026df1..f0b3c93ba5f0c6b2b7085e722fb0572e182fc4b9 100644 (file)
  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
  */
 
-#define _XOPEN_SOURCE 600      /* Or gethostname won't be declared properly
+#define _BSD_SOURCE 1          /* Or gethostname won't be declared properly
                                   on Linux and GNU platforms. */
-#define _XOPEN_SOURCE_EXTENDED 1 /* Or gethostname won't be declared properly
-                                  on Compaq platforms (at least with DEC C).
-                               */
 
 #include <assert.h>
 #include <errno.h>
 #include <string.h>
 #include <time.h>
 
+#define USE_SOCKETS
 #include "e_os.h"
 
 #include <openssl/bio.h>
 #include <openssl/evp.h>
 #include <openssl/x509.h>
 #include <openssl/ssl.h>
+#ifndef OPENSSL_NO_ENGINE
 #include <openssl/engine.h>
+#endif
 #include <openssl/err.h>
 #include <openssl/rand.h>
+#include <openssl/rsa.h>
+#include <openssl/dsa.h>
+#include <openssl/dh.h>
+#include <openssl/bn.h>
+
+#define _XOPEN_SOURCE_EXTENDED 1 /* Or gethostname won't be declared properly
+                                    on Compaq platforms (at least with DEC C).
+                                    Do not try to put it earlier, or IPv6 includes
+                                    get screwed...
+                                 */
+
 #ifdef OPENSSL_SYS_WINDOWS
 #include <winsock.h>
-#include "../crypto/bio/bss_file.c"
 #else
 #include OPENSSL_UNISTD
 #endif
 #elif defined(OPENSSL_SYS_WINCE)
 #  define TEST_SERVER_CERT "\\OpenSSL\\server.pem"
 #  define TEST_CLIENT_CERT "\\OpenSSL\\client.pem"
+#elif defined(OPENSSL_SYS_NETWARE)
+#  define TEST_SERVER_CERT "\\openssl\\apps\\server.pem"
+#  define TEST_CLIENT_CERT "\\openssl\\apps\\client.pem"
 #else
 #  define TEST_SERVER_CERT "../apps/server.pem"
 #  define TEST_CLIENT_CERT "../apps/client.pem"
 
 /* There is really no standard for this, so let's assign some tentative
    numbers.  In any case, these numbers are only for this test */
-#define COMP_RLE       1
-#define COMP_ZLIB      2
+#define COMP_RLE       255
+#define COMP_ZLIB      1
 
 static int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
 #ifndef OPENSSL_NO_RSA
@@ -297,7 +310,7 @@ static void lock_dbg_cb(int mode, int type, const char *file, int line)
                goto err;
                }
 
-       if (type < 0 || type > CRYPTO_NUM_LOCKS)
+       if (type < 0 || type >= CRYPTO_NUM_LOCKS)
                {
                errstr = "type out of bounds";
                goto err;
@@ -367,7 +380,7 @@ int main(int argc, char *argv[])
        SSL_METHOD *meth=NULL;
        SSL *c_ssl,*s_ssl;
        int number=1,reuse=0;
-       long bytes=1L;
+       long bytes=256L;
 #ifndef OPENSSL_NO_DH
        DH *dh;
        int dhe1024 = 0, dhe1024dsa = 0;
@@ -381,6 +394,7 @@ int main(int argc, char *argv[])
        clock_t s_time = 0, c_time = 0;
        int comp = 0;
        COMP_METHOD *cm = NULL;
+       STACK_OF(SSL_COMP) *ssl_comp_methods = NULL;
 
        verbose = 0;
        debug = 0;
@@ -564,7 +578,7 @@ bad:
                        "the test anyway (and\n-d to see what happens), "
                        "or add one of -ssl2, -ssl3, -tls1, -reuse\n"
                        "to avoid protocol mismatch.\n");
-               exit(1);
+               EXIT(1);
                }
 
        if (print_time)
@@ -588,7 +602,14 @@ bad:
        if (cm != NULL)
                {
                if (cm->type != NID_undef)
-                       SSL_COMP_add_compression_method(comp, cm);
+                       {
+                       if (SSL_COMP_add_compression_method(comp, cm) != 0)
+                               {
+                               fprintf(stderr,
+                                       "Failed to add compression method\n");
+                               ERR_print_errors_fp(stderr);
+                               }
+                       }
                else
                        {
                        fprintf(stderr,
@@ -599,6 +620,19 @@ bad:
                        ERR_print_errors_fp(stderr);
                        }
                }
+       ssl_comp_methods = SSL_COMP_get_compression_methods();
+       fprintf(stderr, "Available compression methods:\n");
+       {
+       int j, n = sk_SSL_COMP_num(ssl_comp_methods);
+       if (n == 0)
+               fprintf(stderr, "  NONE\n");
+       else
+               for (j = 0; j < n; j++)
+                       {
+                       SSL_COMP *c = sk_SSL_COMP_value(ssl_comp_methods, j);
+                       fprintf(stderr, "  %d: %s\n", c->id, c->name);
+                       }
+       }
 
 #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
        if (ssl2)
@@ -766,7 +800,7 @@ bad:
                        if(strlen(localhost) == sizeof localhost-1)
                                {
                                BIO_printf(bio_err,"localhost name too long\n");
-                               got end;
+                               goto end;
                                }
                        kssl_ctx_setstring(c_ssl->kssl_ctx, KSSL_SERVER,
                                 localhost);
@@ -823,7 +857,9 @@ end:
 #ifndef OPENSSL_NO_RSA
        free_tmp_rsa();
 #endif
+#ifndef OPENSSL_NO_ENGINE
        ENGINE_cleanup();
+#endif
        CRYPTO_cleanup_all_ex_data();
        ERR_free_strings();
        ERR_remove_state(0);
@@ -1321,8 +1357,8 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
                        {
                        if (c_write)
                                {
-                               j=(cw_num > (long)sizeof(cbuf))
-                                       ?sizeof(cbuf):(int)cw_num;
+                               j = (cw_num > (long)sizeof(cbuf)) ?
+                                       (int)sizeof(cbuf) : (int)cw_num;
                                i=BIO_write(c_bio,cbuf,j);
                                if (i < 0)
                                        {
@@ -1452,8 +1488,8 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
                                }
                        else
                                {
-                               j=(sw_num > (long)sizeof(sbuf))?
-                                       sizeof(sbuf):(int)sw_num;
+                               j = (sw_num > (long)sizeof(sbuf)) ?
+                                       (int)sizeof(sbuf) : (int)sw_num;
                                i=BIO_write(s_bio,sbuf,j);
                                if (i < 0)
                                        {
@@ -1577,14 +1613,29 @@ static RSA *rsa_tmp=NULL;
 
 static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength)
        {
+       BIGNUM *bn = NULL;
        if (rsa_tmp == NULL)
                {
+               bn = BN_new();
+               rsa_tmp = RSA_new();
+               if(!bn || !rsa_tmp || !BN_set_word(bn, RSA_F4))
+                       {
+                       BIO_printf(bio_err, "Memory error...");
+                       goto end;
+                       }
                BIO_printf(bio_err,"Generating temp (%d bit) RSA key...",keylength);
                (void)BIO_flush(bio_err);
-               rsa_tmp=RSA_generate_key(keylength,RSA_F4,NULL,NULL);
+               if(!RSA_generate_key_ex(rsa_tmp,keylength,bn,NULL))
+                       {
+                       BIO_printf(bio_err, "Error generating key.");
+                       RSA_free(rsa_tmp);
+                       rsa_tmp = NULL;
+                       }
+end:
                BIO_printf(bio_err,"\n");
                (void)BIO_flush(bio_err);
                }
+       if(bn) BN_free(bn);
        return(rsa_tmp);
        }