1 : /*
2 : +----------------------------------------------------------------------+
3 : | PHP Version 6 |
4 : +----------------------------------------------------------------------+
5 : | Copyright (c) 1997-2009 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: Sara Golemon <pollita@php.net> |
16 : +----------------------------------------------------------------------+
17 : */
18 :
19 : /* $Id: php_hash.h 276986 2009-03-10 23:40:06Z helly $ */
20 :
21 : #ifndef PHP_HASH_H
22 : #define PHP_HASH_H
23 :
24 : #include "php.h"
25 : #include "php_hash_types.h"
26 :
27 : #ifndef slprintf
28 : # define slprintf snprintf
29 : #endif
30 :
31 : #define PHP_HASH_EXTNAME "hash"
32 : #define PHP_HASH_EXTVER "1.0"
33 : #define PHP_HASH_RESNAME "Hash Context"
34 :
35 : #define PHP_HASH_HMAC 0x0001
36 :
37 : typedef void (*php_hash_init_func_t)(void *context);
38 : typedef void (*php_hash_update_func_t)(void *context, const unsigned char *buf, unsigned int count);
39 : typedef void (*php_hash_final_func_t)(unsigned char *digest, void *context);
40 : typedef int (*php_hash_copy_func_t)(const void *ops, void *orig_context, void *dest_context);
41 :
42 : typedef struct _php_hash_ops {
43 : php_hash_init_func_t hash_init;
44 : php_hash_update_func_t hash_update;
45 : php_hash_final_func_t hash_final;
46 : php_hash_copy_func_t hash_copy;
47 :
48 : int digest_size;
49 : int block_size;
50 : int context_size;
51 : } php_hash_ops;
52 :
53 : typedef struct _php_hash_data {
54 : const php_hash_ops *ops;
55 : void *context;
56 :
57 : long options;
58 : unsigned char *key;
59 : } php_hash_data;
60 :
61 : extern const php_hash_ops php_hash_md2_ops;
62 : extern const php_hash_ops php_hash_md4_ops;
63 : extern const php_hash_ops php_hash_md5_ops;
64 : extern const php_hash_ops php_hash_sha1_ops;
65 : extern const php_hash_ops php_hash_sha224_ops;
66 : extern const php_hash_ops php_hash_sha256_ops;
67 : extern const php_hash_ops php_hash_sha384_ops;
68 : extern const php_hash_ops php_hash_sha512_ops;
69 : extern const php_hash_ops php_hash_ripemd128_ops;
70 : extern const php_hash_ops php_hash_ripemd160_ops;
71 : extern const php_hash_ops php_hash_ripemd256_ops;
72 : extern const php_hash_ops php_hash_ripemd320_ops;
73 : extern const php_hash_ops php_hash_whirlpool_ops;
74 : extern const php_hash_ops php_hash_3tiger128_ops;
75 : extern const php_hash_ops php_hash_3tiger160_ops;
76 : extern const php_hash_ops php_hash_3tiger192_ops;
77 : extern const php_hash_ops php_hash_4tiger128_ops;
78 : extern const php_hash_ops php_hash_4tiger160_ops;
79 : extern const php_hash_ops php_hash_4tiger192_ops;
80 : extern const php_hash_ops php_hash_snefru_ops;
81 : extern const php_hash_ops php_hash_gost_ops;
82 : extern const php_hash_ops php_hash_adler32_ops;
83 : extern const php_hash_ops php_hash_crc32_ops;
84 : extern const php_hash_ops php_hash_crc32b_ops;
85 : extern const php_hash_ops php_hash_salsa10_ops;
86 : extern const php_hash_ops php_hash_salsa20_ops;
87 :
88 : #define PHP_HASH_HAVAL_OPS(p,b) extern const php_hash_ops php_hash_##p##haval##b##_ops;
89 :
90 : PHP_HASH_HAVAL_OPS(3,128)
91 : PHP_HASH_HAVAL_OPS(3,160)
92 : PHP_HASH_HAVAL_OPS(3,192)
93 : PHP_HASH_HAVAL_OPS(3,224)
94 : PHP_HASH_HAVAL_OPS(3,256)
95 :
96 : PHP_HASH_HAVAL_OPS(4,128)
97 : PHP_HASH_HAVAL_OPS(4,160)
98 : PHP_HASH_HAVAL_OPS(4,192)
99 : PHP_HASH_HAVAL_OPS(4,224)
100 : PHP_HASH_HAVAL_OPS(4,256)
101 :
102 : PHP_HASH_HAVAL_OPS(5,128)
103 : PHP_HASH_HAVAL_OPS(5,160)
104 : PHP_HASH_HAVAL_OPS(5,192)
105 : PHP_HASH_HAVAL_OPS(5,224)
106 : PHP_HASH_HAVAL_OPS(5,256)
107 :
108 : extern zend_module_entry hash_module_entry;
109 : #define phpext_hash_ptr &hash_module_entry
110 :
111 : #ifdef PHP_WIN32
112 : # define PHP_HASH_API __declspec(dllexport)
113 : #elif defined(__GNUC__) && __GNUC__ >= 4
114 : # define PHP_HASH_API __attribute__ ((visibility("default")))
115 : #else
116 : # define PHP_HASH_API
117 : #endif
118 :
119 : #ifdef ZTS
120 : #include "TSRM.h"
121 : #endif
122 :
123 : PHP_FUNCTION(hash);
124 : PHP_FUNCTION(hash_file);
125 : PHP_FUNCTION(hash_hmac);
126 : PHP_FUNCTION(hash_hmac_file);
127 : PHP_FUNCTION(hash_init);
128 : PHP_FUNCTION(hash_update);
129 : PHP_FUNCTION(hash_update_stream);
130 : PHP_FUNCTION(hash_update_file);
131 : PHP_FUNCTION(hash_final);
132 : PHP_FUNCTION(hash_algos);
133 :
134 : PHP_HASH_API const php_hash_ops *php_hash_fetch_ops(const char *algo, int algo_len);
135 : PHP_HASH_API void php_hash_register_algo(const char *algo, const php_hash_ops *ops);
136 : PHP_HASH_API int php_hash_copy(const void *ops, void *orig_context, void *dest_context);
137 :
138 : static inline void php_hash_bin2hex(char *out, const unsigned char *in, int in_len)
139 397 : {
140 : static const char hexits[17] = "0123456789abcdef";
141 : int i;
142 :
143 10801 : for(i = 0; i < in_len; i++) {
144 10404 : out[i * 2] = hexits[in[i] >> 4];
145 10404 : out[(i * 2) + 1] = hexits[in[i] & 0x0F];
146 : }
147 397 : }
148 :
149 : #endif /* PHP_HASH_H */
150 :
151 :
152 : /*
153 : * Local variables:
154 : * tab-width: 4
155 : * c-basic-offset: 4
156 : * End:
157 : * vim600: noet sw=4 ts=4 fdm=marker
158 : * vim<600: noet sw=4 ts=4
159 : */
|