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