]> pd.if.org Git - zpackage/blob - libtomcrypt/src/hashes/helper/hash_file.c
commit files needed for zpm-fetchurl
[zpackage] / libtomcrypt / src / hashes / helper / hash_file.c
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
2  *
3  * LibTomCrypt is a library that provides various cryptographic
4  * algorithms in a highly modular and flexible manner.
5  *
6  * The library is free for all purposes without any express
7  * guarantee it works.
8  */
9 #include "tomcrypt.h"
10
11 #ifndef LTC_NO_FILE
12 /**
13   @file hash_file.c
14   Hash a file, Tom St Denis
15 */
16
17 /**
18   @param hash   The index of the hash desired
19   @param fname  The name of the file you wish to hash
20   @param out    [out] The destination of the digest
21   @param outlen [in/out] The max size and resulting size of the message digest
22   @result CRYPT_OK if successful
23 */
24 int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *outlen)
25 {
26     FILE *in;
27     int err;
28     LTC_ARGCHK(fname  != NULL);
29     LTC_ARGCHK(out    != NULL);
30     LTC_ARGCHK(outlen != NULL);
31
32     if ((err = hash_is_valid(hash)) != CRYPT_OK) {
33         return err;
34     }
35
36     in = fopen(fname, "rb");
37     if (in == NULL) {
38        return CRYPT_FILE_NOTFOUND;
39     }
40
41     err = hash_filehandle(hash, in, out, outlen);
42     if (fclose(in) != 0) {
43        return CRYPT_ERROR;
44     }
45
46     return err;
47 }
48 #endif /* #ifndef LTC_NO_FILE */
49
50
51 /* ref:         $Format:%D$ */
52 /* git commit:  $Format:%H$ */
53 /* commit time: $Format:%ai$ */