Fix "integer constant is too large for 'long' type" errors. (Based on Piotr Sikora's change: https://boringssl-review.googlesource.com/#/c/1361) Change-Id: I7b62b81f4e4ef3064eee1b39334dc2e50d17f163 Reviewed-on: https://boringssl-review.googlesource.com/1641 Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/internal.h b/crypto/internal.h index 8464239..39d35ad 100644 --- a/crypto/internal.h +++ b/crypto/internal.h
@@ -109,7 +109,7 @@ #ifndef OPENSSL_HEADER_CRYPTO_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_INTERNAL_H -#include <openssl/base.h> +#include <openssl/ex_data.h> /* st_CRYPTO_EX_DATA_IMPL contains an ex_data implementation. See the comments @@ -128,6 +128,19 @@ }; +#if defined(OPENSSL_WINDOWS) +#define OPENSSL_U64(x) x##UI64 +#else + +#if defined(OPENSSL_64_BIT) +#define OPENSSL_U64(x) x##UL +#else +#define OPENSSL_U64(x) x##ULL +#endif + +#endif /* OPENSSL_WINDOWS */ + + #if defined(__cplusplus) } /* extern C */ #endif
diff --git a/crypto/modes/gcm.c b/crypto/modes/gcm.c index 065c457..96139a8 100644 --- a/crypto/modes/gcm.c +++ b/crypto/modes/gcm.c
@@ -54,6 +54,7 @@ #include <openssl/cpu.h> #include "internal.h" +#include "../internal.h" #if !defined(OPENSSL_NO_ASM) && \ @@ -70,17 +71,17 @@ #endif #define PACK(s) ((size_t)(s) << (sizeof(size_t) * 8 - 16)) -#define REDUCE1BIT(V) \ - do { \ - if (sizeof(size_t) == 8) { \ - uint64_t T = U64(0xe100000000000000) & (0 - (V.lo & 1)); \ - V.lo = (V.hi << 63) | (V.lo >> 1); \ - V.hi = (V.hi >> 1) ^ T; \ - } else { \ - uint32_t T = 0xe1000000U & (0 - (uint32_t)(V.lo & 1)); \ - V.lo = (V.hi << 63) | (V.lo >> 1); \ - V.hi = (V.hi >> 1) ^ ((uint64_t)T << 32); \ - } \ +#define REDUCE1BIT(V) \ + do { \ + if (sizeof(size_t) == 8) { \ + uint64_t T = OPENSSL_U64(0xe100000000000000) & (0 - (V.lo & 1)); \ + V.lo = (V.hi << 63) | (V.lo >> 1); \ + V.hi = (V.hi >> 1) ^ T; \ + } else { \ + uint32_t T = 0xe1000000U & (0 - (uint32_t)(V.lo & 1)); \ + V.lo = (V.hi << 63) | (V.lo >> 1); \ + V.hi = (V.hi >> 1) ^ ((uint64_t)T << 32); \ + } \ } while (0) @@ -542,7 +543,7 @@ } alen += len; - if (alen > (U64(1) << 61) || (sizeof(len) == 8 && alen < len)) { + if (alen > (OPENSSL_U64(1) << 61) || (sizeof(len) == 8 && alen < len)) { return 0; } ctx->len.u[0] = alen; @@ -608,7 +609,8 @@ #endif mlen += len; - if (mlen > ((U64(1) << 36) - 32) || (sizeof(len) == 8 && mlen < len)) { + if (mlen > ((OPENSSL_U64(1) << 36) - 32) || + (sizeof(len) == 8 && mlen < len)) { return 0; } ctx->len.u[1] = mlen; @@ -767,7 +769,8 @@ #endif mlen += len; - if (mlen > ((U64(1) << 36) - 32) || (sizeof(len) == 8 && mlen < len)) { + if (mlen > ((OPENSSL_U64(1) << 36) - 32) || + (sizeof(len) == 8 && mlen < len)) { return 0; } ctx->len.u[1] = mlen; @@ -932,7 +935,8 @@ #endif mlen += len; - if (mlen > ((U64(1) << 36) - 32) || (sizeof(len) == 8 && mlen < len)) { + if (mlen > ((OPENSSL_U64(1) << 36) - 32) || + (sizeof(len) == 8 && mlen < len)) { return 0; } ctx->len.u[1] = mlen; @@ -1041,7 +1045,8 @@ #endif mlen += len; - if (mlen > ((U64(1) << 36) - 32) || (sizeof(len) == 8 && mlen < len)) { + if (mlen > ((OPENSSL_U64(1) << 36) - 32) || + (sizeof(len) == 8 && mlen < len)) { return 0; } ctx->len.u[1] = mlen;
diff --git a/crypto/modes/internal.h b/crypto/modes/internal.h index 4659eab..9662e0d 100644 --- a/crypto/modes/internal.h +++ b/crypto/modes/internal.h
@@ -185,15 +185,6 @@ void *key; }; -#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) -#define U64(C) C##UI64 -#elif defined(__arch64__) -#define U64(C) C##UL -#else -#define U64(C) C##ULL -#endif - - #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64) /* crypto_gcm_clmul_enabled returns one if the CLMUL implementation of GCM is * used. */
diff --git a/crypto/sha/sha512.c b/crypto/sha/sha512.c index dcaac6f..884371a 100644 --- a/crypto/sha/sha512.c +++ b/crypto/sha/sha512.c
@@ -60,6 +60,8 @@ #include <openssl/mem.h> +#include "../internal.h" + /* IMPLEMENTATION NOTES. * @@ -92,14 +94,14 @@ #endif int SHA384_Init(SHA512_CTX *sha) { - sha->h[0] = 0xcbbb9d5dc1059ed8; - sha->h[1] = 0x629a292a367cd507; - sha->h[2] = 0x9159015a3070dd17; - sha->h[3] = 0x152fecd8f70e5939; - sha->h[4] = 0x67332667ffc00b31; - sha->h[5] = 0x8eb44a8768581511; - sha->h[6] = 0xdb0c2e0d64f98fa7; - sha->h[7] = 0x47b5481dbefa4fa4; + sha->h[0] = OPENSSL_U64(0xcbbb9d5dc1059ed8); + sha->h[1] = OPENSSL_U64(0x629a292a367cd507); + sha->h[2] = OPENSSL_U64(0x9159015a3070dd17); + sha->h[3] = OPENSSL_U64(0x152fecd8f70e5939); + sha->h[4] = OPENSSL_U64(0x67332667ffc00b31); + sha->h[5] = OPENSSL_U64(0x8eb44a8768581511); + sha->h[6] = OPENSSL_U64(0xdb0c2e0d64f98fa7); + sha->h[7] = OPENSSL_U64(0x47b5481dbefa4fa4); sha->Nl = 0; sha->Nh = 0; @@ -110,14 +112,14 @@ int SHA512_Init(SHA512_CTX *sha) { - sha->h[0] = 0x6a09e667f3bcc908; - sha->h[1] = 0xbb67ae8584caa73b; - sha->h[2] = 0x3c6ef372fe94f82b; - sha->h[3] = 0xa54ff53a5f1d36f1; - sha->h[4] = 0x510e527fade682d1; - sha->h[5] = 0x9b05688c2b3e6c1f; - sha->h[6] = 0x1f83d9abfb41bd6b; - sha->h[7] = 0x5be0cd19137e2179; + sha->h[0] = OPENSSL_U64(0x6a09e667f3bcc908); + sha->h[1] = OPENSSL_U64(0xbb67ae8584caa73b); + sha->h[2] = OPENSSL_U64(0x3c6ef372fe94f82b); + sha->h[3] = OPENSSL_U64(0xa54ff53a5f1d36f1); + sha->h[4] = OPENSSL_U64(0x510e527fade682d1); + sha->h[5] = OPENSSL_U64(0x9b05688c2b3e6c1f); + sha->h[6] = OPENSSL_U64(0x1f83d9abfb41bd6b); + sha->h[7] = OPENSSL_U64(0x5be0cd19137e2179); sha->Nl = 0; sha->Nh = 0; @@ -189,7 +191,7 @@ if (len == 0) return 1; - l = (c->Nl + (((uint64_t)len) << 3)) & 0xffffffffffffffff; + l = (c->Nl + (((uint64_t)len) << 3)) & OPENSSL_U64(0xffffffffffffffff); if (l < c->Nl) { c->Nh++; }