Changeset View
Changeset View
Standalone View
Standalone View
src/secp256k1/src/util.h
Show First 20 Lines • Show All 173 Lines • ▼ Show 20 Lines | |||||
# if defined(__GNUC__) | # if defined(__GNUC__) | ||||
# define SECP256K1_GNUC_EXT __extension__ | # define SECP256K1_GNUC_EXT __extension__ | ||||
# else | # else | ||||
# define SECP256K1_GNUC_EXT | # define SECP256K1_GNUC_EXT | ||||
# endif | # endif | ||||
SECP256K1_GNUC_EXT typedef unsigned __int128 uint128_t; | SECP256K1_GNUC_EXT typedef unsigned __int128 uint128_t; | ||||
#endif | #endif | ||||
#if defined(__BYTE_ORDER__) | |||||
# if defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && !defined(SECP256K1_LITTLE_ENDIAN) | |||||
# define SECP256K1_LITTLE_ENDIAN | |||||
# elif defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && !defined(SECP256K1_BIG_ENDIAN) | |||||
# define SECP256K1_BIG_ENDIAN | |||||
# endif | |||||
#endif | |||||
#if defined(_MSC_VER) && defined(_WIN32) && !defined(SECP256K1_LITTLE_ENDIAN) | |||||
# define SECP256K1_LITTLE_ENDIAN | |||||
#endif | |||||
#if defined(SECP256K1_LITTLE_ENDIAN) == defined(SECP256K1_BIG_ENDIAN) | |||||
# error Please make sure that either SECP256K1_LITTLE_ENDIAN or SECP256K1_BIG_ENDIAN is set, see src/util.h. | |||||
#endif | |||||
/* Zero memory if flag == 1. Flag must be 0 or 1. Constant time. */ | /* Zero memory if flag == 1. Flag must be 0 or 1. Constant time. */ | ||||
static SECP256K1_INLINE void memczero(void *s, size_t len, int flag) { | static SECP256K1_INLINE void memczero(void *s, size_t len, int flag) { | ||||
unsigned char *p = (unsigned char *)s; | unsigned char *p = (unsigned char *)s; | ||||
/* Access flag with a volatile-qualified lvalue. | /* Access flag with a volatile-qualified lvalue. | ||||
This prevents clang from figuring out (after inlining) that flag can | This prevents clang from figuring out (after inlining) that flag can | ||||
take only be 0 or 1, which leads to variable time code. */ | take only be 0 or 1, which leads to variable time code. */ | ||||
volatile int vflag = flag; | volatile int vflag = flag; | ||||
unsigned char mask = -(unsigned char) vflag; | unsigned char mask = -(unsigned char) vflag; | ||||
Show All 22 Lines |