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 pmac_memory.c
15   PMAC implementation, process a block of memory, by Tom St Denis
16*/
17
18#ifdef LTC_PMAC
19
20/**
21   PMAC a block of memory
22   @param cipher   The index of the cipher desired
23   @param key      The secret key
24   @param keylen   The length of the secret key (octets)
25   @param in       The data you wish to send through PMAC
26   @param inlen    The length of data you wish to send through PMAC (octets)
27   @param out      [out] Destination for the authentication tag
28   @param outlen   [in/out] The max size and resulting size of the authentication tag
29   @return CRYPT_OK if successful
30*/
31int pmac_memory(int cipher,
32                const unsigned char *key, unsigned long keylen,
33                const unsigned char *in, unsigned long inlen,
34                      unsigned char *out, unsigned long *outlen)
35{
36   int err;
37   pmac_state *pmac;
38
39   LTC_ARGCHK(key    != NULL);
40   LTC_ARGCHK(in    != NULL);
41   LTC_ARGCHK(out    != NULL);
42   LTC_ARGCHK(outlen != NULL);
43
44   /* allocate ram for pmac state */
45   pmac = XMALLOC(sizeof(pmac_state));
46   if (pmac == NULL) {
47      return CRYPT_MEM;
48   }
49
50   if ((err = pmac_init(pmac, cipher, key, keylen)) != CRYPT_OK) {
51      goto LBL_ERR;
52   }
53   if ((err = pmac_process(pmac, in, inlen)) != CRYPT_OK) {
54      goto LBL_ERR;
55   }
56   if ((err = pmac_done(pmac, out, outlen)) != CRYPT_OK) {
57      goto LBL_ERR;
58   }
59
60   err = CRYPT_OK;
61LBL_ERR:
62#ifdef LTC_CLEAN_STACK
63   zeromem(pmac, sizeof(pmac_state));
64#endif
65
66   XFREE(pmac);
67   return err;
68}
69
70#endif
71
72/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_memory.c,v $ */
73/* $Revision: 1.5 $ */
74/* $Date: 2006/11/03 00:39:49 $ */
75