1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* LibTomCrypt, modular cryptographic library -- Tom St Denis
2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * LibTomCrypt is a library that provides various cryptographic
4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * algorithms in a highly modular and flexible manner.
5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The library is free for all purposes without any express
7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * guarantee it works.
8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "tomcrypt.h"
12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   @file pelican_memory.c
15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   Pelican MAC, MAC a block of memory, by Tom St Denis
16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef PELICAN
19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  Pelican block of memory
22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param key      The key for the MAC
23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param keylen   The length of the key (octets)
24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param in       The input to MAC
25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param inlen    The length of the input (octets)
26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param out      [out] The output TAG
27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @return CRYPT_OK on success
28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint pelican_memory(const unsigned char *key, unsigned long keylen,
30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                   const unsigned char *in,  unsigned long inlen,
31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                         unsigned char *out)
32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   pelican_state *pel;
34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   int err;
35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   pel = XMALLOC(sizeof(*pel));
37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (pel == NULL) {
38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return CRYPT_MEM;
39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if ((err = pelican_init(pel, key, keylen)) != CRYPT_OK) {
42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      XFREE(pel);
43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return err;
44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if ((err = pelican_process(pel, in ,inlen)) != CRYPT_OK) {
46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      XFREE(pel);
47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return err;
48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   err = pelican_done(pel, out);
50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   XFREE(pel);
51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   return err;
52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/mac/pelican/pelican_memory.c,v $ */
58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.6 $ */
59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/03/31 14:15:35 $ */
60