Home | History | Annotate | Download | only in xcbc
      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 (at) 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 */
     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