[backfire] openssl: sync patches with trunk
authorjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Fri, 19 Nov 2010 23:31:29 +0000 (23:31 +0000)
committerjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Fri, 19 Nov 2010 23:31:29 +0000 (23:31 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@24043 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/openssl/patches/190-remove_timestamp_check.patch [new file with mode: 0644]
package/openssl/patches/200-ocf-20100325.patch [moved from package/openssl/patches/200-ocf-20080917.patch with 76% similarity]
package/openssl/patches/400-cve-2010-0740.patch [deleted file]

diff --git a/package/openssl/patches/190-remove_timestamp_check.patch b/package/openssl/patches/190-remove_timestamp_check.patch
new file mode 100644 (file)
index 0000000..e199331
--- /dev/null
@@ -0,0 +1,23 @@
+--- a/Makefile.org
++++ b/Makefile.org
+@@ -179,7 +179,7 @@ WTARFILE=       $(NAME)-win.tar
+ EXHEADER=       e_os2.h
+ HEADER=         e_os.h
+-all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
++all: build_all openssl.pc libssl.pc libcrypto.pc
+ # as we stick to -e, CLEARENV ensures that local variables in lower
+ # Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
+@@ -474,11 +474,6 @@ openssl.pc: Makefile
+           echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
+           echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
+-Makefile: Makefile.org Configure config
+-      @echo "Makefile is older than Makefile.org, Configure or config."
+-      @echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
+-      @false
+-
+ libclean:
+       rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
similarity index 76%
rename from package/openssl/patches/200-ocf-20080917.patch
rename to package/openssl/patches/200-ocf-20100325.patch
index 2c6c04a1a53b5c6a2bed193ceaf886785cc80788..e53c447e443baf6f2d3bb49f95ab17a721a9eace 100644 (file)
@@ -9,17 +9,18 @@
  #
  # --test-sanity Make a number of sanity checks on the data in this file.
  #               This is a debugging tool for OpenSSL developers.
-@@ -554,6 +556,9 @@ my %table=(
+@@ -554,6 +556,10 @@ my %table=(
  ##### 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'}",
++"uClinux-dist64","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):SIXTY_FOUR_BIT_LONG::::::::::::\$(LIBSSL_dlfcn):linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}",
 +
  );
  
  my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
-@@ -610,6 +615,8 @@ my $montasm=1;   # but "no-montasm" is d
+@@ -610,6 +616,8 @@ my $montasm=1;   # but "no-montasm" is d
  my $no_asm=0;
  my $no_dso=0;
  my $no_gmp=0;
@@ -28,9 +29,9 @@
  my @skip=();
  my $Makefile="Makefile";
  my $des_locl="crypto/des/des_locl.h";
-@@ -762,6 +769,14 @@ PROCESS_ARGS:
+@@ -758,6 +766,14 @@ PROCESS_ARGS:
                        {
-                       $strict_warnings = 1;
+                       exit(&test_sanity());
                        }
 +              elsif (/^--with-cryptodev$/)
 +                      {
 +                      {
 +                              $use_cryptodev_digests = 1;
 +                      }
-               elsif (/^reconfigure/ || /^reconf/)
+               elsif (/^--strict-warnings/)
                        {
-                       if (open(IN,"<$Makefile"))
-@@ -1055,6 +1070,7 @@ foreach (sort (keys %disabled))
+                       $strict_warnings = 1;
+@@ -1055,6 +1071,7 @@ foreach (sort (keys %disabled))
                        print " OPENSSL_NO_$ALGO";
                
                        if (/^err$/)    { $flags .= "-DOPENSSL_NO_ERR "; }
@@ -51,7 +52,7 @@
                        elsif (/^asm$/) { $no_asm = 1; }
                        }
                else
-@@ -1184,6 +1200,16 @@ if (!$no_krb5)
+@@ -1184,6 +1201,16 @@ if (!$no_krb5)
                   $withargs{"krb5-dir"} ne "";
        }
  
@@ -85,7 +86,7 @@
   ----------------------
 --- a/Makefile.org
 +++ b/Makefile.org
-@@ -504,7 +504,7 @@ files:
+@@ -499,7 +499,7 @@ files:
  
  links:
        @$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
                ;;
        esac
        exit 0
-@@ -399,7 +399,8 @@ exit 0
+@@ -399,7 +399,7 @@ exit 0
  # this is where the translation occurs into SSLeay terms
  # ---------------------------------------------------------------------------
  
 -GCCVER=`(gcc -dumpversion) 2>/dev/null`
-+CC="${CC:-gcc}"
-+GCCVER=`(${CC} -dumpversion) 2>/dev/null`
++GCCVER=`(${CC:-gcc} -dumpversion) 2>/dev/null`
  if [ "$GCCVER" != "" ]; then
    # then strip off whatever prefix egcs prepends the number with...
    # Hopefully, this will work for any future prefixes as well.
-@@ -409,6 +410,8 @@ if [ "$GCCVER" != "" ]; then
-   # major and minor version numbers.
-   # peak single digit before and after first dot, e.g. 2.95.1 gives 29
-   GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'`
-+else
-+  CC="${CC:-cc}"
- fi
- # Only set CC if not supplied already
-@@ -488,6 +491,9 @@ echo Operating system: $GUESSOS
+@@ -488,6 +488,12 @@ echo Operating system: $GUESSOS
  # script above so we end up with values in vars but that would take
  # more time that I want to waste at the moment
  case "$GUESSOS" in
++  uClinux*64*)
++    OUT=uClinux-dist64
++      ;;
 +  uClinux*)
 +    OUT=uClinux-dist
 +      ;;
    mips2-sgi-irix)
        CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
        CPU=${CPU:-0}
---- /dev/null
-+++ b/makefile-uclinuxdist
-@@ -0,0 +1,138 @@
-+#
-+# this makefile gets recursed through by various bits of the build
-+# so we need to only setup some things when invoked from outside
-+# this directory.
-+#
-+# davidm@snapgear.com
-+#
-+
-+IN_LIBSSL := true
-+export IN_LIBSSL
-+
-+CONFIG_OPTS  := --prefix=// --install_prefix=$(shell pwd)/build/install
-+
-+ifdef CONFIG_USER_FLATFSD_FLATFSD
-+CONFIG_OPTS += --openssldir=/etc/config
-+else
-+CONFIG_OPTS += --openssldir=/etc
-+endif
-+ifdef DISABLE_SHARED_SSL
-+CONFIG_OPTS += no-shared
-+else
-+CONFIG_OPTS += shared
-+endif
-+
-+CONFIG_OPTS += no-rc2
-+CONFIG_OPTS += no-krb5
-+CONFIG_OPTS += no-rc5
-+CONFIG_OPTS += no-md2
-+CONFIG_OPTS += no-idea
-+#CONFIG_OPTS += no-pem
-+#CONFIG_OPTS += no-md5
-+#CONFIG_OPTS += no-sha
-+#CONFIG_OPTS += no-hmac
-+#CONFIG_OPTS += no-des
-+#CONFIG_OPTS += no-aes
-+#CONFIG_OPTS += no-bn
-+CONFIG_OPTS += no-ec
-+#CONFIG_OPTS += no-rsa
-+#CONFIG_OPTS += no-dsa
-+CONFIG_OPTS += no-ecdsa
-+#CONFIG_OPTS += no-dh
-+CONFIG_OPTS += no-ecdh
-+CONFIG_OPTS += no-dso
-+#CONFIG_OPTS += no-engine
-+#CONFIG_OPTS += no-buffer
-+#CONFIG_OPTS += no-bio
-+#CONFIG_OPTS += no-stack
-+#CONFIG_OPTS += no-lhash
-+#CONFIG_OPTS += no-rand
-+CONFIG_OPTS += no-err
-+#CONFIG_OPTS += no-evp
-+#CONFIG_OPTS += no-asn1
-+#CONFIG_OPTS += no-x509
-+#CONFIG_OPTS += no-x509v3
-+#CONFIG_OPTS += no-txt_db
-+#CONFIG_OPTS += no-pkcs7
-+#CONFIG_OPTS += no-pkcs12
-+#CONFIG_OPTS += no-comp
-+#CONFIG_OPTS += no-ocsp
-+#CONFIG_OPTS += no-ui
-+#CONFIG_OPTS += no-store
-+CONFIG_OPTS += no-pqueue
-+
-+# REVISIT: It would be better to have OPENSSL config options
-+# which turn on this support as needed
-+ifeq ($(CONFIG_USER_NESSUS_NASL)$(CONFIG_USER_SSH_SSH),)
-+CONFIG_OPTS += no-ripemd
-+CONFIG_OPTS += no-cast
-+CONFIG_OPTS += no-rc4
-+endif
-+
-+ifeq ($(CONFIG_USER_NESSUS_NASL)$(CONFIG_USER_SSH_SSH)$(CONFIG_PROP_SSCEP_SSCEP),)
-+CONFIG_OPTS += no-bf
-+endif
-+
-+ifeq ($(CONFIG_USER_OPENVPN_OPENVPN)$(CONFIG_USER_WGET),)
-+CONFIG_OPTS += no-md4
-+endif
-+
-+ifdef CONFIG_OCF_OCF
-+CONFIG_OPTS += --with-cryptodev
-+#CONFIG_OPTS += --with-cryptodev-digests
-+endif
-+
-+#
-+# if you want engines (they are dl loaded),  a few things
-+# need to be setup,  you will also need to mod everything
-+# to link against -ldl if it uses libcrypto.  By default we
-+# disable it (cryptodev suport is still included).
-+#
-+ifdef YOU_WANT_DYNAMIC_HW_ENGINES_ENABLED
-+LIBSSL_dlfcn = dlfcn
-+else
-+CONFIG_OPTS += no-hw
-+LIBSSL_dlfcn =
-+endif
-+
-+#
-+# our libs aren't in the default location yet
-+#
-+LDFLAGS += -L$(ROOTDIR)/lib/libssl/build
-+export LDFLAGS
-+
-+all: build/configured
-+      $(MAKE) -C build
-+      $(MAKE) -C build install_sw
-+
-+build/configured: makefile config Configure
-+      rm -rf build
-+      find . -type d > .dirs
-+      find . ! -type d | grep -v ./makefile > .files
-+      while read t; do mkdir -p build/$$t; done < .dirs
-+      while read t; do ln -s `pwd`/$$t build/$$t; done < .files
-+      rm -f .dirs .files
-+      chmod +x build/config
-+      cd build; MACHINE=uClinux-dist ./config $(CONFIG_OPTS)
-+      $(MAKE) -C build depend
-+      $(MAKE) -C build links
-+      touch build/configured
-+
-+clean:
-+      -rm -rf build
-+
-+romfs:
-+      cd build/install/lib; \
-+      for i in *.so*; do \
-+              if [ -L $$i ]; then \
-+                      $(ROMFSINST) -s `find $$i -printf %l` /lib/$$i; \
-+              elif [ -f $$i ]; then \
-+                      $(ROMFSINST) /lib/$$i; \
-+              fi; \
-+      done
-+
-+romfs_user:
-+      $(ROMFSINST) -e CONFIG_USER_OPENSSL_APPS build/install/bin/openssl /bin/openssl
-+      # $(ROMFSINST) -e CONFIG_USER_OPENSSL_APPS build/install/bin/c_rehash /bin/c_rehash
-+
-+
 --- a/apps/apps.h
 +++ b/apps/apps.h
 @@ -112,7 +112,7 @@
        {FUNC_TYPE_MD,"md2",dgst_main},
 --- a/apps/speed.c
 +++ b/apps/speed.c
-@@ -296,7 +296,7 @@ static const char *names[ALGOR_NUM]={
+@@ -302,7 +302,7 @@ static const char *names[ALGOR_NUM]={
    "evp","sha256","sha512",
    "aes-128 ige","aes-192 ige","aes-256 ige"};
  static double results[ALGOR_NUM][SIZE_NUM];
  #ifndef OPENSSL_NO_RSA
  static double rsa_results[RSA_NUM][2];
  #endif
-@@ -336,6 +336,79 @@ static SIGRETTYPE sig_done(int sig)
+@@ -342,6 +342,82 @@ static SIGRETTYPE sig_done(int sig)
  #define START 0
  #define STOP  1
  
++static int do_cpu = 0;
++
 +#ifdef __linux__
++
++#define HAVE_CPU_USAGE        1
++
 +/*
 + * record CPU usage as well
 + */
 +
-+static int do_cpu = 0;
-+
 +struct cpu_stat {
 +      unsigned int    user;
 +      unsigned int    nice;
  #if defined(OPENSSL_SYS_NETWARE)
  
     /* for NetWare the best we can do is use clock() which returns the
-@@ -366,6 +439,11 @@ static double Time_F(int s)
+@@ -372,6 +448,9 @@ static double Time_F(int s)
        {
        double ret;
  
-+#ifdef __linux__
 +      if (do_cpu)
 +              get_cpu(s);
-+#endif
 +
  #ifdef USE_TOD
        if(usertime)
                {
-@@ -840,6 +918,14 @@ int MAIN(int argc, char **argv)
+@@ -839,6 +918,14 @@ int MAIN(int argc, char **argv)
                        j--;    /* Otherwise, -elapsed gets confused with
                                   an algorithm. */
                        }
-+#ifdef __linux__
++#ifdef HAVE_CPU_USAGE
 +              else if ((argc > 0) && (strcmp(*argv,"-cpu") == 0))
 +                      {
 +                      do_cpu = 1;
                else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
                        {
                        argc--;
-@@ -1268,6 +1354,9 @@ int MAIN(int argc, char **argv)
+@@ -1267,6 +1354,9 @@ int MAIN(int argc, char **argv)
  #ifndef NO_FORK
                        BIO_printf(bio_err,"-multi n        run n benchmarks in parallel.\n");
  #endif
-+#ifdef __linux__
++#ifdef HAVE_CPU_USAGE
 +                      BIO_printf(bio_err,"-cpu            calculate cpu utilisation.\n");
 +#endif
                        goto end;
                        }
                argc--;
-@@ -1275,11 +1364,6 @@ int MAIN(int argc, char **argv)
+@@ -1274,11 +1364,6 @@ int MAIN(int argc, char **argv)
                j++;
                }
  
        if (j == 0)
                {
                for (i=0; i<ALGOR_NUM; i++)
-@@ -1612,6 +1696,11 @@ int MAIN(int argc, char **argv)
+@@ -1612,6 +1697,11 @@ int MAIN(int argc, char **argv)
        signal(SIGALRM,sig_done);
  #endif /* SIGALRM */
  
-+#ifdef HAVE_FORK /* DM */
++#ifndef NO_FORK /* Do this a late as possible to give better CPU readings */
 +      if(multi && do_multi(multi))
 +              goto show_res;
 +#endif
  #ifndef OPENSSL_NO_MD2
        if (doit[D_MD2])
                {
-@@ -2041,8 +2130,6 @@ int MAIN(int argc, char **argv)
+@@ -2041,8 +2131,6 @@ int MAIN(int argc, char **argv)
                                /* -O3 -fschedule-insns messes up an
                                 * optimization here!  names[D_EVP]
                                 * somehow becomes NULL */
  
                                EVP_CIPHER_CTX_init(&ctx);
                                if(decrypt)
-@@ -2051,6 +2138,9 @@ int MAIN(int argc, char **argv)
+@@ -2051,6 +2139,9 @@ int MAIN(int argc, char **argv)
                                        EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
                                EVP_CIPHER_CTX_set_padding(&ctx, 0);
  
                                Time_F(START);
                                if(decrypt)
                                        for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
-@@ -2115,6 +2205,8 @@ int MAIN(int argc, char **argv)
+@@ -2115,6 +2206,8 @@ int MAIN(int argc, char **argv)
                                        }
                                }
                        d=Time_F(STOP);
                        BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n"
                                   : "%ld %d bit private RSA's in %.2fs\n",
                                   count,rsa_bits[j],d);
-@@ -2150,6 +2242,8 @@ int MAIN(int argc, char **argv)
+@@ -2150,6 +2243,8 @@ int MAIN(int argc, char **argv)
                                        }
                                }
                        d=Time_F(STOP);
                        BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n"
                                   : "%ld %d bit public RSA's in %.2fs\n",
                                   count,rsa_bits[j],d);
-@@ -2209,6 +2303,8 @@ int MAIN(int argc, char **argv)
+@@ -2209,6 +2304,8 @@ int MAIN(int argc, char **argv)
                                        }
                                }
                        d=Time_F(STOP);
                        BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n"
                                   : "%ld %d bit DSA signs in %.2fs\n",
                                   count,dsa_bits[j],d);
-@@ -2244,6 +2340,8 @@ int MAIN(int argc, char **argv)
+@@ -2244,6 +2341,8 @@ int MAIN(int argc, char **argv)
                                        }
                                }
                        d=Time_F(STOP);
                        BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n"
                                   : "%ld %d bit DSA verify in %.2fs\n",
                                   count,dsa_bits[j],d);
-@@ -2538,14 +2636,23 @@ show_res:
+@@ -2538,14 +2637,23 @@ show_res:
                        fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n"); 
                        fprintf(stdout,"type        ");
                        }
                if(mr)
                        fprintf(stdout,"+F:%d:%s",k,names[k]);
                else
-@@ -2556,6 +2663,8 @@ show_res:
+@@ -2556,6 +2664,8 @@ show_res:
                                fprintf(stdout," %11.2fk",results[k][j]/1e3);
                        else
                                fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]);
                        }
                fprintf(stdout,"\n");
                }
-@@ -2570,13 +2679,18 @@ show_res:
+@@ -2570,13 +2680,18 @@ show_res:
                        j=0;
                        }
                if(mr)
                }
  #endif
  #ifndef OPENSSL_NO_DSA
-@@ -2590,12 +2704,18 @@ show_res:
+@@ -2590,12 +2705,18 @@ show_res:
                        j=0;
                        }
                if(mr)
                }
  #endif
  #ifndef OPENSSL_NO_ECDSA
-@@ -2720,8 +2840,10 @@ static void pkey_print_message(const cha
+@@ -2720,8 +2841,10 @@ static void pkey_print_message(const cha
  
  static void print_result(int alg,int run_no,int count,double time_used)
        {
        results[alg][run_no]=((double)count)/time_used*lengths[run_no];
        }
  
-@@ -2816,29 +2938,11 @@ static int do_multi(int multi)
+@@ -2816,29 +2939,11 @@ static int do_multi(int multi)
                                p=buf+3;
                                alg=atoi(sstrsep(&p,sep));
                                sstrsep(&p,sep);
                                }
                        else if(!strncmp(buf,"+F2:",4))
                                {
-@@ -2849,12 +2953,18 @@ static int do_multi(int multi)
+@@ -2849,12 +2954,18 @@ static int do_multi(int multi)
                                k=atoi(sstrsep(&p,sep));
                                sstrsep(&p,sep);
  
                                d=atof(sstrsep(&p,sep));
                                if(n)
                                        rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
-@@ -2870,12 +2980,18 @@ static int do_multi(int multi)
+@@ -2870,12 +2981,18 @@ static int do_multi(int multi)
                                k=atoi(sstrsep(&p,sep));
                                sstrsep(&p,sep);
  
  #define BIO_FLAGS_UPLINK 0x8000
 --- a/crypto/engine/eng_all.c
 +++ b/crypto/engine/eng_all.c
-@@ -104,7 +104,7 @@ void ENGINE_load_builtin_engines(void)
- #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 @@ void ENGINE_load_builtin_engines(void)
  #endif
        }
  };
  
  static u_int32_t cryptodev_asymfeat = 0;
-@@ -79,9 +89,11 @@ static u_int32_t cryptodev_asymfeat = 0;
+@@ -79,9 +89,6 @@ static u_int32_t cryptodev_asymfeat = 0;
  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 cryptodev_max_iv(int cipher);
+-static int cryptodev_key_length_valid(int cipher, int len);
+-static int cipher_nid_to_cryptodev(int nid);
  static int get_cryptodev_ciphers(const int **cnids);
  /*static int get_cryptodev_digests(const int **cnids);*/
  static int cryptodev_usable_ciphers(const int **nids);
-@@ -134,9 +146,12 @@ static struct {
+@@ -134,9 +141,12 @@ static struct {
        int     ivmax;
        int     keylen;
  } ciphers[] = {
        { CRYPTO_BLF_CBC,               NID_bf_cbc,             8,      16, },
        { CRYPTO_CAST_CBC,              NID_cast5_cbc,          8,      16, },
        { CRYPTO_SKIPJACK_CBC,          NID_undef,              0,       0, },
-@@ -147,14 +162,15 @@ static struct {
+@@ -147,14 +157,16 @@ static struct {
  static struct {
        int     id;
        int     nid;
 -      { CRYPTO_MD5,                   NID_md5,                },
 -      { CRYPTO_SHA1,                  NID_undef,              },
 -      { 0,                            NID_undef,              },
++      { CRYPTO_MD5_HMAC,              NID_hmacWithMD5,        16},
 +      { CRYPTO_SHA1_HMAC,             NID_hmacWithSHA1,       20},
 +      { CRYPTO_RIPEMD160_HMAC,        NID_ripemd160,          16/*?*/},
 +      { CRYPTO_MD5_KPDK,              NID_undef,              0},
  };
  #endif
  
-@@ -182,10 +198,17 @@ open_dev_crypto(void)
+@@ -182,10 +194,17 @@ open_dev_crypto(void)
  static int
  get_dev_crypto(void)
  {
        if (ioctl(fd, CRIOGET, &retfd) == -1)
                return (-1);
  
-@@ -208,6 +231,7 @@ get_asym_dev_crypto(void)
-       return fd;
- }
-+#if 0
- /*
-  * XXXX this needs to be set for each alg - and determined from
-  * a running card.
-@@ -251,6 +275,7 @@ cipher_nid_to_cryptodev(int nid)
-                       return (ciphers[i].id);
-       return (0);
+@@ -209,50 +228,6 @@ get_asym_dev_crypto(void)
  }
-+#endif
  
  /*
+- * XXXX this needs to be set for each alg - and determined from
+- * a running card.
+- */
+-static int
+-cryptodev_max_iv(int cipher)
+-{
+-      int i;
+-
+-      for (i = 0; ciphers[i].id; i++)
+-              if (ciphers[i].id == cipher)
+-                      return (ciphers[i].ivmax);
+-      return (0);
+-}
+-
+-/*
+- * XXXX this needs to be set for each alg - and determined from
+- * a running card. For now, fake it out - but most of these
+- * for real devices should return 1 for the supported key
+- * sizes the device can handle.
+- */
+-static int
+-cryptodev_key_length_valid(int cipher, int len)
+-{
+-      int i;
+-
+-      for (i = 0; ciphers[i].id; i++)
+-              if (ciphers[i].id == cipher)
+-                      return (ciphers[i].keylen == len);
+-      return (0);
+-}
+-
+-/* convert libcrypto nids to cryptodev */
+-static int
+-cipher_nid_to_cryptodev(int nid)
+-{
+-      int i;
+-
+-      for (i = 0; ciphers[i].id; i++)
+-              if (ciphers[i].nid == nid)
+-                      return (ciphers[i].id);
+-      return (0);
+-}
+-
+-/*
   * Find out what ciphers /dev/crypto will let us have a session for.
-@@ -270,7 +295,7 @@ get_cryptodev_ciphers(const int **cnids)
+  * XXX note, that some of these openssl doesn't deal with yet!
+  * returning them here is harmless, as long as we return NULL
+@@ -270,7 +245,7 @@ get_cryptodev_ciphers(const int **cnids)
                return (0);
        }
        memset(&sess, 0, sizeof(sess));
  
        for (i = 0; ciphers[i].id && count < CRYPTO_ALGORITHM_MAX; i++) {
                if (ciphers[i].nid == NID_undef)
-@@ -310,10 +335,12 @@ get_cryptodev_digests(const int **cnids)
+@@ -310,10 +285,12 @@ get_cryptodev_digests(const int **cnids)
                return (0);
        }
        memset(&sess, 0, sizeof(sess));
                sess.cipher = 0;
                if (ioctl(fd, CIOCGSESSION, &sess) != -1 &&
                    ioctl(fd, CIOCFSESSION, &sess.ses) != -1)
-@@ -360,6 +387,9 @@ cryptodev_usable_ciphers(const int **nid
+@@ -360,6 +337,9 @@ cryptodev_usable_ciphers(const int **nid
  static int
  cryptodev_usable_digests(const int **nids)
  {
        /*
         * XXXX just disable all digests for now, because it sucks.
         * we need a better way to decide this - i.e. I may not
-@@ -374,6 +404,7 @@ cryptodev_usable_digests(const int **nid
+@@ -374,6 +354,7 @@ cryptodev_usable_digests(const int **nid
         */
        *nids = NULL;
        return (0);
  }
  
  static int
-@@ -436,16 +467,20 @@ cryptodev_init_key(EVP_CIPHER_CTX *ctx, 
+@@ -436,16 +417,20 @@ cryptodev_init_key(EVP_CIPHER_CTX *ctx, 
  {
        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);
--
++      int cipher, i;
 -      if (ctx->cipher->iv_len > cryptodev_max_iv(cipher))
 -              return (0);
 +      for (i = 0; ciphers[i].id; i++)
  
        memset(sess, 0, sizeof(struct session_op));
  
-@@ -505,6 +540,20 @@ cryptodev_cleanup(EVP_CIPHER_CTX *ctx)
+@@ -505,6 +490,20 @@ cryptodev_cleanup(EVP_CIPHER_CTX *ctx)
   * gets called when libcrypto requests a cipher NID.
   */
  
  /* DES CBC EVP */
  const EVP_CIPHER cryptodev_des_cbc = {
        NID_des_cbc,
-@@ -572,6 +621,32 @@ const EVP_CIPHER cryptodev_aes_cbc = {
+@@ -572,6 +571,32 @@ const EVP_CIPHER cryptodev_aes_cbc = {
        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
-@@ -585,6 +660,9 @@ cryptodev_engine_ciphers(ENGINE *e, cons
+@@ -585,6 +610,9 @@ cryptodev_engine_ciphers(ENGINE *e, cons
                return (cryptodev_usable_ciphers(nids));
  
        switch (nid) {
        case NID_des_ede3_cbc:
                *cipher = &cryptodev_3des_cbc;
                break;
-@@ -600,6 +678,12 @@ cryptodev_engine_ciphers(ENGINE *e, cons
+@@ -600,6 +628,12 @@ cryptodev_engine_ciphers(ENGINE *e, cons
        case NID_aes_128_cbc:
                *cipher = &cryptodev_aes_cbc;
                break;
        default:
                *cipher = NULL;
                break;
-@@ -607,6 +691,234 @@ cryptodev_engine_ciphers(ENGINE *e, cons
+@@ -607,6 +641,234 @@ cryptodev_engine_ciphers(ENGINE *e, cons
        return (*cipher != NULL);
  }
  
 +      int digest;
 +
 +      if ((digest = digest_nid_to_cryptodev(ctx->digest->type)) == NID_undef){
-+              printf("cryptodev_digest_init: Can't get digest \n");
++              fprintf(stderr, "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");
++              fprintf(stderr, "cryptodev_digest_init: Can't get Dev \n");
 +              return (0);
 +      }
 +
 +      if (ioctl(state->d_fd, CIOCGSESSION, sess) < 0) {
 +              close(state->d_fd);
 +              state->d_fd = -1;
-+              printf("cryptodev_digest_init: Open session failed\n");
++              fprintf(stderr, "cryptodev_digest_init: Open session failed\n");
 +              return (0);
 +      }
 +
 +      struct session_op *sess = &state->d_sess;
 +
 +      if (!data || state->d_fd < 0) {
-+              printf("cryptodev_digest_update: illegal inputs \n");
++              fprintf(stderr, "cryptodev_digest_update: illegal inputs \n");
 +              return (0);
 +      }
 +
 +              state->mac_data = OPENSSL_realloc(state->mac_data, state->mac_len + count);
 +
 +              if (!state->mac_data) {
-+                      printf("cryptodev_digest_update: realloc failed\n");
++                      fprintf(stderr, "cryptodev_digest_update: realloc failed\n");
 +                      return (0);
 +              }
 +
 +      cryp.dst = NULL;
 +      cryp.mac = state->digest_res;
 +      if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) {
-+              printf("cryptodev_digest_update: digest failed\n");
++              fprintf(stderr, "cryptodev_digest_update: digest failed\n");
 +              return (0);
 +      }
 +      return (1);
 +      int ret = 1;
 +
 +      if (!md || state->d_fd < 0) {
-+              printf("cryptodev_digest_final: illegal input\n");
++              fprintf(stderr, "cryptodev_digest_final: illegal input\n");
 +              return(0);
 +      }
 +
 +              cryp.mac = md;
 +
 +              if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) {
-+                      printf("cryptodev_digest_final: digest failed\n");
++                      fprintf(stderr, "cryptodev_digest_final: digest failed\n");
 +                      return (0);
 +              }
 +
 +      struct session_op *sess = &state->d_sess;
 +
 +      if (state->d_fd < 0) {
-+              printf("cryptodev_digest_cleanup: illegal input\n");
++              fprintf(stderr, "cryptodev_digest_cleanup: illegal input\n");
 +              return (0);
 +      }
 +
 +              return 1;
 +
 +      if (ioctl(state->d_fd, CIOCFSESSION, &sess->ses) < 0) {
-+              printf("cryptodev_digest_cleanup: failed to close session\n");
++              fprintf(stderr, "cryptodev_digest_cleanup: failed to close session\n");
 +              ret = 0;
 +      } else {
 +              ret = 1;
  static int
  cryptodev_engine_digests(ENGINE *e, const EVP_MD **digest,
      const int **nids, int nid)
-@@ -615,10 +927,15 @@ cryptodev_engine_digests(ENGINE *e, cons
+@@ -615,10 +877,15 @@ cryptodev_engine_digests(ENGINE *e, cons
                return (cryptodev_usable_digests(nids));
  
        switch (nid) {
                *digest = NULL;
                break;
        }
-@@ -646,6 +963,7 @@ bn2crparam(const BIGNUM *a, struct crpar
+@@ -646,6 +913,7 @@ bn2crparam(const BIGNUM *a, struct crpar
        b = malloc(bytes);
        if (b == NULL)
                return (1);
  
        crp->crp_p = (char *)b;
        crp->crp_nbits = bits;
-@@ -690,7 +1008,7 @@ zapparams(struct crypt_kop *kop)
+@@ -690,7 +958,7 @@ zapparams(struct crypt_kop *kop)
  {
        int i;
  
                if (kop->crk_param[i].crp_p)
                        free(kop->crk_param[i].crp_p);
                kop->crk_param[i].crp_p = NULL;
+@@ -776,7 +1044,6 @@ static int
+ cryptodev_rsa_nocrt_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx)
+ {
+       int r;
+-
+       r = cryptodev_bn_mod_exp(r0, I, rsa->d, rsa->n, ctx, NULL);
+       return (r);
+ }
+@@ -920,6 +1187,9 @@ cryptodev_dsa_do_sign(const unsigned cha
+               const DSA_METHOD *meth = DSA_OpenSSL();
+               BN_free(r);
+               BN_free(s);
++              fprintf(stderr, "cryptodev_asym: CRK_DSA_SIGN %s failed, "
++                      "Running in software\n", errno==kop.crk_status ?
++                      "hardware operation" : "asym process");
+               dsaret = (meth->dsa_do_sign)(dgst, dlen, dsa);
+       }
+ err:
+@@ -961,6 +1231,9 @@ cryptodev_dsa_verify(const unsigned char
+       } else {
+               const DSA_METHOD *meth = DSA_OpenSSL();
++              fprintf(stderr, "cryptodev_asym: CRK_DSA_VERIFY %s failed, "
++                      "Running in software\n", errno==kop.crk_status ?
++                      "hardware operation" : "asym process");
+               dsaret = (meth->dsa_do_verify)(dgst, dlen, sig, dsa);
+       }
+ err:
+@@ -994,8 +1267,8 @@ static int
+ cryptodev_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
+ {
+       struct crypt_kop kop;
+-      int dhret = 1;
+-      int fd, keylen;
++      int dhret = -1;
++      int fd, keybits;
+       if ((fd = get_asym_dev_crypto()) < 0) {
+               const DH_METHOD *meth = DH_OpenSSL();
+@@ -1003,7 +1276,7 @@ cryptodev_dh_compute_key(unsigned char *
+               return ((meth->compute_key)(key, pub_key, dh));
+       }
+-      keylen = BN_num_bits(dh->p);
++      keybits = BN_num_bits(dh->p);
+       memset(&kop, 0, sizeof kop);
+       kop.crk_op = CRK_DH_COMPUTE_KEY;
+@@ -1018,14 +1291,18 @@ cryptodev_dh_compute_key(unsigned char *
+       kop.crk_iparams = 3;
+       kop.crk_param[3].crp_p = (char *)key;
+-      kop.crk_param[3].crp_nbits = keylen * 8;
++      kop.crk_param[3].crp_nbits = keybits;
+       kop.crk_oparams = 1;
+       if (ioctl(fd, CIOCKEY, &kop) == -1) {
+               const DH_METHOD *meth = DH_OpenSSL();
++              fprintf(stderr, "cryptodev_asym: CRK_DH_COMPUTE_KEY %s failed, "
++                      "Running in software\n", errno==kop.crk_status ?
++                      "hardware operation" : "asym process");
+               dhret = (meth->compute_key)(key, pub_key, dh);
+-      }
++      } else
++              dhret = (keybits + 7) / 8;
+ err:
+       kop.crk_param[3].crp_p = NULL;
+       zapparams(&kop);
 --- a/crypto/engine/engine.h
 +++ b/crypto/engine/engine.h
 @@ -705,7 +705,7 @@ typedef int (*dynamic_bind_engine)(ENGIN
                                *DSO_DLFCN*)    sfx="so";;      \
                                *DSO_DL*)       sfx="sl";;      \
                                *)              sfx="bad";;     \
---- a/util/domd
-+++ b/util/domd
-@@ -22,13 +22,17 @@ if expr "$MAKEDEPEND" : '.*gcc$' > /dev/
-     done
-     sed -e '/^# DO NOT DELETE.*/,$d' < Makefile > Makefile.tmp
-     echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' >> Makefile.tmp
--    ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp
-+    ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp && \
-     ${PERL} $TOP/util/clean-depend.pl < Makefile.tmp > Makefile.new
-+      RC=$?
-     rm -f Makefile.tmp
- else
--    ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND $@
-+    ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND $@ && \
-     ${PERL} $TOP/util/clean-depend.pl < Makefile > Makefile.new
-+      RC=$?
- fi
- mv Makefile.new Makefile
- # unfake the presence of Kerberos
- rm $TOP/krb5.h
-+
-+exit $RC
diff --git a/package/openssl/patches/400-cve-2010-0740.patch b/package/openssl/patches/400-cve-2010-0740.patch
deleted file mode 100644 (file)
index 4c893eb..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/ssl/s3_pkt.c
-+++ b/ssl/s3_pkt.c
-@@ -291,9 +291,9 @@ again:
-                       if (version != s->version)
-                               {
-                               SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER);
--                              /* Send back error using their
--                               * version number :-) */
--                              s->version=version;
-+                                if ((s->version & 0xFF00) == (version & 0xFF00))
-+                                      /* Send back error using their minor version number :-) */
-+                                      s->version = (unsigned short)version;
-                               al=SSL_AD_PROTOCOL_VERSION;
-                               goto f_err;
-                               }