Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 7

/ * Rij ndae l c ode August ' 0 1

*
* author : Vincent Ri j men ,
* Thi s c ode is based on the o f f i c i al ref erence c ode
* by Paulo Barret o and Vincent Rijmen
*
* Thi s c ode is placed in the publ i c domain .
* Without any warranty of f itne s s f or any purpo se .
*/
#include < stdi o . h>
typedef uns igned char word8 ;
typedef uns igned int word32 ;
/* The tables Logtable and Alogtable are used to perf orm
* mult ipl i cat i ons in GF (256)
*/
word8 Logt able [256] = {
0 , 0 , 25 , 1 , 50 , 2 , 26 , 1 98 , 75 , 1 99 , 27 , 104 , 5 1 , 238 , 223 , 3 ,
100 , 4 , 224 , 14 , 5 2 , 141 , 129 , 239 , 76 , 1 1 3 , 8 , 200 , 248 , 105 , 28 , 1 93 ,
125 , 1 94 , 29 , 18 1 , 249 , 1 85 , 39 , 1 06 , 77 , 228 , 166 , 1 1 4 , 154 , 201 , 9 ,
120 ,
1 0 1 , 47 , 138 , 5 , 33 , 1 5 , 225 , 36 , 18 , 240 , 1 30 , 69 , 53 , 147 , 2 1 8 , 142 ,
150 , 143 , 2 19 , 189 , 54 , 208 , 206 , 148 , 1 9 , 92 , 2 1 0 , 241 , 64 , 70 , 13 1 ,
56 ,

1 02 , 22 1 , 253 , 48 , 1 9 1 , 6 , 139 , 98 , 179 , 37 , 226 , 1 52 , 34 , 136 , 145 , 16 ,


126 , 1 10 , 72 , 195 , 1 63 , 1 82 , 30 , 66 , 58 , 1 07 , 40 , 84 , 250 , 133 , 6 1 , 186 ,
43 , 1 2 1 , 1 0 , 2 1 , 155 , 1 59 , 94 , 202 , 78 , 2 12 , 172 , 229 , 243 , 1 1 5 , 167 ,
87 ,
175 , 88 , 1 68 , 80 , 244 , 234 , 2 14 , 1 16 , 79 , 174 , 233 , 2 13 , 23 1 , 230 , 173 ,
232 ,
44 , 2 1 5 , 1 17 , 122 , 235 , 22 , 1 1 , 245 , 89 , 203 , 95 , 1 76 , 156 , 1 69 , 8 1 ,
160 ,
1 27 , 1 2 , 246 , 1 1 1 , 23 , 196 , 73 , 236 , 2 1 6 , 67 , 3 1 , 45 , 164 , 1 18 , 1 23 ,
183 ,
204 , 187 , 62 , 90 , 25 1 , 96 , 177 , 134 , 59 , 82 , 16 1 , 108 , 170 , 85 , 41 , 1 5 7 ,
1 5 1 , 178 , 135 , 144 , 97 , 190 , 220 , 25 2 , 188 , 149 , 207 , 205 , 55 , 63 , 9 1 ,
209 ,
83 , 57 , 132 , 60 , 65 , 162 , 1 09 , 7 1 , 20 , 42 , 1 58 , 93 , 86 , 242 , 2 1 1 , 17 1 ,
68 , 1 7 , 146 , 2 1 7 , 35 , 32 , 46 , 1 37 , 180 , 124 , 184 , 38 , 1 19 , 153 , 227 ,
165 ,
103 , 74 , 237 , 222 , 1 97 , 49 , 254 , 24 , 1 3 , 99 , 140 , 128 , 1 92 , 247 , 1 12 ,
7} ;

word8 Alogt able [256J = {


1 , 3 , 5 , 1 5 , 17 , 5 1 , 85 , 255 , 26 , 46 , 1 14 , 1 50 , 1 6 1 , 248 , 1 9 , 53 ,
95 , 225 , 5 6 , 72 , 2 1 6 , 1 1 5 , 149 , 1 64 , 247 , 2 , 6 , 1 0 , 30 , 34 , 102 , 170 ,
229 , 52 , 92 , 228 , 55 , 89 , 235 , 38 , 1 06 , 190 , 2 1 7 , 1 1 2 , 144 , 1 7 1 , 230 ,
49 ,

83 , 245 , 4 , 12 , 20 , 60 , 68 , 204 , 79 , 209 , 104 , 184 , 2 1 1 , 1 1 0 , 178 , 205 ,


76 , 2 12 , 103 , 169 , 224 , 5 9 , 77 , 2 1 5 , 98 , 1 66 , 24 1 , 8 , 24 , 40 , 120 , 1 36 ,
1 3 1 , 158 , 185 , 208 , 1 07 , 189 , 220 , 127 , 129 , 15 2 , 179 , 206 , 73 , 2 1 9 , 1
1 8 , 154 ,
1 8 1 , 196 , 87 , 249 , 16 , 48 , 80 , 240 , 1 1 , 29 , 39 , 105 , 187 , 2 14 , 97 , 1 63 ,
254 , 25 , 43 , 1 25 , 135 , 146 , 173 , 236 , 47 , 1 1 3 , 147 , 1 74 , 233 , 32 , 96 , 1
60 ,
251 , 22 , 58 , 78 , 2 1 0 , 109 , 1 83 , 194 , 93 , 231 , 50 , 86 , 250 , 2 1 , 63 , 65 ,
195 , 94 , 226 , 6 1 , 7 1 , 20 1 , 64 , 192 , 9 1 , 237 , 44 , 1 16 , 1 56 , 1 9 1 , 2 1 8 ,
117,
1 59 , 1 86 , 2 13 , 1 00 , 172 , 239 , 42 , 1 26 , 1 30 , 157 , 188 , 223 , 1 22 , 142 , 1
37 , 128 ,
155 , 1 82 , 1 93 , 88 , 232 , 35 , 1 0 1 , 175 , 234 , 37 , 1 1 1 , 177 , 200 , 67 , 197 ,
84 ,
252 , 3 1 , 33 , 99 , 16 5 , 244 , 7 , 9 , 27 , 45 , 1 19 , 1 5 3 , 176 , 203 , 70 , 202 ,
69 , 207 , 74 , 222 , 1 2 1 , 139 , 134 , 145 , 1 6 8 , 227 , 62 , 66 , 1 98 , 8 1 , 243 ,
14 ,
18 , 54 , 90 , 238 , 4 1 , 123 , 14 1 , 140 , 143 , 1 38 , 1 33 , 148 , 167 , 242 , 1 3 ,
23 ,
57 , 75 , 22 1 , 124 , 132 , 1 5 1 , 162 , 253 , 28 , 36 , 1 08 , 180 , 199 , 82 , 246 ,
1};
word8 S [256J = {
99 , 1 24 , 1 1 9 , 123 , 242 , 1 07 , 1 1 1 , 1 97 , 48 , 1 , 103 , 43 , 254 , 2 1 5 , 17 1 ,
118,
202 , 1 30 , 20 1 , 125 , 250 , 89 , 7 1 , 240 , 1 73 , 2 1 2 , 162 , 1 75 , 1 56 , 164 , 1
14 , 192 ,

183 , 253 , 147 , 38 , 54 , 63 , 247 , 204 , 52 , 165 , 229 , 241 , 1 13 , 2 16 , 49 , 2 1 ,


4 , 199 , 35 , 195 , 24 , 1 50 , 5 , 154 , 7 , 1 8 , 128 , 226 , 235 , 39 , 1 78 , 1 1 7 ,
9 , 1 3 1 , 44 , 26 , 27 , 1 1 0 , 90 , 1 60 , 82 , 5 9 , 2 14 , 179 , 41 , 227 , 47 , 132 ,
83 , 209 , 0 , 237 , 32 , 252 , 1 77 , 9 1 , 106 , 203 , 1 90 , 57 , 74 , 76 , 88 , 207 ,
208 , 239 , 170 , 25 1 , 67 , 77 , 5 1 , 1 33 , 69 , 249 , 2 , 127 , 80 , 60 , 159 , 168 ,
8 1 , 163 , 64 , 143 , 146 , 1 57 , 56 , 245 , 1 88 , 1 82 , 2 1 8 , 33 , 1 6 , 255 , 243 ,
210,
205 , 1 2 , 19 , 236 , 95 , 1 5 1 , 68 , 23 , 1 96 , 167 , 1 26 , 6 1 , 1 00 , 93 , 25 , 1 1
5,
96 , 129 , 79 , 220 , 34 , 42 , 144 , 136 , 70 , 238 , 1 84 , 20 , 222 , 94 , 1 1 , 2 1 9 ,
224 , 50 , 5 8 , 10 , 73 , 6 , 36 , 92 , 1 94 , 2 11 , 172 , 98 , 145 , 149 , 228 , 1 2 1 ,
231 , 200 , 55 , 1 09 , 141 , 2 1 3 , 78 , 1 69 , 108 , 86 , 244 , 234 , 1 0 1 , 1 22 ,
174 , 8 ,
1 86 , 1 20 , 37 , 46 , 28 , 1 66 , 180 , 198 , 232 , 22 1 , 1 1 6 , 3 1 , 75 , 1 89 , 1 39 ,
138 ,
1 1 2 , 62 , 1 8 1 , 102 , 72 , 3 , 246 , 14 , 97 , 53 , 87 , 18 5 , 134 , 193 , 29 , 1 58 ,
225 , 248 , 152 , 1 7 , 105 , 2 17 , 142 , 148 , 155 , 30 , 1 35 , 233 , 206 , 85 , 40 ,
223 ,
140 , 1 6 1 , 137 , 13 , 1 9 1 , 230 , 66 , 1 04 , 65 , 1 53 , 45 , 1 5 , 1 76 , 84 , 187 ,
22} j
word8 S i [256J = {
82 , 9 , 1 06 , 2 1 3 , 48 , 54 , 1 65 , 56 , 19 1 , 64 , 1 63 , 1 5 8 , 129 , 243 , 2 1 5 ,
25 1 ,
124 , 227 , 57 , 1 30 , 155 , 47 , 255 , 1 35 , 5 2 , 142 , 67 , 68 , 196 , 222 , 233 ,
203 ,

84 , 1 23 , 148 , 50 , 1 66 , 1 94 , 35 , 6 1 , 238 , 76 , 149 , 1 1 , 66 , 250 , 195 , 78 ,


8 , 46 , 1 6 1 , 102 , 40 , 2 1 7 , 36 , 1 78 , 1 1 8 , 9 1 , 162 , 73 , 1 09 , 139 , 209 ,
37 ,
1 1 4 , 248 , 246 , 1 00 , 134 , 1 04 , 152 , 22 , 2 1 2 , 164 , 92 , 204 , 93 , 1 0 1 ,
182 , 146 ,
108 , 1 1 2 , 72 , 80 , 253 , 237 , 1 85 , 2 1 8 , 94 , 2 1 , 70 , 87 , 1 67 , 141 , 157 , 1
32 ,
144 , 2 1 6 , 1 7 1 , 0 , 140 , 1 88 , 2 1 1 , 10 , 247 , 228 , 88 , 5 , 184 , 179 , 69 , 6 ,
208 , 44 , 30 , 143 , 202 , 63 , 1 5 , 2 , 1 93 , 175 , 1 89 , 3 , 1 , 19 , 138 , 1 07 ,
5 8 , 145 , 1 7 , 65 , 79 , 1 03 , 220 , 234 , 1 5 1 , 242 , 207 , 206 , 240 , 180 , 230 ,
115,
1 50 , 172 , 1 1 6 , 34 , 23 1 , 173 , 53 , 133 , 226 , 249 , 55 , 232 , 28 , 1 1 7 , 223 ,
110,
7 1 , 241 , 26 , 1 1 3 , 29 , 4 1 , 197 , 1 37 , 1 1 1 , 183 , 98 , 14 , 170 , 24 , 1 90 ,
27 ,
252 , 86 , 62 , 75 , 1 98 , 2 1 0 , 1 2 1 , 32 , 1 54 , 2 1 9 , 192 , 254 , 1 20 , 205 , 90 ,
244 ,
3 1 , 22 1 , 168 , 5 1 , 136 , 7 , 199 , 49 , 1 77 , 1 8 , 16 , 89 , 39 , 1 28 , 236 , 95 ,
96 , 8 1 , 1 27 , 169 , 25 , 1 8 1 , 74 , 13 , 45 , 229 , 122 , 159 , 147 , 20 1 , 156 ,
239 ,
160 , 224 , 59 , 77 , 174 , 42 , 245 , 1 76 , 200 , 235 , 1 87 , 60 , 13 1 , 83 , 1 53 ,
97 ,
23 , 43 , 4 , 126 , 186 , 1 1 9 , 2 1 4 , 38 , 225 , 105 , 20 , 99 , 8 5 , 33 , 12 , 125} ;
word32 RC [30J = {
OxOO , OxO l , Ox02 , Ox04 , Ox08 , Ox10 , Ox20 , Ox40 , Ox80 ,
OxlB , Ox36 , Ox6C , OxD8 , OxAB , Ox4D , Ox9A , Ox2F , Ox5E ,

OxBC , Ox63 , OxC6 , Ox97 , Ox35 , Ox6A , OxD4 , OxB3 , Ox7D ,


OxFA , OxEF , OxC5} j
#def ine MAXBC 8
#def ine MAXKC 8
#def ine MAXROUNDS 14
stat i c word8 shif t s [5J [4J {
0 , 1 , 2 , 3,
0 , 1 , 2 , 3,
0 , 1 , 2 , 3,
0,1,2,4,
0 , 1 , 3, 4} j
stat i c int numrounds [5J [5J {
10 , 1 1 , 1 2 , 13 , 14 ,
1 1 , 1 1 , 1 2 , 1 3 , 14 ,
12 , 1 2 , 1 2 , 1 3 , 14 ,
13 , 13 , 1 3 , 13 , 14 ,
14 , 14 , 14 , 1 4 , 14} ;
int BC , KC , ROUNDS ;
word8 mul (word8 a , word8 b) {
/* mult iply two element s of GF ( 256)
* required for MixColumns and InvMixColumns
*/
223

if (a && b) return Alogt able [ (Logt able [aJ + Logtable [bJ ) %255J ;
e l s e return 0 ;
}
void AddRoundKey (word8 a [4J [MAXBCJ , word8 rk [4J [MAXBCJ ) {
/* XOR c orre sponding t ext input and round key input byt e s
*/
int i , j ;
f or ( i = 0 ; i < 4 ; i++)
f or C j = 0 ; j < BC ; j ++) a [iJ [j J rk [iJ [j J ;
}
void SubByt e s (word8 a [4J [MAXBCl , word8 box [256J ) {
}
/* Replace every byt e of the input by the byt e at that place
* in the non-l inear S-box
*/
int i , j ;
f or ( i = O J i < 4 ; i++)
f or (j = 0 ; j < BC ; j ++) a [iJ J = box[a [i][j]]
}

You might also like