VxWorks support. OpenSSL-fips-1_2-stable OpenSSL-fips-1_2_3
authorDr. Stephen Henson <steve@openssl.org>
Sun, 25 Sep 2011 18:11:42 +0000 (18:11 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sun, 25 Sep 2011 18:11:42 +0000 (18:11 +0000)
Configure
apps/speed.c
config
crypto/rand/rand_unix.c
crypto/rand/randfile.c
crypto/ui/ui_openssl.c
fips/fips_canister.c
fips/mkfipsscr.pl

index 0a8a27d8269d36c9cda54879c03c29864020ea35..c857bed33a01fce77ddc64ee29d8bb6d68b54ce7 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -524,6 +524,8 @@ my %table=(
 "OS2-EMX", "gcc::::::::",
 
 ##### VxWorks for various targets
+"vxworks-ppc60x","ccppc:-D_REENTRANT -mrtp -mhard-float -mstrict-align -fno-implicit-fp -DPPC32_fp60x -O2 -fstrength-reduce -fno-builtin -fno-strict-aliasing -Wall -DCPU=PPC32 -DTOOL_FAMILY=gnu -DTOOL=gnu -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/usr/h/wrn/coreip:::VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/common:::linux_ppc32.o:::::::::::::::ranlibppc:",
+"vxworks-ppcgen","ccppc:-D_REENTRANT -mrtp -msoft-float -mstrict-align -O1 -fno-builtin -fno-strict-aliasing -Wall -DCPU=PPC32 -DTOOL_FAMILY=gnu -DTOOL=gnu -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/usr/h/wrn/coreip:::VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/sfcommon:::linux_ppc32.o:::::::::::::::ranlibppc:",
 "vxworks-ppc405","ccppc:-g -msoft-float -mlongcall -DCPU=PPC405 -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
 "vxworks-ppc750","ccppc:-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h \$(DEBUG_FLAG):::VXWORKS:-r:::::",
 "vxworks-ppc750-debug","ccppc:-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG -g:::VXWORKS:-r:::::",
index 85f559ed81e45dca03443bfffd6d5f72cddfc36b..bfe9103aac0111b902bf8f6dda90afc659c0c9d1 100644 (file)
 # endif
 #endif
 
-#if !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_OS2) && !defined(OPENSSL_SYS_NETWARE)
+#if !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_OS2) && !defined(OPENSSL_SYS_NETWARE) && !defined(OPENSSL_SYS_VXWORKS)
 # define HAVE_FORK 1
 #endif
 
diff --git a/config b/config
index 91231f98f0dc91348b8f5160622b922d416e39c9..b8d81e4a8a2ba7d8bf7fc66b60329e20b4f58b3d 100755 (executable)
--- a/config
+++ b/config
@@ -362,6 +362,10 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
     NONSTOP_KERNEL*)
        echo "nsr-tandem-nsk"; exit 0;
        ;;
+
+    vxworks*)
+       echo "${MACHINE}-whatever-vxworks"; exit 0;
+       ;;
 esac
 
 #
@@ -524,6 +528,8 @@ case "$GUESSOS" in
        OUT="linux-ppc64"
        ;;
   ppc-*-linux2) OUT="linux-ppc" ;;
+  ppc60x-*-vxworks*) OUT="vxworks-ppc60x" ;;
+  ppcgen-*-vxworks*) OUT="vxworks-ppcgen" ;;
   ia64-*-linux?) OUT="linux-ia64" ;;
   sparc64-*-linux2)
        OUT="linux64-sparcv9" ;;
index 6c2be5cb966dfcdbb3618939279fe110e8961211..41259f3697192eb93b14dbec62280f1c9c3309c7 100644 (file)
@@ -323,8 +323,43 @@ int RAND_poll(void)
 
 
 #if defined(OPENSSL_SYS_VXWORKS)
+/* Note: the existence of /dev/urandom on VxWorks platforms is uncommon
+*  however we check for one and use it if found for those cases where
+* it is present. */
 int RAND_poll(void)
-       {
+{
+       unsigned long l;
+#ifdef DEVRANDOM
+       unsigned char buf[ENTROPY_NEEDED];
+       int n = 0, r, fd;
+
+       if ((fd = open("/dev/urandom", O_RDONLY, 0)) >= 0)
+               {
+               do
+                       {
+                       r = read(fd,(unsigned char *)buf+n, ENTROPY_NEEDED-n);
+                       if (r > 0)
+                               n += r;
+                       }
+               while ((r > 0 || errno == EINTR) && n < ENTROPY_NEEDED);
+
+               close(fd);
+               }
+
+       if (n > 0)
+               {
+               RAND_add(buf,sizeof buf,(double)n);
+               OPENSSL_cleanse(buf,n);
+               }
+#endif
+
+       l=time(NULL);
+       RAND_add(&l,sizeof(l),0.0);
+
+#if defined(DEVRANDOM)
+       return 1;
+#else
        return 0;
-       }
+#endif
+}
 #endif
index cec5880a8f477805578b00a9967deb527125d99d..abe580af4ae41164b8d3da050f28d66931433968 100644 (file)
@@ -56,8 +56,6 @@
  * [including the GNU Public Licence.]
  */
 
-/* We need to define this to get macros like S_IFBLK and S_IFCHR */
-#define _XOPEN_SOURCE 500
 
 #include <errno.h>
 #include <stdio.h>
 #include <openssl/rand.h>
 #include <openssl/buffer.h>
 
+#if !defined(OPENSSL_SYS_VXWORKS)
+/* We need to define this to get macros like S_IFBLK and S_IFCHR */
+# define _XOPEN_SOURCE 500
+#endif
 #ifdef OPENSSL_SYS_VMS
 #include <unixio.h>
 #endif
index 1f23a45a339bc018eb27cb501076e5440f9bb536..10111efbf238e15cc5f3ecff2cdfa1e5025ade11 100644 (file)
  * sigaction and fileno included. -pedantic would be more appropriate for
  * the intended purposes, but we can't prevent users from adding -ansi.
  */
-#define _POSIX_C_SOURCE 1
+#if !defined(OPENSSL_SYS_VXWORKS)
+# define _POSIX_C_SOURCE 1
+#endif
 #include <signal.h>
 #include <stdio.h>
 #include <string.h>
index 174466189b480bd80bd79a4f400eecd6545f30c8..4b0a9e814b0328ac5c0b04d616728def9d1d5502 100644 (file)
@@ -174,6 +174,8 @@ void *FIPS_ref_point()
 # else
     return (void *)FIPS_ref_point;
 # endif
+#elif  defined(__vxworks)
+    return (void *)FIPS_ref_point;
 /*
  * In case you wonder why there is no #ifdef __linux. All Linux targets
  * are GCC-based and therefore are covered by instruction_pointer above
index 8f1275c7b5b9fdb2e04d3a3a6d2b50906651e1cf..16d4842aec267b06559a4803434fef6b7101d5a3 100644 (file)
@@ -294,6 +294,10 @@ foreach (@ARGV)
                {
                $win32 = 1;
                }
+       if ($_ eq "--vxworks")
+               {
+               $vxworks = 1;
+               }
        elsif ($_ eq "--onedir")
                {
                $onedir = 1;
@@ -332,6 +336,11 @@ foreach (@ARGV)
                }
        }
 
+if ($win32 && $vxworks) {
+    print STDERR "Can't specify both --win32 and --vxworks\n";
+    exit(1);
+}
+
 $tvdir = "." unless defined $tvdir;
 
 if ($win32)
@@ -356,6 +365,21 @@ rem Test vector run script
 rem Auto generated by mkfipsscr.pl script
 rem Do not edit
 
+END
+
+       }
+elsif ($vxworks)
+       {
+        # Always assume onedir.
+        $tprefix = "" unless defined $tprefix;
+       $outfile = "fipstests" unless defined $outfile;
+       open(OUT, ">$outfile");
+
+       print OUT <<END;
+# Test vector run script
+# Auto generated by mkfipsscr.pl script
+# Do not edit
+
 END
 
        }
@@ -457,6 +481,16 @@ sub test_dir
 echo Running tests in $req
 if exist "$rsp" rd /s /q "$rsp"
 md "$rsp"
+END
+               }
+       elsif ($vxworks)
+               {
+               print OUT <<END;
+
+echo Running tests in "$req"
+rm -r "$rsp"
+mkdir "$rsp"
+
 END
                }
        else
@@ -484,6 +518,10 @@ sub test_line
                        $rsp =~ tr|/|\\|;
                        print OUT "$tprefix$tcmd \"$req\" \"$rsp\"\n";
                        }
+               elsif ($vxworks)
+                       {
+                       print OUT "run $tprefix$tcmd \"$req\" \"$rsp\"\n";
+                       }
                else
                        {
                        print OUT <<END;
@@ -518,7 +556,11 @@ END
                {
                $req =~ tr|/|\\|;
                $rsp =~ tr|/|\\|;
-       print OUT "$tprefix$tcmd < \"$req\" > \"$rsp\"\n";
+               print OUT "$tprefix$tcmd < \"$req\" > \"$rsp\"\n";
+               }
+       elsif ($vxworks)
+               {
+               print OUT "run $tprefix$tcmd \"$req\" \"$rsp\"\n";
                }
        else
                {