Commit b5419b81 authored by Felix Laurie von Massenbach's avatar Felix Laurie von Massenbach Committed by Ben Laurie
Browse files

Add speed test for prime trial division.

parent e46a059e
Loading
Loading
Loading
Loading
+64 −0
Original line number Diff line number Diff line
@@ -191,6 +191,8 @@
#endif
#include <openssl/modes.h>

#include "../crypto/bn/bn_lcl.h"

#ifndef HAVE_FORK
# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_NETWARE)
#  define HAVE_FORK 0
@@ -214,6 +216,7 @@ static int usertime=1;

static double Time_F(int s);
static void print_message(const char *s,long num,int length);
static void prime_print_message(const char *s, long num);
static void pkey_print_message(const char *str, const char *str2,
	long num, int bits, int sec);
static void print_result(int alg,int run_no,int count,double time_used);
@@ -223,6 +226,7 @@ static int do_multi(int multi);

#define ALGOR_NUM	30
#define SIZE_NUM	5
#define PRIME_NUM	2
#define RSA_NUM		4
#define DSA_NUM		3

@@ -239,6 +243,8 @@ static const char *names[ALGOR_NUM]={
  "aes-128 ige","aes-192 ige","aes-256 ige","ghash" };
static double results[ALGOR_NUM][SIZE_NUM];
static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
static const char *prime_names[PRIME_NUM]={
  "prime trial division", "prime coprime" };
#ifndef OPENSSL_NO_RSA
static double rsa_results[RSA_NUM][2];
#endif
@@ -492,6 +498,11 @@ int MAIN(int argc, char **argv)
#define D_GHASH		29
	double d=0.0;
	long c[ALGOR_NUM][SIZE_NUM];

#define D_PRIME_TRIAL_DIVISION	0
#define D_PRIME_COPRIME			1
	long prime_c[PRIME_NUM];

#define	R_DSA_512	0
#define	R_DSA_1024	1
#define	R_DSA_2048	2
@@ -605,6 +616,7 @@ int MAIN(int argc, char **argv)
	long ecdh_c[EC_NUM][2];
#endif

	int prime_doit[PRIME_NUM];
	int rsa_doit[RSA_NUM];
	int dsa_doit[DSA_NUM];
#ifndef OPENSSL_NO_ECDSA
@@ -997,6 +1009,9 @@ int MAIN(int argc, char **argv)
			}
		else
#endif
			 if (strcmp(*argv,"prime-trial-division") == 0) prime_doit[D_PRIME_TRIAL_DIVISION]=1;
		else if (strcmp(*argv,"prime-coprime") == 0) prime_doit[D_PRIME_COPRIME]=1;
		else
			{
			BIO_printf(bio_err,"Error: bad option or value\n");
			BIO_printf(bio_err,"\n");
@@ -1123,6 +1138,7 @@ int MAIN(int argc, char **argv)
    !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA)
			BIO_printf(bio_err,"\n");
#endif
			BIO_printf(bio_err,"prime-trial-division  prime-coprime\n");

			BIO_printf(bio_err,"\n");
			BIO_printf(bio_err,"Available options:\n");
@@ -1329,6 +1345,10 @@ int MAIN(int argc, char **argv)
		c[D_IGE_192_AES][i]=c[D_IGE_192_AES][i-1]*l0/l1;
		c[D_IGE_256_AES][i]=c[D_IGE_256_AES][i-1]*l0/l1;
		}
		
	prime_c[D_PRIME_TRIAL_DIVISION]=count;
	prime_c[D_PRIME_COPRIME]=count;
	
#ifndef OPENSSL_NO_RSA
	rsa_c[R_RSA_512][0]=count/2000;
	rsa_c[R_RSA_512][1]=count/400;
@@ -1996,6 +2016,33 @@ int MAIN(int argc, char **argv)
			}
		}
		
	for (j=0; j<PRIME_NUM; j++)
		{
		BIGNUM *rnd = BN_new();
		BIGNUM *add = BN_new();
		BN_CTX *ctx = BN_CTX_new();
		
		if(prime_doit[j])
			{
			BN_set_word(add, 2);
			
			prime_print_message(prime_names[j], prime_c[j]);
			
			Time_F(START);
			for (count=0, run=1; COND(prime_c[j]); count++)
				bn_probable_prime_dh(rnd,1024,add,NULL,ctx);
			
			d=Time_F(STOP);
			BIO_printf(bio_err,
					   mr ? "+R:%ld:%s:%f\n" : "%ld %s's in %.2fs\n",
					   count, prime_names[j], d);
			}
		
		BN_CTX_free(ctx);
		BN_free(add);
		BN_free(rnd);
		}

	RAND_pseudo_bytes(buf,36);
#ifndef OPENSSL_NO_RSA
	for (j=0; j<RSA_NUM; j++)
@@ -2586,6 +2633,23 @@ static void print_message(const char *s, long num, int length)
#endif
	}

static void prime_print_message(const char *s, long num)
	{
#ifdef SIGALRM
	BIO_printf(bio_err,mr ? "+DT:%s:%d\n"
		   : "Doing %s for %ds: ", s, SECONDS);
	(void)BIO_flush(bio_err);
	alarm(SECONDS);
#else
	BIO_printf(bio_err,mr ? "+DN:%s:%ld\n"
		   : "Doing %s %ld times: ", s, num);
	(void)BIO_flush(bio_err);
#endif
#ifdef LINT
	num=num;
#endif
	}

static void pkey_print_message(const char *str, const char *str2, long num,
	int bits, int tm)
	{