1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
65
66
67
68
72
73
80
81
82
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
139
140
141
142
146
147
148
149
153
154
155
156
160
161
162
/* ... */
#ifndef AES_H
#define AES_H
#if 1
# define AES_ENC_PREKEYED
#endif
#if 1
# define AES_DEC_PREKEYED
#endif
#if 1
# define AES_ENC_128_OTFK
#endif
#if 1
# define AES_DEC_128_OTFK
#endif
#if 1
# define AES_ENC_256_OTFK
#endif
#if 1
# define AES_DEC_256_OTFK
#endif
#define N_ROW 4
#define N_COL 4
#define N_BLOCK (N_ROW * N_COL)
#define N_MAX_ROUNDS 14
typedef unsigned char uint_8t;
typedef uint_8t return_type;
/* ... */
typedef uint_8t length_type;
typedef struct {
uint_8t ksch[(N_MAX_ROUNDS + 1) * N_BLOCK];
uint_8t rnd;
}{ ... } aes_context;
/* ... */
#if defined( AES_ENC_PREKEYED ) || defined( AES_DEC_PREKEYED )
return_type aes_set_key( const unsigned char key[],
length_type keylen,
aes_context ctx[1] );/* ... */
#endif
#if defined( AES_ENC_PREKEYED )
return_type bluedroid_aes_encrypt( const unsigned char in[N_BLOCK],
unsigned char out[N_BLOCK],
const aes_context ctx[1] );
return_type aes_cbc_encrypt( const unsigned char *in,
unsigned char *out,
int n_block,
unsigned char iv[N_BLOCK],
const aes_context ctx[1] );/* ... */
#endif
#if defined( AES_DEC_PREKEYED )
return_type bluedroid_aes_decrypt( const unsigned char in[N_BLOCK],
unsigned char out[N_BLOCK],
const aes_context ctx[1] );
return_type aes_cbc_decrypt( const unsigned char *in,
unsigned char *out,
int n_block,
unsigned char iv[N_BLOCK],
const aes_context ctx[1] );/* ... */
#endif
/* ... */
#if defined( AES_ENC_128_OTFK )
void bluedroid_aes_encrypt_128( const unsigned char in[N_BLOCK],
unsigned char out[N_BLOCK],
const unsigned char key[N_BLOCK],
uint_8t o_key[N_BLOCK] );/* ... */
#endif
#if defined( AES_DEC_128_OTFK )
void bluedroid_aes_decrypt_128( const unsigned char in[N_BLOCK],
unsigned char out[N_BLOCK],
const unsigned char key[N_BLOCK],
unsigned char o_key[N_BLOCK] );/* ... */
#endif
#if defined( AES_ENC_256_OTFK )
void bluedroid_aes_encrypt_256( const unsigned char in[N_BLOCK],
unsigned char out[N_BLOCK],
const unsigned char key[2 * N_BLOCK],
unsigned char o_key[2 * N_BLOCK] );/* ... */
#endif
#if defined( AES_DEC_256_OTFK )
void bluedroid_aes_decrypt_256( const unsigned char in[N_BLOCK],
unsigned char out[N_BLOCK],
const unsigned char key[2 * N_BLOCK],
unsigned char o_key[2 * N_BLOCK] );/* ... */
#endif
/* ... */
#endif