pelican_memory.c revision 29698e296e3fd1474a362fbd229bca888175bb66
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* LibTomCrypt, modular cryptographic library -- Tom St Denis
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LibTomCrypt is a library that provides various cryptographic
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * algorithms in a highly modular and flexible manner.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The library is free for all purposes without any express
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * guarantee it works.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "tomcrypt.h"
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   @file pelican_memory.c
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   Pelican MAC, MAC a block of memory, by Tom St Denis
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef PELICAN
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Pelican block of memory
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  @param key      The key for the MAC
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  @param keylen   The length of the key (octets)
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  @param in       The input to MAC
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  @param inlen    The length of the input (octets)
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  @param out      [out] The output TAG
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  @return CRYPT_OK on success
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint pelican_memory(const unsigned char *key, unsigned long keylen,
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                   const unsigned char *in,  unsigned long inlen,
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                         unsigned char *out)
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   pelican_state *pel;
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   int err;
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   pel = XMALLOC(sizeof(*pel));
372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block   if (pel == NULL) {
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      return CRYPT_MEM;
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   }
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   if ((err = pelican_init(pel, key, keylen)) != CRYPT_OK) {
42cad810f21b803229eb11403f9209855525a25d57Steve Block      XFREE(pel);
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      return err;
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   }
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   if ((err = pelican_process(pel, in ,inlen)) != CRYPT_OK) {
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      XFREE(pel);
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      return err;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   }
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   err = pelican_done(pel, out);
5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch   XFREE(pel);
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   return err;
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif
562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/mac/pelican/pelican_memory.c,v $ */
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* $Revision: 1.6 $ */
5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch/* $Date: 2006/03/31 14:15:35 $ */
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch