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>
This commit is contained in:
committed by
Adam Langley
parent
58f90951eb
commit
98ad22ec7a
+14
-1
@@ -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 @@ struct st_CRYPTO_EX_DATA_IMPL {
|
||||
};
|
||||
|
||||
|
||||
#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
|
||||
|
||||
+21
-16
@@ -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 @@ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
|
||||
}
|
||||
|
||||
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 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const unsigned char *in,
|
||||
#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 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const unsigned char *in,
|
||||
#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 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const uint8_t *in,
|
||||
#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 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const uint8_t *in,
|
||||
#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;
|
||||
|
||||
@@ -185,15 +185,6 @@ struct ccm128_context {
|
||||
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. */
|
||||
|
||||
+19
-17
@@ -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 SHA384_Init(SHA512_CTX *sha) {
|
||||
|
||||
|
||||
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 @@ int SHA512_Update(SHA512_CTX *c, const void *in_data, size_t len) {
|
||||
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++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user