123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197 |
- Index: libssl/Configure
- ===================================================================
- RCS file: libssl/Configure,v
- retrieving revision 1.1.1.12
- retrieving revision 1.21
- diff -u -r1.1.1.12 -r1.21
- --- libssl/Configure 15 Sep 2008 23:36:40 -0000 1.1.1.12
- +++ libssl/Configure 15 Sep 2008 23:44:15 -0000 1.21
- @@ -34,6 +34,8 @@
- # (Default: KRB5_DIR/include)
- # --with-krb5-flavor Declare what flavor of Kerberos 5 is used. Currently
- # supported values are "MIT" and "Heimdal". A value is required.
- +# --with-cryptodev Force support for cryptodev (ie., ocf-linux)
- +# --with-cryptodev-digests Force support for cryptodev digests (generally slow)
- #
- # --test-sanity Make a number of sanity checks on the data in this file.
- # This is a debugging tool for OpenSSL developers.
- @@ -538,6 +540,9 @@
- ##### Compaq Non-Stop Kernel (Tandem)
- "tandem-c89","c89:-Ww -D__TANDEM -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D_TANDEM_SOURCE -DB_ENDIAN::(unknown):::THIRTY_TWO_BIT:::",
-
- +# uClinux
- +"uClinux-dist","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):BN_LLONG::::::::::::\$(LIBSSL_dlfcn):linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}",
- +
- );
-
- my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
- @@ -587,6 +592,8 @@
- my $no_asm=0;
- my $no_dso=0;
- my $no_gmp=0;
- +my $have_cryptodev=0;
- +my $use_cryptodev_digests=0;
- my @skip=();
- my $Makefile="Makefile";
- my $des_locl="crypto/des/des_locl.h";
- @@ -714,6 +721,14 @@
- {
- exit(&test_sanity());
- }
- + elsif (/^--with-cryptodev$/)
- + {
- + $have_cryptodev = 1;
- + }
- + elsif (/^--with-cryptodev-digests$/)
- + {
- + $use_cryptodev_digests = 1;
- + }
- elsif (/^reconfigure/ || /^reconf/)
- {
- if (open(IN,"<$Makefile"))
- @@ -922,6 +937,7 @@
- print " OPENSSL_NO_$ALGO";
-
- if (/^err$/) { $flags .= "-DOPENSSL_NO_ERR "; }
- + elsif (/^hw$/) { $flags .= "-DOPENSSL_NO_HW "; }
- elsif (/^asm$/) { $no_asm = 1; }
- }
- else
- @@ -1062,6 +1078,16 @@
- $withargs{"krb5-dir"} ne "";
- }
-
- +# enable the linux cryptodev (ocf-linux) support
- +if ($have_cryptodev)
- + {
- + if ($use_cryptodev_digests)
- + {
- + $cflags = "-DUSE_CRYPTODEV_DIGESTS $cflags";
- + }
- + $cflags = "-DHAVE_CRYPTODEV $cflags";
- + }
- +
- # The DSO code currently always implements all functions so that no
- # applications will have to worry about that from a compilation point
- # of view. However, the "method"s may return zero unless that platform
- Index: libssl/INSTALL
- ===================================================================
- RCS file: libssl/INSTALL,v
- retrieving revision 1.1.1.8
- retrieving revision 1.3
- diff -u -r1.1.1.8 -r1.3
- --- libssl/INSTALL 15 Sep 2008 23:36:40 -0000 1.1.1.8
- +++ libssl/INSTALL 15 Sep 2008 23:44:15 -0000 1.3
- @@ -103,6 +103,12 @@
- define preprocessor symbols, specify additional libraries,
- library directories or other compiler options.
-
- + --with-cryptodev Enabled the BSD cryptodev engine even if we are not using
- + BSD. Useful if you are running ocf-linux or something
- + similar. Once enabled you can also enable the use of
- + cryptodev digests, with is usually slower unless you have
- + large amounts data. Use --with-cryptodev-digests to force
- + it.
-
- Installation in Detail
- ----------------------
- Index: libssl/Makefile.org
- ===================================================================
- RCS file: libssl/Makefile.org,v
- retrieving revision 1.1.1.11
- retrieving revision 1.21
- diff -u -r1.1.1.11 -r1.21
- --- libssl/Makefile.org 15 Sep 2008 23:36:40 -0000 1.1.1.11
- +++ libssl/Makefile.org 15 Sep 2008 23:44:15 -0000 1.21
- @@ -367,7 +367,7 @@
-
- links:
- @$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
- - @$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
- + @$(PERL) $(TOP)/util/mklink.pl include/openssl $(HEADER) $(EXHEADER)
- @set -e; target=links; $(RECURSIVE_BUILD_CMD)
-
- gentests:
- Index: libssl/apps/apps.h
- ===================================================================
- RCS file: libssl/apps/apps.h,v
- retrieving revision 1.1.1.7
- retrieving revision 1.6
- diff -u -r1.1.1.7 -r1.6
- --- libssl/apps/apps.h 15 Sep 2008 23:36:40 -0000 1.1.1.7
- +++ libssl/apps/apps.h 15 Sep 2008 23:44:15 -0000 1.6
- @@ -112,7 +112,7 @@
- #ifndef HEADER_APPS_H
- #define HEADER_APPS_H
-
- -#include "e_os.h"
- +#include <openssl/e_os.h>
-
- #include <openssl/bio.h>
- #include <openssl/x509.h>
- Index: libssl/apps/progs.h
- ===================================================================
- RCS file: libssl/apps/progs.h,v
- retrieving revision 1.1.1.8
- retrieving revision 1.7
- diff -u -r1.1.1.8 -r1.7
- --- libssl/apps/progs.h 15 Sep 2008 23:36:40 -0000 1.1.1.8
- +++ libssl/apps/progs.h 15 Sep 2008 23:44:15 -0000 1.7
- @@ -129,7 +129,9 @@
- #ifndef OPENSSL_NO_ENGINE
- {FUNC_TYPE_GENERAL,"engine",engine_main},
- #endif
- +#ifndef OPENSSL_NO_OCSP
- {FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
- +#endif
- {FUNC_TYPE_GENERAL,"prime",prime_main},
- #ifndef OPENSSL_NO_MD2
- {FUNC_TYPE_MD,"md2",dgst_main},
- Index: libssl/apps/speed.c
- ===================================================================
- RCS file: libssl/apps/speed.c,v
- retrieving revision 1.1.1.10
- retrieving revision 1.15
- diff -u -r1.1.1.10 -r1.15
- --- libssl/apps/speed.c 15 Sep 2008 23:36:40 -0000 1.1.1.10
- +++ libssl/apps/speed.c 15 Sep 2008 23:44:15 -0000 1.15
- @@ -292,7 +292,7 @@
- "evp","sha256","sha512",
- "aes-128 ige","aes-192 ige","aes-256 ige"};
- static double results[ALGOR_NUM][SIZE_NUM];
- -static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
- +static int lengths[SIZE_NUM]={16,64,256,1024,2*1024,4*1024};
- static double rsa_results[RSA_NUM][2];
- static double dsa_results[DSA_NUM][2];
- #ifndef OPENSSL_NO_ECDSA
- @@ -328,6 +328,79 @@
- #define START 0
- #define STOP 1
-
- +#ifdef __linux__
- +/*
- + * record CPU usage as well
- + */
- +
- +static int do_cpu = 0;
- +
- +struct cpu_stat {
- + unsigned int user;
- + unsigned int nice;
- + unsigned int system;
- + unsigned int idle;
- + unsigned int total;
- +};
- +
- +static unsigned int cpu_usage[ALGOR_NUM][SIZE_NUM];
- +static unsigned int rsa_cpu_usage[RSA_NUM][2];
- +static unsigned int dsa_cpu_usage[DSA_NUM][2];
- +static struct cpu_stat cpu_start, cpu_finish;
- +
- +static void
- +get_cpu(int s)
- +{
- + FILE *fp = NULL;
- + unsigned char buf[80];
- + struct cpu_stat *st = s == START ? &cpu_start : &cpu_finish;
- +
- + memset(st, 0, sizeof(*st));
- +
- + if (fp == NULL)
- + fp = fopen("/proc/stat", "r");
- + if (!fp)
- + return;
- + if (fseek(fp, 0, SEEK_SET) == -1) {
- + fclose(fp);
- + return;
- + }
- + fscanf(fp, "%s %d %d %d %d", &buf[0], &st->user, &st->nice,
- + &st->system, &st->idle);
- + st->total = st->user + st->nice + st->system + st->idle;
- + fclose(fp);
- +}
- +
- +static unsigned int
- +calc_cpu()
- +{
- + unsigned int total, res;
- +
- + total = cpu_finish.total - cpu_start.total;
- + if (total <= 0)
- + return 0;
- +#if 1 // busy
- + res = ((cpu_finish.system + cpu_finish.user + cpu_finish.nice) -
- + (cpu_start.system + cpu_start.user + cpu_start.nice)) *
- + 100 / total;
- +#endif
- +#if 0 // system
- + res = (cpu_finish.system - cpu_start.system) * 100 / total;
- +#endif
- +#if 0 // user
- + res = (cpu_finish.user - cpu_start.user) * 100 / total;
- +#endif
- +#if 0 // nice
- + res = (cpu_finish.nice - cpu_start.nice) * 100 / total;
- +#endif
- +#if 0 // idle
- + res = (cpu_finish.idle - cpu_start.idle) * 100 / total;
- +#endif
- + return(res);
- +}
- +
- +#endif
- +
- #if defined(OPENSSL_SYS_NETWARE)
-
- /* for NetWare the best we can do is use clock() which returns the
- @@ -358,6 +431,11 @@
- {
- double ret;
-
- +#ifdef __linux__
- + if (do_cpu)
- + get_cpu(s);
- +#endif
- +
- #ifdef USE_TOD
- if(usertime)
- {
- @@ -832,6 +910,14 @@
- j--; /* Otherwise, -elapsed gets confused with
- an algorithm. */
- }
- +#ifdef __linux__
- + else if ((argc > 0) && (strcmp(*argv,"-cpu") == 0))
- + {
- + do_cpu = 1;
- + j--; /* Otherwise, -cpu gets confused with
- + an algorithm. */
- + }
- +#endif
- else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
- {
- argc--;
- @@ -1260,6 +1346,9 @@
- #ifdef HAVE_FORK
- BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
- #endif
- +#ifdef __linux__
- + BIO_printf(bio_err,"-cpu calculate cpu utilisation.\n");
- +#endif
- goto end;
- }
- argc--;
- @@ -1267,11 +1356,6 @@
- j++;
- }
-
- -#ifdef HAVE_FORK
- - if(multi && do_multi(multi))
- - goto show_res;
- -#endif
- -
- if (j == 0)
- {
- for (i=0; i<ALGOR_NUM; i++)
- @@ -1604,6 +1688,11 @@
- signal(SIGALRM,sig_done);
- #endif /* SIGALRM */
-
- +#ifdef HAVE_FORK /* DM */
- + if(multi && do_multi(multi))
- + goto show_res;
- +#endif
- +
- #ifndef OPENSSL_NO_MD2
- if (doit[D_MD2])
- {
- @@ -2033,8 +2122,6 @@
- /* -O3 -fschedule-insns messes up an
- * optimization here! names[D_EVP]
- * somehow becomes NULL */
- - print_message(names[D_EVP],save_count,
- - lengths[j]);
-
- EVP_CIPHER_CTX_init(&ctx);
- if(decrypt)
- @@ -2043,6 +2130,9 @@
- EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
- EVP_CIPHER_CTX_set_padding(&ctx, 0);
-
- + print_message(names[D_EVP],save_count,
- + lengths[j]);
- +
- Time_F(START);
- if(decrypt)
- for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
- @@ -2107,6 +2197,8 @@
- }
- }
- d=Time_F(STOP);
- + if (do_cpu)
- + rsa_cpu_usage[j][0] = calc_cpu();
- BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n"
- : "%ld %d bit private RSA's in %.2fs\n",
- count,rsa_bits[j],d);
- @@ -2142,6 +2234,8 @@
- }
- }
- d=Time_F(STOP);
- + if (do_cpu)
- + rsa_cpu_usage[j][1] = calc_cpu();
- BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n"
- : "%ld %d bit public RSA's in %.2fs\n",
- count,rsa_bits[j],d);
- @@ -2201,6 +2295,8 @@
- }
- }
- d=Time_F(STOP);
- + if (do_cpu)
- + dsa_cpu_usage[j][0] = calc_cpu();
- BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n"
- : "%ld %d bit DSA signs in %.2fs\n",
- count,dsa_bits[j],d);
- @@ -2236,6 +2332,8 @@
- }
- }
- d=Time_F(STOP);
- + if (do_cpu)
- + dsa_cpu_usage[j][1] = calc_cpu();
- BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n"
- : "%ld %d bit DSA verify in %.2fs\n",
- count,dsa_bits[j],d);
- @@ -2530,14 +2628,23 @@
- fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
- fprintf(stdout,"type ");
- }
- - for (j=0; j<SIZE_NUM; j++)
- + for (j=0; j<SIZE_NUM; j++) {
- fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]);
- + if (do_cpu && !mr)
- + fprintf(stdout, " /cpu");
- + }
- fprintf(stdout,"\n");
- }
-
- for (k=0; k<ALGOR_NUM; k++)
- {
- if (!doit[k]) continue;
- + if (k == D_EVP) {
- + if (evp_cipher)
- + names[D_EVP]=OBJ_nid2ln(evp_cipher->nid);
- + else
- + names[D_EVP]=OBJ_nid2ln(evp_md->type);
- + }
- if(mr)
- fprintf(stdout,"+F:%d:%s",k,names[k]);
- else
- @@ -2548,6 +2655,8 @@
- fprintf(stdout," %11.2fk",results[k][j]/1e3);
- else
- fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]);
- + if (do_cpu)
- + fprintf(stdout, mr ? "/%d" : "/%%%-3d", cpu_usage[k][j]);
- }
- fprintf(stdout,"\n");
- }
- @@ -2562,13 +2671,18 @@
- j=0;
- }
- if(mr)
- - fprintf(stdout,"+F2:%u:%u:%f:%f\n",
- - k,rsa_bits[k],rsa_results[k][0],
- - rsa_results[k][1]);
- - else
- - fprintf(stdout,"rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
- - 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,"+F2:%u:%u:%f", k,rsa_bits[k],rsa_results[k][0]);
- + else
- + fprintf(stdout,"rsa %4u bits %8.6fs",rsa_bits[k],rsa_results[k][0]);
- + if (do_cpu)
- + fprintf(stdout, mr ? "/%d": "/%%%-3d", rsa_cpu_usage[k][0]);
- + fprintf(stdout, mr ? ":%f" : " %8.6fs", rsa_results[k][1]);
- + if (do_cpu)
- + fprintf(stdout, mr ? "/%d": "/%%%-3d", rsa_cpu_usage[k][1]);
- + if(!mr)
- + fprintf(stdout, " %8.1f %8.1f",
- + 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
- + fprintf(stdout, "\n");
- }
- #endif
- #ifndef OPENSSL_NO_DSA
- @@ -2582,12 +2696,18 @@
- j=0;
- }
- if(mr)
- - fprintf(stdout,"+F3:%u:%u:%f:%f\n",
- - k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]);
- + fprintf(stdout,"+F3:%u:%u:%f", k,dsa_bits[k],dsa_results[k][0]);
- else
- - fprintf(stdout,"dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
- - 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,"dsa %4u bits %8.6fs",dsa_bits[k],dsa_results[k][0]);
- + if (do_cpu)
- + fprintf(stdout, mr ? "/%d": "/%%%-3d", dsa_cpu_usage[k][0]);
- + fprintf(stdout, mr ? ":%f" : " %8.6fs", dsa_results[k][1]);
- + if (do_cpu)
- + fprintf(stdout, mr ? "/%d": "/%%%-3d", dsa_cpu_usage[k][1]);
- + if(!mr)
- + fprintf(stdout, " %8.1f %8.1f",
- + 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
- + fprintf(stdout, "\n");
- }
- #endif
- #ifndef OPENSSL_NO_ECDSA
- @@ -2712,8 +2832,10 @@
-
- static void print_result(int alg,int run_no,int count,double time_used)
- {
- - BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n"
- - : "%d %s's in %.2fs\n",count,names[alg],time_used);
- + if (do_cpu)
- + cpu_usage[alg][run_no] = calc_cpu();
- + BIO_printf(bio_err,mr ? "+R:%ld:%s:%f\n"
- + : "%ld %s's in %.2fs\n",count,names[alg],time_used);
- results[alg][run_no]=((double)count)/time_used*lengths[run_no];
- }
-
- @@ -2806,29 +2928,11 @@
- p=buf+3;
- alg=atoi(sstrsep(&p,sep));
- sstrsep(&p,sep);
- - for(j=0 ; j < SIZE_NUM ; ++j)
- + for(j=0 ; j < SIZE_NUM ; ++j) {
- + if (do_cpu && strchr(p, '/'))
- + cpu_usage[alg][j] = atoi(strchr(p, '/') + 1);
- results[alg][j]+=atof(sstrsep(&p,sep));
- }
- - else if(!strncmp(buf,"+F2:",4))
- - {
- - int k;
- - double d;
- -
- - p=buf+4;
- - k=atoi(sstrsep(&p,sep));
- - sstrsep(&p,sep);
- -
- - d=atof(sstrsep(&p,sep));
- - if(n)
- - rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
- - else
- - rsa_results[k][0]=d;
- -
- - d=atof(sstrsep(&p,sep));
- - if(n)
- - rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
- - else
- - rsa_results[k][1]=d;
- }
- else if(!strncmp(buf,"+F2:",4))
- {
- @@ -2839,12 +2943,18 @@
- k=atoi(sstrsep(&p,sep));
- sstrsep(&p,sep);
-
- + /* before we move the token along */
- + if (do_cpu && strchr(p, '/'))
- + rsa_cpu_usage[k][0] = atoi(strchr(p, '/') + 1);
- d=atof(sstrsep(&p,sep));
- if(n)
- rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
- else
- rsa_results[k][0]=d;
-
- + /* before we move the token along */
- + if (do_cpu && strchr(p, '/'))
- + rsa_cpu_usage[k][1] = atoi(strchr(p, '/') + 1);
- d=atof(sstrsep(&p,sep));
- if(n)
- rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
- @@ -2860,12 +2970,18 @@
- k=atoi(sstrsep(&p,sep));
- sstrsep(&p,sep);
-
- + /* before we move the token along */
- + if (do_cpu && strchr(p, '/'))
- + dsa_cpu_usage[k][0] = atoi(strchr(p, '/') + 1);
- d=atof(sstrsep(&p,sep));
- if(n)
- dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d);
- else
- dsa_results[k][0]=d;
-
- + /* before we move the token along */
- + if (do_cpu && strchr(p, '/'))
- + dsa_cpu_usage[k][1] = atoi(strchr(p, '/') + 1);
- d=atof(sstrsep(&p,sep));
- if(n)
- dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d);
- Index: libssl/crypto/cryptlib.h
- ===================================================================
- RCS file: libssl/crypto/cryptlib.h,v
- retrieving revision 1.1.1.5
- retrieving revision 1.4
- diff -u -r1.1.1.5 -r1.4
- --- libssl/crypto/cryptlib.h 15 Sep 2008 23:36:40 -0000 1.1.1.5
- +++ libssl/crypto/cryptlib.h 15 Sep 2008 23:44:15 -0000 1.4
- @@ -62,7 +62,7 @@
- #include <stdlib.h>
- #include <string.h>
-
- -#include "e_os.h"
- +#include <openssl/e_os.h>
-
- #ifdef OPENSSL_USE_APPLINK
- #define BIO_FLAGS_UPLINK 0x8000
- Index: libssl/crypto/engine/eng_all.c
- ===================================================================
- RCS file: libssl/crypto/engine/eng_all.c,v
- retrieving revision 1.1.1.4
- retrieving revision 1.6
- diff -u -r1.1.1.4 -r1.6
- --- libssl/crypto/engine/eng_all.c 15 Sep 2008 23:36:41 -0000 1.1.1.4
- +++ libssl/crypto/engine/eng_all.c 15 Sep 2008 23:44:16 -0000 1.6
- @@ -104,7 +104,7 @@
- #endif
- #endif
- #ifndef OPENSSL_NO_HW
- -#if defined(__OpenBSD__) || defined(__FreeBSD__)
- +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)
- ENGINE_load_cryptodev();
- #endif
- #if defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_NO_CAPIENG)
- @@ -113,7 +113,7 @@
- #endif
- }
-
- -#if defined(__OpenBSD__) || defined(__FreeBSD__)
- +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)
- void ENGINE_setup_bsd_cryptodev(void) {
- static int bsd_cryptodev_default_loaded = 0;
- if (!bsd_cryptodev_default_loaded) {
- Index: libssl/crypto/engine/eng_cryptodev.c
- ===================================================================
- RCS file: libssl/crypto/engine/eng_cryptodev.c,v
- retrieving revision 1.1.1.1
- retrieving revision 1.9
- diff -u -r1.1.1.1 -r1.9
- --- libssl/crypto/engine/eng_cryptodev.c 3 Feb 2006 00:06:09 -0000 1.1.1.1
- +++ libssl/crypto/engine/eng_cryptodev.c 4 Aug 2008 00:51:09 -0000 1.9
- @@ -68,6 +68,16 @@
- struct dev_crypto_state {
- struct session_op d_sess;
- int d_fd;
- +
- +#ifdef USE_CRYPTODEV_DIGESTS
- + char dummy_mac_key[20];
- +
- + unsigned char digest_res[20];
- + char *mac_data;
- + int mac_len;
- +
- + int copy;
- +#endif
- };
-
- static u_int32_t cryptodev_asymfeat = 0;
- @@ -75,9 +85,11 @@
- static int get_asym_dev_crypto(void);
- static int open_dev_crypto(void);
- static int get_dev_crypto(void);
- +#if 0
- static int cryptodev_max_iv(int cipher);
- static int cryptodev_key_length_valid(int cipher, int len);
- static int cipher_nid_to_cryptodev(int nid);
- +#endif
- static int get_cryptodev_ciphers(const int **cnids);
- static int get_cryptodev_digests(const int **cnids);
- static int cryptodev_usable_ciphers(const int **nids);
- @@ -100,7 +112,7 @@
- static int cryptodev_bn_mod_exp(BIGNUM *r, const BIGNUM *a,
- const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
- static int cryptodev_rsa_nocrt_mod_exp(BIGNUM *r0, const BIGNUM *I,
- - RSA *rsa);
- + RSA *rsa, BN_CTX *ctx);
- static int cryptodev_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx);
- static int cryptodev_dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, BIGNUM *a,
- const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
- @@ -130,9 +142,12 @@
- int ivmax;
- int keylen;
- } ciphers[] = {
- + { CRYPTO_ARC4, NID_rc4, 0, 16, },
- { CRYPTO_DES_CBC, NID_des_cbc, 8, 8, },
- { CRYPTO_3DES_CBC, NID_des_ede3_cbc, 8, 24, },
- { CRYPTO_AES_CBC, NID_aes_128_cbc, 16, 16, },
- + { CRYPTO_AES_CBC, NID_aes_192_cbc, 16, 24, },
- + { CRYPTO_AES_CBC, NID_aes_256_cbc, 16, 32, },
- { CRYPTO_BLF_CBC, NID_bf_cbc, 8, 16, },
- { CRYPTO_CAST_CBC, NID_cast5_cbc, 8, 16, },
- { CRYPTO_SKIPJACK_CBC, NID_undef, 0, 0, },
- @@ -142,14 +157,15 @@
- static struct {
- int id;
- int nid;
- + int keylen;
- } digests[] = {
- - { CRYPTO_SHA1_HMAC, NID_hmacWithSHA1, },
- - { CRYPTO_RIPEMD160_HMAC, NID_ripemd160, },
- - { CRYPTO_MD5_KPDK, NID_undef, },
- - { CRYPTO_SHA1_KPDK, NID_undef, },
- - { CRYPTO_MD5, NID_md5, },
- - { CRYPTO_SHA1, NID_undef, },
- - { 0, NID_undef, },
- + { CRYPTO_SHA1_HMAC, NID_hmacWithSHA1, 20},
- + { CRYPTO_RIPEMD160_HMAC, NID_ripemd160, 16/*?*/},
- + { CRYPTO_MD5_KPDK, NID_undef, 0},
- + { CRYPTO_SHA1_KPDK, NID_undef, 0},
- + { CRYPTO_MD5, NID_md5, 16},
- + { CRYPTO_SHA1, NID_sha1, 20},
- + { 0, NID_undef, 0},
- };
-
- /*
- @@ -176,10 +192,17 @@
- static int
- get_dev_crypto(void)
- {
- - int fd, retfd;
- + static int fd = -1;
- + int retfd;
-
- - if ((fd = open_dev_crypto()) == -1)
- - return (-1);
- + if (fd == -1) {
- + if ((fd = open_dev_crypto()) == -1)
- + return (-1);
- + if (fcntl(fd, F_SETFD, 1) == -1) {
- + close(fd);
- + return (-1);
- + }
- + }
- if (ioctl(fd, CRIOGET, &retfd) == -1)
- return (-1);
-
- @@ -202,6 +225,7 @@
- return fd;
- }
-
- +#if 0
- /*
- * XXXX this needs to be set for each alg - and determined from
- * a running card.
- @@ -245,6 +269,7 @@
- return (ciphers[i].id);
- return (0);
- }
- +#endif
-
- /*
- * Find out what ciphers /dev/crypto will let us have a session for.
- @@ -264,7 +289,7 @@
- return (0);
- }
- memset(&sess, 0, sizeof(sess));
- - sess.key = (caddr_t)"123456781234567812345678";
- + sess.key = (caddr_t)"123456789abcdefghijklmno";
-
- for (i = 0; ciphers[i].id && count < CRYPTO_ALGORITHM_MAX; i++) {
- if (ciphers[i].nid == NID_undef)
- @@ -303,10 +328,12 @@
- return (0);
- }
- memset(&sess, 0, sizeof(sess));
- + sess.mackey = (caddr_t)"123456789abcdefghijklmno";
- for (i = 0; digests[i].id && count < CRYPTO_ALGORITHM_MAX; i++) {
- if (digests[i].nid == NID_undef)
- continue;
- sess.mac = digests[i].id;
- + sess.mackeylen = digests[i].keylen;
- sess.cipher = 0;
- if (ioctl(fd, CIOCGSESSION, &sess) != -1 &&
- ioctl(fd, CIOCFSESSION, &sess.ses) != -1)
- @@ -351,6 +378,9 @@
- static int
- cryptodev_usable_digests(const int **nids)
- {
- +#ifdef USE_CRYPTODEV_DIGESTS
- + return (get_cryptodev_digests(nids));
- +#else
- /*
- * XXXX just disable all digests for now, because it sucks.
- * we need a better way to decide this - i.e. I may not
- @@ -365,6 +395,7 @@
- */
- *nids = NULL;
- return (0);
- +#endif
- }
-
- static int
- @@ -427,16 +458,20 @@
- {
- struct dev_crypto_state *state = ctx->cipher_data;
- struct session_op *sess = &state->d_sess;
- - int cipher;
- + int cipher, i;
-
- - if ((cipher = cipher_nid_to_cryptodev(ctx->cipher->nid)) == NID_undef)
- - return (0);
- -
- - if (ctx->cipher->iv_len > cryptodev_max_iv(cipher))
- - return (0);
- + for (i = 0; ciphers[i].id; i++)
- + if (ctx->cipher->nid == ciphers[i].nid &&
- + ctx->cipher->iv_len <= ciphers[i].ivmax &&
- + ctx->key_len == ciphers[i].keylen) {
- + cipher = ciphers[i].id;
- + break;
- + }
-
- - if (!cryptodev_key_length_valid(cipher, ctx->key_len))
- + if (!ciphers[i].id) {
- + state->d_fd = -1;
- return (0);
- + }
-
- memset(sess, 0, sizeof(struct session_op));
-
- @@ -496,6 +531,20 @@
- * gets called when libcrypto requests a cipher NID.
- */
-
- +/* RC4 */
- +const EVP_CIPHER cryptodev_rc4 = {
- + NID_rc4,
- + 1, 16, 0,
- + EVP_CIPH_VARIABLE_LENGTH,
- + cryptodev_init_key,
- + cryptodev_cipher,
- + cryptodev_cleanup,
- + sizeof(struct dev_crypto_state),
- + NULL,
- + NULL,
- + NULL
- +};
- +
- /* DES CBC EVP */
- const EVP_CIPHER cryptodev_des_cbc = {
- NID_des_cbc,
- @@ -563,6 +612,32 @@
- NULL
- };
-
- +const EVP_CIPHER cryptodev_aes_192_cbc = {
- + NID_aes_192_cbc,
- + 16, 24, 16,
- + EVP_CIPH_CBC_MODE,
- + cryptodev_init_key,
- + cryptodev_cipher,
- + cryptodev_cleanup,
- + sizeof(struct dev_crypto_state),
- + EVP_CIPHER_set_asn1_iv,
- + EVP_CIPHER_get_asn1_iv,
- + NULL
- +};
- +
- +const EVP_CIPHER cryptodev_aes_256_cbc = {
- + NID_aes_256_cbc,
- + 16, 32, 16,
- + EVP_CIPH_CBC_MODE,
- + cryptodev_init_key,
- + cryptodev_cipher,
- + cryptodev_cleanup,
- + sizeof(struct dev_crypto_state),
- + EVP_CIPHER_set_asn1_iv,
- + EVP_CIPHER_get_asn1_iv,
- + NULL
- +};
- +
- /*
- * Registered by the ENGINE when used to find out how to deal with
- * a particular NID in the ENGINE. this says what we'll do at the
- @@ -576,6 +651,9 @@
- return (cryptodev_usable_ciphers(nids));
-
- switch (nid) {
- + case NID_rc4:
- + *cipher = &cryptodev_rc4;
- + break;
- case NID_des_ede3_cbc:
- *cipher = &cryptodev_3des_cbc;
- break;
- @@ -591,6 +669,12 @@
- case NID_aes_128_cbc:
- *cipher = &cryptodev_aes_cbc;
- break;
- + case NID_aes_192_cbc:
- + *cipher = &cryptodev_aes_192_cbc;
- + break;
- + case NID_aes_256_cbc:
- + *cipher = &cryptodev_aes_256_cbc;
- + break;
- default:
- *cipher = NULL;
- break;
- @@ -598,6 +682,234 @@
- return (*cipher != NULL);
- }
-
- +
- +#ifdef USE_CRYPTODEV_DIGESTS
- +
- +/* convert digest type to cryptodev */
- +static int
- +digest_nid_to_cryptodev(int nid)
- +{
- + int i;
- +
- + for (i = 0; digests[i].id; i++)
- + if (digests[i].nid == nid)
- + return (digests[i].id);
- + return (0);
- +}
- +
- +
- +static int
- +digest_key_length(int nid)
- +{
- + int i;
- +
- + for (i = 0; digests[i].id; i++)
- + if (digests[i].nid == nid)
- + return digests[i].keylen;
- + return (0);
- +}
- +
- +
- +static int cryptodev_digest_init(EVP_MD_CTX *ctx)
- +{
- + struct dev_crypto_state *state = ctx->md_data;
- + struct session_op *sess = &state->d_sess;
- + int digest;
- +
- + if ((digest = digest_nid_to_cryptodev(ctx->digest->type)) == NID_undef){
- + printf("cryptodev_digest_init: Can't get digest \n");
- + return (0);
- + }
- +
- + memset(state, 0, sizeof(struct dev_crypto_state));
- +
- + if ((state->d_fd = get_dev_crypto()) < 0) {
- + printf("cryptodev_digest_init: Can't get Dev \n");
- + return (0);
- + }
- +
- + sess->mackey = state->dummy_mac_key;
- + sess->mackeylen = digest_key_length(ctx->digest->type);
- + sess->mac = digest;
- +
- + if (ioctl(state->d_fd, CIOCGSESSION, sess) < 0) {
- + close(state->d_fd);
- + state->d_fd = -1;
- + printf("cryptodev_digest_init: Open session failed\n");
- + return (0);
- + }
- +
- + return (1);
- +}
- +
- +static int cryptodev_digest_update(EVP_MD_CTX *ctx, const void *data,
- + size_t count)
- +{
- + struct crypt_op cryp;
- + struct dev_crypto_state *state = ctx->md_data;
- + struct session_op *sess = &state->d_sess;
- +
- + if (!data || state->d_fd < 0) {
- + printf("cryptodev_digest_update: illegal inputs \n");
- + return (0);
- + }
- +
- + if (!count) {
- + return (0);
- + }
- +
- + if (!(ctx->flags & EVP_MD_CTX_FLAG_ONESHOT)) {
- + /* if application doesn't support one buffer */
- + state->mac_data = OPENSSL_realloc(state->mac_data, state->mac_len + count);
- +
- + if (!state->mac_data) {
- + printf("cryptodev_digest_update: realloc failed\n");
- + return (0);
- + }
- +
- + memcpy(state->mac_data + state->mac_len, data, count);
- + state->mac_len += count;
- +
- + return (1);
- + }
- +
- + memset(&cryp, 0, sizeof(cryp));
- +
- + cryp.ses = sess->ses;
- + cryp.flags = 0;
- + cryp.len = count;
- + cryp.src = (caddr_t) data;
- + cryp.dst = NULL;
- + cryp.mac = state->digest_res;
- + if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) {
- + printf("cryptodev_digest_update: digest failed\n");
- + return (0);
- + }
- + return (1);
- +}
- +
- +
- +static int cryptodev_digest_final(EVP_MD_CTX *ctx, unsigned char *md)
- +{
- + struct crypt_op cryp;
- + struct dev_crypto_state *state = ctx->md_data;
- + struct session_op *sess = &state->d_sess;
- +
- + int ret = 1;
- +
- + if (!md || state->d_fd < 0) {
- + printf("cryptodev_digest_final: illegal input\n");
- + return(0);
- + }
- +
- + if (! (ctx->flags & EVP_MD_CTX_FLAG_ONESHOT) ) {
- + /* if application doesn't support one buffer */
- + memset(&cryp, 0, sizeof(cryp));
- +
- + cryp.ses = sess->ses;
- + cryp.flags = 0;
- + cryp.len = state->mac_len;
- + cryp.src = state->mac_data;
- + cryp.dst = NULL;
- + cryp.mac = md;
- +
- + if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) {
- + printf("cryptodev_digest_final: digest failed\n");
- + return (0);
- + }
- +
- + return 1;
- + }
- +
- + memcpy(md, state->digest_res, ctx->digest->md_size);
- +
- + return (ret);
- +}
- +
- +
- +static int cryptodev_digest_cleanup(EVP_MD_CTX *ctx)
- +{
- + int ret = 1;
- + struct dev_crypto_state *state = ctx->md_data;
- + struct session_op *sess = &state->d_sess;
- +
- + if (state->d_fd < 0) {
- + printf("cryptodev_digest_cleanup: illegal input\n");
- + return (0);
- + }
- +
- + if (state->mac_data) {
- + OPENSSL_free(state->mac_data);
- + state->mac_data = NULL;
- + state->mac_len = 0;
- + }
- +
- + if (state->copy)
- + return 1;
- +
- + if (ioctl(state->d_fd, CIOCFSESSION, &sess->ses) < 0) {
- + printf("cryptodev_digest_cleanup: failed to close session\n");
- + ret = 0;
- + } else {
- + ret = 1;
- + }
- + close(state->d_fd);
- + state->d_fd = -1;
- +
- + return (ret);
- +}
- +
- +static int cryptodev_digest_copy(EVP_MD_CTX *to,const EVP_MD_CTX *from)
- +{
- + struct dev_crypto_state *fstate = from->md_data;
- + struct dev_crypto_state *dstate = to->md_data;
- +
- + memcpy(dstate, fstate, sizeof(struct dev_crypto_state));
- +
- + if (fstate->mac_len != 0) {
- + dstate->mac_data = OPENSSL_malloc(fstate->mac_len);
- + memcpy(dstate->mac_data, fstate->mac_data, fstate->mac_len);
- + }
- +
- + dstate->copy = 1;
- +
- + return 1;
- +}
- +
- +
- +const EVP_MD cryptodev_sha1 = {
- + NID_sha1,
- + NID_undef,
- + SHA_DIGEST_LENGTH,
- + EVP_MD_FLAG_ONESHOT,
- + cryptodev_digest_init,
- + cryptodev_digest_update,
- + cryptodev_digest_final,
- + cryptodev_digest_copy,
- + cryptodev_digest_cleanup,
- + EVP_PKEY_NULL_method,
- + SHA_CBLOCK,
- + sizeof(struct dev_crypto_state),
- +};
- +
- +const EVP_MD cryptodev_md5 = {
- + NID_md5,
- + NID_undef,
- + 16 /* MD5_DIGEST_LENGTH */,
- + EVP_MD_FLAG_ONESHOT,
- + cryptodev_digest_init,
- + cryptodev_digest_update,
- + cryptodev_digest_final,
- + cryptodev_digest_copy,
- + cryptodev_digest_cleanup,
- + EVP_PKEY_NULL_method,
- + 64 /* MD5_CBLOCK */,
- + sizeof(struct dev_crypto_state),
- +};
- +
- +#endif /* USE_CRYPTODEV_DIGESTS */
- +
- +
- static int
- cryptodev_engine_digests(ENGINE *e, const EVP_MD **digest,
- const int **nids, int nid)
- @@ -606,10 +918,15 @@
- return (cryptodev_usable_digests(nids));
-
- switch (nid) {
- +#ifdef USE_CRYPTODEV_DIGESTS
- case NID_md5:
- - *digest = NULL; /* need to make a clean md5 critter */
- + *digest = &cryptodev_md5;
- break;
- + case NID_sha1:
- + *digest = &cryptodev_sha1;
- + break;
- default:
- +#endif /* USE_CRYPTODEV_DIGESTS */
- *digest = NULL;
- break;
- }
- @@ -625,7 +942,7 @@
- bn2crparam(const BIGNUM *a, struct crparam *crp)
- {
- int i, j, k;
- - ssize_t words, bytes, bits;
- + ssize_t bytes, bits;
- u_char *b;
-
- crp->crp_p = NULL;
- @@ -637,6 +954,7 @@
- b = malloc(bytes);
- if (b == NULL)
- return (1);
- + memset(b, 0, bytes);
-
- crp->crp_p = b;
- crp->crp_nbits = bits;
- @@ -681,7 +999,7 @@
- {
- int i;
-
- - for (i = 0; i <= kop->crk_iparams + kop->crk_oparams; i++) {
- + for (i = 0; i < kop->crk_iparams + kop->crk_oparams; i++) {
- if (kop->crk_param[i].crp_p)
- free(kop->crk_param[i].crp_p);
- kop->crk_param[i].crp_p = NULL;
- @@ -756,12 +1074,10 @@
- }
-
- static int
- -cryptodev_rsa_nocrt_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa)
- +cryptodev_rsa_nocrt_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx)
- {
- int r;
- - BN_CTX *ctx;
- -
- - ctx = BN_CTX_new();
- + ctx = BN_CTX_new(); /* not sure why we reallocate this. DM */
- r = cryptodev_bn_mod_exp(r0, I, rsa->d, rsa->n, ctx, NULL);
- BN_CTX_free(ctx);
- return (r);
- Index: libssl/crypto/engine/engine.h
- ===================================================================
- RCS file: libssl/crypto/engine/engine.h,v
- retrieving revision 1.1.1.6
- retrieving revision 1.6
- diff -u -r1.1.1.6 -r1.6
- --- libssl/crypto/engine/engine.h 15 Sep 2008 23:36:41 -0000 1.1.1.6
- +++ libssl/crypto/engine/engine.h 15 Sep 2008 23:44:16 -0000 1.6
- @@ -703,7 +703,7 @@
- * values. */
- void *ENGINE_get_static_state(void);
-
- -#if defined(__OpenBSD__) || defined(__FreeBSD__)
- +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)
- void ENGINE_setup_bsd_cryptodev(void);
- #endif
-
- Index: libssl/crypto/evp/c_all.c
- ===================================================================
- RCS file: libssl/crypto/evp/c_all.c,v
- retrieving revision 1.1.1.4
- retrieving revision 1.3
- diff -u -r1.1.1.4 -r1.3
- --- libssl/crypto/evp/c_all.c 3 Feb 2006 00:06:07 -0000 1.1.1.4
- +++ libssl/crypto/evp/c_all.c 23 Jul 2007 12:23:31 -0000 1.3
- @@ -83,7 +83,7 @@
- OpenSSL_add_all_ciphers();
- OpenSSL_add_all_digests();
- #ifndef OPENSSL_NO_ENGINE
- -# if defined(__OpenBSD__) || defined(__FreeBSD__)
- +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)
- ENGINE_setup_bsd_cryptodev();
- # endif
- #endif
- Index: libssl/crypto/evp/c_alld.c
- ===================================================================
- RCS file: libssl/crypto/evp/c_alld.c,v
- retrieving revision 1.1.1.4
- retrieving revision 1.3
- diff -u -r1.1.1.4 -r1.3
- --- libssl/crypto/evp/c_alld.c 3 Feb 2006 00:06:07 -0000 1.1.1.4
- +++ libssl/crypto/evp/c_alld.c 3 Feb 2006 00:36:44 -0000 1.3
- @@ -81,7 +81,7 @@
- EVP_add_digest(EVP_dss());
- #endif
- #endif
- -#ifndef OPENSSL_NO_SHA
- +#if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1)
- EVP_add_digest(EVP_sha1());
- EVP_add_digest_alias(SN_sha1,"ssl3-sha1");
- EVP_add_digest_alias(SN_sha1WithRSAEncryption,SN_sha1WithRSA);
- Index: libssl/engines/Makefile
- ===================================================================
- RCS file: libssl/engines/Makefile,v
- retrieving revision 1.1.1.3
- retrieving revision 1.3
- diff -u -r1.1.1.3 -r1.3
- --- libssl/engines/Makefile 15 Sep 2008 23:36:41 -0000 1.1.1.3
- +++ libssl/engines/Makefile 15 Sep 2008 23:44:16 -0000 1.3
- @@ -96,6 +96,7 @@
- ( echo installing $$l; \
- if [ "$(PLATFORM)" != "Cygwin" ]; then \
- case "$(CFLAGS)" in \
- + *OPENSSL_NO_HW*) continue;; \
- *DSO_DLFCN*) sfx="so";; \
- *DSO_DL*) sfx="sl";; \
- *) sfx="bad";; \
|