• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
pmac_memory(int cipher,const unsigned char * key,unsigned long keylen,const unsigned char * in,unsigned long inlen,unsigned char * out,unsigned long * outlen)31 int 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;
61 LBL_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