1#ifndef SIPHASH_H 2#define SIPHASH_H 1 3#include <stdlib.h> 4#ifdef HAVE_STDINT_H 5#include <stdint.h> 6#endif 7#ifdef HAVE_INTTYPES_H 8#include <inttypes.h> 9#endif 10 11#ifndef HAVE_UINT64_T 12typedef struct { 13 uint32_t u32[2]; 14} sip_uint64_t; 15#define uint64_t sip_uint64_t 16#else 17typedef uint64_t sip_uint64_t; 18#endif 19 20typedef struct { 21 int c; 22 int d; 23 uint64_t v[4]; 24 uint8_t buf[sizeof(uint64_t)]; 25 uint8_t buflen; 26 uint8_t msglen_byte; 27} sip_state; 28 29typedef struct sip_interface_st sip_interface; 30 31typedef struct { 32 sip_state state[1]; 33 const sip_interface *methods; 34} sip_hash; 35 36sip_hash *sip_hash_new(const uint8_t key[16], int c, int d); 37sip_hash *sip_hash_init(sip_hash *h, const uint8_t key[16], int c, int d); 38int sip_hash_update(sip_hash *h, const uint8_t *data, size_t len); 39int sip_hash_final(sip_hash *h, uint8_t **digest, size_t *len); 40int sip_hash_final_integer(sip_hash *h, uint64_t *digest); 41int sip_hash_digest(sip_hash *h, const uint8_t *data, size_t data_len, uint8_t **digest, size_t *digest_len); 42int sip_hash_digest_integer(sip_hash *h, const uint8_t *data, size_t data_len, uint64_t *digest); 43void sip_hash_free(sip_hash *h); 44void sip_hash_dump(sip_hash *h); 45 46uint64_t sip_hash24(const uint8_t key[16], const uint8_t *data, size_t len); 47 48#endif 49