From 5de32f22e731ea151e1c5aac7703cde2573cb4a4 Mon Sep 17 00:00:00 2001 From: Amitay Isaacs Date: Mon, 29 Mar 2021 18:20:53 +1100 Subject: [PATCH] Use numbers definition of int128_t and uint128_t Signed-off-by: Amitay Isaacs Reviewed-by: Tomas Mraz Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/14784) --- crypto/bn/bn_div.c | 2 +- crypto/bn/bn_local.h | 5 +++-- crypto/ec/curve25519.c | 6 ++++-- crypto/ec/curve448/curve448utils.h | 6 ++++-- crypto/ec/curve448/word.h | 4 ++-- crypto/ec/ecp_nistp224.c | 8 +++----- crypto/ec/ecp_nistp256.c | 9 +++------ crypto/ec/ecp_nistp521.c | 8 +++----- crypto/poly1305/poly1305.c | 5 ++--- crypto/poly1305/poly1305_base2_44.c | 2 +- 10 files changed, 26 insertions(+), 29 deletions(-) diff --git a/crypto/bn/bn_div.c b/crypto/bn/bn_div.c index cf4309cdf4..b486e3411a 100644 --- a/crypto/bn/bn_div.c +++ b/crypto/bn/bn_div.c @@ -97,7 +97,7 @@ BN_ULONG bn_div_3_words(const BN_ULONG *m, BN_ULONG d1, BN_ULONG d0); */ # if BN_BITS2 == 64 && defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 # undef BN_ULLONG -# define BN_ULLONG __uint128_t +# define BN_ULLONG uint128_t # define BN_LLONG # endif diff --git a/crypto/bn/bn_local.h b/crypto/bn/bn_local.h index e93b7e9a0b..30863713d6 100644 --- a/crypto/bn/bn_local.h +++ b/crypto/bn/bn_local.h @@ -23,6 +23,7 @@ # include "crypto/bn.h" # include "internal/cryptlib.h" +# include "internal/numbers.h" /* * These preprocessor symbols control various aspects of the bignum headers @@ -375,9 +376,9 @@ struct bn_gencb_st { */ # if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 && \ (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG)) -# define BN_UMULT_HIGH(a,b) (((__uint128_t)(a)*(b))>>64) +# define BN_UMULT_HIGH(a,b) (((uint128_t)(a)*(b))>>64) # define BN_UMULT_LOHI(low,high,a,b) ({ \ - __uint128_t ret=(__uint128_t)(a)*(b); \ + uint128_t ret=(uint128_t)(a)*(b); \ (high)=ret>>64; (low)=ret; }) # elif defined(__alpha) && (defined(SIXTY_FOUR_BIT_LONG) || defined(SIXTY_FOUR_BIT)) # if defined(__DECC) diff --git a/crypto/ec/curve25519.c b/crypto/ec/curve25519.c index 3f24215047..a291e6f472 100644 --- a/crypto/ec/curve25519.c +++ b/crypto/ec/curve25519.c @@ -19,6 +19,8 @@ #include #include +#include "internal/numbers.h" + #if defined(X25519_ASM) && (defined(__x86_64) || defined(__x86_64__) || \ defined(_M_AMD64) || defined(_M_X64)) @@ -260,7 +262,7 @@ static void x25519_scalar_mulx(uint8_t out[32], const uint8_t scalar[32], #endif #if defined(X25519_ASM) \ - || ( (defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16) \ + || ( defined(INT128_MAX) \ && !defined(__sparc__) \ && (!defined(__SIZEOF_LONG__) || (__SIZEOF_LONG__ == 8)) \ && !(defined(__ANDROID__) && !defined(__clang__)) ) @@ -393,7 +395,7 @@ void x25519_fe51_mul121666(fe51 h, fe51 f); # define fe51_mul121666 x25519_fe51_mul121666 # else -typedef __uint128_t u128; +typedef uint128_t u128; static void fe51_mul(fe51 h, const fe51 f, const fe51 g) { diff --git a/crypto/ec/curve448/curve448utils.h b/crypto/ec/curve448/curve448utils.h index fa06cb02ec..fd8ae4de70 100644 --- a/crypto/ec/curve448/curve448utils.h +++ b/crypto/ec/curve448/curve448utils.h @@ -15,6 +15,8 @@ # include +# include "internal/numbers.h" + /* * Internal word types. Somewhat tricky. This could be decided separately per * platform. However, the structs do need to be all the same size and @@ -41,9 +43,9 @@ typedef int64_t c448_sword_t; /* "Boolean" type, will be set to all-zero or all-one (i.e. -1u) */ typedef uint64_t c448_bool_t; /* Double-word size for internal computations */ -typedef __uint128_t c448_dword_t; +typedef uint128_t c448_dword_t; /* Signed double-word size for internal computations */ -typedef __int128_t c448_dsword_t; +typedef int128_t c448_dsword_t; # elif C448_WORD_BITS == 32 /* Word size for internal computations */ typedef uint32_t c448_word_t; diff --git a/crypto/ec/curve448/word.h b/crypto/ec/curve448/word.h index d3e6ff863b..6e007c3735 100644 --- a/crypto/ec/curve448/word.h +++ b/crypto/ec/curve448/word.h @@ -22,10 +22,10 @@ # if (ARCH_WORD_BITS == 64) typedef uint64_t word_t, mask_t; -typedef __uint128_t dword_t; +typedef uint128_t dword_t; typedef int32_t hsword_t; typedef int64_t sword_t; -typedef __int128_t dsword_t; +typedef int128_t dsword_t; # elif (ARCH_WORD_BITS == 32) typedef uint32_t word_t, mask_t; typedef uint64_t dword_t; diff --git a/crypto/ec/ecp_nistp224.c b/crypto/ec/ecp_nistp224.c index c3dc0d9b7d..47f33825ad 100644 --- a/crypto/ec/ecp_nistp224.c +++ b/crypto/ec/ecp_nistp224.c @@ -43,11 +43,9 @@ #include #include "ec_local.h" -#if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 - /* even with gcc, the typedef won't work for 32-bit platforms */ -typedef __uint128_t uint128_t; /* nonstandard; implemented by gcc on 64-bit - * platforms */ -#else +#include "internal/numbers.h" + +#ifndef INT128_MAX # error "Your compiler doesn't appear to support 128-bit integer types" #endif diff --git a/crypto/ec/ecp_nistp256.c b/crypto/ec/ecp_nistp256.c index c865cd7766..67d2dce9b7 100644 --- a/crypto/ec/ecp_nistp256.c +++ b/crypto/ec/ecp_nistp256.c @@ -44,12 +44,9 @@ #include #include "ec_local.h" -#if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 - /* even with gcc, the typedef won't work for 32-bit platforms */ -typedef __uint128_t uint128_t; /* nonstandard; implemented by gcc on 64-bit - * platforms */ -typedef __int128_t int128_t; -#else +#include "internal/numbers.h" + +#ifndef INT128_MAX # error "Your compiler doesn't appear to support 128-bit integer types" #endif diff --git a/crypto/ec/ecp_nistp521.c b/crypto/ec/ecp_nistp521.c index 72468a1d42..694031b45d 100644 --- a/crypto/ec/ecp_nistp521.c +++ b/crypto/ec/ecp_nistp521.c @@ -43,11 +43,9 @@ #include #include "ec_local.h" -#if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 - /* even with gcc, the typedef won't work for 32-bit platforms */ -typedef __uint128_t uint128_t; /* nonstandard; implemented by gcc on 64-bit - * platforms */ -#else +#include "internal/numbers.h" + +#ifndef INT128_MAX # error "Your compiler doesn't appear to support 128-bit integer types" #endif diff --git a/crypto/poly1305/poly1305.c b/crypto/poly1305/poly1305.c index 127ce7da2f..be41a6d354 100644 --- a/crypto/poly1305/poly1305.c +++ b/crypto/poly1305/poly1305.c @@ -94,11 +94,10 @@ poly1305_blocks(void *ctx, const unsigned char *inp, size_t len, u32 padbit); (a ^ ((a ^ b) | ((a - b) ^ b))) >> (sizeof(a) * 8 - 1) \ ) -# if (defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16) && \ - (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__==8) +# if defined(INT64_MAX) && defined(INT128_MAX) typedef unsigned long u64; -typedef __uint128_t u128; +typedef uint128_t u128; typedef struct { u64 h[3]; diff --git a/crypto/poly1305/poly1305_base2_44.c b/crypto/poly1305/poly1305_base2_44.c index 92f73a43c8..3ed111d04a 100644 --- a/crypto/poly1305/poly1305_base2_44.c +++ b/crypto/poly1305/poly1305_base2_44.c @@ -18,7 +18,7 @@ typedef unsigned char u8; typedef unsigned int u32; typedef unsigned long u64; -typedef unsigned __int128 u128; +typedef uint128_t u128; typedef struct { u64 h[3];