1
/* ---- HASH FUNCTIONS ---- */
4
ulong64 length, state[8];
6
unsigned char buf[128];
13
ulong32 state[8], curlen;
14
unsigned char buf[64];
21
ulong32 state[5], curlen;
22
unsigned char buf[64];
29
ulong32 state[4], curlen;
30
unsigned char buf[64];
37
ulong32 state[4], curlen;
38
unsigned char buf[64];
44
ulong64 state[3], length;
46
unsigned char buf[64];
52
unsigned char chksum[16], X[48], buf[16];
60
unsigned char buf[64];
61
ulong32 curlen, state[4];
68
unsigned char buf[64];
69
ulong32 curlen, state[5];
74
struct whirlpool_state {
75
ulong64 length, state[8];
76
unsigned char buf[64];
84
unsigned char state[MAXBLOCKSIZE], buf[MAXBLOCKSIZE];
89
typedef union Hash_state {
94
struct whirlpool_state whirlpool;
97
struct sha512_state sha512;
100
struct sha256_state sha256;
103
struct sha1_state sha1;
106
struct md5_state md5;
109
struct md4_state md4;
112
struct md2_state md2;
115
struct tiger_state tiger;
118
struct rmd128_state rmd128;
121
struct rmd160_state rmd160;
126
extern struct ltc_hash_descriptor {
131
/** Size of digest in octets */
132
unsigned long hashsize;
133
/** Input block size in octets */
134
unsigned long blocksize;
136
unsigned long OID[16];
137
/** Length of DER encoding */
138
unsigned long OIDlen;
140
/** Init a hash state
141
@param hash The hash to initialize
142
@return CRYPT_OK if successful
144
int (*init)(hash_state *hash);
145
/** Process a block of data
146
@param hash The hash state
147
@param in The data to hash
148
@param inlen The length of the data (octets)
149
@return CRYPT_OK if successful
151
int (*process)(hash_state *hash, const unsigned char *in, unsigned long inlen);
152
/** Produce the digest and store it
153
@param hash The hash state
154
@param out [out] The destination of the digest
155
@return CRYPT_OK if successful
157
int (*done)(hash_state *hash, unsigned char *out);
159
@return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled
165
int chc_register(int cipher);
166
int chc_init(hash_state * md);
167
int chc_process(hash_state * md, const unsigned char *in, unsigned long inlen);
168
int chc_done(hash_state * md, unsigned char *hash);
170
extern const struct ltc_hash_descriptor chc_desc;
174
int whirlpool_init(hash_state * md);
175
int whirlpool_process(hash_state * md, const unsigned char *in, unsigned long inlen);
176
int whirlpool_done(hash_state * md, unsigned char *hash);
177
int whirlpool_test(void);
178
extern const struct ltc_hash_descriptor whirlpool_desc;
182
int sha512_init(hash_state * md);
183
int sha512_process(hash_state * md, const unsigned char *in, unsigned long inlen);
184
int sha512_done(hash_state * md, unsigned char *hash);
185
int sha512_test(void);
186
extern const struct ltc_hash_descriptor sha512_desc;
191
#error SHA512 is required for SHA384
193
int sha384_init(hash_state * md);
194
#define sha384_process sha512_process
195
int sha384_done(hash_state * md, unsigned char *hash);
196
int sha384_test(void);
197
extern const struct ltc_hash_descriptor sha384_desc;
201
int sha256_init(hash_state * md);
202
int sha256_process(hash_state * md, const unsigned char *in, unsigned long inlen);
203
int sha256_done(hash_state * md, unsigned char *hash);
204
int sha256_test(void);
205
extern const struct ltc_hash_descriptor sha256_desc;
209
#error SHA256 is required for SHA224
211
int sha224_init(hash_state * md);
212
#define sha224_process sha256_process
213
int sha224_done(hash_state * md, unsigned char *hash);
214
int sha224_test(void);
215
extern const struct ltc_hash_descriptor sha224_desc;
220
int sha1_init(hash_state * md);
221
int sha1_process(hash_state * md, const unsigned char *in, unsigned long inlen);
222
int sha1_done(hash_state * md, unsigned char *hash);
224
extern const struct ltc_hash_descriptor sha1_desc;
228
int md5_init(hash_state * md);
229
int md5_process(hash_state * md, const unsigned char *in, unsigned long inlen);
230
int md5_done(hash_state * md, unsigned char *hash);
232
extern const struct ltc_hash_descriptor md5_desc;
236
int md4_init(hash_state * md);
237
int md4_process(hash_state * md, const unsigned char *in, unsigned long inlen);
238
int md4_done(hash_state * md, unsigned char *hash);
240
extern const struct ltc_hash_descriptor md4_desc;
244
int md2_init(hash_state * md);
245
int md2_process(hash_state * md, const unsigned char *in, unsigned long inlen);
246
int md2_done(hash_state * md, unsigned char *hash);
248
extern const struct ltc_hash_descriptor md2_desc;
252
int tiger_init(hash_state * md);
253
int tiger_process(hash_state * md, const unsigned char *in, unsigned long inlen);
254
int tiger_done(hash_state * md, unsigned char *hash);
255
int tiger_test(void);
256
extern const struct ltc_hash_descriptor tiger_desc;
260
int rmd128_init(hash_state * md);
261
int rmd128_process(hash_state * md, const unsigned char *in, unsigned long inlen);
262
int rmd128_done(hash_state * md, unsigned char *hash);
263
int rmd128_test(void);
264
extern const struct ltc_hash_descriptor rmd128_desc;
268
int rmd160_init(hash_state * md);
269
int rmd160_process(hash_state * md, const unsigned char *in, unsigned long inlen);
270
int rmd160_done(hash_state * md, unsigned char *hash);
271
int rmd160_test(void);
272
extern const struct ltc_hash_descriptor rmd160_desc;
275
int find_hash(const char *name);
276
int find_hash_id(unsigned char ID);
277
int find_hash_any(const char *name, int digestlen);
278
int register_hash(const struct ltc_hash_descriptor *hash);
279
int unregister_hash(const struct ltc_hash_descriptor *hash);
280
int hash_is_valid(int idx);
282
LTC_MUTEX_PROTO(ltc_hash_mutex);
284
int hash_memory(int hash,
285
const unsigned char *in, unsigned long inlen,
286
unsigned char *out, unsigned long *outlen);
287
int hash_memory_multi(int hash, unsigned char *out, unsigned long *outlen,
288
const unsigned char *in, unsigned long inlen, ...);
289
int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outlen);
290
int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *outlen);
292
/* a simple macro for making hash "process" functions */
293
#define HASH_PROCESS(func_name, compress_name, state_var, block_size) \
294
int func_name (hash_state * md, const unsigned char *in, unsigned long inlen) \
298
LTC_ARGCHK(md != NULL); \
299
LTC_ARGCHK(in != NULL); \
300
if (md-> state_var .curlen > sizeof(md-> state_var .buf)) { \
301
return CRYPT_INVALID_ARG; \
303
while (inlen > 0) { \
304
if (md-> state_var .curlen == 0 && inlen >= block_size) { \
305
if ((err = compress_name (md, (unsigned char *)in)) != CRYPT_OK) { \
308
md-> state_var .length += block_size * 8; \
310
inlen -= block_size; \
312
n = MIN(inlen, (block_size - md-> state_var .curlen)); \
313
memcpy(md-> state_var .buf + md-> state_var.curlen, in, (size_t)n); \
314
md-> state_var .curlen += n; \
317
if (md-> state_var .curlen == block_size) { \
318
if ((err = compress_name (md, md-> state_var .buf)) != CRYPT_OK) { \
321
md-> state_var .length += 8*block_size; \
322
md-> state_var .curlen = 0; \
329
/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_hash.h,v $ */
330
/* $Revision: 1.12 $ */
331
/* $Date: 2005/06/19 18:00:28 $ */