code c aes

download code c aes

of 7

Transcript of code c aes

  • 7/27/2019 code c aes

    1/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 ,

  • 7/27/2019 code c aes

    2/7

    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 ,

  • 7/27/2019 code c aes

    3/7

    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 ,

    1 1 7 ,

    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 ,

    1 1 8 ,

    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 ,

  • 7/27/2019 code c aes

    4/7

    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 ,

    2 1 0 ,

    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 ,

  • 7/27/2019 code c aes

    5/7

    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 ,1 1 5 ,

    1 50 , 172 , 1 1 6 , 34 , 23 1 , 173 , 53 , 133 , 226 , 249 , 55 , 232 , 28 , 1 1 7 , 223 ,

    1 1 0 ,

    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 ,

  • 7/27/2019 code c aes

    6/7

    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

  • 7/27/2019 code c aes

    7/7

    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]]

    }