Changes in uspace/lib/crypto/aes.c [5a6cc679:a35b458] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/crypto/aes.c
r5a6cc679 ra35b458 213 213 uint8_t i = byte >> 4; 214 214 uint8_t j = byte & 0xF; 215 215 216 216 if (!inv) 217 217 return sbox[i][j]; 218 218 219 219 return inv_sbox[i][j]; 220 220 } … … 229 229 { 230 230 uint8_t val; 231 231 232 232 for (size_t i = 0; i < ELEMS; i++) { 233 233 for (size_t j = 0; j < ELEMS; j++) { … … 246 246 { 247 247 uint8_t temp[ELEMS]; 248 248 249 249 for (size_t i = 1; i < ELEMS; i++) { 250 250 memcpy(temp, state[i], i); … … 262 262 { 263 263 uint8_t temp[ELEMS]; 264 264 265 265 for (size_t i = 1; i < ELEMS; i++) { 266 266 memcpy(temp, state[i], ELEMS - i); … … 282 282 uint8_t result = 0; 283 283 uint8_t f_bith; 284 284 285 285 for (size_t i = 0; i < 8; i++) { 286 286 if (y & 1) 287 287 result ^= x; 288 288 289 289 f_bith = (x & 0x80); 290 290 x <<= 1; 291 291 292 292 if (f_bith) 293 293 x ^= AES_IP; 294 294 295 295 y >>= 1; 296 296 } 297 297 298 298 return result; 299 299 } … … 308 308 uint8_t orig_state[ELEMS][ELEMS]; 309 309 memcpy(orig_state, state, BLOCK_LEN); 310 310 311 311 for (size_t j = 0; j < ELEMS; j++) { 312 312 state[0][j] = … … 342 342 uint8_t orig_state[ELEMS][ELEMS]; 343 343 memcpy(orig_state, state, BLOCK_LEN); 344 344 345 345 for (size_t j = 0; j < ELEMS; j++) { 346 346 state[0][j] = … … 378 378 uint8_t shift; 379 379 uint32_t mask = 0xff; 380 380 381 381 for (size_t j = 0; j < ELEMS; j++) { 382 382 for (size_t i = 0; i < ELEMS; i++) { … … 399 399 uint32_t temp = word; 400 400 uint8_t *start = (uint8_t *) &temp; 401 401 402 402 for (size_t i = 0; i < 4; i++) 403 403 *(start + i) = sub_byte(*(start + i), false); 404 404 405 405 return temp; 406 406 } … … 427 427 { 428 428 uint32_t temp; 429 429 430 430 for (size_t i = 0; i < CIPHER_ELEMS; i++) { 431 431 key_exp[i] = … … 435 435 (key[4 * i + 3]); 436 436 } 437 437 438 438 for (size_t i = CIPHER_ELEMS; i < ELEMS * (ROUNDS + 1); i++) { 439 439 temp = key_exp[i - 1]; 440 440 441 441 if ((i % CIPHER_ELEMS) == 0) { 442 442 temp = sub_word(rot_word(temp)) ^ 443 443 r_con_array[i / CIPHER_ELEMS - 1]; 444 444 } 445 445 446 446 key_exp[i] = key_exp[i - CIPHER_ELEMS] ^ temp; 447 447 } … … 463 463 if ((!key) || (!input)) 464 464 return EINVAL; 465 465 466 466 if (!output) 467 467 return ENOMEM; 468 468 469 469 /* Create key expansion. */ 470 470 uint32_t key_exp[ELEMS * (ROUNDS + 1)]; 471 471 key_expansion(key, key_exp); 472 472 473 473 /* Copy input into state array. */ 474 474 uint8_t state[ELEMS][ELEMS]; … … 477 477 state[i][j] = input[i + ELEMS * j]; 478 478 } 479 479 480 480 /* Processing loop. */ 481 481 add_round_key(state, key_exp); 482 482 483 483 for (size_t k = 1; k <= ROUNDS; k++) { 484 484 sub_bytes(state, false); 485 485 shift_rows(state); 486 486 487 487 if (k < ROUNDS) 488 488 mix_columns(state); 489 489 490 490 add_round_key(state, key_exp + k * ELEMS); 491 491 } 492 492 493 493 /* Copy state array into output. */ 494 494 for (size_t i = 0; i < ELEMS; i++) { … … 496 496 output[i + j * ELEMS] = state[i][j]; 497 497 } 498 498 499 499 return EOK; 500 500 } … … 515 515 if ((!key) || (!input)) 516 516 return EINVAL; 517 517 518 518 if (!output) 519 519 return ENOMEM; 520 520 521 521 /* Create key expansion. */ 522 522 uint32_t key_exp[ELEMS * (ROUNDS + 1)]; 523 523 key_expansion(key, key_exp); 524 524 525 525 /* Copy input into state array. */ 526 526 uint8_t state[ELEMS][ELEMS]; … … 529 529 state[i][j] = input[i + ELEMS * j]; 530 530 } 531 531 532 532 /* Processing loop. */ 533 533 add_round_key(state, key_exp + ROUNDS * ELEMS); 534 534 535 535 for (int k = ROUNDS - 1; k >= 0; k--) { 536 536 inv_shift_rows(state); 537 537 sub_bytes(state, true); 538 538 add_round_key(state, key_exp + k * ELEMS); 539 539 540 540 if (k > 0) 541 541 inv_mix_columns(state); 542 542 } 543 543 544 544 /* Copy state array into output. */ 545 545 for (size_t i = 0; i < ELEMS; i++) { … … 547 547 output[i + j * ELEMS] = state[i][j]; 548 548 } 549 549 550 550 return EOK; 551 551 }
Note:
See TracChangeset
for help on using the changeset viewer.