Skip to content

Make HashContexts serializable #5702

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Mark Keccak functions that contain expected misaligned accesses.
To avoid undefined behavior warnings for those accesses.
  • Loading branch information
kohler committed Jun 29, 2020
commit 7103c56195a36160f88ba1b7fda4ea1c8f7e3ee4
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