staging: crypto: skein: allow building statically
authorJason Cooper <jason@lakedaemon.net>
Mon, 24 Mar 2014 02:32:49 +0000 (02:32 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 18 Apr 2014 22:46:48 +0000 (15:46 -0700)
These are the minimum changes required to get the code to build
statically in the kernel.  It's necessary to do this first so that we
can empirically determine that future cleanup patches aren't changing
the generated object code.

Signed-off-by: Jason Cooper <jason@lakedaemon.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
18 files changed:
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/skein/CMakeLists.txt [deleted file]
drivers/staging/skein/Kconfig [new file with mode: 0644]
drivers/staging/skein/Makefile [new file with mode: 0644]
drivers/staging/skein/include/brg_types.h
drivers/staging/skein/include/skein.h
drivers/staging/skein/include/skeinApi.h
drivers/staging/skein/include/skein_port.h
drivers/staging/skein/include/threefishApi.h
drivers/staging/skein/skein.c
drivers/staging/skein/skeinApi.c
drivers/staging/skein/skeinBlockNo3F.c
drivers/staging/skein/skein_block.c
drivers/staging/skein/threefish1024Block.c
drivers/staging/skein/threefish256Block.c
drivers/staging/skein/threefish512Block.c
drivers/staging/skein/threefishApi.c

index ea5efb426f75f013708ab35f94627eb5204e9ebe..b597165092f8ab6d897ab3a6fa3b3fd14ab809a7 100644 (file)
@@ -146,6 +146,8 @@ source "drivers/staging/gs_fpgaboot/Kconfig"
 
 source "drivers/staging/nokia_h4p/Kconfig"
 
+source "drivers/staging/skein/Kconfig"
+
 source "drivers/staging/unisys/Kconfig"
 
 endif # STAGING
index 86e020c2ad0deae1e615ec30ec77fdb592eae0d8..3860be7ee90d6e121a90d72b03922411437f2aac 100644 (file)
@@ -65,4 +65,5 @@ obj-$(CONFIG_DGAP)                    += dgap/
 obj-$(CONFIG_MTD_SPINAND_MT29F)        += mt29f_spinand/
 obj-$(CONFIG_GS_FPGABOOT)      += gs_fpgaboot/
 obj-$(CONFIG_BT_NOKIA_H4P)     += nokia_h4p/
+obj-$(CONFIG_CRYPTO_SKEIN)     += skein/
 obj-$(CONFIG_UNISYSSPAR)       += unisys/
diff --git a/drivers/staging/skein/CMakeLists.txt b/drivers/staging/skein/CMakeLists.txt
deleted file mode 100755 (executable)
index 604aaa3..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-cmake_minimum_required (VERSION 2.6)
-
-include_directories (${CMAKE_CURRENT_SOURCE_DIR}/include)
-
-# set(skeinBlock_src skein_block.c)
-set(skeinBlock_src skeinBlockNo3F.c)
-
-set(skein_src 
-    ${skeinBlock_src}
-    skein.c
-    skeinApi.c
-    )
-
-set(threefish_src
-    threefishApi.c
-    threefish256Block.c
-    threefish512Block.c
-    threefish1024Block.c
-    )
-set(s3f_src ${skein_src} ${threefish_src})
-
-add_library(skein3fish SHARED ${s3f_src})
-set_target_properties(skein3fish PROPERTIES VERSION ${VERSION} SOVERSION ${SOVERSION})
-target_link_libraries(skein3fish ${LIBS})
-
-install(TARGETS skein3fish DESTINATION ${LIBDIRNAME})
-
diff --git a/drivers/staging/skein/Kconfig b/drivers/staging/skein/Kconfig
new file mode 100644 (file)
index 0000000..8f5a72a
--- /dev/null
@@ -0,0 +1,32 @@
+config CRYPTO_SKEIN
+       bool "Skein digest algorithm"
+       depends on (X86 || UML_X86) && 64BIT
+       select CRYPTO_THREEFISH
+       select CRYPTO_HASH
+       help
+         Skein secure hash algorithm is one of 5 finalists from the NIST SHA3
+         competition.
+
+         Skein is optimized for modern, 64bit processors and is highly
+         customizable.  See:
+
+         http://www.skein-hash.info/sites/default/files/skein1.3.pdf
+
+         for more information.  This module depends on the threefish block
+         cipher module.
+
+config CRYPTO_THREEFISH
+       bool "Threefish tweakable block cipher"
+       depends on (X86 || UML_X86) && 64BIT
+       select CRYPTO_ALGAPI
+       help
+         Threefish cipher algorithm is the tweakable block cipher underneath
+         the Skein family of secure hash algorithms.  Skein is one of 5
+         finalists from the NIST SHA3 competition.
+
+         Skein is optimized for modern, 64bit processors and is highly
+         customizable.  See:
+
+         http://www.skein-hash.info/sites/default/files/skein1.3.pdf
+
+         for more information.
diff --git a/drivers/staging/skein/Makefile b/drivers/staging/skein/Makefile
new file mode 100644 (file)
index 0000000..2bb386e
--- /dev/null
@@ -0,0 +1,13 @@
+#
+# Makefile for the skein secure hash algorithm
+#
+subdir-ccflags-y := -I$(src)/include/
+
+obj-$(CONFIG_CRYPTO_SKEIN) +=   skein.o \
+                               skeinApi.o \
+                               skein_block.o
+
+obj-$(CONFIG_CRYPTO_THREEFISH) += threefish1024Block.o \
+                                 threefish256Block.o \
+                                 threefish512Block.o \
+                                 threefishApi.o
index d6d6cdab9fbfdad6dd3e264d557d3aee8b1849cf..56064e9b656a5f9a375178bb575d13840386344b 100644 (file)
 extern "C" {
 #endif
 
-#include <limits.h>
-
 #ifndef BRG_UI8
 #  define BRG_UI8
-#  if UCHAR_MAX == 255u
      typedef unsigned char uint_8t;
-#  else
-#    error Please define uint_8t as an 8-bit unsigned integer type in brg_types.h
-#  endif
 #endif
 
 #ifndef BRG_UI16
 #  define BRG_UI16
-#  if USHRT_MAX == 65535u
      typedef unsigned short uint_16t;
-#  else
-#    error Please define uint_16t as a 16-bit unsigned short type in brg_types.h
-#  endif
 #endif
 
 #ifndef BRG_UI32
 #  define BRG_UI32
-#  if UINT_MAX == 4294967295u
 #    define li_32(h) 0x##h##u
      typedef unsigned int uint_32t;
-#  elif ULONG_MAX == 4294967295u
-#    define li_32(h) 0x##h##ul
-     typedef unsigned long uint_32t;
-#  elif defined( _CRAY )
-#    error This code needs 32-bit data types, which Cray machines do not provide
-#  else
-#    error Please define uint_32t as a 32-bit unsigned integer type in brg_types.h
-#  endif
 #endif
 
 #ifndef BRG_UI64
-#  if defined( __BORLANDC__ ) && !defined( __MSDOS__ )
-#    define BRG_UI64
-#    define li_64(h) 0x##h##ui64
-     typedef unsigned __int64 uint_64t;
-#  elif defined( _MSC_VER ) && ( _MSC_VER < 1300 )    /* 1300 == VC++ 7.0 */
-#    define BRG_UI64
-#    define li_64(h) 0x##h##ui64
-     typedef unsigned __int64 uint_64t;
-#  elif defined( __sun ) && defined(ULONG_MAX) && ULONG_MAX == 0xfffffffful
-#    define BRG_UI64
-#    define li_64(h) 0x##h##ull
-     typedef unsigned long long uint_64t;
-#  elif defined( UINT_MAX ) && UINT_MAX > 4294967295u
-#    if UINT_MAX == 18446744073709551615u
-#      define BRG_UI64
-#      define li_64(h) 0x##h##u
-       typedef unsigned int uint_64t;
-#    endif
-#  elif defined( ULONG_MAX ) && ULONG_MAX > 4294967295u
-#    if ULONG_MAX == 18446744073709551615ul
-#      define BRG_UI64
-#      define li_64(h) 0x##h##ul
-       typedef unsigned long uint_64t;
-#    endif
-#  elif defined( ULLONG_MAX ) && ULLONG_MAX > 4294967295u
-#    if ULLONG_MAX == 18446744073709551615ull
-#      define BRG_UI64
-#      define li_64(h) 0x##h##ull
-       typedef unsigned long long uint_64t;
-#    endif
-#  elif defined( ULONG_LONG_MAX ) && ULONG_LONG_MAX > 4294967295u
-#    if ULONG_LONG_MAX == 18446744073709551615ull
 #      define BRG_UI64
 #      define li_64(h) 0x##h##ull
        typedef unsigned long long uint_64t;
-#    endif
-#  elif defined(__GNUC__)  /* DLW: avoid mingw problem with -ansi */
-#      define BRG_UI64
-#      define li_64(h) 0x##h##ull
-       typedef unsigned long long uint_64t;
-#  endif
 #endif
 
 #if defined( NEED_UINT_64T ) && !defined( BRG_UI64 )
index f62d0deed17e2b700e53afb7b3e1f187e2fee585..fc9d0a0a9c0ae6a8ae62cae7b1715903e86e7255 100644 (file)
@@ -261,18 +261,8 @@ int  Skein1024_Output   (Skein1024_Ctxt_t *ctx, u08b_t * hashVal);
 #define Skein_Show_Key(bits,ctx,key,keyBytes)
 #endif
 
-#ifndef SKEIN_ERR_CHECK        /* run-time checks (e.g., bad params, uninitialized context)? */
 #define Skein_Assert(x,retCode)/* default: ignore all Asserts, for performance */
 #define Skein_assert(x)
-#elif   defined(SKEIN_ASSERT)
-#include <assert.h>     
-#define Skein_Assert(x,retCode) assert(x) 
-#define Skein_assert(x)         assert(x) 
-#else
-#include <assert.h>     
-#define Skein_Assert(x,retCode) { if (!(x)) return retCode; } /*  caller  error */
-#define Skein_assert(x)         assert(x)                     /* internal error */
-#endif
 
 /*****************************************************************
 ** Skein block function constants (shared across Ref and Opt code)
index 19c3225460fcabe9f588ee0b1763abf6fb0a82c3..734d27b79f0107854e6ad14ea9df00342d3dce15 100755 (executable)
@@ -78,8 +78,8 @@ OTHER DEALINGS IN THE SOFTWARE.
  * 
  */
 
+#include <linux/types.h>
 #include <skein.h>
-#include <stdint.h>
 
 #ifdef __cplusplus
 extern "C"
index 659a9486cb272199a242f737747720b3b0db61e9..f2e18a1f34b46e3ff5372f4649d2f52765e2f86e 100644 (file)
@@ -44,24 +44,10 @@ typedef uint_64t        u64b_t;             /* 64-bit unsigned integer */
  * platform-specific code instead (e.g., for big-endian CPUs).
  *
  */
-#ifndef SKEIN_NEED_SWAP /* compile-time "override" for endianness? */
-
-#include <brg_endian.h>              /* get endianness selection */
-#if   PLATFORM_BYTE_ORDER == IS_BIG_ENDIAN
-    /* here for big-endian CPUs */
-#define SKEIN_NEED_SWAP   (1)
-#elif PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN
-    /* here for x86 and x86-64 CPUs (and other detected little-endian CPUs) */
 #define SKEIN_NEED_SWAP   (0)
-#if   PLATFORM_MUST_ALIGN == 0              /* ok to use "fast" versions? */
+/* below two prototype assume we are handed aligned data */
 #define Skein_Put64_LSB_First(dst08,src64,bCnt) memcpy(dst08,src64,bCnt)
 #define Skein_Get64_LSB_First(dst64,src08,wCnt) memcpy(dst64,src08,8*(wCnt))
-#endif
-#else
-#error "Skein needs endianness setting!"
-#endif
-
-#endif /* ifndef SKEIN_NEED_SWAP */
 
 /*
  ******************************************************************
index 85afd72fe98780f05b9038f92c31a0f293486d81..dae270cf71d3e3084e308eeb0b13317dbcdb4fdd 100644 (file)
@@ -28,8 +28,8 @@
 @endcode
  */
 
+#include <linux/types.h>
 #include <skein.h>
-#include <stdint.h>
 
 #define KeyScheduleConst 0x1BD11BDAA9FC1A22L
 
index 76933371183ad2da4a028433b886410a6a6eaf9c..670c5b138c2b755aee6b65729bfd2e43fe04cdf1 100644 (file)
@@ -10,7 +10,7 @@
 
 #define  SKEIN_PORT_CODE /* instantiate any code in skein_port.h */
 
-#include <string.h>       /* get the memcpy/memset functions */
+#include <linux/string.h>       /* get the memcpy/memset functions */
 #include <skein.h> /* get the Skein API definitions   */
 #include <skein_iv.h>    /* get precomputed IVs */
 
index 7b963758d32cf7c6ac12d9aa9549faa74e45973f..579b92efbf65d816abf5c4716f6588e98fbdce2b 100755 (executable)
@@ -24,10 +24,8 @@ OTHER DEALINGS IN THE SOFTWARE.
 
 */
 
-#define SKEIN_ERR_CHECK 1
+#include <linux/string.h>
 #include <skeinApi.h>
-#include <string.h>
-#include <stdio.h>
 
 int skeinCtxPrepare(SkeinCtx_t* ctx, SkeinSize_t size)
 {
index bf4f2bf33ebf8e91e2fd0b1bca152dd43dd58955..4e73c8b7caa2a3b775ea1d393da9e49e61c0690e 100644 (file)
@@ -1,5 +1,5 @@
 
-#include <string.h>
+#include <linux/string.h>
 #include <skein.h>
 #include <threefishApi.h>
 
index af79218548ae0140f8d36fe5555bd3a7eb9d167e..99348dae282ab4560cd8a8bdfc26f432e651c787 100644 (file)
@@ -14,7 +14,7 @@
 **
 ************************************************************************/
 
-#include <string.h>
+#include <linux/string.h>
 #include <skein.h>
 
 #ifndef SKEIN_USE_ASM
index 8b43586f46bc791d76e2207401dc7befa1776bc1..58a8c26a1f6f1c5e6fe87a8c3578dbeb62ce16f4 100644 (file)
@@ -1,6 +1,5 @@
+#include <linux/string.h>
 #include <threefishApi.h>
-#include <stdint.h>
-#include <string.h>
 
 
 void threefishEncrypt1024(ThreefishKey_t* keyCtx, uint64_t* input, uint64_t* output)
index db2b81978c91dcb1edafc7f1c3c3e524700b4bac..a7e06f905186bd7c2a5b58c5587c3fc6229f1314 100644 (file)
@@ -1,6 +1,5 @@
+#include <linux/string.h>
 #include <threefishApi.h>
-#include <stdint.h>
-#include <string.h>
 
 
 void threefishEncrypt256(ThreefishKey_t* keyCtx, uint64_t* input, uint64_t* output)
index 4fe708fea06608e6842a7b2a752f089cb75f5e95..3cbfcd9af5c9d451685a7c4290fda707b24718f9 100644 (file)
@@ -1,6 +1,5 @@
+#include <linux/string.h>
 #include <threefishApi.h>
-#include <stdint.h>
-#include <string.h>
 
 
 void threefishEncrypt512(ThreefishKey_t* keyCtx, uint64_t* input, uint64_t* output)
index 5afa0338aef48da119668dc93a1d40ca3b2d8061..968d3d21fe61dd686f305131d4266ec28e59600d 100644 (file)
@@ -1,8 +1,7 @@
 
 
+#include <linux/string.h>
 #include <threefishApi.h>
-#include <stdlib.h>
-#include <string.h>
 
 void threefishSetKey(ThreefishKey_t* keyCtx, ThreefishSize_t stateSize,
                      uint64_t* keyData, uint64_t* tweak)