]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Update Windows build system to use AES assembler and standard assembly
authorDr. Stephen Henson <steve@openssl.org>
Thu, 12 Jul 2007 08:20:21 +0000 (08:20 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Thu, 12 Jul 2007 08:20:21 +0000 (08:20 +0000)
language routines in FIPS mode compiles.

CHANGES
ms/do_masm.bat
ms/do_nasm.bat
util/mk1mf.pl
util/pl/VC-32.pl

diff --git a/CHANGES b/CHANGES
index 157dfc23cbc70c2cece6e4c52560fbc7dfde8631..96a0188dafed634cd8d6c97c771c49a4a53d0cdb 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,10 @@
 
  Changes between 0.9.8e and 0.9.8f-fips  [xx XXX xxxx]
 
+  *) Updates to WIN32 build system. Make use of AES assembly language routines.
+     Use assembly language routines in FIPS compilation.
+     [Steve Henson]
+
   *) Use standard implementations of SHAx, DES, AES under crypto/ in FIPS
      mode to avoid having to maintain two versions. This will also make use
      of appropriate assembly language optimizations.
index 720d6f367b23b270aba6d1bfd92e568cedb1eb02..d522232ce7978e05172ed4101b88015282bc6e7c 100755 (executable)
@@ -1,63 +1,68 @@
-@echo off\r
-echo Generating x86 for MASM assember\r
-\r
-echo Bignum\r
-cd crypto\bn\asm\r
-perl x86.pl win32 > bn_win32.asm\r
-cd ..\..\..\r
-\r
-echo DES\r
-cd crypto\des\asm\r
-perl des-586.pl win32 > d_win32.asm\r
-cd ..\..\..\r
-\r
-echo "crypt(3)"\r
-\r
-cd crypto\des\asm\r
-perl crypt586.pl win32 > y_win32.asm\r
-cd ..\..\..\r
-\r
-echo Blowfish\r
-\r
-cd crypto\bf\asm\r
-perl bf-586.pl win32 > b_win32.asm\r
-cd ..\..\..\r
-\r
-echo CAST5\r
-cd crypto\cast\asm\r
-perl cast-586.pl win32 > c_win32.asm\r
-cd ..\..\..\r
-\r
-echo RC4\r
-cd crypto\rc4\asm\r
-perl rc4-586.pl win32 > r4_win32.asm\r
-cd ..\..\..\r
-\r
-echo MD5\r
-cd crypto\md5\asm\r
-perl md5-586.pl win32 > m5_win32.asm\r
-cd ..\..\..\r
-\r
-echo SHA1\r
-cd crypto\sha\asm\r
-perl sha1-586.pl win32 > s1_win32.asm\r
-cd ..\..\..\r
-\r
-echo RIPEMD160\r
-cd crypto\ripemd\asm\r
-perl rmd-586.pl win32 > rm_win32.asm\r
-cd ..\..\..\r
-\r
-echo RC5\32\r
-cd crypto\rc5\asm\r
-perl rc5-586.pl win32 > r5_win32.asm\r
-cd ..\..\..\r
-\r
-echo on\r
-\r
-perl util\mkfiles.pl >MINFO\r
-perl util\mk1mf.pl VC-WIN32 >ms\nt.mak\r
-perl util\mk1mf.pl dll VC-WIN32 >ms\ntdll.mak\r
-\r
-perl util\mkdef.pl 32 libeay > ms\libeay32.def\r
-perl util\mkdef.pl 32 ssleay > ms\ssleay32.def\r
+@echo off
+echo Generating x86 for MASM assember
+
+echo Bignum
+cd crypto\bn\asm
+perl x86.pl win32 > bn_win32.asm
+cd ..\..\..
+
+echo AES
+cd crypto\aes\asm
+perl aes-586.pl win32 > a_win32.asm
+cd ..\..\..
+
+echo DES
+cd crypto\des\asm
+perl des-586.pl win32 > d_win32.asm
+cd ..\..\..
+
+echo "crypt(3)"
+
+cd crypto\des\asm
+perl crypt586.pl win32 > y_win32.asm
+cd ..\..\..
+
+echo Blowfish
+
+cd crypto\bf\asm
+perl bf-586.pl win32 > b_win32.asm
+cd ..\..\..
+
+echo CAST5
+cd crypto\cast\asm
+perl cast-586.pl win32 > c_win32.asm
+cd ..\..\..
+
+echo RC4
+cd crypto\rc4\asm
+perl rc4-586.pl win32 > r4_win32.asm
+cd ..\..\..
+
+echo MD5
+cd crypto\md5\asm
+perl md5-586.pl win32 > m5_win32.asm
+cd ..\..\..
+
+echo SHA1
+cd crypto\sha\asm
+perl sha1-586.pl win32 > s1_win32.asm
+cd ..\..\..
+
+echo RIPEMD160
+cd crypto\ripemd\asm
+perl rmd-586.pl win32 > rm_win32.asm
+cd ..\..\..
+
+echo RC5\32
+cd crypto\rc5\asm
+perl rc5-586.pl win32 > r5_win32.asm
+cd ..\..\..
+
+echo on
+
+perl util\mkfiles.pl >MINFO
+perl util\mk1mf.pl VC-WIN32 >ms\nt.mak
+perl util\mk1mf.pl dll VC-WIN32 >ms\ntdll.mak
+
+perl util\mkdef.pl 32 libeay > ms\libeay32.def
+perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
index 0b51f80704b7bbf797560e59db1d64e2c92b87d3..9a27b1af66bcde59de9b75d988bad44321151364 100755 (executable)
@@ -1,65 +1,70 @@
-\r
-@echo off\r
-echo Generating x86 for NASM assember\r
-\r
-echo Bignum\r
-cd crypto\bn\asm\r
-perl x86.pl win32n > bn_win32.asm\r
-cd ..\..\..\r
-\r
-echo DES\r
-cd crypto\des\asm\r
-perl des-586.pl win32n > d_win32.asm\r
-cd ..\..\..\r
-\r
-echo "crypt(3)"\r
-\r
-cd crypto\des\asm\r
-perl crypt586.pl win32n > y_win32.asm\r
-cd ..\..\..\r
-\r
-echo Blowfish\r
-\r
-cd crypto\bf\asm\r
-perl bf-586.pl win32n > b_win32.asm\r
-cd ..\..\..\r
-\r
-echo CAST5\r
-cd crypto\cast\asm\r
-perl cast-586.pl win32n > c_win32.asm\r
-cd ..\..\..\r
-\r
-echo RC4\r
-cd crypto\rc4\asm\r
-perl rc4-586.pl win32n > r4_win32.asm\r
-cd ..\..\..\r
-\r
-echo MD5\r
-cd crypto\md5\asm\r
-perl md5-586.pl win32n > m5_win32.asm\r
-cd ..\..\..\r
-\r
-echo SHA1\r
-cd crypto\sha\asm\r
-perl sha1-586.pl win32n > s1_win32.asm\r
-cd ..\..\..\r
-\r
-echo RIPEMD160\r
-cd crypto\ripemd\asm\r
-perl rmd-586.pl win32n > rm_win32.asm\r
-cd ..\..\..\r
-\r
-echo RC5\32\r
-cd crypto\rc5\asm\r
-perl rc5-586.pl win32n > r5_win32.asm\r
-cd ..\..\..\r
-\r
-echo on\r
-\r
-perl util\mkfiles.pl >MINFO\r
-perl util\mk1mf.pl nasm VC-WIN32 >ms\nt.mak\r
-perl util\mk1mf.pl dll nasm VC-WIN32 >ms\ntdll.mak\r
-perl util\mk1mf.pl nasm BC-NT >ms\bcb.mak\r
-\r
-perl util\mkdef.pl 32 libeay > ms\libeay32.def\r
-perl util\mkdef.pl 32 ssleay > ms\ssleay32.def\r
+
+@echo off
+echo Generating x86 for NASM assember
+
+echo Bignum
+cd crypto\bn\asm
+perl x86.pl win32n > bn_win32.asm
+cd ..\..\..
+
+echo AES
+cd crypto\aes\asm
+perl aes-586.pl win32n > a_win32.asm
+cd ..\..\..
+
+echo DES
+cd crypto\des\asm
+perl des-586.pl win32n > d_win32.asm
+cd ..\..\..
+
+echo "crypt(3)"
+
+cd crypto\des\asm
+perl crypt586.pl win32n > y_win32.asm
+cd ..\..\..
+
+echo Blowfish
+
+cd crypto\bf\asm
+perl bf-586.pl win32n > b_win32.asm
+cd ..\..\..
+
+echo CAST5
+cd crypto\cast\asm
+perl cast-586.pl win32n > c_win32.asm
+cd ..\..\..
+
+echo RC4
+cd crypto\rc4\asm
+perl rc4-586.pl win32n > r4_win32.asm
+cd ..\..\..
+
+echo MD5
+cd crypto\md5\asm
+perl md5-586.pl win32n > m5_win32.asm
+cd ..\..\..
+
+echo SHA1
+cd crypto\sha\asm
+perl sha1-586.pl win32n > s1_win32.asm
+cd ..\..\..
+
+echo RIPEMD160
+cd crypto\ripemd\asm
+perl rmd-586.pl win32n > rm_win32.asm
+cd ..\..\..
+
+echo RC5\32
+cd crypto\rc5\asm
+perl rc5-586.pl win32n > r5_win32.asm
+cd ..\..\..
+
+echo on
+
+perl util\mkfiles.pl >MINFO
+perl util\mk1mf.pl nasm VC-WIN32 >ms\nt.mak
+perl util\mk1mf.pl dll nasm VC-WIN32 >ms\ntdll.mak
+perl util\mk1mf.pl nasm BC-NT >ms\bcb.mak
+
+perl util\mkdef.pl 32 libeay > ms\libeay32.def
+perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
index 99b6d321f0295456dfcc538a87a199262dcb7907..b2d7153c24c44668cff24bece34bba1292bb234d 100755 (executable)
@@ -373,6 +373,10 @@ if ($fips)
                }
 
        $fips_exclude_obj{"bn_asm"} = 1;
+       $fips_exclude_obj{"des_enc"} = 1;
+       $fips_exclude_obj{"fcrypt_b"} = 1;
+       $fips_exclude_obj{"aes_core"} = 1;
+       $fips_exclude_obj{"aes_cbc"} = 1;
 
        my @ltmp = split " ", $lib_obj{"CRYPTO"};
 
@@ -530,6 +534,8 @@ LFLAGS=$lflags
 RSC=$rsc
 FIPSLINK=\$(PERL) util${o}fipslink.pl
 
+AES_ASM_OBJ=$aes_asm_obj
+AES_ASM_SRC=$aes_asm_src
 BN_ASM_OBJ=$bn_asm_obj
 BN_ASM_SRC=$bn_asm_src
 BNCO_ASM_OBJ=$bnco_asm_obj
@@ -779,21 +785,35 @@ foreach (values %lib_nam)
                next;
                }
 
-       if (($bn_asm_obj ne "") && ($_ eq "CRYPTO"))
+       if ((!$fips && ($_ eq "CRYPTO")) || ($fips && ($_ eq "FIPS")))
                {
-               $lib_obj =~ s/\s\S*\/bn_asm\S*/ \$(BN_ASM_OBJ)/;
-               $rules.=&do_asm_rule($bn_asm_obj,$bn_asm_src);
-               }
-       if (($bnco_asm_obj ne "") && ($_ eq "CRYPTO"))
-               {
-               $lib_obj .= "\$(BNCO_ASM_OBJ)";
-               $rules.=&do_asm_rule($bnco_asm_obj,$bnco_asm_src);
-               }
-       if (($des_enc_obj ne "") && ($_ eq "CRYPTO"))
-               {
-               $lib_obj =~ s/\s\S*des_enc\S*/ \$(DES_ENC_OBJ)/;
-               $lib_obj =~ s/\s\S*\/fcrypt_b\S*\s*/ /;
-               $rules.=&do_asm_rule($des_enc_obj,$des_enc_src);
+               if ($aes_asm_obj ne "")
+                       {
+                       $lib_obj =~ s/\s(\S*\/aes_core\S*)/ \$(AES_ASM_OBJ)/;
+                       $lib_obj =~ s/\s\S*\/aes_cbc\S*//;
+                       $rules.=&do_asm_rule($aes_asm_obj,$aes_asm_src);
+                       }
+               if ($sha1_asm_obj ne "")
+                       {
+                       $lib_obj =~ s/\s(\S*\/sha1dgst\S*)/ $1 \$(SHA1_ASM_OBJ)/;
+                       $rules.=&do_asm_rule($sha1_asm_obj,$sha1_asm_src);
+                       }
+               if ($bn_asm_obj ne "")
+                       {
+                       $lib_obj =~ s/\s\S*\/bn_asm\S*/ \$(BN_ASM_OBJ)/;
+                       $rules.=&do_asm_rule($bn_asm_obj,$bn_asm_src);
+                       }
+               if ($bnco_asm_obj ne "")
+                       {
+                       $lib_obj .= "\$(BNCO_ASM_OBJ)";
+                       $rules.=&do_asm_rule($bnco_asm_obj,$bnco_asm_src);
+                       }
+               if ($des_enc_obj ne "")
+                       {
+                       $lib_obj =~ s/\s\S*des_enc\S*/ \$(DES_ENC_OBJ)/;
+                       $lib_obj =~ s/\s\S*\/fcrypt_b\S*\s*/ /;
+                       $rules.=&do_asm_rule($des_enc_obj,$des_enc_src);
+                       }
                }
        if (($bf_enc_obj ne "") && ($_ eq "CRYPTO"))
                {
@@ -820,11 +840,6 @@ foreach (values %lib_nam)
                $lib_obj =~ s/\s(\S*\/md5_dgst\S*)/ $1 \$(MD5_ASM_OBJ)/;
                $rules.=&do_asm_rule($md5_asm_obj,$md5_asm_src);
                }
-       if (($sha1_asm_obj ne "") && ($_ eq "CRYPTO"))
-               {
-               $lib_obj =~ s/\s(\S*\/sha1dgst\S*)/ $1 \$(SHA1_ASM_OBJ)/;
-               $rules.=&do_asm_rule($sha1_asm_obj,$sha1_asm_src);
-               }
        if (($rmd160_asm_obj ne "") && ($_ eq "CRYPTO"))
                {
                $lib_obj =~ s/\s(\S*\/rmd_dgst\S*)/ $1 \$(RMD160_ASM_OBJ)/;
@@ -858,9 +873,19 @@ EOF
 $defs.=&do_defs("T_EXE",$test,"\$(TEST_D)",$exep);
 foreach (split(/\s+/,$test))
        {
+       my $t_libs;
        $t=&bname($_);
+       if ($fipsdso && /fips-1.0/)
+               {
+               $t_libs = "\$(L_FIPS)";
+               }
+       else
+               {
+               $t_libs = "\$(L_LIBS)";
+               }
+       
        $tt="\$(OBJ_D)${o}$t${obj}";
-       $rules.=&do_link_rule("\$(TEST_D)$o$t$exep",$tt,"\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)");
+       $rules.=&do_link_rule("\$(TEST_D)$o$t$exep",$tt,"\$(LIBS_DEP)","$t_libs \$(EX_LIBS)");
        }
 
 $defs.=&do_defs("E_SHLIB",$engines,"\$(ENG_D)",$shlibp);
@@ -917,7 +942,7 @@ if ($fips)
        $rules.= &do_rlink_rule("\$(O_FIPSCANISTER)", "\$(OBJ_D)${o}fips_start$obj", "\$(FIPSOBJ)", "\$(OBJ_D)${o}fips_end$obj", "\$(FIPS_SHA1_EXE)", "") if $fipscanisterbuild;
        $rules.=&do_link_rule("\$(PREMAIN_DSO_EXE)","\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj \$(CRYPTOOBJ) \$(O_FIPSCANISTER)","","\$(EX_LIBS)", 1);
        
-       $rules.=&do_link_rule("\$(FIPS_SHA1_EXE)","\$(OBJ_D)${o}fips_standalone_sha1$obj \$(OBJ_D)${o}sha1dgst$obj","","", 1);
+       $rules.=&do_link_rule("\$(FIPS_SHA1_EXE)","\$(OBJ_D)${o}fips_standalone_sha1$obj \$(OBJ_D)${o}sha1dgst$obj \$(SHA1_ASM_OBJ)","","", 1);
        }
 
 $rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)",0);
@@ -1067,6 +1092,7 @@ sub do_defs
                elsif ($_ =~ /RC5_ENC/) { $t="$_ "; }
                elsif ($_ =~ /MD5_ASM/) { $t="$_ "; }
                elsif ($_ =~ /SHA1_ASM/){ $t="$_ "; }
+               elsif ($_ =~ /AES_ASM/){ $t="$_ "; }
                elsif ($_ =~ /RMD160_ASM/){ $t="$_ "; }
                elsif ($_ =~ /CPUID_ASM/){ $t="$_ "; }
                else    { $t="$location${o}$_$pf "; }
index 99022058392e6a3f8125175ca8300d4ab2c304aa..6f64f3abf4a21d8af3d43d84adedbb25bf1239d1 100644 (file)
@@ -180,6 +180,7 @@ if ($nasm) {
        $afile='/Fo';
 }
 
+$aes_asm_obj='';
 $bn_asm_obj='';
 $bn_asm_src='';
 $des_enc_obj='';
@@ -187,8 +188,10 @@ $des_enc_src='';
 $bf_enc_obj='';
 $bf_enc_src='';
 
-if (!$no_asm && !$fips)
+if (!$no_asm)
        {
+       $aes_asm_obj='crypto\aes\asm\a_win32.obj';
+       $aes_asm_src='crypto\aes\asm\a_win32.asm';
        $bn_asm_obj='crypto\bn\asm\bn_win32.obj';
        $bn_asm_src='crypto\bn\asm\bn_win32.asm';
        $des_enc_obj='crypto\des\asm\d_win32.obj crypto\des\asm\y_win32.obj';
@@ -207,7 +210,7 @@ if (!$no_asm && !$fips)
        $sha1_asm_src='crypto\sha\asm\s1_win32.asm';
        $rmd160_asm_obj='crypto\ripemd\asm\rm_win32.obj';
        $rmd160_asm_src='crypto\ripemd\asm\rm_win32.asm';
-       $cflags.=" -DBN_ASM -DMD5_ASM -DSHA1_ASM -DRMD160_ASM";
+       $cflags.=" -DAES_ASM -DBN_ASM -DMD5_ASM -DSHA1_ASM -DRMD160_ASM";
        }
 
 if ($shlib && $FLAVOR !~ /CE/)