#include <string.h>
#include <stdio.h>
#include "siphash.h"
#include <endian.h>
Go to the source code of this file.
|
#define | SIP_HASH_STREAMING 1 |
|
#define | LITTLE_ENDIAN __LITTLE_ENDIAN |
|
#define | BIG_ENDIAN __BIG_ENDIAN |
|
#define | lo u32[0] |
|
#define | hi u32[1] |
|
#define | UNALIGNED_WORD_ACCESS 0 |
|
#define | U8TO32_LE(p) |
|
#define | U32TO8_LE(p, v) |
|
#define | U8TO64_LE(p) u8to64_le(p) |
|
#define | U64TO8_LE(p, v) u64to8_le(p, v) |
|
#define | ROTL64_TO(v, s) |
|
#define | ADD64_TO(v, s) add64_to(&(v), (s)) |
|
#define | XOR64_TO(v, s) xor64_to(&(v), (s)) |
|
#define | XOR64_INT(v, x) ((v).lo ^= (x)) |
|
#define | sip_init_state sip_init_state_bin.u64 |
|
#define | SIP_COMPRESS(v0, v1, v2, v3) |
|
#define | SIP_ROUND(m, v0, v1, v2, v3) |
|
#define | OR_BYTE(n) |
|
|
sip_hash * | sip_hash_new (const uint8_t key[16], int c, int d) |
|
sip_hash * | sip_hash_init (sip_hash *h, const uint8_t key[16], int c, int d) |
|
int | sip_hash_update (sip_hash *h, const uint8_t *msg, size_t len) |
|
int | sip_hash_final (sip_hash *h, uint8_t **digest, size_t *len) |
|
int | sip_hash_final_integer (sip_hash *h, uint64_t *digest) |
|
int | sip_hash_digest (sip_hash *h, const uint8_t *data, size_t data_len, uint8_t **digest, size_t *digest_len) |
|
int | sip_hash_digest_integer (sip_hash *h, const uint8_t *data, size_t data_len, uint64_t *digest) |
|
void | sip_hash_free (sip_hash *h) |
|
void | sip_hash_dump (sip_hash *h) |
|
uint64_t | sip_hash13 (const uint8_t key[16], const uint8_t *data, size_t len) |
|
◆ ADD64_TO
#define ADD64_TO |
( |
|
v, |
|
|
|
s |
|
) |
| add64_to(&(v), (s)) |
◆ BIG_ENDIAN
◆ hi
◆ LITTLE_ENDIAN
◆ lo
◆ OR_BYTE
Value: do { \
last.hi |= ((
uint32_t) end[
n]) << ((
n) >= 4 ? (
n) * 8 - 32 : 0); \
else \
last.lo |= ((
uint32_t) end[
n]) << ((
n) >= 4 ? 0 : (
n) * 8); \
} while (0)
◆ ROTL64_TO
#define ROTL64_TO |
( |
|
v, |
|
|
|
s |
|
) |
| |
Value: ((s) > 32 ? rotl64_swap(rotl64_to(&(
v), (s) - 32)) : \
(s) == 32 ? rotl64_swap(&(
v)) : rotl64_to(&(
v), (s)))
Definition at line 91 of file siphash.c.
◆ SIP_COMPRESS
#define SIP_COMPRESS |
( |
|
v0, |
|
|
|
v1, |
|
|
|
v2, |
|
|
|
v3 |
|
) |
| |
Value:do { \
ADD64_TO((v0), (v1)); \
ADD64_TO((v2), (v3)); \
ROTL64_TO((v1), 13); \
ROTL64_TO((v3), 16); \
XOR64_TO((v1), (v0)); \
XOR64_TO((v3), (v2)); \
ROTL64_TO((v0), 32); \
ADD64_TO((v2), (v1)); \
ADD64_TO((v0), (v3)); \
ROTL64_TO((v1), 17); \
ROTL64_TO((v3), 21); \
XOR64_TO((v1), (v2)); \
XOR64_TO((v3), (v0)); \
ROTL64_TO((v2), 32); \
} while(0)
Definition at line 158 of file siphash.c.
◆ SIP_HASH_STREAMING
#define SIP_HASH_STREAMING 1 |
◆ sip_init_state
◆ SIP_ROUND
#define SIP_ROUND |
( |
|
m, |
|
|
|
v0, |
|
|
|
v1, |
|
|
|
v2, |
|
|
|
v3 |
|
) |
| |
Value:do { \
XOR64_TO((v3), (m)); \
SIP_COMPRESS(v0, v1, v2, v3); \
XOR64_TO((v0), (m)); \
} while (0)
Definition at line 389 of file siphash.c.
◆ U32TO8_LE
#define U32TO8_LE |
( |
|
p, |
|
|
|
v |
|
) |
| |
◆ U64TO8_LE
#define U64TO8_LE |
( |
|
p, |
|
|
|
v |
|
) |
| u64to8_le(p, v) |
◆ U8TO32_LE
◆ U8TO64_LE
#define U8TO64_LE |
( |
|
p | ) |
u8to64_le(p) |
◆ UNALIGNED_WORD_ACCESS
#define UNALIGNED_WORD_ACCESS 0 |
◆ XOR64_INT
#define XOR64_INT |
( |
|
v, |
|
|
|
x |
|
) |
| ((v).lo ^= (x)) |
◆ XOR64_TO
#define XOR64_TO |
( |
|
v, |
|
|
|
s |
|
) |
| xor64_to(&(v), (s)) |
◆ sip_hash13()
Definition at line 397 of file siphash.c.
References key, last, len, OR_BYTE, SIP_COMPRESS, sip_init_state, SIP_ROUND, U8TO64_LE, uint64_t, XOR64_INT, and XOR64_TO.
◆ sip_hash_digest()
◆ sip_hash_digest_integer()
◆ sip_hash_dump()
◆ sip_hash_final()
◆ sip_hash_final_integer()
◆ sip_hash_free()
◆ sip_hash_init()
◆ sip_hash_new()
◆ sip_hash_update()
◆ bin
◆ u64