Hash unification: address PR feedback

This commit is contained in:
Johanna Amann 2020-05-13 14:07:59 +00:00
parent 7f137b7d50
commit ce8b121e12
8 changed files with 33 additions and 29 deletions

3
.gitmodules vendored
View file

@ -37,3 +37,6 @@
[submodule "aux/libkqueue"] [submodule "aux/libkqueue"]
path = aux/libkqueue path = aux/libkqueue
url = https://github.com/zeek/libkqueue url = https://github.com/zeek/libkqueue
[submodule "aux/highwayhash"]
path = aux/highwayhash
url = https://github.com/zeek/highwayhash

View file

@ -328,7 +328,7 @@ endif ()
include_directories(BEFORE ${OPENSSL_INCLUDE_DIR}) include_directories(BEFORE ${OPENSSL_INCLUDE_DIR})
# Make everyone find the highwayhash includes # Make everyone find the highwayhash includes
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/src/3rdparty/highwayhash) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/aux/highwayhash)
# Alpine support # Alpine support
if ( ${CMAKE_SYSTEM_NAME} MATCHES Linux AND EXISTS /etc/os-release ) if ( ${CMAKE_SYSTEM_NAME} MATCHES Linux AND EXISTS /etc/os-release )

1
aux/highwayhash Submodule

@ -0,0 +1 @@
Subproject commit 0aaf66bb8a1634ceee4b778df51a652bdf4e1f17

@ -1 +1 @@
Subproject commit 8975ce11a9f0a9692fc2247107d036f9e11f9cd3 Subproject commit ae9ff26a100e9f4ba03da8697c7ca14c3df4d4ab

View file

@ -319,41 +319,41 @@ set(THIRD_PARTY_SRCS
# Highwayhash. Highwayhash is a bit special since it has architecture dependent code... # Highwayhash. Highwayhash is a bit special since it has architecture dependent code...
set(HH_SRCS set(HH_SRCS
3rdparty/highwayhash/highwayhash/sip_hash.cc ../aux/highwayhash/highwayhash/sip_hash.cc
3rdparty/highwayhash/highwayhash/sip_tree_hash.cc ../aux/highwayhash/highwayhash/sip_tree_hash.cc
3rdparty/highwayhash/highwayhash/scalar_sip_tree_hash.cc ../aux/highwayhash/highwayhash/scalar_sip_tree_hash.cc
3rdparty/highwayhash/highwayhash/arch_specific.cc ../aux/highwayhash/highwayhash/arch_specific.cc
3rdparty/highwayhash/highwayhash/instruction_sets.cc ../aux/highwayhash/highwayhash/instruction_sets.cc
3rdparty/highwayhash/highwayhash/nanobenchmark.cc ../aux/highwayhash/highwayhash/nanobenchmark.cc
3rdparty/highwayhash/highwayhash/os_specific.cc ../aux/highwayhash/highwayhash/os_specific.cc
3rdparty/highwayhash/highwayhash/hh_portable.cc ../aux/highwayhash/highwayhash/hh_portable.cc
) )
if (${COMPILER_ARCHITECTURE} STREQUAL "arm") if (${COMPILER_ARCHITECTURE} STREQUAL "arm")
set_source_files_properties(${HH_SRCS} PROPERTIES COMPILE_FLAGS set_source_files_properties(${HH_SRCS} PROPERTIES COMPILE_FLAGS
-mfloat-abi=hard -march=armv7-a -mfpu=neon) -mfloat-abi=hard -march=armv7-a -mfpu=neon)
list(APPEND HH_SRCS list(APPEND HH_SRCS
3rdparty/highwayhash/highwayhash/hh_neon.cc ../aux/highwayhash/highwayhash/hh_neon.cc
) )
elseif (${COMPILER_ARCHITECTURE} STREQUAL "aarch64") elseif (${COMPILER_ARCHITECTURE} STREQUAL "aarch64")
list(APPEND HH_SRCS list(APPEND HH_SRCS
3rdparty/highwayhash/highwayhash/hh_neon.cc ../aux/highwayhash/highwayhash/hh_neon.cc
) )
elseif (${COMPILER_ARCHITECTURE} STREQUAL "power") elseif (${COMPILER_ARCHITECTURE} STREQUAL "power")
set_source_files_properties(3rdparty/highwayhash/highwayhash/hh_avx2.cc PROPERTIES COMPILE_FLAGS set_source_files_properties(../aux/highwayhash/highwayhash/hh_avx2.cc PROPERTIES COMPILE_FLAGS
-mvsx) -mvsx)
list(APPEND HH_SRCS list(APPEND HH_SRCS
3rdparty/highwayhash/highwayhash/hh_vsc.cc ../aux/highwayhash/highwayhash/hh_vsc.cc
) )
elseif(${COMPILER_ARCHITECTURE} STREQUAL "x86_64") elseif(${COMPILER_ARCHITECTURE} STREQUAL "x86_64")
set_source_files_properties(3rdparty/highwayhash/highwayhash/hh_avx2.cc PROPERTIES COMPILE_FLAGS set_source_files_properties(../aux/highwayhash/highwayhash/hh_avx2.cc PROPERTIES COMPILE_FLAGS
-mavx2) -mavx2)
set_source_files_properties(3rdparty/highwayhash/highwayhash/hh_sse41.cc PROPERTIES COMPILE_FLAGS set_source_files_properties(../aux/highwayhash/highwayhash/hh_sse41.cc PROPERTIES COMPILE_FLAGS
-msse4.1) -msse4.1)
list(APPEND HH_SRCS list(APPEND HH_SRCS
3rdparty/highwayhash/highwayhash/hh_avx2.cc ../aux/highwayhash/highwayhash/hh_avx2.cc
3rdparty/highwayhash/highwayhash/hh_sse41.cc ../aux/highwayhash/highwayhash/hh_sse41.cc
) )
endif () endif ()

View file

@ -4,7 +4,7 @@
* This file contains functions to generate hashes used keyed hash functions. * This file contains functions to generate hashes used keyed hash functions.
* Keyed hash functions make it difficult/impossible to find information about the * Keyed hash functions make it difficult/impossible to find information about the
* output of a hash when the key is unknown to the attacker. This fact holds, even * output of a hash when the key is unknown to the attacker. This fact holds, even
* when the input value us known. * when the input value is known.
* *
* We use these kinds of hashes heavily internally - e.g. for scriptland hash generation. * We use these kinds of hashes heavily internally - e.g. for scriptland hash generation.
* It is important that these hashes are not easily guessable to prevent complexity attacks. * It is important that these hashes are not easily guessable to prevent complexity attacks.
@ -102,7 +102,7 @@ public:
* or a restart. * or a restart.
* *
* To be more exact - the seed value for this hash is generated from the script-level * To be more exact - the seed value for this hash is generated from the script-level
* :seek:see:`digest_salt` constant. The seeds are stable as long as this value * :zeek:see:`digest_salt` constant. The seeds are stable as long as this value
* is not changed. * is not changed.
* *
* This should be used for hashes that have to remain stable over the entire * This should be used for hashes that have to remain stable over the entire
@ -123,7 +123,7 @@ public:
* or a restart. * or a restart.
* *
* To be more exact - the seed value for this hash is generated from the script-level * To be more exact - the seed value for this hash is generated from the script-level
* :seek:see:`digest_salt` constant. The seeds are stable as long as this value * :zeek:see:`digest_salt` constant. The seeds are stable as long as this value
* is not changed. * is not changed.
* *
* This should be used for hashes that have to remain stable over the entire * This should be used for hashes that have to remain stable over the entire
@ -144,7 +144,7 @@ public:
* or a restart. * or a restart.
* *
* To be more exact - the seed value for this hash is generated from the script-level * To be more exact - the seed value for this hash is generated from the script-level
* :seek:see:`digest_salt` constant. The seeds are stable as long as this value * :zeek:see:`digest_salt` constant. The seeds are stable as long as this value
* is not changed. * is not changed.
* *
* This should be used for hashes that have to remain stable over the entire * This should be used for hashes that have to remain stable over the entire
@ -180,7 +180,7 @@ public:
/** /**
* Initializes the static hash seeds using the script-level * Initializes the static hash seeds using the script-level
* :seek:see:`digest_salt` constant. * :zeek:see:`digest_salt` constant.
*/ */
static void InitOptions(); static void InitOptions();

View file

@ -66,7 +66,7 @@ unsigned char* internal_md5(const unsigned char* data, unsigned long len, unsign
return calculate_digest(Hash_MD5, data, len, out); return calculate_digest(Hash_MD5, data, len, out);
} }
unsigned char* calculate_digest(HashAlgorithm Alg, const unsigned char* data, uint64_t len, unsigned char* out) unsigned char* calculate_digest(HashAlgorithm alg, const unsigned char* data, uint64_t len, unsigned char* out)
{ {
// maximum possible length for supported hashes // maximum possible length for supported hashes
static unsigned char static_out[SHA512_DIGEST_LENGTH]; static unsigned char static_out[SHA512_DIGEST_LENGTH];
@ -74,7 +74,7 @@ unsigned char* calculate_digest(HashAlgorithm Alg, const unsigned char* data, ui
if ( ! out ) if ( ! out )
out = static_out; // use static array for return, see OpenSSL man page out = static_out; // use static array for return, see OpenSSL man page
EVP_MD_CTX* c = hash_init(Alg); EVP_MD_CTX* c = hash_init(alg);
hash_update(c, data, len); hash_update(c, data, len);
hash_final(c, out); hash_final(c, out);
return out; return out;

View file

@ -1031,7 +1031,7 @@ static bool read_random_seeds(const char* read_file, uint32_t* seed,
} }
// Read seeds for hmac-md5/siphash/highwayhash. // Read seeds for hmac-md5/siphash/highwayhash.
for ( int i = 0; i < KeyedHash::SEED_INIT_SIZE; ++i ) for ( auto &v : buf )
{ {
int tmp; int tmp;
if ( fscanf(f, "%u", &tmp) != 1 ) if ( fscanf(f, "%u", &tmp) != 1 )
@ -1040,7 +1040,7 @@ static bool read_random_seeds(const char* read_file, uint32_t* seed,
return false; return false;
} }
buf[i] = tmp; v = tmp;
} }
fclose(f); fclose(f);
@ -1061,8 +1061,8 @@ static bool write_random_seeds(const char* write_file, uint32_t seed,
fprintf(f, "%u\n", seed); fprintf(f, "%u\n", seed);
for ( int i = 0; i < KeyedHash::SEED_INIT_SIZE; ++i ) for ( const auto &v: buf )
fprintf(f, "%u\n", buf[i]); fprintf(f, "%u\n", v);
fclose(f); fclose(f);
return true; return true;