• 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 xcbc_process.c
15   XCBC Support, XCBC-MAC a block of memory
16 */
17 
18 #ifdef LTC_XCBC
19 
20 /** XCBC-MAC a block of memory
21   @param cipher     Index of cipher to use
22   @param key        [in]  Secret key
23   @param keylen     Length of key in octets
24   @param in         [in]  Message to MAC
25   @param inlen      Length of input in octets
26   @param out        [out] Destination for the MAC tag
27   @param outlen     [in/out] Output size and final tag size
28   Return CRYPT_OK on success.
29 */
xcbc_memory(int cipher,const unsigned char * key,unsigned long keylen,const unsigned char * in,unsigned long inlen,unsigned char * out,unsigned long * outlen)30 int xcbc_memory(int cipher,
31                const unsigned char *key, unsigned long keylen,
32                const unsigned char *in,  unsigned long inlen,
33                      unsigned char *out, unsigned long *outlen)
34 {
35    xcbc_state *xcbc;
36    int         err;
37 
38    /* is the cipher valid? */
39    if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {
40       return err;
41    }
42 
43    /* Use accelerator if found */
44    if (cipher_descriptor[cipher].xcbc_memory != NULL) {
45       return cipher_descriptor[cipher].xcbc_memory(key, keylen, in, inlen, out, outlen);
46    }
47 
48    xcbc = XCALLOC(1, sizeof(*xcbc));
49    if (xcbc == NULL) {
50       return CRYPT_MEM;
51    }
52 
53    if ((err = xcbc_init(xcbc, cipher, key, keylen)) != CRYPT_OK) {
54      goto done;
55    }
56 
57    if ((err = xcbc_process(xcbc, in, inlen)) != CRYPT_OK) {
58      goto done;
59    }
60 
61    err = xcbc_done(xcbc, out, outlen);
62 done:
63    XFREE(xcbc);
64    return err;
65 }
66 
67 #endif
68 
69 /* $Source: /cvs/libtom/libtomcrypt/src/mac/xcbc/xcbc_memory.c,v $ */
70 /* $Revision: 1.4 $ */
71 /* $Date: 2006/11/21 23:02:42 $ */
72