]> pd.if.org Git - zpackage/blob - libtomcrypt/src/hashes/helper/hash_memory.c
commit files needed for zpm-fetchurl
[zpackage] / libtomcrypt / src / hashes / helper / hash_memory.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 #ifdef LTC_HASH_HELPERS
12 /**
13   @file hash_memory.c
14   Hash memory helper, Tom St Denis
15 */
16
17 /**
18   Hash a block of memory and store the digest.
19   @param hash   The index of the hash you wish to use
20   @param in     The data you wish to hash
21   @param inlen  The length of the data to hash (octets)
22   @param out    [out] Where to store the digest
23   @param outlen [in/out] Max size and resulting size of the digest
24   @return CRYPT_OK if successful
25 */
26 int hash_memory(int hash, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen)
27 {
28     hash_state *md;
29     int err;
30
31     LTC_ARGCHK(in     != NULL);
32     LTC_ARGCHK(out    != NULL);
33     LTC_ARGCHK(outlen != NULL);
34
35     if ((err = hash_is_valid(hash)) != CRYPT_OK) {
36         return err;
37     }
38
39     if (*outlen < hash_descriptor[hash].hashsize) {
40        *outlen = hash_descriptor[hash].hashsize;
41        return CRYPT_BUFFER_OVERFLOW;
42     }
43
44     md = XMALLOC(sizeof(hash_state));
45     if (md == NULL) {
46        return CRYPT_MEM;
47     }
48
49     if ((err = hash_descriptor[hash].init(md)) != CRYPT_OK) {
50        goto LBL_ERR;
51     }
52     if ((err = hash_descriptor[hash].process(md, in, inlen)) != CRYPT_OK) {
53        goto LBL_ERR;
54     }
55     err = hash_descriptor[hash].done(md, out);
56     *outlen = hash_descriptor[hash].hashsize;
57 LBL_ERR:
58 #ifdef LTC_CLEAN_STACK
59     zeromem(md, sizeof(hash_state));
60 #endif
61     XFREE(md);
62
63     return err;
64 }
65 #endif /* #ifdef LTC_HASH_HELPERS */
66
67 /* ref:         $Format:%D$ */
68 /* git commit:  $Format:%H$ */
69 /* commit time: $Format:%ai$ */