Fixes for signed/unsigned warnings and shadows.
[openssl.git] / apps / speed.c
index 4c7cdcd009c4aeeba6211ab2a1d975faec3ae550..19b08ce9a19aa1ad63c6956651267ee8335a4d7f 100644 (file)
 #include <sys/param.h>
 #endif
 
+#include <openssl/bn.h>
 #ifndef OPENSSL_NO_DES
 #include <openssl/des.h>
 #endif
 #endif
 #include <openssl/x509.h>
 #ifndef OPENSSL_NO_DSA
+#include <openssl/dsa.h>
 #include "./testdsa.h"
 #endif
 #ifndef OPENSSL_NO_ECDSA
@@ -260,13 +262,14 @@ static int usertime=1;
 
 static double Time_F(int s);
 static void print_message(const char *s,long num,int length);
-static void pkey_print_message(char *str,char *str2,long num,int bits,int sec);
+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);
 #ifdef HAVE_FORK
 static int do_multi(int multi);
 #endif
 
-#define ALGOR_NUM      19
+#define ALGOR_NUM      21
 #define SIZE_NUM       5
 #define RSA_NUM                4
 #define DSA_NUM                3
@@ -278,7 +281,7 @@ static const char *names[ALGOR_NUM]={
   "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
   "des cbc","des ede3","idea cbc",
   "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc",
-  "aes-128 cbc","aes-192 cbc","aes-256 cbc"};
+  "aes-128 cbc","aes-192 cbc","aes-256 cbc","evp","sha256","sha512"};
 static double results[ALGOR_NUM][SIZE_NUM];
 static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
 static double rsa_results[RSA_NUM][2];
@@ -446,11 +449,13 @@ static double Time_F(int s)
 
 
 static const int KDF1_SHA1_len = 20;
-static void *KDF1_SHA1(void *in, size_t inlen, void *out, size_t outlen)
+static void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen)
        {
 #ifndef OPENSSL_NO_SHA
-       if (outlen != SHA_DIGEST_LENGTH)
+       if (*outlen < SHA_DIGEST_LENGTH)
                return NULL;
+       else
+               *outlen = SHA_DIGEST_LENGTH;
        return SHA1(in, inlen, out);
 #else
        return NULL;
@@ -491,6 +496,8 @@ int MAIN(int argc, char **argv)
 #endif
 #ifndef OPENSSL_NO_SHA
        unsigned char sha[SHA_DIGEST_LENGTH];
+       unsigned char sha256[SHA256_DIGEST_LENGTH];
+       unsigned char sha512[SHA512_DIGEST_LENGTH];
 #endif
 #ifndef OPENSSL_NO_RIPEMD
        unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
@@ -563,6 +570,8 @@ int MAIN(int argc, char **argv)
 #define D_CBC_192_AES  16
 #define D_CBC_256_AES  17
 #define D_EVP          18
+#define D_SHA256       19
+#define D_SHA512       20
        double d=0.0;
        long c[ALGOR_NUM][SIZE_NUM];
 #define        R_DSA_512       0
@@ -632,7 +641,7 @@ int MAIN(int argc, char **argv)
        NID_sect409r1,
        NID_sect571r1
        }; 
-       static char * test_curves_names[EC_NUM] = 
+       static const char * test_curves_names[EC_NUM] = 
        {
        /* Prime Curves */
        "secp160r1",
@@ -663,19 +672,19 @@ int MAIN(int argc, char **argv)
 #endif
 
 #ifndef OPENSSL_NO_ECDSA
-        unsigned char ecdsasig[256];
-        unsigned int ecdsasiglen;
-        EC_KEY *ecdsa[EC_NUM];
-        long ecdsa_c[EC_NUM][2];
+       unsigned char ecdsasig[256];
+       unsigned int ecdsasiglen;
+       EC_KEY *ecdsa[EC_NUM];
+       long ecdsa_c[EC_NUM][2];
 #endif
 
 #ifndef OPENSSL_NO_ECDH
-        EC_KEY *ecdh_a[EC_NUM], *ecdh_b[EC_NUM];
-        unsigned char secret_a[MAX_ECDH_SIZE], secret_b[MAX_ECDH_SIZE];
-        int secret_size_a, secret_size_b;
-        int ecdh_checks = 0;
-        int secret_idx = 0;
-        long ecdh_c[EC_NUM][2];
+       EC_KEY *ecdh_a[EC_NUM], *ecdh_b[EC_NUM];
+       unsigned char secret_a[MAX_ECDH_SIZE], secret_b[MAX_ECDH_SIZE];
+       int secret_size_a, secret_size_b;
+       int ecdh_checks = 0;
+       int secret_idx = 0;
+       long ecdh_c[EC_NUM][2];
 #endif
 
        int rsa_doit[RSA_NUM];
@@ -865,7 +874,13 @@ int MAIN(int argc, char **argv)
 #ifndef OPENSSL_NO_SHA
                        if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
                else
-                       if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
+                       if (strcmp(*argv,"sha") == 0)   doit[D_SHA1]=1,
+                                                       doit[D_SHA256]=1,
+                                                       doit[D_SHA512]=1;
+               else
+                       if (strcmp(*argv,"sha256") == 0) doit[D_SHA256]=1;
+               else
+                       if (strcmp(*argv,"sha512") == 0) doit[D_SHA512]=1;
                else
 #endif
 #ifndef OPENSSL_NO_RIPEMD
@@ -1047,6 +1062,8 @@ int MAIN(int argc, char **argv)
 #endif
 #ifndef OPENSSL_NO_SHA1
                        BIO_printf(bio_err,"sha1     ");
+                       BIO_printf(bio_err,"sha256  ");
+                       BIO_printf(bio_err,"sha512  ");
 #endif
 #ifndef OPENSSL_NO_RIPEMD160
                        BIO_printf(bio_err,"rmd160");
@@ -1244,10 +1261,10 @@ int MAIN(int argc, char **argv)
        BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
        count=10;
        do      {
-               long i;
+               long it;
                count*=2;
                Time_F(START);
-               for (i=count; i; i--)
+               for (it=count; it; it--)
                        DES_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
                                &sch,DES_ENCRYPT);
                d=Time_F(STOP);
@@ -1271,6 +1288,8 @@ int MAIN(int argc, char **argv)
        c[D_CBC_128_AES][0]=count;
        c[D_CBC_192_AES][0]=count;
        c[D_CBC_256_AES][0]=count;
+       c[D_SHA256][0]=count;
+       c[D_SHA512][0]=count;
 
        for (i=1; i<SIZE_NUM; i++)
                {
@@ -1281,6 +1300,8 @@ int MAIN(int argc, char **argv)
                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];
+               c[D_SHA256][i]=c[D_SHA256][0]*4*lengths[0]/lengths[i];
+               c[D_SHA512][i]=c[D_SHA512][0]*4*lengths[0]/lengths[i];
                }
        for (i=1; i<SIZE_NUM; i++)
                {
@@ -1343,7 +1364,7 @@ int MAIN(int argc, char **argv)
 #ifndef OPENSSL_NO_ECDSA
        ecdsa_c[R_EC_P160][0]=count/1000;
        ecdsa_c[R_EC_P160][1]=count/1000/2;
-       for (i=R_EC_P224; i<=R_EC_P521; i++)
+       for (i=R_EC_P192; i<=R_EC_P521; i++)
                {
                ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
                ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
@@ -1397,7 +1418,7 @@ int MAIN(int argc, char **argv)
 #ifndef OPENSSL_NO_ECDH
        ecdh_c[R_EC_P160][0]=count/1000;
        ecdh_c[R_EC_P160][1]=count/1000;
-       for (i=R_EC_P224; i<=R_EC_P521; i++)
+       for (i=R_EC_P192; i<=R_EC_P521; i++)
                {
                ecdh_c[i][0]=ecdh_c[i-1][0]/2;
                ecdh_c[i][1]=ecdh_c[i-1][1]/2;
@@ -1557,6 +1578,37 @@ int MAIN(int argc, char **argv)
                        print_result(D_SHA1,j,count,d);
                        }
                }
+
+#ifndef OPENSSL_NO_SHA256
+       if (doit[D_SHA256])
+               {
+               for (j=0; j<SIZE_NUM; j++)
+                       {
+                       print_message(names[D_SHA256],c[D_SHA256][j],lengths[j]);
+                       Time_F(START);
+                       for (count=0,run=1; COND(c[D_SHA256][j]); count++)
+                               SHA256(buf,lengths[j],sha256);
+                       d=Time_F(STOP);
+                       print_result(D_SHA256,j,count,d);
+                       }
+               }
+#endif
+
+#ifndef OPENSSL_NO_SHA512
+       if (doit[D_SHA512])
+               {
+               for (j=0; j<SIZE_NUM; j++)
+                       {
+                       print_message(names[D_SHA512],c[D_SHA512][j],lengths[j]);
+                       Time_F(START);
+                       for (count=0,run=1; COND(c[D_SHA512][j]); count++)
+                               SHA512(buf,lengths[j],sha512);
+                       d=Time_F(STOP);
+                       print_result(D_SHA512,j,count,d);
+                       }
+               }
+#endif
+
 #endif
 #ifndef OPENSSL_NO_RIPEMD
        if (doit[D_RMD160])
@@ -1764,6 +1816,7 @@ int MAIN(int argc, char **argv)
                                        EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
                                else
                                        EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
+                               EVP_CIPHER_CTX_set_padding(&ctx, 0);
 
                                Time_F(START);
                                if(decrypt)
@@ -2039,13 +2092,13 @@ int MAIN(int argc, char **argv)
                                                        break;
                                                        }
                                                }
-                                               d=Time_F(STOP);
+                                       d=Time_F(STOP);
 
-                                               BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" :
+                                       BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" :
                                                "%ld %d bit ECDSA signs in %.2fs \n", 
                                                count, test_curves_bits[j], d);
-                                               ecdsa_results[j][0]=d/(double)count;
-                                               rsa_count=count;
+                                       ecdsa_results[j][0]=d/(double)count;
+                                       rsa_count=count;
                                        }
 
                                /* Perform ECDSA verification test */
@@ -2075,11 +2128,11 @@ int MAIN(int argc, char **argv)
                                                        break;
                                                        }
                                                }
-                                               d=Time_F(STOP);
-                                               BIO_printf(bio_err, mr? "+R6:%ld:%d:%.2f\n"
+                                       d=Time_F(STOP);
+                                       BIO_printf(bio_err, mr? "+R6:%ld:%d:%.2f\n"
                                                        : "%ld %d bit ECDSA verify in %.2fs\n",
-                                               count, test_curves_bits[j], d);
-                                               ecdsa_results[j][1]=d/(double)count;
+                                       count, test_curves_bits[j], d);
+                                       ecdsa_results[j][1]=d/(double)count;
                                        }
 
                                if (rsa_count <= 1) 
@@ -2138,7 +2191,7 @@ int MAIN(int argc, char **argv)
                                         * otherwise, use result (see section 4.8 of draft-ietf-tls-ecc-03.txt).
                                         */
                                        int field_size, outlen;
-                                       void *(*kdf)(void *in, size_t inlen, void *out, size_t xoutlen);
+                                       void *(*kdf)(const void *in, size_t inlen, void *out, size_t *xoutlen);
                                        field_size = EC_GROUP_get_degree(ecdh_a[j]->group);
                                        if (field_size <= 24 * 8)
                                                {
@@ -2436,8 +2489,8 @@ static void print_message(const char *s, long num, int length)
 #endif
        }
 
-static void pkey_print_message(char *str, char *str2, long num, int bits,
-            int tm)
+static void pkey_print_message(const char *str, const char *str2, long num,
+       int bits, int tm)
        {
 #ifdef SIGALRM
        BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n"