diff --git a/include/crypto_types.h b/include/crypto_types.h
index f23251df14d1b34be58f3b0c800d8bd14bc3e5a5..f30da6ec46acfba4b3ae09f5c2ee1a3e18d867a5 100644
--- a/include/crypto_types.h
+++ b/include/crypto_types.h
@@ -6,19 +6,42 @@
 #define CRYPTO_TYPES_H_INCLUDED
 
 #ifdef PIKE
-#include "pike_types.h"
-#include "global.h"
-#define UINT32 unsigned INT32
-#define UINT16 unsigned INT16
-#define UINT8 unsigned INT8
+# include "pike_types.h"
+# include "global.h"
+# define UINT32 unsigned INT32
+# define UINT16 unsigned INT16
+# define UINT8 unsigned INT8
 #else  /* !PIKE */
-#ifdef LSH
-#include "lsh_types.h"
-#else /* !LSH */
-#define UINT32 unsigned long
-#define UINT16 unsigned short
-#define UINT8 unsigned char
-#endif
+
+# ifdef LSH
+#  ifdef HAVE_CONFIG_H
+#   include "config.h"
+#  endif
+#  if SIZEOF_SHORT >= 4
+#   define UINT32 unsigned short
+#  elif SIZEOF_INT >= 4
+#   define UINT32 unsigned int
+#  elif SIZEOF_LONG >= 4
+#   define UINT32 unsigned long
+#  else
+#   error Ledsen error
+#  endif /* UINT32 */
+
+#  if SIZEOF_SHORT >= 2
+#   define UINT16 unsigned short
+#  elif SIZEOF_INT >= 2
+#   define UINT16 unsigned int
+#  else
+#   error Ledsen error
+#  endif  /* UINT16 */
+
+#  define UINT8 unsigned char
+
+# else /* !LSH */
+#  define UINT32 unsigned long
+#  define UINT16 unsigned short
+#  define UINT8 unsigned char
+# endif /* !PIKE */
 #endif
 
 #endif /* CRYPTO_TYPES_H_INCLUDED */