/src/php-src/ext/hash/php_hash.h
Line | Count | Source |
1 | | /* |
2 | | +----------------------------------------------------------------------+ |
3 | | | Copyright (c) The PHP Group | |
4 | | +----------------------------------------------------------------------+ |
5 | | | This source file is subject to version 3.01 of the PHP license, | |
6 | | | that is bundled with this package in the file LICENSE, and is | |
7 | | | available through the world-wide-web at the following url: | |
8 | | | https://www.php.net/license/3_01.txt | |
9 | | | If you did not receive a copy of the PHP license and are unable to | |
10 | | | obtain it through the world-wide-web, please send a note to | |
11 | | | license@php.net so we can mail you a copy immediately. | |
12 | | +----------------------------------------------------------------------+ |
13 | | | Author: Sara Golemon <pollita@php.net> | |
14 | | +----------------------------------------------------------------------+ |
15 | | */ |
16 | | |
17 | | #ifndef PHP_HASH_H |
18 | | #define PHP_HASH_H |
19 | | |
20 | | #include "php.h" |
21 | | |
22 | | #define PHP_HASH_EXTNAME "hash" |
23 | | #define PHP_HASH_VERSION PHP_VERSION |
24 | | #define PHP_MHASH_VERSION PHP_VERSION |
25 | | |
26 | 5.85k | #define PHP_HASH_HMAC 0x0001 |
27 | | |
28 | 4.29k | #define PHP_HASH_SERIALIZE_MAGIC_SPEC 2 |
29 | | |
30 | 9.68k | #define L64 INT64_C |
31 | | |
32 | | typedef enum { |
33 | | HASH_SPEC_SUCCESS = 0, |
34 | | HASH_SPEC_FAILURE = -1, |
35 | | WRONG_CONTEXT_SIZE = -999, |
36 | | BYTE_OFFSET_POS_ERROR = -1000, |
37 | | CONTEXT_VALIDATION_FAILURE = -2000, |
38 | | } hash_spec_result; |
39 | | |
40 | | typedef struct _php_hashcontext_object php_hashcontext_object; |
41 | | |
42 | | typedef void (*php_hash_init_func_t)(void *context, HashTable *args); |
43 | | typedef void (*php_hash_update_func_t)(void *context, const unsigned char *buf, size_t count); |
44 | | typedef void (*php_hash_final_func_t)(unsigned char *digest, void *context); |
45 | | typedef zend_result (*php_hash_copy_func_t)(const void *ops, const void *orig_context, void *dest_context); |
46 | | typedef hash_spec_result (*php_hash_serialize_func_t)(const php_hashcontext_object *hash, zend_long *magic, zval *zv); |
47 | | typedef hash_spec_result (*php_hash_unserialize_func_t)(php_hashcontext_object *hash, zend_long magic, const zval *zv); |
48 | | |
49 | | typedef struct _php_hash_ops { |
50 | | const char *algo; |
51 | | php_hash_init_func_t hash_init; |
52 | | php_hash_update_func_t hash_update; |
53 | | php_hash_final_func_t hash_final; |
54 | | php_hash_copy_func_t hash_copy; |
55 | | php_hash_serialize_func_t hash_serialize; |
56 | | php_hash_unserialize_func_t hash_unserialize; |
57 | | const char *serialize_spec; |
58 | | |
59 | | size_t digest_size; |
60 | | size_t block_size; |
61 | | size_t context_size; |
62 | | unsigned is_crypto: 1; |
63 | | } php_hash_ops; |
64 | | |
65 | | struct _php_hashcontext_object { |
66 | | const php_hash_ops *ops; |
67 | | void *context; |
68 | | |
69 | | zend_long options; |
70 | | unsigned char *key; |
71 | | |
72 | | zend_object std; |
73 | | }; |
74 | | |
75 | 38.4k | static inline php_hashcontext_object *php_hashcontext_from_object(zend_object *obj) { |
76 | 38.4k | return ((php_hashcontext_object*)(obj + 1)) - 1; |
77 | 38.4k | } Unexecuted instantiation: hash_adler32.c:php_hashcontext_from_object Unexecuted instantiation: hash_crc32.c:php_hashcontext_from_object Unexecuted instantiation: hash_fnv.c:php_hashcontext_from_object Unexecuted instantiation: hash_gost.c:php_hashcontext_from_object Unexecuted instantiation: hash_haval.c:php_hashcontext_from_object Unexecuted instantiation: hash_joaat.c:php_hashcontext_from_object Unexecuted instantiation: hash_md.c:php_hashcontext_from_object Unexecuted instantiation: hash_murmur.c:php_hashcontext_from_object Unexecuted instantiation: hash_ripemd.c:php_hashcontext_from_object Unexecuted instantiation: hash_sha_ni.c:php_hashcontext_from_object Unexecuted instantiation: hash_sha_sse2.c:php_hashcontext_from_object Unexecuted instantiation: hash_sha.c:php_hashcontext_from_object Unexecuted instantiation: hash_sha3.c:php_hashcontext_from_object Unexecuted instantiation: hash_snefru.c:php_hashcontext_from_object Unexecuted instantiation: hash_tiger.c:php_hashcontext_from_object Unexecuted instantiation: hash_whirlpool.c:php_hashcontext_from_object Unexecuted instantiation: hash_xxhash.c:php_hashcontext_from_object hash.c:php_hashcontext_from_object Line | Count | Source | 75 | 38.4k | static inline php_hashcontext_object *php_hashcontext_from_object(zend_object *obj) { | 76 | 38.4k | return ((php_hashcontext_object*)(obj + 1)) - 1; | 77 | 38.4k | } |
Unexecuted instantiation: zend_system_id.c:php_hashcontext_from_object Unexecuted instantiation: internal_functions_cli.c:php_hashcontext_from_object |
78 | | |
79 | | extern const php_hash_ops php_hash_md2_ops; |
80 | | extern const php_hash_ops php_hash_md4_ops; |
81 | | extern const php_hash_ops php_hash_md5_ops; |
82 | | extern const php_hash_ops php_hash_sha1_ops; |
83 | | extern const php_hash_ops php_hash_sha224_ops; |
84 | | extern const php_hash_ops php_hash_sha256_ops; |
85 | | extern const php_hash_ops php_hash_sha384_ops; |
86 | | extern const php_hash_ops php_hash_sha512_ops; |
87 | | extern const php_hash_ops php_hash_sha512_256_ops; |
88 | | extern const php_hash_ops php_hash_sha512_224_ops; |
89 | | extern const php_hash_ops php_hash_sha3_224_ops; |
90 | | extern const php_hash_ops php_hash_sha3_256_ops; |
91 | | extern const php_hash_ops php_hash_sha3_384_ops; |
92 | | extern const php_hash_ops php_hash_sha3_512_ops; |
93 | | extern const php_hash_ops php_hash_ripemd128_ops; |
94 | | extern const php_hash_ops php_hash_ripemd160_ops; |
95 | | extern const php_hash_ops php_hash_ripemd256_ops; |
96 | | extern const php_hash_ops php_hash_ripemd320_ops; |
97 | | extern const php_hash_ops php_hash_whirlpool_ops; |
98 | | extern const php_hash_ops php_hash_3tiger128_ops; |
99 | | extern const php_hash_ops php_hash_3tiger160_ops; |
100 | | extern const php_hash_ops php_hash_3tiger192_ops; |
101 | | extern const php_hash_ops php_hash_4tiger128_ops; |
102 | | extern const php_hash_ops php_hash_4tiger160_ops; |
103 | | extern const php_hash_ops php_hash_4tiger192_ops; |
104 | | extern const php_hash_ops php_hash_snefru_ops; |
105 | | extern const php_hash_ops php_hash_gost_ops; |
106 | | extern const php_hash_ops php_hash_gost_crypto_ops; |
107 | | extern const php_hash_ops php_hash_adler32_ops; |
108 | | extern const php_hash_ops php_hash_crc32_ops; |
109 | | extern const php_hash_ops php_hash_crc32b_ops; |
110 | | extern const php_hash_ops php_hash_crc32c_ops; |
111 | | extern const php_hash_ops php_hash_fnv132_ops; |
112 | | extern const php_hash_ops php_hash_fnv1a32_ops; |
113 | | extern const php_hash_ops php_hash_fnv164_ops; |
114 | | extern const php_hash_ops php_hash_fnv1a64_ops; |
115 | | extern const php_hash_ops php_hash_joaat_ops; |
116 | | extern const php_hash_ops php_hash_murmur3a_ops; |
117 | | extern const php_hash_ops php_hash_murmur3c_ops; |
118 | | extern const php_hash_ops php_hash_murmur3f_ops; |
119 | | extern const php_hash_ops php_hash_xxh32_ops; |
120 | | extern const php_hash_ops php_hash_xxh64_ops; |
121 | | extern const php_hash_ops php_hash_xxh3_64_ops; |
122 | | extern const php_hash_ops php_hash_xxh3_128_ops; |
123 | | |
124 | | #define PHP_HASH_HAVAL_OPS(p,b) extern const php_hash_ops php_hash_##p##haval##b##_ops; |
125 | | |
126 | | PHP_HASH_HAVAL_OPS(3,128) |
127 | | PHP_HASH_HAVAL_OPS(3,160) |
128 | | PHP_HASH_HAVAL_OPS(3,192) |
129 | | PHP_HASH_HAVAL_OPS(3,224) |
130 | | PHP_HASH_HAVAL_OPS(3,256) |
131 | | |
132 | | PHP_HASH_HAVAL_OPS(4,128) |
133 | | PHP_HASH_HAVAL_OPS(4,160) |
134 | | PHP_HASH_HAVAL_OPS(4,192) |
135 | | PHP_HASH_HAVAL_OPS(4,224) |
136 | | PHP_HASH_HAVAL_OPS(4,256) |
137 | | |
138 | | PHP_HASH_HAVAL_OPS(5,128) |
139 | | PHP_HASH_HAVAL_OPS(5,160) |
140 | | PHP_HASH_HAVAL_OPS(5,192) |
141 | | PHP_HASH_HAVAL_OPS(5,224) |
142 | | PHP_HASH_HAVAL_OPS(5,256) |
143 | | |
144 | | extern zend_module_entry hash_module_entry; |
145 | | #define phpext_hash_ptr &hash_module_entry |
146 | | |
147 | | #ifdef PHP_WIN32 |
148 | | # define PHP_HASH_API __declspec(dllexport) |
149 | | #elif defined(__GNUC__) && __GNUC__ >= 4 |
150 | | # define PHP_HASH_API __attribute__ ((visibility("default"))) |
151 | | #else |
152 | | # define PHP_HASH_API |
153 | | #endif |
154 | | |
155 | | extern PHP_HASH_API zend_class_entry *php_hashcontext_ce; |
156 | | PHP_HASH_API const php_hash_ops *php_hash_fetch_ops(zend_string *algo); |
157 | | PHP_HASH_API void php_hash_register_algo(const char *algo, const php_hash_ops *ops); |
158 | | PHP_HASH_API zend_result php_hash_copy(const void *ops, const void *orig_context, void *dest_context); |
159 | | PHP_HASH_API hash_spec_result php_hash_serialize(const php_hashcontext_object *context, zend_long *magic, zval *zv); |
160 | | PHP_HASH_API hash_spec_result php_hash_unserialize(php_hashcontext_object *context, zend_long magic, const zval *zv); |
161 | | PHP_HASH_API hash_spec_result php_hash_serialize_spec(const php_hashcontext_object *context, zval *zv, const char *spec); |
162 | | PHP_HASH_API hash_spec_result php_hash_unserialize_spec(php_hashcontext_object *hash, const zval *zv, const char *spec); |
163 | | |
164 | 3.98k | static inline void *php_hash_alloc_context(const php_hash_ops *ops) { |
165 | | /* Zero out context memory so serialization doesn't expose internals */ |
166 | 3.98k | return ecalloc(1, ops->context_size); |
167 | 3.98k | } Unexecuted instantiation: hash_adler32.c:php_hash_alloc_context Unexecuted instantiation: hash_crc32.c:php_hash_alloc_context Unexecuted instantiation: hash_fnv.c:php_hash_alloc_context Unexecuted instantiation: hash_gost.c:php_hash_alloc_context Unexecuted instantiation: hash_haval.c:php_hash_alloc_context Unexecuted instantiation: hash_joaat.c:php_hash_alloc_context Unexecuted instantiation: hash_md.c:php_hash_alloc_context Unexecuted instantiation: hash_murmur.c:php_hash_alloc_context Unexecuted instantiation: hash_ripemd.c:php_hash_alloc_context Unexecuted instantiation: hash_sha_ni.c:php_hash_alloc_context Unexecuted instantiation: hash_sha_sse2.c:php_hash_alloc_context Unexecuted instantiation: hash_sha.c:php_hash_alloc_context Unexecuted instantiation: hash_sha3.c:php_hash_alloc_context Unexecuted instantiation: hash_snefru.c:php_hash_alloc_context Unexecuted instantiation: hash_tiger.c:php_hash_alloc_context Unexecuted instantiation: hash_whirlpool.c:php_hash_alloc_context Unexecuted instantiation: hash_xxhash.c:php_hash_alloc_context hash.c:php_hash_alloc_context Line | Count | Source | 164 | 3.98k | static inline void *php_hash_alloc_context(const php_hash_ops *ops) { | 165 | | /* Zero out context memory so serialization doesn't expose internals */ | 166 | | return ecalloc(1, ops->context_size); | 167 | 3.98k | } |
Unexecuted instantiation: zend_system_id.c:php_hash_alloc_context Unexecuted instantiation: internal_functions_cli.c:php_hash_alloc_context |
168 | | |
169 | | static inline void php_hash_bin2hex(char *out, const unsigned char *in, size_t in_len) |
170 | 1.88k | { |
171 | 1.88k | static const char hexits[17] = "0123456789abcdef"; |
172 | 1.88k | size_t i; |
173 | | |
174 | 56.4k | for(i = 0; i < in_len; i++) { |
175 | 54.6k | out[i * 2] = hexits[in[i] >> 4]; |
176 | 54.6k | out[(i * 2) + 1] = hexits[in[i] & 0x0F]; |
177 | 54.6k | } |
178 | 1.88k | } Unexecuted instantiation: hash_adler32.c:php_hash_bin2hex Unexecuted instantiation: hash_crc32.c:php_hash_bin2hex Unexecuted instantiation: hash_fnv.c:php_hash_bin2hex Unexecuted instantiation: hash_gost.c:php_hash_bin2hex Unexecuted instantiation: hash_haval.c:php_hash_bin2hex Unexecuted instantiation: hash_joaat.c:php_hash_bin2hex Unexecuted instantiation: hash_md.c:php_hash_bin2hex Unexecuted instantiation: hash_murmur.c:php_hash_bin2hex Unexecuted instantiation: hash_ripemd.c:php_hash_bin2hex Unexecuted instantiation: hash_sha_ni.c:php_hash_bin2hex Unexecuted instantiation: hash_sha_sse2.c:php_hash_bin2hex Unexecuted instantiation: hash_sha.c:php_hash_bin2hex Unexecuted instantiation: hash_sha3.c:php_hash_bin2hex Unexecuted instantiation: hash_snefru.c:php_hash_bin2hex Unexecuted instantiation: hash_tiger.c:php_hash_bin2hex Unexecuted instantiation: hash_whirlpool.c:php_hash_bin2hex Unexecuted instantiation: hash_xxhash.c:php_hash_bin2hex Line | Count | Source | 170 | 1.86k | { | 171 | 1.86k | static const char hexits[17] = "0123456789abcdef"; | 172 | 1.86k | size_t i; | 173 | | | 174 | 56.2k | for(i = 0; i < in_len; i++) { | 175 | 54.3k | out[i * 2] = hexits[in[i] >> 4]; | 176 | 54.3k | out[(i * 2) + 1] = hexits[in[i] & 0x0F]; | 177 | 54.3k | } | 178 | 1.86k | } |
zend_system_id.c:php_hash_bin2hex Line | Count | Source | 170 | 16 | { | 171 | 16 | static const char hexits[17] = "0123456789abcdef"; | 172 | 16 | size_t i; | 173 | | | 174 | 272 | for(i = 0; i < in_len; i++) { | 175 | 256 | out[i * 2] = hexits[in[i] >> 4]; | 176 | 256 | out[(i * 2) + 1] = hexits[in[i] & 0x0F]; | 177 | 256 | } | 178 | 16 | } |
Unexecuted instantiation: internal_functions_cli.c:php_hash_bin2hex |
179 | | |
180 | | #endif /* PHP_HASH_H */ |