Recent changes from 0.9.7-stable.
authorRichard Levitte <levitte@openssl.org>
Fri, 23 Jan 2004 16:09:01 +0000 (16:09 +0000)
committerRichard Levitte <levitte@openssl.org>
Fri, 23 Jan 2004 16:09:01 +0000 (16:09 +0000)
Configure
TABLE
config
crypto/bn/Makefile.ssl
crypto/sha/asm/sha1-586.pl
crypto/x509/by_dir.c

index 31c3a9509361844b49a362c4e2edd4c681f237fa..8d019d7aed4c105098a57a14b2b3a6a056ae5af9 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -261,6 +261,7 @@ my %table=(
 # 64bit PARISC for GCC without optimization, which seems to make problems.
 # Submitted by <ross.alexander@uk.neceur.com>
 "hpux64-parisc-gcc","gcc:-DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/pa-risc2W.o:::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
 # IA-64 targets
 "hpux-ia64-cc","cc:-Ae +DD32 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
diff --git a/TABLE b/TABLE
index 328b561c9b5cf1460136ee8723170c863e063690..828045958bcf623b85580d3126b9aecd384d608c 100644 (file)
--- a/TABLE
+++ b/TABLE
@@ -1,4 +1,3 @@
-Output of `Configure TABLE':
 
 *** BC-16
 $cc           = bcc
@@ -2675,6 +2674,31 @@ $shared_extension = .sl.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 $ranlib       = 
 $arflags      = 
 
+*** hpux64-parisc2-gcc
+$cc           = gcc
+$cflags       = -O3 -DB_ENDIAN -DMD32_XARRAY
+$unistd       = 
+$thread_cflag = -D_REENTRANT
+$sys_id       = 
+$lflags       = -ldl
+$bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$bn_obj       = asm/pa-risc2W.o
+$des_obj      = 
+$bf_obj       = 
+$md5_obj      = 
+$sha1_obj     = 
+$cast_obj     = 
+$rc4_obj      = 
+$rmd160_obj   = 
+$rc5_obj      = 
+$dso_scheme   = dlfcn
+$shared_target= hpux64-shared
+$shared_cflag = -fpic
+$shared_ldflag = 
+$shared_extension = .sl.$(SHLIB_MAJOR).$(SHLIB_MINOR)
+$ranlib       = 
+$arflags      = 
+
 *** hurd-x86
 $cc           = gcc
 $cflags       = -DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -m486 -Wall
diff --git a/config b/config
index b3bd96bbfcb674da1fa97ae0286b554d1c437c93..25a3703c1fe0d42d2dcd6e6ecb0012a07d4a3d32 100755 (executable)
--- a/config
+++ b/config
@@ -134,7 +134,7 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
        HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
        case "$HPUXVER" in
            1[0-9].*)   # HPUX 10 and 11 targets are unified
-               echo "${MACHINE}-hp-hpux10"; exit 0
+               echo "${MACHINE}-hp-hpux1x"; exit 0
                ;;
            *)
                echo "${MACHINE}-hp-hpux"; exit 0
@@ -410,9 +410,10 @@ if [ "$SYSTEM" = "HP-UX" ];then
   GCC_BITS="32"
   if [ $GCCVER -ge 30 ]; then
     # PA64 support only came in with gcc 3.0.x.
-    # We look for the preprocessor symbol __LP64__ indicating
-    # 64bit bit long and pointer.  sizeof(int) == 32 on HPUX64.
-    if gcc -v -E -x c /dev/null 2>&1 | grep __LP64__ > /dev/null; then
+    # We check if the preprocessor symbol __LP64__ is defined...
+    if echo "__LP64__" | gcc -v -E -x c - 2>/dev/null | grep "^__LP64__" 2>&1 > /dev/null; then
+      : # __LP64__ has slipped through, it therefore is not defined
+    else
       GCC_BITS="64"
     fi
   fi
@@ -685,7 +686,7 @@ EOF
        if [ $CC = "gcc" ];
        then
          if [ $GCC_BITS = "64" ]; then
-           OUT="hpux64-parisc-gcc"
+           OUT="hpux64-parisc2-gcc"
          else
            OUT="hpux-parisc-gcc"
          fi
@@ -700,7 +701,7 @@ EOF
        if   [ $CPU_VERSION -ge 768 ]; then     # IA-64 CPU
             echo "WARNING! 64-bit ABI is the default configured ABI on HP-UXi."
             echo "         If you wish to build 32-bit library, the you have to"
-            echo "         invoke './Configure hpux-ia32-cc' *manually*."
+            echo "         invoke './Configure hpux-ia64-cc' *manually*."
             if [ "$TEST" = "false" ]; then
                echo "         You have about 5 seconds to press Ctrl-C to abort."
                (stty -icanon min 0 time 50; read waste) < /dev/tty
index 0c6e796d17adeb7a24cdaf238b8ee81dae5a0616..50892ef44c6b639c2e643d7291f50b2187709800 100644 (file)
@@ -120,6 +120,9 @@ asm/ia64-cpp.o:     asm/ia64.S
 
 asm/x86_64-gcc.o: asm/x86_64-gcc.c
 
+asm/pa-risc2W.o: asm/pa-risc2W.s
+       /usr/ccs/bin/as -o asm/pa-rics2W.o asm/pa-risc2W.s
+
 files:
        $(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
 
index fe51fd0794575e0e9ef3f701c36bd5fceab1fe0f..e00f70955384071e6c7b7de35976ae0bdacda764 100644 (file)
@@ -1,5 +1,30 @@
 #!/usr/local/bin/perl
 
+# It was noted that Intel IA-32 C compiler generates code which
+# performs ~30% *faster* on P4 CPU than original *hand-coded*
+# SHA1 assembler implementation. To address this problem (and
+# prove that humans are still better than machines:-), the
+# original code was overhauled, which resulted in following
+# performance changes:
+#
+#              compared with original  compared with Intel cc
+#              assembler impl.         generated code
+# Pentium      -25%                    +37%
+# PIII/AMD     +8%                     +16%
+# P4           +85%(!)                 +45%
+#
+# As you can see Pentium came out as looser:-( Yet I reckoned that
+# improvement on P4 outweights the loss and incorporate this
+# re-tuned code to 0.9.7 and later.
+# ----------------------------------------------------------------
+# Those who for any particular reason absolutely must score on
+# Pentium can replace this module with one from 0.9.6 distribution.
+# This "offer" shall be revoked the moment programming interface to
+# this module is changed, in which case this paragraph should be
+# removed.
+# ----------------------------------------------------------------
+#                                      <appro@fy.chalmers.se>
+
 $normal=0;
 
 push(@INC,"perlasm","../../perlasm");
@@ -77,54 +102,21 @@ sub BODY_00_15
        {
        local($pos,$K,$X,$n,$a,$b,$c,$d,$e,$f)=@_;
 
-return if $n & 1;
        &comment("00_15 $n");
 
-        &mov($f,$c);
-
-       &mov($tmp1,$a);
-        &xor($f,$d);                   # F2
-
-       &rotl($tmp1,5);                 # A2
-
-       &and($f,$b);                    # F3
-        &add($tmp1,$e);
-
-       &rotr($b,1);                    # B1    <- F
-        &mov($e,&swtmp($n));           # G1
-
-       &rotr($b,1);                    # B1    <- F
-        &xor($f,$d);                   # F4
-
-       &lea($tmp1,&DWP($K,$tmp1,$e,1));
-
-############################
-#      &BODY_40_59( 0,$K[2],$X,42,$A,$B,$C,$D,$E,$T);
-#      &BODY_40_59( 0,$K[2],$X,43,$T,$A,$B,$C,$D,$E);
-$n++;
-       local($n0,$n1,$n2,$n3,$np)=&Na($n);
-       ($b,$c,$d,$e,$f,$a)=($a,$b,$c,$d,$e,$f);
-
-        &mov($f,$c);
-
-       &add($a,$tmp1);         # MOVED DOWN
-        &xor($f,$d);                   # F2
-
        &mov($tmp1,$a);
-        &and($f,$b);                   # F3
-
-       &rotl($tmp1,5);                 # A2
-
-       &add($tmp1,$e);
-        &mov($e,&swtmp($n));           # G1
-
-       &rotr($b,1);                    # B1    <- F
-        &xor($f,$d);                   # F4
-
-       &rotr($b,1);                    # B1    <- F
-        &lea($tmp1,&DWP($K,$tmp1,$e,1));
-
-       &add($f,$tmp1);
+        &mov($f,$c);                   # f to hold F_00_19(b,c,d)
+       &rotl($tmp1,5);                 # tmp1=ROTATE(a,5)
+        &xor($f,$d);
+       &and($f,$b);
+        &rotr($b,2);                   # b=ROTATE(b,30)
+       &add($tmp1,$e);                 # tmp1+=e;
+        &mov($e,&swtmp($n));           # e becomes volatile and
+                                       # is loaded with xi
+       &xor($f,$d);                    # f holds F_00_19(b,c,d)
+        &lea($tmp1,&DWP($K,$tmp1,$e,1));# tmp1+=K_00_19+xi
+       
+       &add($f,$tmp1);                 # f+=tmp1
        }
 
 sub BODY_16_19
@@ -132,66 +124,24 @@ sub BODY_16_19
        local($pos,$K,$X,$n,$a,$b,$c,$d,$e,$f)=@_;
        local($n0,$n1,$n2,$n3,$np)=&Na($n);
 
-return if $n & 1;
        &comment("16_19 $n");
 
- &nop() if ($pos < 0);
-&mov($tmp1,&swtmp($n0));                       # X1
- &mov($f,&swtmp($n1));                 # X2
-&xor($f,$tmp1);                                # X3
- &mov($tmp1,&swtmp($n2));              # X4
-&xor($f,$tmp1);                                # X5
- &mov($tmp1,&swtmp($n3));              # X6
-&xor($f,$tmp1);                                # X7 - slot
- &mov($tmp1,$c);                       # F1
-&rotl($f,1);                           # X8 - slot
- &xor($tmp1,$d);                       # F2
-&mov(&swtmp($n0),$f);                  # X9 - anytime
- &and($tmp1,$b);                       # F3
-&lea($f,&DWP($K,$f,$e,1));             # tot=X+K+e
- &xor($tmp1,$d);                               # F4
-&mov($e,$a);                           # A1
- &add($f,$tmp1);                       # tot+=F();
-
-&rotl($e,5);                           # A2
-
-&rotr($b,1);                           # B1    <- F
- &add($f,$e);                          # tot+=a
-
-############################
-#      &BODY_40_59( 0,$K[2],$X,42,$A,$B,$C,$D,$E,$T);
-#      &BODY_40_59( 0,$K[2],$X,43,$T,$A,$B,$C,$D,$E);
-$n++;
-       local($n0,$n1,$n2,$n3,$np)=&Na($n);
-       ($b,$c,$d,$e,$f,$a)=($a,$b,$c,$d,$e,$f);
-
-
-&mov($f,&swtmp($n0));                  # X1
- &mov($tmp1,&swtmp($n1));              # X2
-&xor($f,$tmp1);                                # X3
- &mov($tmp1,&swtmp($n2));              # X4
-&xor($f,$tmp1);                                # X5
- &mov($tmp1,&swtmp($n3));              # X6
-&rotr($c,1); #&rotr($b,1);             # B1    <- F # MOVED DOWN
- &xor($f,$tmp1);                               # X7 - slot
-&rotl($f,1);                           # X8 - slot
- &mov($tmp1,$c);                       # F1
-&xor($tmp1,$d);                        # F2
- &mov(&swtmp($n0),$f);                 # X9 - anytime
-&and($tmp1,$b);                        # F3
- &lea($f,&DWP($K,$f,$e,1));            # tot=X+K+e
-
-&xor($tmp1,$d);                                # F4
- &mov($e,$a);                          # A1
-
-&rotl($e,5);                           # A2
-
-&rotr($b,1);                           # B1    <- F
- &add($f,$e);                          # tot+=a
-
-&rotr($b,1);                           # B1    <- F
- &add($f,$tmp1);                       # tot+=F();
-
+       &mov($f,&swtmp($n1));           # f to hold Xupdate(xi,xa,xb,xc,xd)
+        &mov($tmp1,$c);                # tmp1 to hold F_00_19(b,c,d)
+       &xor($f,&swtmp($n0));
+        &xor($tmp1,$d);
+       &xor($f,&swtmp($n2));
+        &and($tmp1,$b);                # tmp1 holds F_00_19(b,c,d)
+       &xor($f,&swtmp($n3));           # f holds xa^xb^xc^xd
+        &rotr($b,2);                   # b=ROTATE(b,30)
+       &xor($tmp1,$d);                 # tmp1=F_00_19(b,c,d)
+        &rotl($f,1);                   # f=ROATE(f,1)
+       &mov(&swtmp($n0),$f);           # xi=f
+       &lea($f,&DWP($K,$f,$e,1));      # f+=K_00_19+e
+        &mov($e,$a);                   # e becomes volatile
+       &add($f,$tmp1);                 # f+=F_00_19(b,c,d)
+        &rotl($e,5);                   # e=ROTATE(a,5)
+       &add($f,$e);                    # f+=ROTATE(a,5)
        }
 
 sub BODY_20_39
@@ -201,42 +151,21 @@ sub BODY_20_39
        &comment("20_39 $n");
        local($n0,$n1,$n2,$n3,$np)=&Na($n);
 
-&mov($f,&swtmp($n0));                  # X1
- &mov($tmp1,&swtmp($n1));              # X2
-&xor($f,$tmp1);                                # X3
- &mov($tmp1,&swtmp($n2));              # X4
-&xor($f,$tmp1);                                # X5
- &mov($tmp1,&swtmp($n3));              # X6
-&xor($f,$tmp1);                                # X7 - slot
- &mov($tmp1,$b);                       # F1
-&rotl($f,1);                           # X8 - slot
- &xor($tmp1,$c);                       # F2
-&mov(&swtmp($n0),$f);                  # X9 - anytime
- &xor($tmp1,$d);                       # F3
-
-&lea($f,&DWP($K,$f,$e,1));             # tot=X+K+e
- &mov($e,$a);                          # A1
-
-&rotl($e,5);                           # A2
-
-if ($n != 79) # last loop      
-       {
-       &rotr($b,1);                            # B1    <- F
-        &add($e,$tmp1);                        # tmp1=F()+a
-
-       &rotr($b,1);                            # B2    <- F
-        &add($f,$e);                           # tot+=tmp1;
-       }
-else
-       {
-       &add($e,$tmp1);                         # tmp1=F()+a
-        &mov($tmp1,&wparam(0));
-
-       &rotr($b,1);                            # B1    <- F
-        &add($f,$e);                           # tot+=tmp1;
-
-       &rotr($b,1);                            # B2    <- F
-       }
+       &mov($f,&swtmp($n0));           # f to hold Xupdate(xi,xa,xb,xc,xd)
+        &mov($tmp1,$b);                # tmp1 to hold F_20_39(b,c,d)
+       &xor($f,&swtmp($n1));
+        &rotr($b,2);                   # b=ROTATE(b,30)
+       &xor($f,&swtmp($n2));
+        &xor($tmp1,$c);
+       &xor($f,&swtmp($n3));           # f holds xa^xb^xc^xd
+        &xor($tmp1,$d);                # tmp1 holds F_20_39(b,c,d)
+       &rotl($f,1);                    # f=ROTATE(f,1)
+       &mov(&swtmp($n0),$f);           # xi=f
+       &lea($f,&DWP($K,$f,$e,1));      # f+=K_20_39+e
+        &mov($e,$a);                   # e becomes volatile
+       &rotl($e,5);                    # e=ROTATE(a,5)
+        &add($f,$tmp1);                # f+=F_20_39(b,c,d)
+       &add($f,$e);                    # f+=ROTATE(a,5)
        }
 
 sub BODY_40_59
@@ -244,70 +173,27 @@ sub BODY_40_59
        local($pos,$K,$X,$n,$a,$b,$c,$d,$e,$f)=@_;
 
        &comment("40_59 $n");
-       return if $n & 1;
        local($n0,$n1,$n2,$n3,$np)=&Na($n);
 
-&mov($f,&swtmp($n0));                  # X1
- &mov($tmp1,&swtmp($n1));              # X2
-&xor($f,$tmp1);                                # X3
- &mov($tmp1,&swtmp($n2));              # X4
-&xor($f,$tmp1);                                # X5
- &mov($tmp1,&swtmp($n3));              # X6
-&xor($f,$tmp1);                                # X7 - slot
- &mov($tmp1,$b);                       # F1
-&rotl($f,1);                           # X8 - slot
- &or($tmp1,$c);                                # F2
-&mov(&swtmp($n0),$f);                  # X9 - anytime
- &and($tmp1,$d);                       # F3
-
-&lea($f,&DWP($K,$f,$e,1));             # tot=X+K+e
- &mov($e,$b);                          # F4
-
-&rotr($b,1);                           # B1    <- F
- &and($e,$c);                          # F5
-
-&or($tmp1,$e);                         # F6
- &mov($e,$a);                          # A1
-
-&rotl($e,5);                           # A2
-
-&add($tmp1,$e);                        # tmp1=F()+a
-
-############################
-#      &BODY_40_59( 0,$K[2],$X,42,$A,$B,$C,$D,$E,$T);
-#      &BODY_40_59( 0,$K[2],$X,43,$T,$A,$B,$C,$D,$E);
-$n++;
-       local($n0,$n1,$n2,$n3,$np)=&Na($n);
-       ($b,$c,$d,$e,$f,$a)=($a,$b,$c,$d,$e,$f);
-
- &mov($f,&swtmp($n0));                 # X1
-&add($a,$tmp1);                                # tot+=tmp1; # moved was add f,tmp1
- &mov($tmp1,&swtmp($n1));              # X2
-&xor($f,$tmp1);                                # X3
- &mov($tmp1,&swtmp($n2));              # X4
-&xor($f,$tmp1);                                # X5
- &mov($tmp1,&swtmp($n3));              # X6
-&rotr($c,1);                           # B2    <- F # moved was rotr b,1
- &xor($f,$tmp1);                       # X7 - slot
-&rotl($f,1);                           # X8 - slot
- &mov($tmp1,$b);                       # F1
-&mov(&swtmp($n0),$f);                  # X9 - anytime
- &or($tmp1,$c);                                # F2
-&lea($f,&DWP($K,$f,$e,1));             # tot=X+K+e
- &mov($e,$b);                          # F4
-&and($tmp1,$d);                                # F3
- &and($e,$c);                          # F5
-
-&or($tmp1,$e);                         # F6
- &mov($e,$a);                          # A1
-
-&rotl($e,5);                           # A2
-
-&rotr($b,1);                           # B1    <- F
- &add($tmp1,$e);                       # tmp1=F()+a
-
-&rotr($b,1);                           # B2    <- F
- &add($f,$tmp1);                       # tot+=tmp1;
+       &mov($f,&swtmp($n0));           # f to hold Xupdate(xi,xa,xb,xc,xd)
+        &mov($tmp1,$b);                # tmp1 to hold F_40_59(b,c,d)
+       &xor($f,&swtmp($n1));
+        &or($tmp1,$c);
+       &xor($f,&swtmp($n2));
+        &and($tmp1,$d);
+       &xor($f,&swtmp($n3));           # f holds xa^xb^xc^xd
+       &rotl($f,1);                    # f=ROTATE(f,1)
+       &mov(&swtmp($n0),$f);           # xi=f
+       &lea($f,&DWP($K,$f,$e,1));      # f+=K_40_59+e
+        &mov($e,$b);                   # e becomes volatile and is used
+                                       # to calculate F_40_59(b,c,d)
+       &rotr($b,2);                    # b=ROTATE(b,30)
+        &and($e,$c);
+       &or($tmp1,$e);                  # tmp1 holds F_40_59(b,c,d)             
+        &mov($e,$a);
+       &rotl($e,5);                    # e=ROTATE(a,5)
+       &add($tmp1,$e);                 # tmp1+=ROTATE(a,5)
+       &add($f,$tmp1);                 # f+=tmp1;
        }
 
 sub BODY_60_79
@@ -495,8 +381,7 @@ sub sha1_block_data
        # C -> E
        # D -> T
 
-       # The last 2 have been moved into the last loop
-       # &mov($tmp1,&wparam(0));
+       &mov($tmp1,&wparam(0));
 
         &mov($D,       &DWP(12,$tmp1,"",0));
        &add($D,$B);
index c9bfe40ab69c433ba20f5bee84375461093f613f..6207340472e494787328755766bf3f97185c665c 100644 (file)
@@ -304,7 +304,7 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name,
                        {
                        char c = '/';
 #ifdef OPENSSL_SYS_VMS
-                       char c = ctx->dirs[i][strlen(ctx->dirs[i])-1];
+                       c = ctx->dirs[i][strlen(ctx->dirs[i])-1];
                        if (c != ':' && c != '>' && c != ']')
                                {
                                /* If no separator is present, we assume the