Bachelors_Thesis_Code/fagprojekt_code/hashing_algorithms.hpp
2021-11-14 14:35:05 +01:00

43 lines
2.0 KiB
C++

#ifndef HASHING_ALGORITHMS_H
#define HASHING_ALGORITHMS_H
#include "hashed_string.hpp"
#include <stdint.h>
// p is prime. p > m > 1, p > a > 0, p > b >= 0
uint64_t multiply_mod_prime(uint64_t x, uint64_t a, uint64_t b, uint64_t p, uint64_t m);
// p is a Mersenne prime. p > m > 1, p > a > 0, p > b >= 0
uint64_t multiply_mod_prime_mersenne(uint64_t x, uint64_t a, uint64_t b, uint64_t p, uint64_t m);
// p is a Mersenne prime. m=2^q. p > m > 1, p > a > 0, p > b >= 0
uint64_t multiply_mod_prime_mersenne_overflow(uint64_t x, uint64_t a, uint64_t b, uint64_t p, char q);
// p is a Mersenne prime. m=2^q. p > m > 1, p > a > 0
uint64_t multiply_mod_prime_mersenne_overflow_no_b(uint64_t x, uint64_t a, uint64_t p, char q);
// p=2^89-1 is a Mersenne prime. m=2^l. 32 >= l > 0. p > a > 0, p > b >= 0. x is an 64 bit integer. We assume x, a, and b are arrays of 32 bit integers.
uint32_t multiply_mod_prime_mersenne_overflow_high_bitcount(uint32_t * x, uint32_t * a, uint32_t * b, char l);
uint64_t multiply_shift_c_universal(uint32_t x, uint64_t a, char l);
uint64_t multiply_shift_strongly_universal(uint32_t x, uint64_t a, uint64_t b, char l);
uint64_t multiply_shift_vector(uint32_t * x, uint64_t * seed, size_t d, char l);
// requires x to be of size D and the seed to be of size D
uint64_t multiply_shift_string(const My_string * string, const uint64_t * seed, uint64_t * x, size_t l);
// p=2^89-1 is a Mersenne prime.
// p > a >= 0. p > b >= 0. p > c >= 0. x is a size 2d list of 64 bit integers split into 32 bit integers.
// We assume a, b, and c are size 3 arrays of 32 bit integers.
uint32_t polynomial_vector(uint32_t * x, uint32_t * a, uint32_t * b, uint32_t * c, size_t d, char l);
// p=2^89-1 is a Mersenne prime.
// p > a >= 0. p > b >= 0. p > c >= 0. x is a size 2d list of 64 bit integers split into 32 bit integers.
// We assume a, b, and c are size 3 arrays of 32 bit integers.
// we assume the seed to be of size 4 (at minimum).
uint32_t polynomial_vector_tuned(uint32_t * x, uint32_t * a, uint32_t * b, uint32_t * c, size_t d, char l, const uint64_t * seed);
#endif