1/* 2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved. 3 * 4 * The contents of this file constitute Original Code as defined in and are 5 * subject to the Apple Public Source License Version 1.2 (the 'License'). 6 * You may not use this file except in compliance with the License. Please obtain 7 * a copy of the License at http://www.apple.com/publicsource and read it before 8 * using this file. 9 * 10 * This Original Code and all software distributed under the License are 11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS 12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT 13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the 15 * specific language governing rights and limitations under the License. 16 */ 17 18 19/* 20 * rijndaelApi.h - AES API layer 21 * 22 * Based on rijndael-api-ref.h v2.0 written by Paulo Barreto 23 * and Vincent Rijmen 24 */ 25 26#ifndef _RIJNDAEL_API_REF_H_ 27#define _RIJNDAEL_API_REF_H_ 28 29#include <stdio.h> 30#include "rijndael-alg-ref.h" 31 32#ifdef __cplusplus 33extern "C" { 34#endif 35 36/* Error Codes */ 37#define BAD_KEY_MAT -1 /* Key material not of correct 38 length */ 39#define BAD_KEY_INSTANCE -2 /* Key passed is not valid */ 40 41#define MAX_AES_KEY_SIZE (MAX_AES_KEY_BITS / 8) 42#define MAX_AES_BLOCK_SIZE (MAX_AES_BLOCK_BITS / 8) 43#define MAX_AES_IV_SIZE MAX_AES_BLOCK_SIZE 44 45#define TRUE 1 46#define FALSE 0 47 48/* The structure for key information */ 49typedef struct { 50 word32 keyLen; /* Length of the key in bits */ 51 word32 blockLen; /* Length of block in bits */ 52 word32 columns; /* optimization, blockLen / 32 */ 53 word8 keySched[MAXROUNDS+1][4][MAXBC]; 54} keyInstance; 55 56int makeKey( 57 keyInstance *key, 58 int keyLen, // in BITS 59 int blockLen, // in BITS 60 word8 *keyMaterial, 61 int enable128Opt); 62 63/* 64 * Simplified single-block encrypt/decrypt. 65 */ 66int rijndaelBlockEncrypt( 67 keyInstance *key, 68 word8 *input, 69 word8 *outBuffer); 70int rijndaelBlockDecrypt( 71 keyInstance *key, 72 word8 *input, 73 word8 *outBuffer); 74 75#if !GLADMAN_AES_128_ENABLE 76/* 77 * Optimized routines for 128 bit block and 128 bit key. 78 */ 79int rijndaelBlockEncrypt128( 80 keyInstance *key, 81 word8 *input, 82 word8 *outBuffer); 83int rijndaelBlockDecrypt128( 84 keyInstance *key, 85 word8 *input, 86 word8 *outBuffer); 87#endif /* !GLADMAN_AES_128_ENABLE */ 88 89#if defined(__ppc__) && defined(ALTIVEC_ENABLE) 90/* 91 * dmitch addenda 4/11/2001: 128-bit only vectorized encrypt/decrypt with no CBC 92 */ 93void vBlockEncrypt128( 94 keyInstance *key, 95 word8 *input, 96 word8 *outBuffer); 97void vBlockDecrypt128( 98 keyInstance *key, 99 word8 *input, 100 word8 *outBuffer); 101 102/* temp switch for runtime enable/disable */ 103extern int doAES128; 104 105#endif /* __ppc__ && ALTIVEC_ENABLE */ 106 107/* ptr to one of several (possibly optimized) encrypt/decrypt functions */ 108typedef int (*aesCryptFcn)( 109 keyInstance *key, 110 word8 *input, 111 word8 *outBuffer); 112 113#ifdef __cplusplus 114} 115#endif // cplusplus 116 117#endif // RIJNDAEL_API_REF 118 119 120