Skip to content

Commit

Permalink
Mark Keccak functions that contain expected misaligned accesses.
Browse files Browse the repository at this point in the history
To avoid undefined behavior warnings for those accesses.
  • Loading branch information
kohler authored and nikic committed Jun 30, 2020
1 parent ff69a8a commit dc85be5
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
12 changes: 12 additions & 0 deletions ext/hash/sha3/generic32lc/KeccakP-1600-inplace32BI.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,14 @@ and related or neighboring rights to the source code in this file.
#include "brg_endian.h"
#include "KeccakP-1600-SnP.h"
#include "SnP-Relaned.h"
#ifdef __has_feature
# if __has_feature(undefined_behavior_sanitizer)
# define ALLOW_MISALIGNED_ACCESS __attribute__((no_sanitize("alignment")))
# endif
#endif
#ifndef ALLOW_MISALIGNED_ACCESS
# define ALLOW_MISALIGNED_ACCESS
#endif

typedef unsigned char UINT8;
typedef unsigned int UINT32;
Expand Down Expand Up @@ -162,6 +170,7 @@ void KeccakP1600_AddBytesInLane(void *state, unsigned int lanePosition, const un

/* ---------------------------------------------------------------- */

ALLOW_MISALIGNED_ACCESS
void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int laneCount)
{
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
Expand Down Expand Up @@ -217,6 +226,7 @@ void KeccakP1600_OverwriteBytesInLane(void *state, unsigned int lanePosition, co

/* ---------------------------------------------------------------- */

ALLOW_MISALIGNED_ACCESS
void KeccakP1600_OverwriteLanes(void *state, const unsigned char *data, unsigned int laneCount)
{
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
Expand Down Expand Up @@ -304,6 +314,7 @@ void KeccakP1600_ExtractBytesInLane(const void *state, unsigned int lanePosition

/* ---------------------------------------------------------------- */

ALLOW_MISALIGNED_ACCESS
void KeccakP1600_ExtractLanes(const void *state, unsigned char *data, unsigned int laneCount)
{
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
Expand Down Expand Up @@ -378,6 +389,7 @@ void KeccakP1600_ExtractAndAddBytesInLane(const void *state, unsigned int lanePo

/* ---------------------------------------------------------------- */

ALLOW_MISALIGNED_ACCESS
void KeccakP1600_ExtractAndAddLanes(const void *state, const unsigned char *input, unsigned char *output, unsigned int laneCount)
{
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
Expand Down
10 changes: 10 additions & 0 deletions ext/hash/sha3/generic64lc/KeccakP-1600-opt64.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,14 @@ and related or neighboring rights to the source code in this file.
#include <stdlib.h>
#include "brg_endian.h"
#include "KeccakP-1600-opt64-config.h"
#ifdef __has_feature
# if __has_feature(undefined_behavior_sanitizer)
# define ALLOW_MISALIGNED_ACCESS __attribute__((no_sanitize("alignment")))
# endif
#endif
#ifndef ALLOW_MISALIGNED_ACCESS
# define ALLOW_MISALIGNED_ACCESS
#endif

typedef unsigned char UINT8;
typedef unsigned long long int UINT64;
Expand Down Expand Up @@ -114,6 +122,7 @@ void KeccakP1600_AddBytesInLane(void *state, unsigned int lanePosition, const un

/* ---------------------------------------------------------------- */

ALLOW_MISALIGNED_ACCESS
void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int laneCount)
{
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
Expand Down Expand Up @@ -462,6 +471,7 @@ void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *inpu

/* ---------------------------------------------------------------- */

ALLOW_MISALIGNED_ACCESS
size_t KeccakF1600_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen)
{
size_t originalDataByteLen = dataByteLen;
Expand Down

0 comments on commit dc85be5

Please sign in to comment.