mirror of
https://github.com/sudo-project/sudo.git
synced 2025-08-22 09:57:41 +00:00
For big endian architectures just use memcpy() instead of BE macros
in a loop.
This commit is contained in:
parent
35375a2b7e
commit
89759fa36c
1
MANIFEST
1
MANIFEST
@ -51,6 +51,7 @@ compat/charclass.h
|
|||||||
compat/closefrom.c
|
compat/closefrom.c
|
||||||
compat/dlfcn.h
|
compat/dlfcn.h
|
||||||
compat/dlopen.c
|
compat/dlopen.c
|
||||||
|
compat/endian.h
|
||||||
compat/fnmatch.c
|
compat/fnmatch.c
|
||||||
compat/fnmatch.h
|
compat/fnmatch.h
|
||||||
compat/getaddrinfo.c
|
compat/getaddrinfo.c
|
||||||
|
55
compat/endian.h
Normal file
55
compat/endian.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#ifndef _COMPAT_ENDIAN_H
|
||||||
|
#define _COMPAT_ENDIAN_H
|
||||||
|
|
||||||
|
#ifndef BYTE_ORDER
|
||||||
|
# undef LITTLE_ENDIAN
|
||||||
|
# define LITTLE_ENDIAN 1234
|
||||||
|
# undef BIG_ENDIAN
|
||||||
|
# define BIG_ENDIAN 4321
|
||||||
|
# undef UNKNOWN_ENDIAN
|
||||||
|
# define UNKNOWN_ENDIAN 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attempt to guess endianness.
|
||||||
|
* Solaris may define _LITTLE_ENDIAN and _BIG_ENDIAN to 1
|
||||||
|
* HP-UX may define __LITTLE_ENDIAN__ and __BIG_ENDIAN__ to 1
|
||||||
|
* Otherwise, check for cpu-specific cpp defines.
|
||||||
|
* Note that some CPUs are bi-endian, including: arm, powerpc, alpha,
|
||||||
|
* sparc64, mips, hppa, sh4 and ia64.
|
||||||
|
* We just check for the most common uses.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Solaris defines _LITTLE_ENDIAN and _BIG_ENDIAN to 1 */
|
||||||
|
# if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN == 1) || \
|
||||||
|
(defined(__LITTLE_ENDIAN__) && __LITTLE_ENDIAN__ == 1)
|
||||||
|
# define BYTE_ORDER LITTLE_ENDIAN
|
||||||
|
# elif (defined(_BIG_ENDIAN) && _BIG_ENDIAN == 1) || \
|
||||||
|
(defined(__BIG_ENDIAN__) && __BIG_ENDIAN__ == 1)
|
||||||
|
# define BYTE_ORDER BIG_ENDIAN
|
||||||
|
# elif defined(__alpha__) || defined(__alpha) || defined(__amd64) || \
|
||||||
|
defined(BIT_ZERO_ON_RIGHT) || defined(i386) || defined(__i386) || \
|
||||||
|
defined(MIPSEL) || defined(_MIPSEL) || defined(ns32000) || \
|
||||||
|
defined(__ns3200) || defined(sun386) || defined(vax) || \
|
||||||
|
defined(__vax) || defined(__x86__) || \
|
||||||
|
(defined(sun) && defined(__powerpc)) || \
|
||||||
|
(!defined(__hpux) && defined(__ia64))
|
||||||
|
# define BYTE_ORDER LITTLE_ENDIAN
|
||||||
|
# elif defined(__68k__) || defined(apollo) || defined(BIT_ZERO_ON_LEFT) || \
|
||||||
|
defined(__convex__) || defined(_CRAY) || defined(DGUX) || \
|
||||||
|
defined(__hppa) || defined(__hp9000) || defined(__hp9000s300) || \
|
||||||
|
defined(__hp9000s700) || defined(__hp3000s900) || \
|
||||||
|
defined(ibm032) || defined(ibm370) || defined(_IBMR2) || \
|
||||||
|
defined(is68k) || defined(mc68000) || defined(m68k) || \
|
||||||
|
defined(__m68k) || defined(m88k) || defined(__m88k) || \
|
||||||
|
defined(MIPSEB) || defined(_MIPSEB) || defined(MPE) || \
|
||||||
|
defined(pyr) || defined(__powerpc) || defined(__powerpc__) || \
|
||||||
|
defined(sel) || defined(__sparc) || defined(__sparc__) || \
|
||||||
|
defined(tahoe) || (defined(__hpux) && defined(__ia64)) || \
|
||||||
|
(defined(sun) && defined(__powerpc))
|
||||||
|
# define BYTE_ORDER BIG_ENDIAN
|
||||||
|
# else
|
||||||
|
# define BYTE_ORDER UNKNOWN_ENDIAN
|
||||||
|
# endif
|
||||||
|
#endif /* BYTE_ORDER */
|
||||||
|
|
||||||
|
#endif /* _COMPAT_ENDIAN_H */
|
@ -134,6 +134,9 @@
|
|||||||
/* Define to 1 if the compiler supports the __visibility__ attribute. */
|
/* Define to 1 if the compiler supports the __visibility__ attribute. */
|
||||||
#undef HAVE_DSO_VISIBILITY
|
#undef HAVE_DSO_VISIBILITY
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <endian.h> header file. */
|
||||||
|
#undef HAVE_ENDIAN_H
|
||||||
|
|
||||||
/* Define to 1 if your system has the F_CLOSEM fcntl. */
|
/* Define to 1 if your system has the F_CLOSEM fcntl. */
|
||||||
#undef HAVE_FCNTL_CLOSEM
|
#undef HAVE_FCNTL_CLOSEM
|
||||||
|
|
||||||
@ -352,6 +355,9 @@
|
|||||||
/* Define to 1 if you have the `lrand48' function. */
|
/* Define to 1 if you have the `lrand48' function. */
|
||||||
#undef HAVE_LRAND48
|
#undef HAVE_LRAND48
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <machine/endian.h> header file. */
|
||||||
|
#undef HAVE_MACHINE_ENDIAN_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <maillock.h> header file. */
|
/* Define to 1 if you have the <maillock.h> header file. */
|
||||||
#undef HAVE_MAILLOCK_H
|
#undef HAVE_MAILLOCK_H
|
||||||
|
|
||||||
@ -639,6 +645,9 @@
|
|||||||
*/
|
*/
|
||||||
#undef HAVE_SYS_DIR_H
|
#undef HAVE_SYS_DIR_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/endian.h> header file. */
|
||||||
|
#undef HAVE_SYS_ENDIAN_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
|
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
|
||||||
*/
|
*/
|
||||||
#undef HAVE_SYS_NDIR_H
|
#undef HAVE_SYS_NDIR_H
|
||||||
|
13
configure
vendored
13
configure
vendored
@ -15509,6 +15509,19 @@ fi
|
|||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
for ac_header in endian.h sys/endian.h machine/endian.h
|
||||||
|
do :
|
||||||
|
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||||
|
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
||||||
|
_ACEOF
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
for ac_header in procfs.h sys/procfs.h
|
for ac_header in procfs.h sys/procfs.h
|
||||||
do :
|
do :
|
||||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||||
|
@ -2093,6 +2093,7 @@ AC_HEADER_TIME
|
|||||||
AC_HEADER_STDBOOL
|
AC_HEADER_STDBOOL
|
||||||
AC_HEADER_MAJOR
|
AC_HEADER_MAJOR
|
||||||
AC_CHECK_HEADERS(malloc.h netgroup.h paths.h spawn.h utime.h utmpx.h sys/sockio.h sys/bsdtypes.h sys/select.h sys/stropts.h sys/sysmacros.h)
|
AC_CHECK_HEADERS(malloc.h netgroup.h paths.h spawn.h utime.h utmpx.h sys/sockio.h sys/bsdtypes.h sys/select.h sys/stropts.h sys/sysmacros.h)
|
||||||
|
AC_CHECK_HEADERS([endian.h] [sys/endian.h] [machine/endian.h], [break])
|
||||||
AC_CHECK_HEADERS([procfs.h] [sys/procfs.h], [AC_CHECK_MEMBERS(struct psinfo.pr_ttydev, [AC_CHECK_FUNCS(_ttyname_dev)], [], [AC_INCLUDES_DEFAULT
|
AC_CHECK_HEADERS([procfs.h] [sys/procfs.h], [AC_CHECK_MEMBERS(struct psinfo.pr_ttydev, [AC_CHECK_FUNCS(_ttyname_dev)], [], [AC_INCLUDES_DEFAULT
|
||||||
#ifdef HAVE_PROCFS_H
|
#ifdef HAVE_PROCFS_H
|
||||||
#include <procfs.h>
|
#include <procfs.h>
|
||||||
|
@ -483,7 +483,7 @@ check_addr.o: $(srcdir)/regress/parser/check_addr.c $(top_builddir)/config.h \
|
|||||||
$(srcdir)/interfaces.h
|
$(srcdir)/interfaces.h
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_addr.c
|
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_addr.c
|
||||||
check_digest.o: $(srcdir)/regress/parser/check_digest.c \
|
check_digest.o: $(srcdir)/regress/parser/check_digest.c \
|
||||||
$(top_builddir)/config.h $(srcdir)/sha2.h
|
$(top_builddir)/config.h $(incdir)/missing.h $(srcdir)/sha2.h
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_digest.c
|
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_digest.c
|
||||||
check_fill.o: $(srcdir)/regress/parser/check_fill.c $(top_builddir)/config.h \
|
check_fill.o: $(srcdir)/regress/parser/check_fill.c $(top_builddir)/config.h \
|
||||||
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
|
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
|
||||||
@ -771,7 +771,8 @@ set_perms.lo: $(srcdir)/set_perms.c $(top_builddir)/config.h \
|
|||||||
$(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
|
$(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
|
||||||
$(incdir)/sudo_debug.h $(incdir)/gettext.h
|
$(incdir)/sudo_debug.h $(incdir)/gettext.h
|
||||||
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/set_perms.c
|
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/set_perms.c
|
||||||
sha2.lo: $(srcdir)/sha2.c $(top_builddir)/config.h $(srcdir)/sha2.h
|
sha2.lo: $(srcdir)/sha2.c $(top_builddir)/config.h \
|
||||||
|
$(top_srcdir)/compat/endian.h $(srcdir)/sha2.h
|
||||||
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sha2.c
|
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sha2.c
|
||||||
sha2.o: sha2.lo
|
sha2.o: sha2.lo
|
||||||
sia.lo: $(authdir)/sia.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
|
sia.lo: $(authdir)/sia.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
|
||||||
|
@ -48,6 +48,15 @@
|
|||||||
#elif defined(HAVE_INTTYPES_H)
|
#elif defined(HAVE_INTTYPES_H)
|
||||||
# include <inttypes.h>
|
# include <inttypes.h>
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(HAVE_ENDIAN_H)
|
||||||
|
# include <endian.h>
|
||||||
|
#elif defined(HAVE_SYS_ENDIAN_H)
|
||||||
|
# include <sys/endian.h>
|
||||||
|
#elif defined(HAVE_MACHINE_ENDIAN_H)
|
||||||
|
# include <machine/endian.h>
|
||||||
|
#else
|
||||||
|
# include "compat/endian.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "sha2.h"
|
#include "sha2.h"
|
||||||
|
|
||||||
@ -147,10 +156,14 @@ SHA224Final(uint8_t digest[SHA224_DIGEST_LENGTH], SHA2_CTX *ctx)
|
|||||||
{
|
{
|
||||||
SHA256Pad(ctx);
|
SHA256Pad(ctx);
|
||||||
if (digest != NULL) {
|
if (digest != NULL) {
|
||||||
|
#if BYTE_ORDER == BIG_ENDIAN
|
||||||
|
memcpy(digest, ctx->state.st32, SHA224_DIGEST_LENGTH);
|
||||||
|
#else
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = 0; i < 7; i++)
|
for (i = 0; i < 7; i++)
|
||||||
BE32TO8(digest + (i * 4), ctx->state.st32[i]);
|
BE32TO8(digest + (i * 4), ctx->state.st32[i]);
|
||||||
|
#endif
|
||||||
memset(ctx, 0, sizeof(*ctx));
|
memset(ctx, 0, sizeof(*ctx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -210,10 +223,14 @@ SHA256Transform(uint32_t state[8], const uint8_t data[SHA256_BLOCK_LENGTH])
|
|||||||
/* Copy context state to working vars. */
|
/* Copy context state to working vars. */
|
||||||
memcpy(T, state, sizeof(T));
|
memcpy(T, state, sizeof(T));
|
||||||
/* Copy data to W in big endian format. */
|
/* Copy data to W in big endian format. */
|
||||||
|
#if BYTE_ORDER == BIG_ENDIAN
|
||||||
|
memcpy(W, data, sizeof(W));
|
||||||
|
#else
|
||||||
for (j = 0; j < 16; j++) {
|
for (j = 0; j < 16; j++) {
|
||||||
BE8TO32(W[j], data);
|
BE8TO32(W[j], data);
|
||||||
data += 4;
|
data += 4;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/* 64 operations, partially loop unrolled. */
|
/* 64 operations, partially loop unrolled. */
|
||||||
for (j = 0; j < 64; j += 16)
|
for (j = 0; j < 64; j += 16)
|
||||||
{
|
{
|
||||||
@ -283,10 +300,14 @@ SHA256Final(uint8_t digest[SHA256_DIGEST_LENGTH], SHA2_CTX *ctx)
|
|||||||
{
|
{
|
||||||
SHA256Pad(ctx);
|
SHA256Pad(ctx);
|
||||||
if (digest != NULL) {
|
if (digest != NULL) {
|
||||||
|
#if BYTE_ORDER == BIG_ENDIAN
|
||||||
|
memcpy(digest, ctx->state.st32, SHA256_DIGEST_LENGTH);
|
||||||
|
#else
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
BE32TO8(digest + (i * 4), ctx->state.st32[i]);
|
BE32TO8(digest + (i * 4), ctx->state.st32[i]);
|
||||||
|
#endif
|
||||||
memset(ctx, 0, sizeof(*ctx));
|
memset(ctx, 0, sizeof(*ctx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -328,10 +349,14 @@ SHA384Final(uint8_t digest[SHA384_DIGEST_LENGTH], SHA2_CTX *ctx)
|
|||||||
{
|
{
|
||||||
SHA384Pad(ctx);
|
SHA384Pad(ctx);
|
||||||
if (digest != NULL) {
|
if (digest != NULL) {
|
||||||
|
#if BYTE_ORDER == BIG_ENDIAN
|
||||||
|
memcpy(digest, ctx->state.st64, SHA384_DIGEST_LENGTH);
|
||||||
|
#else
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = 0; i < 6; i++)
|
for (i = 0; i < 6; i++)
|
||||||
BE64TO8(digest + (i * 8), ctx->state.st64[i]);
|
BE64TO8(digest + (i * 8), ctx->state.st64[i]);
|
||||||
|
#endif
|
||||||
memset(ctx, 0, sizeof(*ctx));
|
memset(ctx, 0, sizeof(*ctx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -415,10 +440,14 @@ SHA512Transform(uint64_t state[8], const uint8_t data[SHA512_BLOCK_LENGTH])
|
|||||||
/* Copy context state to working vars. */
|
/* Copy context state to working vars. */
|
||||||
memcpy(T, state, sizeof(T));
|
memcpy(T, state, sizeof(T));
|
||||||
/* Copy data to W in big endian format. */
|
/* Copy data to W in big endian format. */
|
||||||
|
#if BYTE_ORDER == BIG_ENDIAN
|
||||||
|
memcpy(W, data, sizeof(W));
|
||||||
|
#else
|
||||||
for (j = 0; j < 16; j++) {
|
for (j = 0; j < 16; j++) {
|
||||||
BE8TO64(W[j], data);
|
BE8TO64(W[j], data);
|
||||||
data += 8;
|
data += 8;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/* 80 operations, partially loop unrolled. */
|
/* 80 operations, partially loop unrolled. */
|
||||||
for (j = 0; j < 80; j += 16)
|
for (j = 0; j < 80; j += 16)
|
||||||
{
|
{
|
||||||
@ -485,10 +514,14 @@ SHA512Final(uint8_t digest[SHA512_DIGEST_LENGTH], SHA2_CTX *ctx)
|
|||||||
{
|
{
|
||||||
SHA512Pad(ctx);
|
SHA512Pad(ctx);
|
||||||
if (digest != NULL) {
|
if (digest != NULL) {
|
||||||
|
#if BYTE_ORDER == BIG_ENDIAN
|
||||||
|
memcpy(digest, ctx->state.st64, SHA512_DIGEST_LENGTH);
|
||||||
|
#else
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
BE64TO8(digest + (i * 8), ctx->state.st64[i]);
|
BE64TO8(digest + (i * 8), ctx->state.st64[i]);
|
||||||
|
#endif
|
||||||
memset(ctx, 0, sizeof(*ctx));
|
memset(ctx, 0, sizeof(*ctx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user