Browse Source

Fix build on x32

* `CONSTPTR()` must be 32bit.
* `CRYPT_HASH_OVERFLOW` test operates on `unsigned long`, which is only
  32bit wide on x32.

Signed-off-by: Steffen Jaeckel <[email protected]>
Steffen Jaeckel 10 months ago
parent
commit
d96605b4b9
3 changed files with 6 additions and 2 deletions
  1. 3 0
      src/headers/tomcrypt_cfg.h
  2. 2 1
      src/headers/tomcrypt_private.h
  3. 1 1
      tests/multi_test.c

+ 3 - 0
src/headers/tomcrypt_cfg.h

@@ -91,6 +91,9 @@ LTC_EXPORT int   LTC_CALL XSTRCMP(const char *s1, const char *s2);
    #define ENDIAN_LITTLE
    #define ENDIAN_LITTLE
    #define ENDIAN_64BITWORD
    #define ENDIAN_64BITWORD
    #define LTC_FAST
    #define LTC_FAST
+   #if defined(_ILP32) || defined(__ILP32__)
+      #define ENDIAN_64BITWORD_X32
+   #endif
 #endif
 #endif
 
 
 /* detect PPC32 */
 /* detect PPC32 */

+ 2 - 1
src/headers/tomcrypt_private.h

@@ -11,7 +11,8 @@
 
 
 #define LTC_PAD_MASK       (0xF000U)
 #define LTC_PAD_MASK       (0xF000U)
 
 
-#if defined(ENDIAN_64BITWORD)
+/* only real 64bit, not x32 */
+#if defined(ENDIAN_64BITWORD) && !defined(ENDIAN_64BITWORD_X32)
    #define CONSTPTR(n) CONST64(n)
    #define CONSTPTR(n) CONST64(n)
 #else
 #else
    #define CONSTPTR(n) n ## uL
    #define CONSTPTR(n) n ## uL

+ 1 - 1
tests/multi_test.c

@@ -15,7 +15,7 @@ int multi_test(void)
 
 
 /* HASH testing */
 /* HASH testing */
    len = sizeof(buf[0]);
    len = sizeof(buf[0]);
-#if defined(ENDIAN_32BITWORD) || defined(_WIN32)
+#if defined(ENDIAN_32BITWORD) || defined(_WIN32) || defined(ENDIAN_64BITWORD_X32)
    len2 = 0x80000000UL;
    len2 = 0x80000000UL;
 #else
 #else
    /* Check against the max. input limit of SHA-1 as of RFC8017 */
    /* Check against the max. input limit of SHA-1 as of RFC8017 */