/** * airpdcap_rijndael.h * * $Id: airpdcap_rijndael.h 25879 2008-07-30 22:32:21Z gerald $ * * @version 3.0 (December 2000) * * Optimised ANSI C code for the Rijndael cipher (now AES) * * @author Vincent Rijmen * @author Antoon Bosselaers * @author Paulo Barreto * * This code is hereby placed in the public domain. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _AIRPDCAP_RIJNDAEL #define _AIRPDCAP_RIJNDAEL /******************************************************************************/ /* File includes */ /* */ #include "airpdcap_interop.h" /* */ /* */ /******************************************************************************/ /******************************************************************************/ /* Definitions */ /* */ /* Note: copied AirPDcap/rijndael/rijndael.h */ #define RIJNDAEL_MAXKC (256/32) #define RIJNDAEL_MAXKB (256/8) #define RIJNDAEL_MAXNR 14 /* */ /******************************************************************************/ /******************************************************************************/ /* Type definitions */ /* */ /* Note: copied AirPDcap/rijndael/rijndael.h */ typedef struct s_rijndael_ctx { INT Nr; /* key-length-dependent number of rounds */ UINT32 ek[4 * (RIJNDAEL_MAXNR + 1)]; /* encrypt key schedule */ UINT32 dk[4 * (RIJNDAEL_MAXNR + 1)]; /* decrypt key schedule */ } rijndael_ctx; /* */ /******************************************************************************/ /******************************************************************************/ /* External function prototypes declarations */ /* */ void rijndael_encrypt( const rijndael_ctx *ctx, const UCHAR *src, UCHAR *dst) ; void rijndael_set_key( rijndael_ctx *ctx, const UCHAR *key, INT bits) ; UCHAR AES_unwrap(UCHAR *kek, UINT16 key_len, UCHAR *cipher_text, UINT16 cipher_len, UCHAR *output); /* */ /******************************************************************************/ /******************************************************************************/ /* Block XOR macro definition */ /* */ #define XOR_BLOCK(b, a, len) \ { \ INT __i__; \ for (__i__ = 0; __i__ < (INT)(len); __i__++) \ (b)[__i__] ^= (a)[__i__]; \ } /* */ /******************************************************************************/ #endif