]> git.saurik.com Git - apple/security.git/blob - AppleCSP/AES/rijndaelApi.h
Security-179.tar.gz
[apple/security.git] / AppleCSP / AES / rijndaelApi.h
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
33 extern "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 */
49 typedef 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
56 int 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 */
66 int rijndaelBlockEncrypt(
67 keyInstance *key,
68 word8 *input,
69 word8 *outBuffer);
70 int 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 */
79 int rijndaelBlockEncrypt128(
80 keyInstance *key,
81 word8 *input,
82 word8 *outBuffer);
83 int 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 */
93 void vBlockEncrypt128(
94 keyInstance *key,
95 word8 *input,
96 word8 *outBuffer);
97 void vBlockDecrypt128(
98 keyInstance *key,
99 word8 *input,
100 word8 *outBuffer);
101
102 /* temp switch for runtime enable/disable */
103 extern int doAES128;
104
105 #endif /* __ppc__ && ALTIVEC_ENABLE */
106
107 /* ptr to one of several (possibly optimized) encrypt/decrypt functions */
108 typedef 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