summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/ca.c2
-rw-r--r--apps/eay.c4
-rw-r--r--apps/s_client.c77
-rw-r--r--apps/s_server.c2
-rw-r--r--apps/s_time.c92
-rw-r--r--apps/sc.c2
-rw-r--r--apps/speed.c267
7 files changed, 349 insertions, 97 deletions
diff --git a/apps/ca.c b/apps/ca.c
index 21592412b..a66c87244 100644
--- a/apps/ca.c
+++ b/apps/ca.c
@@ -82,7 +82,7 @@
#define PROG ca_main
#define BASE_SECTION "ca"
-#define CONFIG_FILE "lib/ssleay.cnf"
+#define CONFIG_FILE "lib/openssl.cnf"
#define ENV_DEFAULT_CA "default_ca"
diff --git a/apps/eay.c b/apps/eay.c
index c7a59ca24..7c3bae3bf 100644
--- a/apps/eay.c
+++ b/apps/eay.c
@@ -1,5 +1,5 @@
/* apps/eay.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
@@ -88,7 +88,7 @@
#define MONOLITH
-#include "ssleay.c"
+#include "openssl.c"
#include "apps.c"
#include "asn1pars.c"
#ifndef NO_RSA
diff --git a/apps/s_client.c b/apps/s_client.c
index b5dc23887..e5d281ba3 100644
--- a/apps/s_client.c
+++ b/apps/s_client.c
@@ -1,5 +1,5 @@
/* apps/s_client.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
@@ -60,7 +60,7 @@
#include <stdlib.h>
#include <string.h>
#define USE_SOCKETS
-#ifdef WIN16
+#ifdef NO_STDIO
#define APPS_WIN16
#endif
#include "apps.h"
@@ -127,9 +127,11 @@ static void sc_usage()
BIO_printf(bio_err," -quiet - no s_client output\n");
BIO_printf(bio_err," -ssl2 - just use SSLv2\n");
BIO_printf(bio_err," -ssl3 - just use SSLv3\n");
+ BIO_printf(bio_err," -tls1 - just use TLSv1\n");
+ BIO_printf(bio_err," -no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n");
BIO_printf(bio_err," -bugs - Switch on all SSL implementation bug workarounds\n");
- BIO_printf(bio_err," -cipher - prefered cipher to use, use the 'ssleay ciphers'\n");
- BIO_printf(bio_err," command to se what is available\n");
+ BIO_printf(bio_err," -cipher - prefered cipher to use, use the 'openssl ciphers'\n");
+ BIO_printf(bio_err," command to see what is available\n");
}
@@ -137,6 +139,7 @@ int MAIN(argc, argv)
int argc;
char **argv;
{
+ int off=0;
SSL *con=NULL,*con2=NULL;
int s,k,width,state=0;
char *cbuf=NULL,*sbuf=NULL;
@@ -165,6 +168,7 @@ char **argv;
#endif
apps_startup();
+ c_Pause=0;
c_quiet=0;
c_debug=0;
@@ -235,6 +239,10 @@ char **argv;
else if (strcmp(*argv,"-ssl3") == 0)
meth=SSLv3_client_method();
#endif
+#ifndef NO_TLS1
+ else if (strcmp(*argv,"-tls1") == 0)
+ meth=TLSv1_client_method();
+#endif
else if (strcmp(*argv,"-bugs") == 0)
bugs=1;
else if (strcmp(*argv,"-key") == 0)
@@ -256,6 +264,12 @@ char **argv;
if (--argc < 1) goto bad;
CAfile= *(++argv);
}
+ else if (strcmp(*argv,"-no_tls1") == 0)
+ off|=SSL_OP_NO_TLSv1;
+ else if (strcmp(*argv,"-no_ssl3") == 0)
+ off|=SSL_OP_NO_SSLv3;
+ else if (strcmp(*argv,"-no_ssl2") == 0)
+ off|=SSL_OP_NO_SSLv2;
else if (strcmp(*argv,"-cipher") == 0)
{
if (--argc < 1) goto bad;
@@ -302,7 +316,10 @@ bad:
goto end;
}
- if (bugs) SSL_CTX_set_options(ctx,SSL_OP_ALL);
+ if (bugs)
+ SSL_CTX_set_options(ctx,SSL_OP_ALL|off);
+ else
+ SSL_CTX_set_options(ctx,off);
if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback);
if (cipher != NULL)
@@ -319,20 +336,21 @@ bad:
if ((!SSL_CTX_load_verify_locations(ctx,CAfile,CApath)) ||
(!SSL_CTX_set_default_verify_paths(ctx)))
{
- BIO_printf(bio_err,"error seting default verify locations\n");
+ /* BIO_printf(bio_err,"error seting default verify locations\n"); */
ERR_print_errors(bio_err);
- goto end;
+ /* goto end; */
}
SSL_load_error_strings();
con=(SSL *)SSL_new(ctx);
+/* SSL_set_cipher_list(con,"RC4-MD5"); */
re_start:
if (init_client(&s,host,port) == 0)
{
- BIO_printf(bio_err,"connect:errno=%d\n",errno);
+ BIO_printf(bio_err,"connect:errno=%d\n",get_last_socket_error());
SHUTDOWN(s);
goto end;
}
@@ -343,7 +361,11 @@ re_start:
{
unsigned long l=1;
BIO_printf(bio_c_out,"turning on non blocking io\n");
- socket_ioctl(s,FIONBIO,&l);
+ if (BIO_socket_ioctl(s,FIONBIO,&l) < 0)
+ {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
}
#endif
if (c_Pause & 0x01) con->debug=1;
@@ -386,7 +408,7 @@ re_start:
FD_ZERO(&readfds);
FD_ZERO(&writefds);
- if (SSL_in_init(con))
+ if (SSL_in_init(con) && !SSL_total_renegotiations(con))
{
in_init=1;
tty_on=0;
@@ -427,11 +449,11 @@ re_start:
/* printf("mode tty(%d %d%d) ssl(%d%d)\n",
tty_on,read_tty,write_tty,read_ssl,write_ssl);*/
-/* printf("pending=%d\n",SSL_pending(con)); */
i=select(width,&readfds,&writefds,NULL,NULL);
if ( i < 0)
{
- BIO_printf(bio_err,"bad select %d\n",sock_err());
+ BIO_printf(bio_err,"bad select %d\n",
+ get_last_socket_error());
goto shut;
/* goto end; */
}
@@ -489,7 +511,7 @@ re_start:
if ((k != 0) || (cbuf_len != 0))
{
BIO_printf(bio_err,"write:errno=%d\n",
- errno);
+ get_last_socket_error());
goto shut;
}
else
@@ -526,7 +548,18 @@ re_start:
#endif
else if (FD_ISSET(SSL_get_fd(con),&readfds))
{
- k=SSL_read(con,sbuf,BUFSIZZ);
+#ifdef RENEG
+{ static int iiii; if (++iiii == 52) { SSL_renegotiate(con); iiii=0; } }
+#endif
+#if 1
+ k=SSL_read(con,sbuf,1024 /* BUFSIZZ */ );
+#else
+/* Demo for pending and peek :-) */
+ k=SSL_read(con,sbuf,16);
+{ char zbuf[10240];
+printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240));
+}
+#endif
switch (SSL_get_error(con,k))
{
@@ -555,7 +588,7 @@ re_start:
BIO_printf(bio_c_out,"read X BLOCK\n");
break;
case SSL_ERROR_SYSCALL:
- BIO_printf(bio_err,"read:errno=%d\n",errno);
+ BIO_printf(bio_err,"read:errno=%d\n",get_last_socket_error());
goto shut;
case SSL_ERROR_ZERO_RETURN:
BIO_printf(bio_c_out,"closed\n");
@@ -563,7 +596,7 @@ re_start:
case SSL_ERROR_SSL:
ERR_print_errors(bio_err);
goto shut;
- break;
+ /* break; */
}
}
@@ -619,7 +652,7 @@ BIO *bio;
SSL *s;
int full;
{
- X509 *peer;
+ X509 *peer=NULL;
char *p;
static char *space=" ";
char buf[BUFSIZ];
@@ -633,7 +666,7 @@ int full;
sk=SSL_get_peer_cert_chain(s);
if (sk != NULL)
{
- BIO_printf(bio,"---\nCertficate chain\n");
+ BIO_printf(bio,"---\nCertificate chain\n");
for (i=0; i<sk_num(sk); i++)
{
X509_NAME_oneline(X509_get_subject_name((X509 *)
@@ -657,7 +690,6 @@ int full;
X509_NAME_oneline(X509_get_issuer_name(peer),
buf,BUFSIZ);
BIO_printf(bio,"issuer=%s\n",buf);
- X509_free(peer);
}
else
BIO_printf(bio,"no peer certificate available\n");
@@ -687,7 +719,7 @@ int full;
{
if (*p == ':')
{
- BIO_write(bio,space,15-j);
+ BIO_write(bio,space,15-j%25);
i++;
j=0;
BIO_write(bio,((i%3)?" ":"\n"),1);
@@ -711,7 +743,12 @@ int full;
BIO_printf(bio,"%s, Cipher is %s\n",
SSL_CIPHER_get_version(c),
SSL_CIPHER_get_name(c));
+ if (peer != NULL)
+ BIO_printf(bio,"Server public key is %d bit\n",
+ EVP_PKEY_bits(X509_get_pubkey(peer)));
SSL_SESSION_print(bio,SSL_get_session(s));
BIO_printf(bio,"---\n");
+ if (peer != NULL)
+ X509_free(peer);
}
diff --git a/apps/s_server.c b/apps/s_server.c
index e96fd9cdb..256636bc4 100644
--- a/apps/s_server.c
+++ b/apps/s_server.c
@@ -205,7 +205,7 @@ static void sv_usage()
BIO_printf(bio_err," -CApath arg - PEM format directory of CA's\n");
BIO_printf(bio_err," -CAfile arg - PEM format file of CA's\n");
BIO_printf(bio_err," -nocert - Don't use any certificates (Anon-DH)\n");
- BIO_printf(bio_err," -cipher arg - play with 'ssleay ciphers' to see what goes here\n");
+ BIO_printf(bio_err," -cipher arg - play with 'openssl ciphers' to see what goes here\n");
BIO_printf(bio_err," -quiet - No server output\n");
BIO_printf(bio_err," -no_tmp_rsa - Do not generate a tmp RSA key\n");
BIO_printf(bio_err," -ssl2 - Just talk SSLv2\n");
diff --git a/apps/s_time.c b/apps/s_time.c
index 853a9dcc4..568359253 100644
--- a/apps/s_time.c
+++ b/apps/s_time.c
@@ -1,5 +1,5 @@
/* apps/s_time.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
@@ -56,7 +56,7 @@
* [including the GNU Public Licence.]
*/
-#undef NO_SHUTDOWN
+#define NO_SHUTDOWN
/*-----------------------------------------
cntime - SSL client connection timer program
@@ -67,7 +67,7 @@
#include <stdlib.h>
#include <string.h>
-#ifdef WIN16
+#ifdef NO_STDIO
#define APPS_WIN16
#endif
#include "x509.h"
@@ -111,7 +111,8 @@ struct tms {
#include <sys/select.h>
#endif
-#ifdef sun
+#if defined(sun) || defined(__ultrix)
+#define _POSIX_SOURCE
#include <limits.h>
#include <sys/param.h>
#endif
@@ -154,10 +155,12 @@ extern int verify_error;
static void s_time_usage(void);
static int parseArgs( int argc, char **argv );
static SSL *doConnection( SSL *scon );
+static void s_time_init(void);
#else
static void s_time_usage();
static int parseArgs();
static SSL *doConnection();
+static void s_time_init();
#endif
@@ -180,15 +183,38 @@ static char *s_www_path=NULL;
static long bytes_read=0;
static int st_bugs=0;
static int perform=0;
-
#ifdef FIONBIO
static int t_nbio=0;
#endif
-
#ifdef WIN32
static int exitNow = 0; /* Set when it's time to exit main */
#endif
+static void s_time_init()
+ {
+ host=SSL_CONNECT_NAME;
+ t_cert_file=NULL;
+ t_key_file=NULL;
+ CApath=NULL;
+ CAfile=NULL;
+ tm_cipher=NULL;
+ tm_verify = SSL_VERIFY_NONE;
+ maxTime = SECONDS;
+ tm_ctx=NULL;
+ s_time_meth=NULL;
+ s_www_path=NULL;
+ bytes_read=0;
+ st_bugs=0;
+ perform=0;
+
+#ifdef FIONBIO
+ t_nbio=0;
+#endif
+#ifdef WIN32
+ exitNow = 0; /* Set when it's time to exit main */
+#endif
+ }
+
/***********************************************************************
* usage - display usage message
*/
@@ -202,7 +228,7 @@ static void s_time_usage()
not specified but cert fill is.\n\
-CApath arg - PEM format directory of CA's\n\
-CAfile arg - PEM format file of CA's\n\
--cipher - prefered cipher to use, play with 'ssleay ciphers'\n\n";
+-cipher - prefered cipher to use, play with 'openssl ciphers'\n\n";
printf( "usage: client <args>\n\n" );
@@ -237,6 +263,7 @@ char **argv;
#endif
apps_startup();
+ s_time_init();
if (bio_err == NULL)
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
@@ -396,6 +423,7 @@ char **argv;
long finishtime=0;
int ret=1,i;
MS_STATIC char buf[1024*8];
+ int ver;
#if !defined(NO_SSL2) && !defined(NO_SSL3)
s_time_meth=SSLv23_client_method();
@@ -412,6 +440,8 @@ char **argv;
SSLeay_add_ssl_algorithms();
if ((tm_ctx=SSL_CTX_new(s_time_meth)) == NULL) return(1);
+ SSL_CTX_set_quiet_shutdown(tm_ctx,1);
+
if (st_bugs) SSL_CTX_set_options(tm_ctx,SSL_OP_ALL);
SSL_CTX_set_cipher_list(tm_ctx,tm_cipher);
if(!set_cert_stuff(tm_ctx,t_cert_file,t_key_file))
@@ -422,9 +452,9 @@ char **argv;
if ((!SSL_CTX_load_verify_locations(tm_ctx,CAfile,CApath)) ||
(!SSL_CTX_set_default_verify_paths(tm_ctx)))
{
- BIO_printf(bio_err,"error seting default verify locations\n");
+ /* BIO_printf(bio_err,"error seting default verify locations\n"); */
ERR_print_errors(bio_err);
- goto end;
+ /* goto end; */
}
if (tm_cipher == NULL)
@@ -471,11 +501,24 @@ char **argv;
#else
SSL_shutdown(scon);
#endif
- SHUTDOWN(SSL_get_fd(scon));
+ SHUTDOWN2(SSL_get_fd(scon));
nConn += 1;
- fputc(SSL_session_reused(scon)?'r':
- (SSL_version(scon))+'0', stdout );
+ if (SSL_session_reused(scon))
+ ver='r';
+ else
+ {
+ ver=SSL_version(scon);
+ if (ver == TLS1_VERSION)
+ ver='t';
+ else if (ver == SSL3_VERSION)
+ ver='3';
+ else if (ver == SSL2_VERSION)
+ ver='2';
+ else
+ ver='*';
+ }
+ fputc(ver,stdout);
fflush(stdout);
SSL_free( scon );
@@ -512,7 +555,7 @@ next:
#else
SSL_shutdown(scon);
#endif
- SHUTDOWN(SSL_get_fd(scon));
+ SHUTDOWN2(SSL_get_fd(scon));
nConn = 0;
totalTime = 0.0;
@@ -551,11 +594,24 @@ next:
#else
SSL_shutdown(scon);
#endif
- SHUTDOWN(SSL_get_fd(scon));
+ SHUTDOWN2(SSL_get_fd(scon));
nConn += 1;
- fputc(SSL_session_reused(scon)?'r':
- (SSL_version(scon))+'0', stdout );
+ if (SSL_session_reused(scon))
+ ver='r';
+ else
+ {
+ ver=SSL_version(scon);
+ if (ver == TLS1_VERSION)
+ ver='t';
+ else if (ver == SSL3_VERSION)
+ ver='3';
+ else if (ver == SSL2_VERSION)
+ ver='2';
+ else
+ ver='*';
+ }
+ fputc(ver,stdout);
fflush(stdout);
}
totalTime += tm_Time_F(STOP); /* Add the time for this iteration*/
@@ -595,8 +651,8 @@ SSL *scon;
if ((conn=BIO_new(BIO_s_connect())) == NULL)
return(NULL);
-/* BIO_set_port(conn,port);*/
- BIO_set_hostname(conn,host);
+/* BIO_set_conn_port(conn,port);*/
+ BIO_set_conn_hostname(conn,host);
if (scon == NULL)
serverCon=(SSL *)SSL_new(tm_ctx);
diff --git a/apps/sc.c b/apps/sc.c
index 0c00c37fc..f6015e832 100644
--- a/apps/sc.c
+++ b/apps/sc.c
@@ -138,7 +138,7 @@ static void sc_usage()
BIO_printf(bio_err," -tls1 - just use TLSv1\n");
BIO_printf(bio_err," -no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n");
BIO_printf(bio_err," -bugs - Switch on all SSL implementation bug workarounds\n");
- BIO_printf(bio_err," -cipher - prefered cipher to use, use the 'ssleay ciphers'\n");
+ BIO_printf(bio_err," -cipher - prefered cipher to use, use the 'openssl ciphers'\n");
BIO_printf(bio_err," command to see what is available\n");
}
diff --git a/apps/speed.c b/apps/speed.c
index e0aff278f..1a1ae72c2 100644
--- a/apps/speed.c
+++ b/apps/speed.c
@@ -1,5 +1,5 @@
/* apps/speed.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
@@ -60,8 +60,8 @@
#undef SECONDS
#define SECONDS 3
-#define RSA_SECONDS 10
-#define DSA_SECONDS 10
+#define RSA_SECONDS 10
+#define DSA_SECONDS 10
/* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
/* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
@@ -73,8 +73,9 @@
#include <stdlib.h>
#include <signal.h>
#include <string.h>
+#include <math.h>
#include "apps.h"
-#ifdef WIN16
+#ifdef NO_STDIO
#define APPS_WIN16
#endif
#include "crypto.h"
@@ -106,7 +107,8 @@ struct tms {
#include <sys/timeb.h>
#endif
-#ifdef sun
+#if defined(sun) || defined(__ultrix)
+#define _POSIX_SOURCE
#include <limits.h>
#include <sys/param.h>
#endif
@@ -122,13 +124,21 @@ struct tms {
#endif
#ifndef NO_MD5
#include "md5.h"
+#include "hmac.h"
+#include "evp.h"
#endif
-#if !defined(NO_SHA) && !defined(NO_SHA1)
+#ifndef NO_SHA1
#include "sha.h"
#endif
+#ifndef NO_RMD160
+#include "ripemd.h"
+#endif
#ifndef NO_RC4
#include "rc4.h"
#endif
+#ifndef NO_RC5
+#include "rc5.h"
+#endif
#ifndef NO_RC2
#include "rc2.h"
#endif
@@ -138,6 +148,9 @@ struct tms {
#ifndef NO_BLOWFISH
#include "blowfish.h"
#endif
+#ifndef NO_CAST
+#include "cast.h"
+#endif
#ifndef NO_RSA
#include "rsa.h"
#endif
@@ -165,7 +178,7 @@ struct tms {
#endif
#undef BUFSIZE
-#define BUFSIZE ((long)1024*8)
+#define BUFSIZE ((long)1024*8+1)
int run=0;
#ifndef NOPROTO
@@ -248,13 +261,12 @@ char **argv;
{
unsigned char *buf=NULL,*buf2=NULL;
int ret=1;
-#define ALGOR_NUM 11
+#define ALGOR_NUM 14
#define SIZE_NUM 5
#define RSA_NUM 4
#define DSA_NUM 3
long count,rsa_count;
int i,j,k,rsa_num,rsa_num2;
- unsigned int kk;
#ifndef NO_MD2
unsigned char md2[MD2_DIGEST_LENGTH];
#endif
@@ -263,13 +275,20 @@ char **argv;
#endif
#ifndef NO_MD5
unsigned char md5[MD5_DIGEST_LENGTH];
+ unsigned char hmac[MD5_DIGEST_LENGTH];
#endif
-#if !defined(NO_SHA) || !defined(NO_SHA1)
+#ifndef NO_SHA1
unsigned char sha[SHA_DIGEST_LENGTH];
#endif
+#ifndef NO_RMD160
+ unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
+#endif
#ifndef NO_RC4
RC4_KEY rc4_ks;
#endif
+#ifndef NO_RC5
+ RC5_32_KEY rc5_ks;
+#endif
#ifndef NO_RC2
RC2_KEY rc2_ks;
#endif
@@ -279,6 +298,9 @@ char **argv;
#ifndef NO_BLOWFISH
BF_KEY bf_ks;
#endif
+#ifndef NO_CAST
+ CAST_KEY cast_ks;
+#endif
static unsigned char key16[16]=
{0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
@@ -292,21 +314,24 @@ char **argv;
#define D_MD2 0
#define D_MDC2 1
#define D_MD5 2
-#define D_SHA 3
+#define D_HMAC 3
#define D_SHA1 4
-#define D_RC4 5
-#define D_CBC_DES 6
-#define D_EDE3_DES 7
-#define D_CBC_IDEA 8
-#define D_CBC_RC2 9
-#define D_CBC_BF 10
+#define D_RMD160 5
+#define D_RC4 6
+#define D_CBC_DES 7
+#define D_EDE3_DES 8
+#define D_CBC_IDEA 9
+#define D_CBC_RC2 10
+#define D_CBC_RC5 11
+#define D_CBC_BF 12
+#define D_CBC_CAST 13
double d,results[ALGOR_NUM][SIZE_NUM];
static int lengths[SIZE_NUM]={8,64,256,1024,8*1024};
long c[ALGOR_NUM][SIZE_NUM];
static char *names[ALGOR_NUM]={
- "md2","mdc2","md5","sha","sha1","rc4",
+ "md2","mdc2","md5","hmac(md5)","sha1","rmd160","rc4",
"des cbc","des ede3","idea cbc",
- "rc2 cbc","blowfish cbc"};
+ "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc"};
#define R_DSA_512 0
#define R_DSA_1024 1
#define R_DSA_2048 2
@@ -315,35 +340,41 @@ char **argv;
#define R_RSA_2048 2
#define R_RSA_4096 3
RSA *rsa_key[RSA_NUM];
- DSA *dsa_key[DSA_NUM];
long rsa_c[RSA_NUM][2];
- long dsa_c[DSA_NUM][2];
#ifndef NO_RSA
double rsa_results[RSA_NUM][2];
-#endif
-#ifndef NO_DSA
- double dsa_results[DSA_NUM][2];
-#endif
static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
- static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
static unsigned char *rsa_data[RSA_NUM]=
{test512,test1024,test2048,test4096};
static int rsa_data_length[RSA_NUM]={
sizeof(test512),sizeof(test1024),
sizeof(test2048),sizeof(test4096)};
- int doit[ALGOR_NUM];
+#endif
+#ifndef NO_DSA
+ DSA *dsa_key[DSA_NUM];
+ long dsa_c[DSA_NUM][2];
+ double dsa_results[DSA_NUM][2];
+ static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
+#endif
int rsa_doit[RSA_NUM];
int dsa_doit[DSA_NUM];
+ int doit[ALGOR_NUM];
int pr_header=0;
apps_startup();
+#ifdef NO_DSA
+ memset(dsa_key,0,sizeof(dsa_key));
+#endif
if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
- BIO_set_fp(bio_err,stderr,BIO_NOCLOSE);
+ BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
+#ifndef NO_RSA
+ memset(rsa_key,0,sizeof(rsa_key));
for (i=0; i<RSA_NUM; i++)
rsa_key[i]=NULL;
+#endif
if ((buf=(unsigned char *)Malloc((int)BUFSIZE)) == NULL)
{
@@ -383,13 +414,23 @@ char **argv;
if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
else
#endif
-#ifndef NO_SHA
- if (strcmp(*argv,"sha") == 0) doit[D_SHA]=1;
+#ifndef NO_MD5
+ if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
else
#endif
#ifndef NO_SHA1
if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
else
+ if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
+ else
+#endif
+#ifndef NO_RMD160
+ if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
+ else
+ if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
+ else
+ if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
+ else
#endif
#ifndef NO_RC4
if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
@@ -409,7 +450,7 @@ char **argv;
}
else
#endif
- if (strcmp(*argv,"ssleay") == 0)
+ if (strcmp(*argv,"openssl") == 0)
{
RSA_set_default_method(RSA_PKCS1_SSLeay());
j--;
@@ -429,6 +470,11 @@ char **argv;
else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
else
#endif
+#ifndef NO_RC5
+ if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
+ else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
+ else
+#endif
#ifndef NO_IDEA
if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
@@ -437,6 +483,13 @@ char **argv;
#ifndef NO_BLOWFISH
if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
+ else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
+ else
+#endif
+#ifndef NO_CAST
+ if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
+ else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
+ else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
else
#endif
#ifndef NO_DES
@@ -467,17 +520,20 @@ char **argv;
#endif
{
BIO_printf(bio_err,"bad value, pick one of\n");
- BIO_printf(bio_err,"md2 mdc2 md5 sha sha1\n");
+ BIO_printf(bio_err,"md2 mdc2 md5 hmac sha1 rmd160\n");
#ifndef NO_IDEA
BIO_printf(bio_err,"idea-cbc ");
#endif
#ifndef NO_RC2
BIO_printf(bio_err,"rc2-cbc ");
#endif
-#ifndef NO_RC2
+#ifndef NO_RC5
+ BIO_printf(bio_err,"rc5-cbc ");
+#endif
+#ifndef NO_BLOWFISH
BIO_printf(bio_err,"bf-cbc");
#endif
-#if !defined(NO_IDEA) && !defined(NO_RC2) && !defined(NO_BLOWFISH)
+#if !defined(NO_IDEA) && !defined(NO_RC2) && !defined(NO_BLOWFISH) && !defined(NO_RC5)
BIO_printf(bio_err,"\n");
#endif
BIO_printf(bio_err,"des-cbc des-ede3 ");
@@ -527,6 +583,14 @@ char **argv;
BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
goto end;
}
+#if 0
+ else
+ {
+ BIO_printf(bio_err,"Loaded RSA key, %d bit modulus and e= 0x",BN_num_bits(rsa_key[i]->n));
+ BN_print(bio_err,rsa_key[i]->e);
+ BIO_printf(bio_err,"\n");
+ }
+#endif
}
#endif
@@ -550,9 +614,15 @@ char **argv;
#ifndef NO_RC2
RC2_set_key(&rc2_ks,16,key16,128);
#endif
+#ifndef NO_RC5
+ RC5_32_set_key(&rc5_ks,16,key16,12);
+#endif
#ifndef NO_BLOWFISH
BF_set_key(&bf_ks,16,key16);
#endif
+#ifndef NO_CAST
+ CAST_set_key(&cast_ks,16,key16);
+#endif
memset(rsa_c,0,sizeof(rsa_c));
#ifndef SIGALRM
@@ -570,22 +640,26 @@ char **argv;
c[D_MD2][0]=count/10;
c[D_MDC2][0]=count/10;
c[D_MD5][0]=count;
- c[D_SHA][0]=count;
+ c[D_HMAC][0]=count;
c[D_SHA1][0]=count;
+ c[D_RMD160][0]=count;
c[D_RC4][0]=count*5;
c[D_CBC_DES][0]=count;
c[D_EDE3_DES][0]=count/3;
c[D_CBC_IDEA][0]=count;
c[D_CBC_RC2][0]=count;
+ c[D_CBC_RC5][0]=count;
c[D_CBC_BF][0]=count;
+ c[D_CBC_CAST][0]=count;
for (i=1; i<SIZE_NUM; i++)
{
c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];
c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];
c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];
- c[D_SHA][i]=c[D_SHA][0]*4*lengths[0]/lengths[i];
+ c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];
c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];
+ c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];
}
for (i=1; i<SIZE_NUM; i++)
{
@@ -598,7 +672,9 @@ char **argv;
c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
+ c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
+ c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
}
rsa_c[R_RSA_512][0]=count/2000;
rsa_c[R_RSA_512][1]=count/400;
@@ -610,7 +686,7 @@ char **argv;
rsa_doit[i]=0;
else
{
- if (rsa_c[i] == 0)
+ if (rsa_c[i][0] == 0)
{
rsa_c[i][0]=1;
rsa_c[i][1]=20;
@@ -636,7 +712,7 @@ char **argv;
}
}
-#define COND(d) (count != (d))
+#define COND(d) (count < (d))
#define COUNT(d) (d)
#else
#define COND(c) (run)
@@ -685,7 +761,7 @@ char **argv;
print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
Time_F(START);
for (count=0,run=1; COND(c[D_MD5][j]); count++)
- MD5(buf,(unsigned long)lengths[j],&(md5[0]));
+ MD5(&(buf[0]),(unsigned long)lengths[j],&(md5[0]));
d=Time_F(STOP);
BIO_printf(bio_err,"%ld %s's in %.2fs\n",
count,names[D_MD5],d);
@@ -694,19 +770,27 @@ char **argv;
}
#endif
-#ifndef NO_SHA
- if (doit[D_SHA])
+#ifndef NO_MD5
+ if (doit[D_HMAC])
{
+ HMAC_CTX hctx;
+ HMAC_Init(&hctx,(unsigned char *)"This is a key...",
+ 16,EVP_md5());
+
for (j=0; j<SIZE_NUM; j++)
{
- print_message(names[D_SHA],c[D_SHA][j],lengths[j]);
+ print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
Time_F(START);
- for (count=0,run=1; COND(c[D_SHA][j]); count++)
- SHA(buf,(unsigned long)lengths[j],&(sha[0]));
+ for (count=0,run=1; COND(c[D_HMAC][j]); count++)
+ {
+ HMAC_Init(&hctx,NULL,0,NULL);
+ HMAC_Update(&hctx,buf,lengths[j]);
+ HMAC_Final(&hctx,&(hmac[0]),NULL);
+ }
d=Time_F(STOP);
BIO_printf(bio_err,"%ld %s's in %.2fs\n",
- count,names[D_SHA],d);
- results[D_SHA][j]=((double)count)/d*lengths[j];
+ count,names[D_HMAC],d);
+ results[D_HMAC][j]=((double)count)/d*lengths[j];
}
}
#endif
@@ -726,6 +810,22 @@ char **argv;
}
}
#endif
+#ifndef NO_RMD160
+ if (doit[D_RMD160])
+ {
+ for (j=0; j<SIZE_NUM; j++)
+ {
+ print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
+ Time_F(START);
+ for (count=0,run=1; COND(c[D_RMD160][j]); count++)
+ RIPEMD160(buf,(unsigned long)lengths[j],&(rmd160[0]));
+ d=Time_F(STOP);
+ BIO_printf(bio_err,"%ld %s's in %.2fs\n",
+ count,names[D_RMD160],d);
+ results[D_RMD160][j]=((double)count)/d*lengths[j];
+ }
+ }
+#endif
#ifndef NO_RC4
if (doit[D_RC4])
{
@@ -816,6 +916,24 @@ char **argv;
}
}
#endif
+#ifndef NO_RC5
+ if (doit[D_CBC_RC5])
+ {
+ for (j=0; j<SIZE_NUM; j++)
+ {
+ print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
+ Time_F(START);
+ for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
+ RC5_32_cbc_encrypt(buf,buf,
+ (unsigned long)lengths[j],&rc5_ks,
+ (unsigned char *)&(iv[0]),RC5_ENCRYPT);
+ d=Time_F(STOP);
+ BIO_printf(bio_err,"%ld %s's in %.2fs\n",
+ count,names[D_CBC_RC5],d);
+ results[D_CBC_RC5][j]=((double)count)/d*lengths[j];
+ }
+ }
+#endif
#ifndef NO_BLOWFISH
if (doit[D_CBC_BF])
{
@@ -834,14 +952,35 @@ char **argv;
}
}
#endif
+#ifndef NO_CAST
+ if (doit[D_CBC_CAST])
+ {
+ for (j=0; j<SIZE_NUM; j++)
+ {
+ print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
+ Time_F(START);
+ for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
+ CAST_cbc_encrypt(buf,buf,
+ (unsigned long)lengths[j],&cast_ks,
+ (unsigned char *)&(iv[0]),CAST_ENCRYPT);
+ d=Time_F(STOP);
+ BIO_printf(bio_err,"%ld %s's in %.2fs\n",
+ count,names[D_CBC_CAST],d);
+ results[D_CBC_CAST][j]=((double)count)/d*lengths[j];
+ }
+ }
+#endif
RAND_bytes(buf,30);
#ifndef NO_RSA
for (j=0; j<RSA_NUM; j++)
{
if (!rsa_doit[j]) continue;
+ rsa_num=RSA_private_encrypt(30,buf,buf2,rsa_key[j],
+ RSA_PKCS1_PADDING);
pkey_print_message("private","rsa",rsa_c[j][0],rsa_bits[j],
RSA_SECONDS);
+/* RSA_blinding_on(rsa_key[j],NULL); */
Time_F(START);
for (count=0,run=1; COND(rsa_c[j][0]); count++)
{
@@ -861,6 +1000,9 @@ char **argv;
rsa_results[j][0]=d/(double)count;
rsa_count=count;
+#if 1
+ rsa_num2=RSA_public_decrypt(rsa_num,buf2,buf,rsa_key[j],
+ RSA_PKCS1_PADDING);
pkey_print_message("public","rsa",rsa_c[j][1],rsa_bits[j],
RSA_SECONDS);
Time_F(START);
@@ -880,6 +1022,7 @@ char **argv;
BIO_printf(bio_err,"%ld %d bit public RSA's in %.2fs\n",
count,rsa_bits[j],d);
rsa_results[j][1]=d/(double)count;
+#endif
if (rsa_count <= 1)
{
@@ -894,9 +1037,13 @@ char **argv;
#ifndef NO_DSA
for (j=0; j<DSA_NUM; j++)
{
+ unsigned int kk;
+
if (!dsa_doit[j]) continue;
DSA_generate_key(dsa_key[j]);
/* DSA_sign_setup(dsa_key[j],NULL); */
+ rsa_num=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
+ &kk,dsa_key[j]);
pkey_print_message("sign","dsa",dsa_c[j][0],dsa_bits[j],
DSA_SECONDS);
Time_F(START);
@@ -918,6 +1065,8 @@ char **argv;
dsa_results[j][0]=d/(double)count;
rsa_count=count;
+ rsa_num2=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
+ kk,dsa_key[j]);
pkey_print_message("verify","dsa",dsa_c[j][1],dsa_bits[j],
DSA_SECONDS);
Time_F(START);
@@ -966,7 +1115,7 @@ char **argv;
#ifndef NO_BLOWFISH
printf("%s ",BF_options());
#endif
- fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_CFLAGS));
+ fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
if (pr_header)
{
@@ -980,7 +1129,7 @@ char **argv;
for (k=0; k<ALGOR_NUM; k++)
{
if (!doit[k]) continue;
- fprintf(stdout,"%-12s",names[k]);
+ fprintf(stdout,"%-13s",names[k]);
for (j=0; j<SIZE_NUM; j++)
{
if (results[k][j] > 10000)
@@ -995,9 +1144,14 @@ char **argv;
for (k=0; k<RSA_NUM; k++)
{
if (!rsa_doit[k]) continue;
- if (j) { printf("%18ssign verify\n"," "); j=0; }
- fprintf(stdout,"rsa %4d bits %8.4fs %8.4fs",
- rsa_bits[k],rsa_results[k][0],rsa_results[k][1]);
+ if (j)
+ {
+ printf("%18ssign verify sign/s verify/s\n"," ");
+ j=0;
+ }
+ fprintf(stdout,"rsa %4d bits %8.4fs %8.4fs %8.1f %8.1f",
+ rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
+ 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
fprintf(stdout,"\n");
}
#endif
@@ -1006,9 +1160,13 @@ char **argv;
for (k=0; k<DSA_NUM; k++)
{
if (!dsa_doit[k]) continue;
- if (j) { printf("%18ssign verify\n"," "); j=0; }
- fprintf(stdout,"dsa %4d bits %8.4fs %8.4fs",
- dsa_bits[k],dsa_results[k][0],dsa_results[k][1]);
+ if (j) {
+ printf("%18ssign verify sign/s verify/s\n"," ");
+ j=0;
+ }
+ fprintf(stdout,"dsa %4d bits %8.4fs %8.4fs %8.1f %8.1f",
+ dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
+ 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
fprintf(stdout,"\n");
}
#endif
@@ -1066,3 +1224,4 @@ int tm;
num=num;
#endif
}
+