43 lines
2.0 KiB
C++
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
|