1 | /* |
2 | +----------------------------------------------------------------------+ |
3 | | PHP Version 5 | |
4 | +----------------------------------------------------------------------+ |
5 | | Copyright (c) 1997-2015 The PHP Group | |
6 | +----------------------------------------------------------------------+ |
7 | | This source file is subject to version 3.01 of the PHP license, | |
8 | | that is bundled with this package in the file LICENSE, and is | |
9 | | available through the world-wide-web at the following url: | |
10 | | http://www.php.net/license/3_01.txt | |
11 | | If you did not receive a copy of the PHP license and are unable to | |
12 | | obtain it through the world-wide-web, please send a note to | |
13 | | license@php.net so we can mail you a copy immediately. | |
14 | +----------------------------------------------------------------------+ |
15 | | Author: Michael Maclean <mgdm@php.net> | |
16 | +----------------------------------------------------------------------+ |
17 | */ |
18 | |
19 | /* $Id$ */ |
20 | |
21 | #ifndef PHP_HASH_FNV_H |
22 | #define PHP_HASH_FNV_H |
23 | |
24 | #define PHP_FNV1_32_INIT ((php_hash_uint32)0x811c9dc5) |
25 | #define PHP_FNV1_32A_INIT PHP_FNV1_32_INIT |
26 | |
27 | #define PHP_FNV_32_PRIME ((php_hash_uint32)0x01000193) |
28 | |
29 | #define PHP_FNV1_64_INIT ((php_hash_uint64)0xcbf29ce484222325ULL) |
30 | #define PHP_FNV1A_64_INIT FNV1_64_INIT |
31 | |
32 | #define PHP_FNV_64_PRIME ((php_hash_uint64)0x100000001b3ULL) |
33 | |
34 | |
35 | /* |
36 | * hash types |
37 | */ |
38 | enum php_fnv_type { |
39 | PHP_FNV_NONE = 0, /* invalid FNV hash type */ |
40 | PHP_FNV0_32 = 1, /* FNV-0 32 bit hash */ |
41 | PHP_FNV1_32 = 2, /* FNV-1 32 bit hash */ |
42 | PHP_FNV1a_32 = 3, /* FNV-1a 32 bit hash */ |
43 | PHP_FNV0_64 = 4, /* FNV-0 64 bit hash */ |
44 | PHP_FNV1_64 = 5, /* FNV-1 64 bit hash */ |
45 | PHP_FNV1a_64 = 6, /* FNV-1a 64 bit hash */ |
46 | }; |
47 | |
48 | typedef struct { |
49 | php_hash_uint32 state; |
50 | } PHP_FNV132_CTX; |
51 | |
52 | typedef struct { |
53 | php_hash_uint64 state; |
54 | } PHP_FNV164_CTX; |
55 | |
56 | |
57 | PHP_HASH_API void PHP_FNV132Init(PHP_FNV132_CTX *context); |
58 | PHP_HASH_API void PHP_FNV132Update(PHP_FNV132_CTX *context, const unsigned char *input, unsigned int inputLen); |
59 | PHP_HASH_API void PHP_FNV1a32Update(PHP_FNV132_CTX *context, const unsigned char *input, unsigned int inputLen); |
60 | PHP_HASH_API void PHP_FNV132Final(unsigned char digest[16], PHP_FNV132_CTX * context); |
61 | |
62 | PHP_HASH_API void PHP_FNV164Init(PHP_FNV164_CTX *context); |
63 | PHP_HASH_API void PHP_FNV164Update(PHP_FNV164_CTX *context, const unsigned char *input, unsigned int inputLen); |
64 | PHP_HASH_API void PHP_FNV1a64Update(PHP_FNV164_CTX *context, const unsigned char *input, unsigned int inputLen); |
65 | PHP_HASH_API void PHP_FNV164Final(unsigned char digest[16], PHP_FNV164_CTX * context); |
66 | |
67 | static php_hash_uint32 fnv_32_buf(void *buf, size_t len, php_hash_uint32 hval, int alternate); |
68 | static php_hash_uint64 fnv_64_buf(void *buf, size_t len, php_hash_uint64 hval, int alternate); |
69 | |
70 | #endif |
71 | |
72 | /* |
73 | * Local variables: |
74 | * tab-width: 4 |
75 | * c-basic-offset: 4 |
76 | * End: |
77 | * vim600: noet sw=4 ts=4 fdm=marker |
78 | * vim<600: noet sw=4 ts=4 |
79 | */ |
80 | |