#include <hash127.h>
void hash127_expand(&bigr,r);
void hash127(out,m,l,&bigr,kn);
int32 r[4];
struct hash127 bigr;
int32 kn[4];
int32 *m;
unsigned int l;
int32 out[4];
hash127 reads three arrays of signed 32-bit integers:
hash127 computes
hash127 stores u in an array of four signed 32-bit integers, out[0], out[1], out[2], out[3], such that u = (2^31+out[0]) + 2^32(2^31+out[1]) + 2^64(2^31+out[2]) + 2^96(2^31+out[3]).
Note that there are only 127 bits of information in the output: out[3] is always negative.
Before you call hash127 you must call hash127_expand to convert r into bigr. You may reuse bigr for any number of calls to hash127. You may call hash127_expand with a new r to change the contents of bigr.
hash127 is not guaranteed to be reentrant; it may modify bigr.
hash127 may use floating-point arithmetic. On some architectures it is not safe to use floating-point arithmetic in signal handlers.
On the x86 architecture, the current implementation of hash127_expand sets the precision control to 64 bits; hash127 will then assume that the precision control is still 64 bits.
#include <hash127.h>
void hash127_little(out,(int32 *) b,l,&bigr,kn);
struct hash127 bigr;
int32 kn[4];
unsigned char *b;
unsigned int l;
int32 out[4];
hash127_little is just like hash127
except that it reads bytes
b[0],
b[1],
...,
b[4*l-1],
interpreted as signed 32-bit integers, little-endian, twos-complement.
WARNING: b must be aligned as an int32 pointer.
The time taken by these functions is independent of the contents of r, x, and m on processors with constant-time floating-point arithmetic, specifically the Pentium, Pentium MMX, Pentium Pro, and Pentium II.