version 0.3.33
[fms.git] / libs / libtomcrypt / 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  * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
10  */
11 #include "tomcrypt.h"
12
13 /**
14   @file hash_memory.c
15   Hash memory helper, Tom St Denis
16 */
17
18 /**
19   Hash a block of memory and store the digest.
20   @param hash   The index of the hash you wish to use
21   @param in     The data you wish to hash
22   @param inlen  The length of the data to hash (octets)
23   @param out    [out] Where to store the digest
24   @param outlen [in/out] Max size and resulting size of the digest
25   @return CRYPT_OK if successful
26 */
27 int hash_memory(int hash, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen)
28 {
29     hash_state *md;
30     int err;
31
32     LTC_ARGCHK(in     != NULL);
33     LTC_ARGCHK(out    != NULL);
34     LTC_ARGCHK(outlen != NULL);
35
36     if ((err = hash_is_valid(hash)) != CRYPT_OK) {
37         return err;
38     }
39
40     if (*outlen < hash_descriptor[hash].hashsize) {
41        *outlen = hash_descriptor[hash].hashsize;
42        return CRYPT_BUFFER_OVERFLOW;
43     }
44
45     md = XMALLOC(sizeof(hash_state));
46     if (md == NULL) {
47        return CRYPT_MEM;
48     }
49
50     if ((err = hash_descriptor[hash].init(md)) != CRYPT_OK) {
51        goto LBL_ERR;
52     }
53     if ((err = hash_descriptor[hash].process(md, in, inlen)) != CRYPT_OK) {
54        goto LBL_ERR;
55     }
56     err = hash_descriptor[hash].done(md, out);
57     *outlen = hash_descriptor[hash].hashsize;
58 LBL_ERR:
59 #ifdef LTC_CLEAN_STACK
60     zeromem(md, sizeof(hash_state));
61 #endif
62     XFREE(md);
63
64     return err;
65 }
66
67 /* $Source: /cvs/libtom/libtomcrypt/src/hashes/helper/hash_memory.c,v $ */
68 /* $Revision: 1.5 $ */
69 /* $Date: 2006/06/16 21:53:41 $ */