1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
3 * LibTomCrypt is a library that provides various cryptographic
4 * algorithms in a highly modular and flexible manner.
6 * The library is free for all purposes without any express
9 * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
14 @file hash_filehandle.c
15 Hash open files, Tom St Denis
19 Hash data from an open file handle.
20 @param hash The index of the hash you want to use
21 @param in The FILE* handle of the file you want to hash
22 @param out [out] The destination of the digest
23 @param outlen [in/out] The max size and resulting size of the digest
24 @result CRYPT_OK if successful
26 int hash_filehandle(int hash
, FILE *in
, unsigned char *out
, unsigned long *outlen
)
29 (void)hash
; (void)in
; (void)out
; (void)outlen
;
33 unsigned char buf
[512];
37 LTC_ARGCHK(out
!= NULL
);
38 LTC_ARGCHK(outlen
!= NULL
);
39 LTC_ARGCHK(in
!= NULL
);
41 if ((err
= hash_is_valid(hash
)) != CRYPT_OK
) {
45 if (*outlen
< hash_descriptor
[hash
].hashsize
) {
46 *outlen
= hash_descriptor
[hash
].hashsize
;
47 return CRYPT_BUFFER_OVERFLOW
;
49 if ((err
= hash_descriptor
[hash
].init(&md
)) != CRYPT_OK
) {
53 *outlen
= hash_descriptor
[hash
].hashsize
;
55 x
= fread(buf
, 1, sizeof(buf
), in
);
56 if ((err
= hash_descriptor
[hash
].process(&md
, buf
, x
)) != CRYPT_OK
) {
59 } while (x
== sizeof(buf
));
60 err
= hash_descriptor
[hash
].done(&md
, out
);
62 #ifdef LTC_CLEAN_STACK
63 zeromem(buf
, sizeof(buf
));
70 /* $Source: /cvs/libtom/libtomcrypt/src/hashes/helper/hash_filehandle.c,v $ */
71 /* $Revision: 1.5 $ */
72 /* $Date: 2006/06/16 21:53:41 $ */